CATATAN
jawaban saya sebelumnya (sebelum edit ini) menunjukkan filter Savitzky-Golay (SG) sebagai non-linear, data input yang bervariasi tergantung waktu adalah salah, karena salah interpretasi dini tentang bagaimana filter Savitzky-Golay (SG) menghitung outputnya sesuai dengan tautan wiki yang disediakan. Jadi sekarang saya memperbaikinya untuk kepentingan mereka yang juga akan melihat bagaimana filter SG dapat diterapkan oleh filter FIR-LTI. Terima kasih kepada @MattL. untuk koreksi dirinya, mata rantai besar yang dia berikan dan kesabaran yang dia miliki (yang tidak akan pernah saya tunjukkan) selama penyelidikan saya tentang masalah ini. Meskipun aku jujur lebih suka keberatan yang lebih verbal yang jelas tidak perlu. Harap perhatikan juga bahwa jawaban yang benar adalah yang lain, jawaban ini hanya untuk klarifikasi tambahan properti LTI dari filter SG.
Sekarang tidak mengherankan bahwa ketika seseorang (yang belum pernah menggunakan filter itu sebelumnya) menghadapi definisi filter SG sebagai polinomial LSE pesanan rendah untuk data yang diberikan, ia akan langsung melompat ke kesimpulan bahwa itu adalah data yang bergantung, nonlinier dan waktu (shift) filter adaptif yang bervariasi.
Namun, prosedur pemasangan polinomial ditafsirkan secara cerdik oleh SG sendiri, sehingga memungkinkan sepenuhnya penyaringan data, invarian waktu, penyaringan linier, sehingga menjadikan SG sebagai filter LTI-FIR tetap.
Di bawah ini adalah ringkasan terpendek dari tautan yang disediakan oleh MattL. Untuk setiap detail yang tampaknya hilang, silakan baca dokumen asli, atau minta klarifikasi. Tetapi saya tidak ingin memproduksi kembali seluruh dokumen di sini.
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
akNthp[n]
E=∑−MM(p[n]−x[n])2
x=[x[−M],x[−M+1],...,x[0],x[1],...,x[M]]T
akE
∂E∂ai=0 , for i=0,1,..,N(1)
Sekarang bagi mereka yang terbiasa dengan prosedur polyfit LSE, saya hanya akan menulis persamaan matriks yang dihasilkan (dari tautan) yang mendefinisikan set koefisien optimal:
a=(ATA)−1ATx=Hx(2)
x(2M+1)×1H2M+1NAnAHA
A=[αn,i]=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢(−M)0(−M+1)0(0)0(M)0(−M)1(−M+1)1...(0)1...(M)1............(−M)N(−M+1)N(0)N(M)N⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
Sekarang mari kita bersandar sejenak dan membahas suatu hal di sini.
AHnakMNx[n]ak2nd
... Ini (Lfit polifit) dapat diulang pada setiap sampel input, setiap kali menghasilkan polinomial baru dan nilai baru dari urutan output y [n] ...
Jadi bagaimana kita mengatasi kejutan yang membingungkan ini? Dengan menafsirkan dan mendefinisikan output filter SG menjadi sebagai berikut:
Nnx[n]y[n]p[n]n=0
y[n]=y[0]=∑m=0Namnm=a0
2M+1x[n]n=dy[n]a0p[n]x[n]n=dy[d]x[d−M],x[d−M+1],...,x[d−1],x[d],x[d+1],...x[d+M]
a0x[n]y[n]x[n]nx[n]h[n]. Tetapi kemudian, apa koefisien filter untuk filter SG ini? Ayo lihat.
ak
a=Hx
⎡⎣⎢⎢⎢⎢a0a1⋮aN⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢h(0,0)h(1,0)h(N,0)h(0,1)h(1,1)...h(0,1).........h(0,2M)h(1,2M)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]
h[n]=H(0,−n)
N2M+1
y[n]2M+1x[n]LhN[n]
y[n]=x[n]⋆hN[n]
KOMENTAR
akh[n]y[n]xa=Hxakp[n]akh[n]
KODE MATLAB / OCTVE
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]');
Outputnya adalah:
Semoga ini menjelaskan masalah ini.