सेवित्स्की-गोल फिल्टर बनाम आईआईआर या एफआईआर रैखिक फिल्टर


11
  • एक पारंपरिक आईआईआर / एफआईआर फिल्टर (उच्च फ्रीक दोलनों को हटाने के लिए लोअरपास), जैसे चलती औसत,

  • या सविट्ज़की-गोले फ़िल्टर

सभी एक संकेत को सुचारू करने के लिए उपयोगी हो सकते हैं, जैसे कि एक लिफाफा संकेत:

यहाँ छवि विवरण दर्ज करें

किस एप्लिकेशन के लिए एक शास्त्रीय हाइवे की तुलना में सविट्ज़की-गोले फ़िल्टर अधिक दिलचस्प होगा?

यह मानक फ़िल्टर से अलग क्या बनाता है, और यह मानक फ़िल्टर की तुलना में क्या जोड़ता है?

क्या यह इनपुट डेटा के अनुकूल है?

क्या यह क्षणिक संरक्षण के लिए बेहतर है?


क्या तुमने कभी एक दिन एक इंजीनियरिंग स्थिति में किया गया है जब आप का फैसला किया है "चलो औसत से या किसी अन्य प्राथमिकी लोपास हिलाने की बजाय उपयोग एक एसजी फिल्टर! यह बेहतर यह है और इस और इस वजह है ..." ? फिर यह सवाल आपके लिए है!

जवाबों:


4

चूंकि मौजूदा उत्तरों और टिप्पणियों में चर्चा मुख्य रूप से इस बात पर केंद्रित है कि सविट्ज़की-गॉले फिल्टर वास्तव में क्या हैं (जो कि बहुत उपयोगी थे), मैं मौजूदा उत्तरों को जोड़ने की कोशिश करूंगा कि वास्तव में स्मूथिंग फ़िल्टर कैसे चुनें, इस पर कुछ जानकारी प्रदान करें। मेरी समझ में, सवाल वास्तव में किस बारे में है।

सबसे पहले, मैं दोहराना चाहूंगा कि अन्य उत्तरों से स्पैनिंग में चर्चा में क्या स्पष्ट हो गया है: एक तरफ रैखिक और समय-अपरिवर्तनीय (एलटीआई) एफआईआर / आईआईआर फिल्टर में प्रश्न में चौरसाई फिल्टर के वर्गीकरण, और दूसरी ओर सेविट्ज़की-गोले फ़िल्टर भ्रामक है। एक Savitkzy-Golay फ़िल्टर एक मानक एफआईआर फ़िल्टर है जो एक विशिष्ट मानदंड (स्थानीय बहुपद सन्निकटन) के अनुसार डिज़ाइन किया गया है। तो प्रश्न में उल्लिखित सभी फ़िल्टर LTI फ़िल्टर हैं।

शेष प्रश्न यह है कि स्मूथिंग फ़िल्टर कैसे चुना जाए। यदि कम्प्यूटेशनल जटिलता और / या मेमोरी एक मुद्दा है, तो आईआईआर फिल्टर एफआईआर फिल्टर पर बेहतर हो सकते हैं, क्योंकि वे आमतौर पर एफआईआर फिल्टर की तुलना में काफी कम फिल्टर ऑर्डर के साथ तुलनीय शोर दमन (यानी स्टॉपबैंड क्षीणन) प्राप्त करेंगे। लेकिन ध्यान दें कि यदि वास्तविक समय प्रसंस्करण आवश्यक है, तो IIR फ़िल्टर का एक संभावित नुकसान यह है कि उनके पास बिल्कुल रैखिक चरण प्रतिक्रिया नहीं हो सकती है। तो वांछित संकेत को कुछ चरण विकृतियों का सामना करना पड़ेगा। ऑफ़लाइन-प्रसंस्करण के लिए, चरण विकृतियों से बचा जा सकता है, यहां तक ​​कि IIR फ़िल्टर के साथ, शून्य-चरण फ़िल्टरिंग लागू करके ।

पिछले पैराग्राफ में चर्चा किए गए विचारों के अलावा, यह मुख्य रूप से डिज़ाइन मानदंड है जो मायने रखता है, यदि फ़िल्टर एफआईआर या आईआईआर नहीं है तो बहुत अधिक नहीं है, क्योंकि किसी भी (स्थिर) आईआईआर फ़िल्टर को एफआईआर फ़िल्टर द्वारा मनमानी सटीकता के साथ लगाया जा सकता है, और कोई भी एफआईआर फिल्टर को एक आईआईआर फिल्टर द्वारा लगाया जा सकता है, भले ही उत्तरार्द्ध अधिक कठिन हो। उपयुक्त डिजाइन मानदंड स्पष्ट रूप से डेटा और शोर के गुणों पर निर्भर करता है। जब यह चौरसाई की बात आती है, तो हम आमतौर पर पर्याप्त रूप से ओवरसम्पल्ड (यानी, चिकनी) डेटा मान लेते हैं। यदि शोर में मुख्य रूप से उच्च आवृत्ति घटक होते हैं, अर्थात, यदि डेटा और शोर के बीच थोड़ा वर्णक्रमीय ओवरलैप होता है, तो हम वांछित संकेत के संरक्षण के साथ-साथ स्टॉप बैंड ऊर्जा को अधिकतम करना चाहते हैं, या स्टॉप बैंड ऊर्जा को कम करना चाहते हैं। इस मामले में हम एक लीनियर-फेज एफआईआर फिल्टर का चयन कर सकते हैं जिसे पार्क्स-मैक्लेलन एल्गोरिथम का उपयोग करते हुए न्यूनतम मानदंड के अनुसार बनाया गया है। हम कम से कम चौकोर विधि चुनकर स्टॉप बैंड एनर्जी (स्टॉप बैंड में शोर शक्ति कम कर सकते हैं) को भी कम कर सकते हैं। दो मानदंडों (न्यूनतम और सबसे कम वर्गों) के बीच एक मिश्रण का चयन करके संभव हैकम से कम चौकोर डिजाइन , जो बैंड बैंड में अधिकतम सन्निकटन त्रुटि को बाधित करते हुए बैंड ऊर्जा को कम करता है।

यदि सिग्नल स्पेक्ट्रम के साथ शोर स्पेक्ट्रम महत्वपूर्ण रूप से ओवरलैप हो जाता है, तो अधिक सावधान दृष्टिकोण की आवश्यकता होती है, और जानवर-बल क्षीणन अच्छी तरह से काम नहीं करेगा क्योंकि या तो आप बहुत अधिक शोर छोड़ते हैं (कट-ऑफ आवृत्ति को बहुत अधिक चुनकर) या आप वांछित को विकृत करते हैं बहुत अधिक संकेत। इस मामले में Savitzky-Golay (SG) फ़िल्टर एक अच्छा विकल्प हो सकता है। भुगतान की जाने वाली कीमत औसत दर्जे का स्टॉपबैंड क्षीणन है, लेकिन एक फायदा यह है कि कुछ सिग्नल गुण बहुत अच्छी तरह से संरक्षित हैं। यह इस तथ्य के साथ करना है कि एसजी फिल्टर में एक फ्लैट पास बैंड प्रतिक्रिया है, अर्थात।

(1)एच(जेω)ω|ω=0=0=1,2,...,आर

जहाँ आर अनुमान करने वाले बहुपद और के आदेश है एच(जेω) है फिल्टर की आवृत्ति प्रतिक्रिया। संपत्ति (1) गारंटी देती है कि इनपुट सिग्नल के पहले आर क्षण आउटपुट में संरक्षित हैं, जिसका मतलब है कि वांछित सिग्नल में चोटियों की चौड़ाई और ऊंचाई अच्छी तरह से संरक्षित है।

बेशक, ऊपर चर्चा किए गए दो प्रकार के चौरसाई फिल्टर (उच्च स्टॉपबैंड क्षीणन और एसजी) के बीच एक समझौता भी है। हम ω=0 पर एक निश्चित डिग्री के साथ एफआईआर फ़िल्टर डिज़ाइन कर सकते हैं और स्टॉप बैंड क्षीणन को अधिकतम करने या स्टॉपबैंड ऊर्जा को कम करने के लिए स्वतंत्रता की शेष डिग्री का उपयोग कर सकते हैं। एफआईआर फिल्टर के मामले में, परिणामस्वरूप डिजाइन की समस्या पर्याप्त रूप से सरल (और उत्तल) है, और कई सॉफ्टवेयर पैकेजों में उपलब्ध सामान्य अनुकूलन दिनचर्या का उपयोग दिए गए एप्लिकेशन के लिए इष्टतम फिल्टर प्राप्त करने के लिए किया जा सकता है।

एसजी फिल्टर के सिद्धांत में रुचि रखने वालों के लिए, सबसे प्रासंगिक संदर्भ जो मैं सुझा सकता हूं, वे निम्नलिखित हैं:


2

जैसा कि कुछ भी है, कभी-कभी कुछ उपकरण दूसरों की तुलना में बेहतर होते हैं।

मूविंग एवरेज (MA) फिल्टर का उपयोग डेटा को सुचारू करने के लिए किया जा सकता है, और एफ.आई.आर. वे बहुत सरलतम फ़िल्टर हैं जिनके साथ आप आ सकते हैं, और वे बहुत सारे कार्यों के लिए अच्छी तरह से काम करते हैं जब तक कि आप किसी भी अचानक कूद या बहुपद रुझानों को मॉडल करने की कोशिश नहीं कर रहे हैं। हालांकि यह ध्यान रखें कि ये अनिवार्य रूप से सिर्फ लो-पास फिल्टर हैं, इसलिए जब वे सिग्नल में जिस डेटा की परवाह करते हैं, वे कम आवृत्ति और काफी संकीर्ण-बैंड होते हैं।

Savitzky-Golay (SG) फ़िल्टर एफआईआर फ़िल्टर का एक विशेष समूह है जो अनिवार्य रूप से सिग्नल के साथ कनवल्शन स्लाइड के रूप में आपकी समय श्रृंखला के लिए एक बहुपद फिट होता है। एसजी फ़िल्टर उन संकेतों के लिए उपयोगी होते हैं जहाँ आपके बारे में परवाह करने वाली चीजें कम आवृत्ति और काफी संकीर्ण बैंड नहीं होती हैं।

मुझे लगता है कि यदि आप विकिपीडिया पृष्ठ को आपने पूरी तरह से लिंक कर दिया है, तो आपको यह पता चलेगा कि यह SG और MA फ़िल्टर के बीच के अंतर को काफी कठोर तरीके से बताता है। हालांकि ध्यान रखें: अंत में, वे दोनों समान काम करने के लिए सिर्फ उपकरण हैं, यह सही उपकरण का उपयोग करने के लिए आपको पता लगाना है

संपादित करें :

चूँकि कुछ भ्रम की स्थिति प्रतीत होती है कि SG फ़िल्टर बुनियादी स्तर पर किसी तरह से "अनुकूली" हैं, इसलिए मैंने एक साधारण MATLAB उदाहरण शामिल किया है। जैसा कि डैन ने बताया, इन्हें अनुकूल बनाया जा सकता है, लेकिन इनका मूल कार्यान्वयन अक्सर नहीं होता है। कोड का निरीक्षण करके, आप देखेंगे कि यह केवल एक मैट्रिक्स है जो कुछ विशेष हैंडलिंग के साथ दिखता है। इस फिल्टर के बारे में कुछ भी पारंपरिक अर्थों में "अनुकूली" नहीं है, आप बस एक बहुपद फिट और उस बहुपद का उपयोग कर रहे हैं जिस पर संकेत के माध्यम से बहुपद संकेत पर फिट होगा; SG आवश्यक FIR है। मेरे पास नीचे दी गई स्क्रिप्ट इस प्लॉट का निर्माण करती है: एमए के साथ एसजी फ़िल्टर तुलना

इस आंकड़े को देखते हुए, आप देख सकते हैं कि एमए और एसजी अनिवार्य रूप से एक ही बात को पूरा करते हैं, लेकिन कुछ महत्वपूर्ण अंतरों के साथ:

  1. एमए शोर को दबाने का एक बड़ा काम करता है, लेकिन यह एक खराब काम करता है जो सिग्नल में क्षणिक कूदता है। हम फिल्टर की लंबाई बढ़ाकर और भी अधिक शोर को दबा सकते हैं, लेकिन फिर यह ग्राहकों पर और भी बुरा प्रदर्शन करेगा; यह प्रभाव किसी भी संक्रमण के पास "स्मीयरिंग" के रूप में देखा जाएगा, जिसे आपको दिखाए गए आंकड़े में देखने में सक्षम होना चाहिए।
  2. एसजी सिग्नल के ट्रांसजेंडरों को पकड़ने का एक बड़ा काम करता है, लेकिन शोर को दबाने का इतना बड़ा काम नहीं करता है (कम से कम एक ही आकार के एमए की तुलना में)। हम फ्रेम की लंबाई बढ़ाकर गैर-रोगियों के पास शोर दमन में सुधार कर सकते हैं, लेकिन यह किसी भी ग्राहकों के पास गिब की घटना के अनुरूप रिंग को पेश करेगा।

आपके लिए ये फ़िल्टर कैसे काम करते हैं, इसकी बेहतर समझ पाने के लिए, मैं आपको यहाँ कोड लेने और इसे हेरफेर करने के लिए प्रोत्साहित करूँगा, और देखिए कि 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
यह बिंदु (दूसरे उत्तर को देखकर) प्रतीत होता है कि एसजी फ़िल्टर एक "पूरी तरह से डेटा निर्भर नॉनलाइनर टाइम-अलग-अलग फ़िल्टर है, जिसके गुणांक इसके इनपुट के प्रत्येक छोटे खंड के लिए पुन: गणना की जाती है"।
g6kxjv1ozn

1
एसजी फ़िल्टर, इसे कई बार लागू करने से मेरी समझ में, विशेष रूप से एलएमएस या आरएलएस जैसे आपके औसत अनुकूली फिल्टर की तुलना में एक अनुकूली फिल्टर बिल्कुल नहीं है। मैं पूरी तरह से इस कथन से असहमत हूं कि फिल्टर वेट का समय अलग-अलग है। एसजी फिल्टर अनिवार्य रूप से एक टेबल लुकअप है, आप एक क्षणिक प्रतिक्रिया की गणना करने के लिए टेबल से मानों के साथ फ़िल्टर करते हैं, और फिर आप वापस जाते हैं और सिग्नल के प्रारंभ / अंत में किनारे के मामलों को संभालते हैं। मैं आपको यह दिखाने के लिए MATLAB उदाहरण के साथ अपनी पोस्ट संपादित करूँगा।
मैथ्यूजपॉलार्ड

2
@matthewjpollard नोट करने के लिए, मेरे पास व्यक्तिगत रूप से इस फ़िल्टर का उपयोग करने का महत्वपूर्ण अनुभव नहीं है, लेकिन मेरे लिए SG फ़िल्टर सर्वोत्तम रूप से कार्यान्वित किया गया है जो एक अनुकूली फ़िल्टर कार्यान्वयन के रूप में दिखाई देता है, समय के साथ गुणांक अलग-अलग होता है। जिस तरह से आपने अपने कोड में फ़िल्टर लागू किया है वह वैसा नहीं है (जैसा कि आपने पूरे अनुक्रम को डेटा "सब-सेट" के रूप में माना है), लेकिन जिस तरह से विशेष रूप से विकिपीडिया en.wikipedia.org/wiki/Savitzky%E2%80% पर वर्णित है 93Golay_filter और स्वयं सावित्ज़की और गोले द्वारा पेपर में वास्तव में अनुकूली है: pdfs.semanticscholar.org/4830/…
Dan

2
@matthewjpollard आपके रियल टाइम सिस्टम में आपका डेटा कभी लगातार स्ट्रीमिंग होता है, जिससे आप कम अंतराल पर गुणांक प्राप्त कर रहे हैं या क्या आप हमेशा डेटा के छोटे ब्लॉक में काम करते हैं?
डैन बॉशेन

2
धन्यवाद मैट। तो शायद हम इस बात को जोड़ सकते हैं कि आपके कार्य को अनुकूली / समय के रूप में इस अर्थ में भिन्न किया जा सकता है कि गुणांक प्रत्येक डेटा संग्रह के लिए गणना की जाती है (डेटा के भीतर समान गुणांक हालांकि शुरू और खत्म होने के उचित उपचार के साथ इकट्ठा होते हैं, लेकिन एक संग्रह से अगले में भिन्न होते हैं - यदि मैं ठीक से समझ लो)। अपना कोड और उदाहरण एप्लिकेशन साझा करने के लिए धन्यवाद।
डेन बॉशेन

2

ध्यान दें

सावित्स्की-गोलय (एसजी) फिल्टर को नॉनलाइन, टाइम-डिफरेंट इनपुट डेटा डिपेंडेंट के रूप में दर्शाते हुए मेरा पिछला जवाब (पहले संपादित) गलत था, एक समयपूर्व गलत व्याख्या के कारण कि कैसे सावित्ज़्की-गोलय (एसजी) फिल्टर अपने आउटपुट की गणना करता है विकी लिंक के अनुसार प्रदान किया गया। इसलिए अब मैं इसे उन लोगों के लाभ के लिए सही कर रहा हूं जो यह भी देखेंगे कि एफआईआर-एलटीआई फ़िल्टरिंग द्वारा एसजी फ़िल्टर कैसे लागू होते हैं। @MattL को धन्यवाद। अपने सुधार के लिए, उन्होंने जो बेहतरीन लिंक प्रदान किया है और जो धैर्य उन्होंने अपनी जांच के दौरान दिखाया (जो मैं कभी नहीं दिखा सकता था) इस मुद्दे की के । हालाँकि, मैं बड़ी ईमानदारी से एक अधिक मौखिक आपत्ति पसंद करता हूँ, जो स्पष्ट रूप से आवश्यक नहीं है। कृपया यह भी ध्यान दें कि सही उत्तर अन्य एक है, यह केवल एसजी फिल्टर की एलटीआई संपत्ति के अतिरिक्त स्पष्टीकरण के लिए है।

अब यह आश्चर्य की बात नहीं है कि जब कोई व्यक्ति (जिसने पहले कभी उन फ़िल्टर का उपयोग नहीं किया है) एसजीएस फ़िल्टर की परिभाषा को एक निम्न क्रम LSE बहुपद फिट दिए गए डेटा के रूप में देखता है। / वह तुरंत इस निष्कर्ष पर कूद जाएगा कि वे डेटा पर निर्भर हैं, nonlinear समय (पारी) अलग-अलग, अनुकूली फिल्टर।

फिर भी, बहुपत्नी फिटिंग प्रक्रिया की एसजी द्वारा स्वयं की चतुराई से व्याख्या की जाती है, जैसे कि यह पूरी तरह से स्वतंत्र डेटा, समय-अपरिवर्तनीय, रैखिक फ़िल्टरिंग को संभव बनाता है, इसलिए एसजी को एक निश्चित एलटीआई-एफआईआर फिल्टर के रूप में बनाता है।

नीचे दिए गए लिंक से सबसे छोटा सारांश है मैटेल द्वारा गए । गायब होने वाले किसी भी विवरण के लिए, कृपया मूल दस्तावेज से परामर्श करें, या स्पष्ट करने के लिए कहें। लेकिन मैं यहां पूरे दस्तावेज का फिर से निर्माण नहीं करना चाहूंगा।

अब विचार करें 2M+1 इनपुट डेटा मूल्यों x[M],x[M+1],...,x[0],x[1],...,x[M] जो n=0 आसपास केंद्रित हैं और जिसमें हम क्रम एन के एक बहुपद p[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

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

अब उन लोगों के लिए जो एलएसई पॉलीफिट प्रक्रिया से परिचित हैं, मैं केवल परिणामी मैट्रिक्स समीकरण (लिंक से) लिखूंगा जो इष्टतम गुणांक सेट को परिभाषित करता है:

(2)a=(ATA)1ATx=Hx
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]

अब एक पल के लिए दुबला हो जाएं और एक बिंदु पर चर्चा करें।

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[dM],x[dM+1],...,x[d1],x[d],x[d+1],...x[d+M]

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]]

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:

enter image description here

Hope this clarifies the issue.


2
@Fat32 I think it is because it was a long back and forth list of comments, so to keep the board clean they typically move it "to chat". It's all still there, just not cluttering up the main page. That is why the system suggests moving it to chat when the back and forth gets to long. Not to fret, everyone still loves you.
Dan Boschen

1
@g6kxjv1ozn I'm comign to that point... please wait...
Fat32

2
@Fat32 Great work! I read through it but will need to read through it and it is written very clearly, I will just need to follow through with pencil and paper step by step to totally see it as you now do. Thanks for putting this all here.
Dan Boschen

4
@DanBoschen: The polynomial is indeed not needed, it's just one way to describe S-G filters. They could also be described as filters minimizing the noise reduction ratio (i.e., the energy of the frequency response) subject to the frequency response being 1 at DC, and additional flatness constraints at ω=0. Cf. the section on S-G filters in Orfanidis' book linked to in my answer.
Matt L.

2
@DanBoschen Yes Dan the code shows just the filter impulse response h[n]... Let me repeat my self again; eventhough the polynomial coefficeints ak do certainly (linearly) depend on (local) input {x[n-M],...,x[n+M]}, the filter impulse response h[n] doesnt. Our confusion stemmed from the fact that we thought the filter coefficients were a function of polynomial coefficients which would then make the filter as time varying and nonlinear, but as it turns out, that's not the case.
Fat32
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.