NOT
Savitzky-Golay (SG) filtresini doğrusal olmayan, zamanla değişen bir giriş verisine bağımlı olarak gösteren önceki cevabım (bu düzenlemeden önce), Savitzky-Golay (SG) filtresinin çıktısını nasıl hesapladığı konusunda erken yanlış yorumlama nedeniyle yanlıştı sağlanan wiki bağlantısına göre. Şimdi, SG filtrelerinin FIR-LTI filtrelemeyle nasıl uygulanabileceğini de görecek olanların yararına düzeltiyorum. @MattL sayesinde. düzeltmesi için verdiği büyük bağlantı ve bu konuyu araştırmam sırasında gösterdiği sabır (hiç gösterememiştim) . Yine de dürüstçe, yine de açıkça gerekli olmayan daha ayrıntılı bir itirazı tercih edeceğim. Ayrıca lütfen doğru cevabın diğeri olduğunu unutmayın, bu sadece SG filtrelerinin LTI özelliğinin ek açıklaması içindir.
Şimdi (daha önce bu filtreleri hiç kullanmamış olan) birisinin SG filtresinin verilere düşük dereceli bir LSE polinomu uyumu vermesi durumunda, verilere derhal verilere bağlı, doğrusal olmayan ve zaman (vardiya) değişken, uyarlanabilir filtreler.
Yine de, polinom uydurma prosedürü SG tarafından akıllıca yorumlanır, böylece tamamen veri bağımsız, zamanla değişmeyen, doğrusal bir filtreleme mümkün olur, böylece SG'yi sabit bir LTI-FIR filtresi haline getirir.
Aşağıda, MattL tarafından sağlanan bağlantıdan kısa bir özet verilmiştir. Eksik gibi görünen tüm ayrıntılar için lütfen orijinal belgeye bakın veya açıklığa kavuşturun. Ancak belgenin tamamını burada yeniden üretmek istemiyorum.
2 M+ 1x [ - E] , x [ - M+ 1 ] , . . . , X [ 0 ] , x [ 1 ] , . . . , x [ M]n = 0p [ n ]N-n = - M, - M+ 1 , . . . , - 1 , 0 , 1 , . . . M
p [ n ] = ∑k = 0N-birknk= a0+ a1n + a2n2+ . . . + aN-nN-
birkN-t hp [ n ]
E= ∑- MM( p [ n ] - x [ n ] )2
x = [ x [ - M] , x [ - M+ 1 ] , . . . , X [ 0 ] , x [ 1 ] , . . . , x [ M] ]T
birkE
∂E∂birben=0 , for i=0,1,..,N(1)
Şimdi LSE çoklu uyum prosedürüne aşina olanlar için, en uygun katsayı kümesini tanımlayan sonuçtaki matris denklemini (linkten) yazacağım:
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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
Şimdi bir anlığına arkanıza yaslanıp burada bir noktayı tartışalım.
bir'HnbirkMN-x [ n ]birk2n d
... Bu (LSE polifit) girişin her bir örneğinde tekrarlanabilir, her seferinde yeni bir polinom ve çıkış dizisi y [n] için yeni bir değer üretir ...
Peki bu şaşırtıcı sürprizi nasıl yenebiliriz? SG filtre çıkışını aşağıdaki şekilde yorumlayıp tanımlayarak:
N-nx [ n ]y[ n ]p [ n ]n = 0
y[ n ] = y[ 0 ] = ∑m = 0N-birmnm= a0
2 M+ 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]. Ama sonra, bu SG filtresi için filtre katsayıları nelerdir? Bakalım.
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]⎤⎦⎥⎥⎥⎥
bir0'Hx
bir0= H( 0 , n ) ⋅ x = ∑ H( 0 , k ) x [ k ] = H( 0 , - n ) ⋆ x [ n ]
h [ n ] = H( 0 , - n )
N-2 M+ 1
y[ n ]2 M+ 1x [ n ]LhN-[ n ]
y[ n ] = x [ n ] ⋆ saN-[ n ]
YORUM YAP
birkh [ n ]y[ n ]xa = Hxbirkp [ n ]birkh [ n ]
MATLAB / OCTVE KODU
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]');
Çıktı:
Umarım bu sorunu açıklığa kavuşturur.