ध्यान दें
सावित्स्की-गोलय (एसजी) फिल्टर को नॉनलाइन, टाइम-डिफरेंट इनपुट डेटा डिपेंडेंट के रूप में दर्शाते हुए मेरा पिछला जवाब (पहले संपादित) गलत था, एक समयपूर्व गलत व्याख्या के कारण कि कैसे सावित्ज़्की-गोलय (एसजी) फिल्टर अपने आउटपुट की गणना करता है विकी लिंक के अनुसार प्रदान किया गया। इसलिए अब मैं इसे उन लोगों के लाभ के लिए सही कर रहा हूं जो यह भी देखेंगे कि एफआईआर-एलटीआई फ़िल्टरिंग द्वारा एसजी फ़िल्टर कैसे लागू होते हैं। @MattL को धन्यवाद। अपने सुधार के लिए, उन्होंने जो बेहतरीन लिंक प्रदान किया है और जो धैर्य उन्होंने अपनी जांच के दौरान दिखाया (जो मैं कभी नहीं दिखा सकता था) इस मुद्दे की के । हालाँकि, मैं बड़ी ईमानदारी से एक अधिक मौखिक आपत्ति पसंद करता हूँ, जो स्पष्ट रूप से आवश्यक नहीं है। कृपया यह भी ध्यान दें कि सही उत्तर अन्य एक है, यह केवल एसजी फिल्टर की एलटीआई संपत्ति के अतिरिक्त स्पष्टीकरण के लिए है।
अब यह आश्चर्य की बात नहीं है कि जब कोई व्यक्ति (जिसने पहले कभी उन फ़िल्टर का उपयोग नहीं किया है) एसजीएस फ़िल्टर की परिभाषा को एक निम्न क्रम LSE बहुपद फिट दिए गए डेटा के रूप में देखता है। / वह तुरंत इस निष्कर्ष पर कूद जाएगा कि वे डेटा पर निर्भर हैं, nonlinear समय (पारी) अलग-अलग, अनुकूली फिल्टर।
फिर भी, बहुपत्नी फिटिंग प्रक्रिया की एसजी द्वारा स्वयं की चतुराई से व्याख्या की जाती है, जैसे कि यह पूरी तरह से स्वतंत्र डेटा, समय-अपरिवर्तनीय, रैखिक फ़िल्टरिंग को संभव बनाता है, इसलिए एसजी को एक निश्चित एलटीआई-एफआईआर फिल्टर के रूप में बनाता है।
नीचे दिए गए लिंक से सबसे छोटा सारांश है मैटेल द्वारा गए । गायब होने वाले किसी भी विवरण के लिए, कृपया मूल दस्तावेज से परामर्श करें, या स्पष्ट करने के लिए कहें। लेकिन मैं यहां पूरे दस्तावेज का फिर से निर्माण नहीं करना चाहूंगा।
अब विचार करें 2M+1 इनपुट डेटा मूल्यों x[−M],x[−M+1],...,x[0],x[1],...,x[M] जो n=0 आसपास केंद्रित हैं और जिसमें हम क्रम एन के एक बहुपद p[n] को फिट करना चाहते हैं।N, साथ n=−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)
अब उन लोगों के लिए जो एलएसई पॉलीफिट प्रक्रिया से परिचित हैं, मैं केवल परिणामी मैट्रिक्स समीकरण (लिंक से) लिखूंगा जो इष्टतम गुणांक सेट को परिभाषित करता है:
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⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
अब एक पल के लिए दुबला हो जाएं और एक बिंदु पर चर्चा करें।
AHnakMNx[n]ak2nd
... यह (LSE पॉलीफ़िट) इनपुट के प्रत्येक नमूने पर दोहराया जा सकता है, हर बार एक नया बहुपद और उत्पादन अनुक्रम y [n] का एक नया मूल्य पैदा करता है ...
तो हम इस आश्चर्य से कैसे दूर हो सकते हैं? निम्नलिखित होने के लिए SG फ़िल्टर आउटपुट की व्याख्या और परिभाषित करके:
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]। लेकिन फिर, इस एसजी फ़िल्टर के लिए फ़िल्टर गुणांक क्या हैं? चलो देखते हैं।
फिर से गणना पर विचार करें 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]⎤⎦⎥⎥⎥⎥
from which we can see that the single coefficent a0 is given by the dot product of the first row of H with the input data vector x; i.e.,
a0=H(0,n)⋅x=∑H(0,k)x[k]=H(0,−n)⋆x[n]
where in the last equality, we have interpreted the dot product sum as the convolution sum by considering the impulse response of the S-G filter to be h[n]=H(0,−n)
,
more specifically it's the impulse response of S-G filter of order N with a window length of 2M+1.
And the complete output y[n] of the N-th order S-G filter witha window size of 2M+1, for an input x[n] of length L is obtained by a single LTI convolution with the impulse response hN[n]
y[n]=x[n]⋆hN[n]
COMMENT
The fact that polynomial coefficients ak depend on the input data, does not prevent the filter from being an LTI FIR. Because an impulse response h[n] can be defined to represent the output y[n] to be computed from a linear combinations of input samples. The linear combinations of input samples x are inherently implied by the matrix product a=Hx that defines the optimal coefficients ak of p[n], hence any linear combination of ak would also result in an FIR LTI filter h[n] to represent the LSE polynomial fit procedure.
MATLAB / OCTVE CODE
The following simple MATLAB/OCTAVE can be used to compute those S-G filter impulse responses h[n] (Note that its built in S-G designer may produce a different set of h[n] as outlined by linked-pdf)
% 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]');
The output is:
Hope this clarifies the issue.