क्या यह गुणन या दृढ़ीकरण के रूप में फ़िल्टरिंग को लागू करने के लिए संख्यात्मक रूप से अधिक स्थिर है?


12

मैं पांचवें क्रम के बटरवर्थ फ़िल्टर ऑफ़लाइन के साथ 20,000-नमूना सिग्नल को फ़िल्टर करने के लिए एक कार्यक्रम लिख रहा हूं। मुझे एफएफटी कार्यान्वयन के लिए पहुँच मिली है। फ़िल्टरिंग को लागू करने के लिए दो विकल्प प्रतीत होते हैं:

  • समय क्षेत्र में आवेग प्रतिक्रिया के साथ संकेत को हल करना, या
  • आवृत्ति डोमेन में आवेग प्रतिक्रिया के साथ सिग्नल को गुणा करना और परिणाम को उलटा-बदलना

ये तरीके सैद्धांतिक एफटी मामले में समान होंगे। वास्तविक जीवन में इसे डीएफटी के साथ करना, हालांकि, मुझे लगता है कि चीजें अलग हैं। क्या विधियों में से एक संख्यात्मक रूप से अधिक स्थिर है? क्या कोई और समस्या है जिससे मुझे अवगत होना चाहिए? गणना की संख्या महत्वपूर्ण नहीं है।


अधिकांश सिग्नल लंबाई के लिए गणना करने के लिए एफएफटी विधि बहुत तेज होगी। केवल छोटी लंबाई ही समय-डोमेन कनविक्शन से तेज़ होती है।
एंडोलिथ

जवाबों:


5

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

आमतौर पर, जहाँ तक मुझे जानकारी है, बटरवर्थ फ़िल्टर को पुनरावर्ती (IIR) फ़िल्टर के रूप में लागू किया जाता है, इसलिए यह एक अलग विषय है। IIR फ़िल्टर में ध्रुवों के साथ-साथ शून्य भी होते हैं, इसलिए अभ्यास में स्थिरता के मुद्दे हो सकते हैं। इसके अलावा, IIR फ़िल्टर के लिए, FFT- आधारित विधियाँ एक विकल्प नहीं हैं, लेकिन उल्टा, IIR फ़िल्टर बहुत कम क्रम के होते हैं।

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

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


एफआईआर फिल्टर के लिए काम करने से आपका क्या मतलब है? मैंने मान लिया कि आईआईआर फिल्टर को किसी भी तरह से नमूना लेना होगा। क्या इससे बचने के लिए IIR फिल्टर आमतौर पर टाइम डोमेन में लागू किए जाते हैं?
एंड्रियास

1
जहां तक ​​मुझे जानकारी है, आईआईआर फिल्टर हमेशा टाइम डोमेन में लागू किए जाते हैं । एक IIR फ़िल्टर (यहाँ, उदाहरण के लिए, एक दूसरे क्रम का फ़िल्टर या "बाइकाड") जैसे भिन्न समीकरण द्वारा परिभाषित किया गया है y(n) = b0 * x(n) + b1 * x(n-1) + b2 * x(n-2) - a1 * y(n-1) - a2 * y(n-2)। ध्यान दें कि यह पिछले इनपुट नमूनों (x मान), और पिछले आउटपुट नमूने (y मान) का एक संयोजन है। एक एफआईआर फिल्टर केवल पिछले इनपुट पर निर्भर करता है, इसलिए यह एक कुशल आवृत्ति डोमेन कार्यान्वयन को स्वीकार करता है। एक IIR फ़िल्टर नहीं करता है, लेकिन वैसे भी बहुत कुशल है क्योंकि IIR फ़िल्टर बहुत कम क्रम के होते हैं।
22

1
IIR फ़िल्टर का कारण बहुत कम क्रम होता है पोल (पिछले आउटपुट नमूनों की प्रतिक्रिया) फ़िल्टर को एफआईआर फ़िल्टर की तुलना में बहुत कम गुणांक के साथ अधिक स्थिर होने देता है। जब मैं बहुत कम क्रम कहता हूं, तो एक विशिष्ट IIR फ़िल्टर दूसरे क्रम (5 गुणांक) हो सकता है, जबकि एक ही कार्य के लिए एक विशिष्ट FIR फ़िल्टर में हजारों गुणांक हो सकते हैं।
22

4

लगभग सभी मामलों में आपकी सबसे अच्छी पसंद न तो सजा है और न ही एफएफटी लेकिन सीधे आईआईआर फ़िल्टर को सीधे लागू करना (उदाहरण के लिए सोसेफिल्ट () फ़ंक्शन) का उपयोग करना। यह सीपीयू और मेमोरी खपत के संदर्भ में काफी अधिक कुशल होगा।

क्या यह एक संख्यात्मक अंतर बनाता है यह विशिष्ट फिल्टर पर निर्भर करता है। एकमात्र मामला जहां कुछ अंतर रेंगना हो सकता है यदि पोल बहुत हैं, यूनिट सर्कल के बहुत करीब हैं। यहां तक ​​कि कुछ तरकीबें भी मदद कर सकती हैं। फ़ंक्शन का प्रतिनिधित्व और फ़िल्टर का उपयोग न करें (लेकिन) sosfilt () के साथ डंडे और शून्य का उपयोग करें। यहाँ अंतर के लिए एक उदाहरण है।

n = 2^16;  % filter length
fs = 44100; % sample rate
x = zeros(n,1); x(1) = 1;
f0 = 15; % cutoff frequency in Hz
% design with poles and zeroes
[z,p,k] = butter(5,f0*2/fs);
clf
plot(sosfilt(zp2sos(z,p,k),x));
% design with transfer function
[b,a] = butter(5,f0*2/fs);
hold on
plot(filter(b,a,x),'k');

फ़िल्टर () लगभग 15 हर्ट्ज @ 44.1kHz के कटऑफ पर खराब हो जाता है। सोसफिल्ट () के लिए कटऑफ किसी भी समस्या के बिना Hz @ 44.1kHz के 1/100 से नीचे अच्छी तरह से हो सकता है।

यदि आपको स्थिरता की समस्या है तो FFT बहुत मदद नहीं करता है। चूँकि आपका फ़िल्टर एक IIR फ़िल्टर है, आवेग प्रतिक्रिया अनंत है और इसे पहले छोटा करना होगा। इन बहुत कम आवृत्ति पर आवेग प्रतिक्रिया इतनी लंबी हो जाती है कि एफएफटी अव्यवहारिक भी हो जाता है।

उदाहरण के लिए यदि आप 1/100 हर्ट्ज @ 44.1 किलोहर्ट्ज़ की कटऑफ चाहते हैं और 100 डीबी के आवेग प्रतिक्रिया में एक गतिशील रेंज चाहते हैं, तो आपको लगभग 25 मिलियन नमूनों की आवश्यकता है !!! 44.1 kHz पर यह लगभग 10 मिनट है और कई बार, आपके मूल सिग्नल से कई गुना अधिक है


यह वास्तव में संख्यात्मक समस्याओं पर सवाल का जवाब नहीं देता है, लेकिन मुझे इसके साथ समस्याओं के बारे में पता नहीं था filter- धन्यवाद! मेरा हाई-पास कटऑफ 0.5 Hz @ 250 Hz है। समस्याओं का कारण क्या है filter? मैं स्वयं कार्यान्वयन लिख रहा हूँ।
एंड्रियास

2

आप क्यों मानते हैं कि चीजें अलग होंगी? सैद्धांतिक अवधारणाओं को व्यावहारिक अनुप्रयोगों में अनुवाद करना चाहिए, एकमात्र अंतर फ्लोटिंग पॉइंट मुद्दों का है, जिससे हम बच नहीं सकते हैं। आप MATLAB में एक सरल उदाहरण के साथ आसानी से सत्यापित कर सकते हैं:

x=randn(5,1);
y=randn(5,1);
X=fft(x,length(x)+length(y)-1);
Y=fft(y,length(x)+length(y)-1);

z1=conv(x,y);z2=ifft(X.*Y);
z1-z2

ans =

   1.0e-15 *

   -0.4441
   -0.6661
         0
   -0.2220
    0.8882
   -0.2220
         0
   -0.4441
    0.8882

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


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

यदि आप उपरोक्त उदाहरण में अनुक्रमों की लंबाई को 1e6 तक बढ़ाते हैं, तो @JasonR मशीन की सटीकता अभी भी है। खराब फ़िल्टर डिज़ाइन या खराब FFT कार्यान्वयन के कारण मुख्य रूप से फ़सल का उल्लेख करने वाली त्रुटियां। यदि वे ठीक हैं, तो मैं यह नहीं देखता कि समय-क्षेत्र में दी गई सजाएँ आवृत्ति डोमेन में उससे अलग उत्तर क्यों दें।
लोरेम इप्सम

1
यह एक अलग उत्तर नहीं देना चाहिए कि आप किस डोमेन पर गणना करते हैं। मेरा एकमात्र बिंदु यह है कि वास्तविक गणितीय कार्य दोनों दृष्टिकोणों के बीच बहुत भिन्न होते हैं, इसलिए आपके द्वारा उपलब्ध प्रत्येक के कार्यान्वयन के आधार पर, यह संभव है कि आप मूर्त अंतर देख सकता था। दोहरी सटीकता के लिए, यह मानते हुए कि आपके पास अच्छे कार्यान्वयन हैं, मैं चरम मामलों को छोड़कर किसी भी अंतर की उम्मीद नहीं करूंगा।
जेसन आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.