Фільтр Савіцького – Голая проти лінійного фільтра IIR або FIR


11
  • Традиційний фільтр IIR / FIR (низька частота для зняття високих частотних коливань), наприклад, ковзний середній,

  • або фільтр Савіцького-Голая

все може бути корисним для згладжування сигналу, наприклад сигналу огинаючої:

введіть тут опис зображення

Для якого додатка фільтр Савіцкого-Голай буде цікавішим, ніж класичний нижній прохід?

Чим він відрізняється від стандартного фільтра і що він додає порівняно зі стандартними фільтрами?

Чи пристосовується вона до вхідних даних?

Чи краще для тимчасового збереження?


Ви коли-небудь опинилися в інженерній ситуації, коли ви вирішили "Давайте використовувати фільтр SG замість середньої або іншої нижньої частоти FIR! Краще, бо це і це, і це ..." ? Тоді це питання до вас!

Відповіді:


4

Оскільки обговорення в існуючих відповідях та коментарях в основному зосереджувалося на тому, що насправді є фільтрами Савіцкого-Голай (що було дуже корисно), я спробую додати до існуючих відповідей, надавши деяку інформацію про те, як насправді вибрати фільтр згладжування, який наскільки я розумію, про що насправді йдеться.

Перш за все, я хотів би повторити те, що стало зрозумілим у дискусії, породжуючи інші відповіді: категоризацію згладжуючих фільтрів у питанні на лінійні та інваріантні (LTI) фільтри FIR / IIR, з одного боку, та Фільтри Савіцького-Голая з іншого боку вводять в оману. Фільтр Savitkzy-Golay - це лише стандартний фільтр FIR, розроблений за певним критерієм (локальне наближення поліномів). Отже всі згадані у питанні фільтри - це фільтри LTI.

Залишилося питання - як вибрати фільтр, що розгладжує. Якщо складність обчислювальної техніки та / або пам'ять є проблемою, фільтри IIR можуть бути переважнішими порівняно з фільтрами FIR, оскільки вони, як правило, досягають порівнянного придушення шуму (тобто ослаблення зупинки) із значно нижчим порядком фільтрів, ніж фільтри FIR. Але зауважте, що якщо необхідна обробка в режимі реального часу, одним із можливих недоліків фільтрів IIR є те, що вони не можуть мати точно лінійний фазовий відгук. Таким чином, бажаний сигнал зазнає деяких фазових спотворень. Для автономної обробки фазових викривлень можна уникнути, навіть із фільтрами IIR, застосовуючи нульову фазову фільтрацію .

Окрім міркувань, обговорених у попередньому пункті, головним є критерій проектування, а не стільки, якщо фільтром є FIR або IIR, оскільки будь-який (стабільний) фільтр IIR може бути наближений з довільною точністю фільтром FIR та будь-яким Фільтр FIR можна наблизити фільтром IIR, хоча останній може бути набагато складніше. Відповідний критерій проектування очевидно залежить від властивостей даних та шуму. Що стосується згладжування, ми зазвичай припускаємо достатньо прості (тобто гладкі) дані. Якщо шум має в основному високочастотні компоненти, тобто, якщо між даними та шумом є невелике спектральне перекриття, ми хочемо максимально ослабити смугу зупинки або мінімізувати енергію зупинного діапазону, при цьому максимально зберігаючи бажаний сигнал. У цьому випадку ми могли вибрати лінійнофазний фільтр FIR, розроблений за критерієм мінімаксного максимуму, використовуючи алгоритм Паркс-МакКлеллан. Ми також могли мінімізувати енергію стоп-діапазону (тобто мінімізувати потужність шуму в смузі зупинки), вибравши метод найменших квадратів. Поєднання між двома критеріями (мінімакс та найменші квадрати) можливо, вибравши aдизайн обмежених найменших квадратів , який мінімізує енергію зупинки смуги, обмежуючи при цьому максимальну похибку наближення в смузі проходження.

Якщо спектр шуму значно збігається з спектром сигналу, потрібен більш ретельний підхід, і ослаблення грубої сили не буде працювати добре, оскільки або ви залишаєте занадто багато шуму (вибравши занадто високу частоту відключення), або ви спотворюєте бажане сигнал занадто сильно У цьому випадку фільтри Savitzky-Golay (SG) можуть бути хорошим вибором. Ціна, яку потрібно заплатити, - посереднє ослаблення зупинки, але одна перевага полягає в тому, що деякі властивості сигналу зберігаються дуже добре. Це пов'язано з тим, що фільтри SG мають характеристику плоскої смуги пропускання, тобто

(1)dkH(ejω)dωk|ω=0=0k=1,2,,r

де - порядок наближеного многочлена, а - частотна характеристика фільтра. Властивість гарантує збереження перших моментів вхідного сигналу на виході, а це означає, що ширина та висота піків у бажаному сигналі добре збережені.rH(ejω)(1)r

Звичайно, існує компроміс між двома типами фільтрів згладжування, про які йшлося вище (високе ослаблення зупинки та SG). Ми могли б розробити фільтр FIR з певним ступенем плоскості при і використати решту ступенів свободи для максимального ослаблення смуги зупинки або мінімізації енергії зупинки. Що стосується фільтрів FIR, то виникаюча проблема дизайну є досить простою (і опуклою), і загальні процедури оптимізації, доступні в декількох програмних пакетах, можуть бути використані для отримання оптимального фільтра для даної програми.ω=0

Для тих, хто цікавиться теорією фільтрів SG, найбільш релевантними посиланнями, які я можу порекомендувати, є такі:


2

Як і все, іноді певні інструменти кращі за інші.

Середні фільтри, що рухаються, можуть використовуватися для згладжування даних та є ППД. Вони майже найпростіший фільтр, який ви можете придумати, і вони добре працюють для багатьох завдань, поки ви не намагаєтеся моделювати різкі стрибки чи поліноміальні тенденції. Майте на увазі, що це по суті лише фільтр низьких частот, тому вони найкраще працюють, коли дані, які вам важливі в сигналі, є низькочастотними та досить вузькосмуговими.

Фільтри Savitzky-Golay (SG) - це особлива група фільтрів FIR, які по суті відповідають поліному вашому часовому ряду, коли згортка ковзає по сигналу. SG-фільтри корисні для сигналів, коли речі, які вас цікавлять, не обов'язково мають низьку частоту і досить вузьку смугу.

Я думаю, що ви побачите, що якщо ви прочитаєте сторінку Вікіпедії, яку ви зв'язали досить ретельно, це пояснює різницю між фільтрами SG та MA досить чітко. Але майте на увазі: врешті-решт, вони обидва просто інструменти для подібних дій, саме вам належить з’ясувати, коли використовувати правильний інструмент

Редагувати :

Оскільки, мабуть, існує деяка плутанина, що фільтри SG "певним чином" адаптуються "на базовому рівні, я включив простий приклад MATLAB. Як зазначав Ден, вони можуть бути адаптованими, але їх основна реалізація часто не є такою. Оглядаючи код, ви побачите, що це просто матричний пошук з деяким спеціальним керуванням. Нічого про цей фільтр не є "адаптивним" у традиційному розумінні, ви просто вибираєте поліномічну підгонку та довжину, за яку цей поліном буде вписуватися в сигнал за допомогою згортки; SG є важливим для FIR. Наведений нижче сценарій створює цей сюжет: Порівняння SG фільтра з MA

Дивлячись на цю цифру, ви можете бачити, що КУ та РГ по суті досягають одного і того ж, але з деякими важливими відмінностями:

  1. МА чудово справляється з придушенням шуму, але робить погану роботу, фіксуючи перехідні стрибки сигналу. Ми можемо придушити ще більший шум, збільшуючи довжину фільтра, але тоді він буде ще гірше діяти на перехідних процесах; цей ефект буде розглядатися як "розмазування" біля будь-якого перехідного періоду, який ви повинні бачити на зображеній фігурі.
  2. SG робить чудову роботу з фіксації перехідних сигналів, але виконує не настільки велику роботу з придушення шуму (принаймні, порівняно з МА одного розміру). Ми можемо покращити придушення шуму поблизу неперехідних, збільшуючи довжину кадру, але це введе дзвінок, аналогічний явищу Гібба поблизу будь-яких перехідних процесів.

Щоб ви краще зрозуміли, як працюють ці фільтри, я б радив вам взяти тут код і маніпулювати ним, і подивитися, як працюють всі окремі частини фільтра SG.

Код для прикладу MATLAB:

% Generate a signal "s" that has square waves, and scale it with a
% polynomial of order 5
up = 1*ones(1,100);
down = zeros(1,150);
s = [down down up up down up down up down up up up down down down down down];
n = numel(s);
nn = linspace(0,4,numel(s));
s = s .* (nn .^5);
sn = (s + 4*randn(size(s))).';

% smooth it with SMA of length 15
sz = 15;
h = 1/sz * ones(1,sz);
sn_sma = conv(sn,h,'same');

% smooth it with sgolay of frame length 15
m = (sz-1)/2;
% look up the SG matrix for this order and size
B = sgolay(5, sz);

% compute the steady state response for the signal, i.e. everywhere that
% isnt the first or last "frame" for the SG filter
steady = conv(sn, B(m+1,:), 'same');
% handle the transiet portion at the start of the signal
y_st   = B(1:m,:)*sn(1:sz);
% handle the transient portion at the end of the signal
y_en   = B(sz -m+1 : sz, :) * sn(n - sz+1:n);

% combine our results
sn_sg  = steady;
sn_sg(1:m) = y_st;
sn_sg(n-m+1:n) = y_en;

% plots
figure(1);
hold off;
plot(sn,'Color',[0.75 0.75 0.75]);
hold on;
plot(sn_sma,'b');
plot(sn_sg,'r');

legend('Noisy Signal','MA Smoothing','SG Smoothing, order 5','Location','NorthWest');

1
Суть здається (бачачи іншу відповідь), що фільтр SG - це "нелінійний фільтр , що змінюється часом, повністю залежний від даних , коефіцієнти якого перераховуються для кожного короткого сегмента його введення".
g6kxjv1ozn

1
Наскільки я розумію, коли я його впроваджував кілька разів, SG-фільтр взагалі не є адаптивним фільтром, особливо порівняно із вашим середнім адаптивним фільтром, наприклад, LMS або RLS. Я б повністю не погоджувався з твердженням, що вага фільтрів змінюється в часі. Фільтри SG - це по суті пошук таблиці, ви фільтруєте зі значеннями таблиці, щоб обчислити перехідну відповідь, а потім повертаєтесь назад і обробляєте крайові випадки на початку / кінці сигналу. Я відредагую свою публікацію на прикладі MATLAB, щоб показати це вам.
matthewjpollard

2
@matthewjpollard Зауважимо, що я особисто не маю значного досвіду використання цього фільтра, але для мене фільтр SG як найкраще реалізований, здається, є адаптивним реалізацією фільтра з часом різними коефіцієнтами. Те, як ви застосували фільтр у своєму коді, - це не так, як ви трактували всю послідовність як "підмножину даних"), а спосіб конкретно, як описано в Wikipedia en.wikipedia.org/wiki/Savitzky%E2%80% 93Golay_filter і в самому документі Савіцького та Голай дійсно адаптивний: pdfs.semanticscholar.org/4830/…
Dan Boschen

2
@matthewjpollard У системах реального часу ваші дані постійно постійно передаються, тому ви перераховуєте коефіцієнти протягом коротших інтервалів чи завжди працюєте в невеликих блоках даних?
Дан Бошен

2
Дякую Метт. Тож, можливо, ми могли б пов’язати те, що ти робиш як адаптивне / часове, що змінюється в тому сенсі, що коефіцієнти обчислюються для кожного збору даних (однакові коефіцієнти в межах збору даних, однак, при правильній обробці старту і закінчення, але змінюються від одного збору до наступного - якщо я правильно зрозуміти). Дякуємо, що поділилися кодом та прикладом програми.
Дан Бошен

2

ПРИМІТКА

моя попередня відповідь (до цього редагування), що позначала фільтр Савіцького-Голая (СГ) як нелінійну залежність від вхідних даних, що змінюються часом, була помилковою, через передчасне неправильне тлумачення того, як фільтр Савіцького-Голая (СГ) обчислює свій вихід відповідно до наданого посилання на вікі. Тож тепер я виправляю це на користь тих, хто також бачить, як фільтри SG реалізуються за допомогою фільтра FIR-LTI. Завдяки @MattL за його виправлення, велике посилання, яке він надав, і терпіння, яке він мав (що я ніколи не міг би проявити) під час мого розслідування проблеми. Хоча я чесно віддаю перевагу більш детальному запереченню, яке, очевидно, не є необхідним. Також врахуйте, що правильна відповідь - інша, ця - лише для додаткового уточнення властивості LTI фільтрів SG.

Зараз не дивно, що коли хтось (хто раніше ніколи не використовував ці фільтри) стикається з визначенням фільтра SG як полінома LSE низького порядку, що відповідає даним даним, він / вона негайно перейде до висновку, що це залежні від даних, нелінійні та часовий (зсувний), адаптивний фільтри.

Тим не менш, процедура поліноміального пристосування спритно інтерпретується самими SG, таким чином, що вона дозволяє повністю незалежно від даних, лінійної фільтрації за часом можливої, отже, робить SG як фіксований фільтр LTI-FIR.

Нижче наведено найкоротший підсумок посилання, яке надає MattL. Про будь-які деталі, які, здається, відсутні, зверніться до оригінального документа або попросіть його уточнити. Але я не хотів би переробляти тут весь документ.

Тепер розглянемо значення вхідних даних які зосереджені навколо і в який ми хочемо помістити поліном порядку , при цьому - цілі показники часу:2M+1x[M],x[M+1],...,x[0],x[1],...,x[M]n=0p[n]Nn=M,M+1,...,1,0,1,...M

p[n]=k=0Naknk=a0+a1n+a2n2+...+aNnN

Класична процедура поліномічного прилягання LSE обчислює ці коефіцієнти щоб знайти оптимальний поліном порядку який мінімізує суму квадратів помилок.akNthp[n]

E=MM(p[n]x[n])2

над заданим вектором даних .x=[x[M],x[M+1],...,x[0],x[1],...,x[M]]T

Ці оптимальні коефіцієнти многочленів отримують, встановивши похідну на нуль:akE

(1)Eai=0   ,   for    i=0,1,..,N

Тепер для тих, хто знайомий з процедурою LSE polyfit, я просто напишу отримане матричне рівняння (за посиланням), яке визначає набір оптимальних коефіцієнтів:

(2)a=(ATA)1ATx=Hx
де - вектор вхідних даних, є матрицею , LSE polyfit і по матриці є моментом часу матриця (сили цілих моментів часу ); тобто зауважте, що і і, отже, залежать від вхідних значень даних, оскільки задається:x(2M+1)×1H2M+1NAnAHA

A=[αn,i]=[(M)0(M)1...(M)N(M+1)0(M+1)1...(M+1)N...(0)0(0)1...(0)N...(M)0(M)1...(M)N]

Тепер відкиньмося на мить і обговоримо точку тут.

Як виразно вказує рівняння (2), хоча і не залежать від вхідних даних і залежать лише від показників часу , оптимальні коефіцієнти полінома LSE залежать від вхідних даних. Крім того, вони також залежать від розміру вікна і порядок полінома . Крім того, коли вікно ковзає вздовж вхідних даних , коефіцієнт слід перераховувати (оновлювати), а отже, і залежати від часу. Саме так визначається фільтр SG у посиланні на сторінці наведеному нижче:AHnakMNx[n]ak2nd

... Це (поліфіт LSE) може повторюватися на кожному зразку вхідного сигналу, щоразу створюючи новий многочлен і нове значення вихідної послідовності y [n] ...

То як же ми подолаємо цей неприємний сюрприз? Інтерпретуючи та визначаючи вихідний фільтр SG таким чином:

SG-фільтр порядку для кожного зразка приймає набір входів і виробляє єдиний вихідний зразок визначений як поліном оцінений на ; тобтоNnx[n]y[n]p[n]n=0

y[n]=y[0]=m=0Namnm=a0

Тобто для кожного вхідного набору з зразків (в центрі приблизно ) фільтр SG виробляє вихід, позначений , що еквівалентно одиничному коефіцієнту оптимального LSE поліном пов'язаний з цим конкретним вікном зразків . Між іншим, коли вікно ковзає по довжині вхідних даних, кожного разу новий вивідний зразок обчислюється відповідно до вікна зразків . Ось це фільтрує нанкус.2M+1x[n]n=dy[n]a0p[n]x[n]n=dy[d]x[dM],x[dM+1],...,x[d1],x[d],x[d+1],...x[d+M]

Тепер час показати, що коефіцієнт отримується як лінійна комбінація значень вхідного сигналу у вікні , а вихід фільтра є лінійною комбінацією вхідних значень . І це саме визначення згортання (LTI) за допомогою фільтра FIR; вихід на час - лінійна комбінація його вхідних і коефіцієнтів фільтра . Але тоді, які коефіцієнти фільтра для цього фільтра SG? Подивимось.a0x[n]y[n]x[n]nx[n]h[n]

Ще раз розглянемо обчислення :ak

a=Hx

[a0a1aN]=[h(0,0)h(0,1)...h(0,2M)h(1,0)h(1,1)...h(1,2M)...h(N,0)h(0,1)...h(0,2M)][x[M]x[M+1]...x[M]]

з якого ми можемо бачити, що єдиний коефіцієнт задається крапковим добутком першого ряду з вектором вхідних даних ; тобтоa0Hx

a0=H(0,n)x=H(0,k)x[k]=H(0,n)x[n]

де в останній рівності ми інтерпретували суму крапкового добутку як суму згортки, розглядаючи імпульсну характеристику фільтра SG на ,

h[n]=H(0,n)

точніше, це імпульсна характеристика SG-фільтра порядку з довжиною вікна .N2M+1

І повний вихід фільтр SG N-го порядку з розміром вікна , для входу довжини отримується одним згортанням LTI з імпульсною характеристикоюy[n]2M+1x[n]LhN[n]

y[n]=x[n]hN[n]

КОМЕНТАР

Той факт, що коефіцієнти поліномів залежать від вхідних даних, не перешкоджає фільтру бути LTI FIR. Оскільки імпульсна характеристика може бути визначена для відображення виходу що обчислюється з лінійних комбінацій вхідних вибірок. Лінійні комбінації вхідних вибірок невід'ємно випливає з матричного твори , який визначає коефіцієнти оптимальних з , отже , будь-яка лінійна комбінація б також призвести до КІМ LTI фільтра , щоб представити процедура поліномічного прилягання LSE.akh[n]y[n]xa=Hxakp[n]akh[n]

КОД МАТЛАБ / ОКТВЕ

Наступні прості MATLAB / OCTAVE можуть бути використані для обчислення цих імпульсних відповідей фільтра SG (Зауважте, що вбудований у нього конструктор SG може створити інший набір як зазначено в зв’язаному файлі pdf)h[n]h[n]

% Savitzky-Golay Filter
% 
clc; clear all; close all;

N = 3;                      % a0,a1,a2,a3 : 3rd order polynomial
M = 4;                      % x[-M],..x[M] . 2M + 1 data

A = zeros(2*M+1,N+1);
for n = -M:M
    A(n+M+1,:) = n.^[0:N];
end

H = (A'*A)^(-1)* A';        % LSE fit matrix

h = H(1,:);                 % S-G filter impulse response (nancausal symmetric FIR)

figure,subplot(2,1,1)
stem([-M:M],h);
title(['Impulse response h[n] of Savitzky-Golay filter of order N = ' num2str(N), ' and window size 2M+1 =  ' , num2str(2*M+1)]);

subplot(2,1,2)
plot(linspace(-1,1,1024), abs(fftshift(fft(h,1024))));
title('Frequency response magnitude of h[n]');

Вихід:

введіть тут опис зображення

Сподіваюся, що це прояснює проблему.


2
@ Fat32 Я думаю, що це тому, що це був довгий список коментарів, тому для збереження дошки в чистоті вони зазвичай переміщують його "в чат". Це все ще є, тільки не захаращуючи головну сторінку. Ось чому система пропонує перенести його в чат, коли назад і вперед стає довгим. Не бідайте, все одно вас люблять.
Дан Бошен

1
@ g6kxjv1ozn Я призначаюсь до цього моменту ... будь ласка, зачекайте ...
Fat32

2
@ Fat32 Чудова робота! Я читаю його, але мені потрібно буде прочитати його, і це написано дуже чітко, мені просто потрібно буде слідувати олівцем і папером крок за кроком, щоб повністю бачити це, як ви зараз. Дякуємо, що ви все це подали тут.
Дан Бошен

4
@DanBoschen: Поліном справді не потрібен, це лише один із способів описати фільтри SG. Вони також можуть бути описані як фільтри, що мінімізують коефіцієнт зменшення шуму (тобто енергію частотної характеристики) за умови, що частотна характеристика дорівнює в постійному струмі та додаткові обмеження плоскості при . Ср. розділ про фільтри SG в книзі Орфанідіса, зв'язаний у моїй відповіді. ω = 01ω=0
Метт Л.

2
@DanBoschen Так, Дан код показує лише імпульсну характеристику фільтра h [n] ... Дозвольте повторити себе ще раз; попри те, що коефіцієнти поліномів , безумовно, (лінійно) залежать від (локального) входу {x [nM], ..., x [n + M]}, відгук імпульсу фільтра не відповідає. Наша плутанина випливала з того, що ми думали, що коефіцієнти фільтра є функцією поліноміальних коефіцієнтів, які потім роблять фільтр мінливим і нелінійним, але, як виявляється, це не так. h [ n ]akh[n]
Fat32
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.