एफएफटी का उपयोग करके एफआईआर फिल्टर डिजाइन करने में क्या समस्याएं हैं?


15

मैं एक एफआईआर फिल्टर के बीच संबंध की समझ प्राप्त करने की कोशिश कर रहा हूं, जिसे "पहले सिद्धांतों" से बनाया गया है, जिसमें फिल्टर कर्नेल का उपयोग कनवल्शन के साथ किया गया है, और एक फिल्टर जिसे एफएफटी (नीचे देखें) का उपयोग करके दो तरीकों से डिजाइन किया गया है।

जहां तक ​​मैं समझता हूं, एफआईआर फिल्टर की आवेग प्रतिक्रिया फिल्टर के कन्वेक्शन कर्नेल के समान है। (यदि मैं गलत हूं तो मुझे सही करों।)

इसके अलावा, मेरी समझ में, एफआईआर फिल्टर की आवेग प्रतिक्रिया का घटक आवृत्तियों (यानी फूरियर ट्रांसफॉर्म) फिल्टर की आवृत्ति प्रतिक्रिया के समान ही है। और, इसलिए, व्युत्क्रम फूरियर रूपांतरण मुझे आवेग प्रतिक्रिया वापस देगा। (फिर, मुझे सही करें यदि मैं गलत हूं)।

यह मुझे दो निष्कर्षों की ओर ले जाता है (चरण प्रतिक्रिया की अनदेखी, या रैखिक चरण प्रतिक्रिया मानकर):

  1. मुझे अपनी वांछित आवृत्ति प्रतिक्रिया "ड्राइंग" द्वारा मनमाने ढंग से आवृत्ति प्रतिक्रिया का एक एफआईआर फिल्टर डिजाइन करने में सक्षम होना चाहिए, आवेग प्रतिक्रिया प्राप्त करने के लिए एक आईएफएफटी ले रहा है, और मेरे दृढ़ संकल्प कर्नेल के रूप में उपयोग कर रहा है।

  2. वैकल्पिक रूप से, मुझे इनपुट सिग्नल के एफएफटी द्वारा आवृत्ति फ़िल्टर बनाने में सक्षम होना चाहिए, आवृत्ति डोमेन में मेरी वांछित मनमानी आवृत्ति प्रतिक्रिया से गुणा करना और आउटपुट सिग्नल का उत्पादन करने के लिए परिणाम का एक IFFT लेना।

सहज रूप से, ऐसा लगता है कि 1 और 2 बराबर हैं, लेकिन मुझे यकीन नहीं है कि मैं यह साबित कर सकता हूं।

ऐसा लगता है कि लोग (और डीएसपी साहित्य) एफआईआर कर्नेल को पूर्वनिर्धारित प्रतिक्रियाओं के साथ डिजाइन करने के लिए बड़ी लंबाई में जाते हैं, जटिल (मेरे लिए) एल्गोरिदम का उपयोग करते हुए चेबीशेव या रेमेज़ जैसे (मैं कुछ नामों को पढ़ रहा हूं, जिन्हें मैं वास्तव में उनके बिना फेंक रहा हूं) ।

  • जब हर संभव एफआईआर कर्नेल के लिए एक एफएफटी / आईएफएफटी परिवर्तन मौजूद है, तो इन लंबाई पर क्यों जाएं?
  • क्यों नहीं बस सटीक आवृत्ति प्रतिक्रिया आप चाहते हैं, एक IFFT ले, और वहाँ अपने एफआईआर कर्नेल (विधि 1 ऊपर) है?

यदि यह प्रासंगिक है तो मेरी रुचि का क्षेत्र डिजिटल ऑडियो / डिजिटल संगीत है।
bryhoyt

जवाबों:


13

एक कारण जो आप लोगों को प्रत्यक्ष दृष्टिकोण लेने के बजाय (जैसे 1 और 2 दोनों) एफआईआर फिल्टर डिजाइन करते हुए देखते हैं, वह यह है कि प्रत्यक्ष दृष्टिकोण आमतौर पर आवृत्ति डोमेन में आवधिकता को ध्यान में रखने में विफल रहता है, और तथ्य यह है कि एफएफटी का उपयोग करके सजा को लागू किया गया है। परिपत्र सजा

इसका क्या मतलब है?

मान लें कि आपके पास एक संकेत और एक फिल्टर आवेग प्रतिक्रिया (दृढ़ संकल्प कर्नेल; आप सही हैं वे समान हैं) h = [ 1 , 1 ]एक्स=[1,2,3,4]=[1,1]

y=एक्स*[1,3,5,7,4][3,5,7,5]

यदि एफएफटी की लंबाई रैखिक कनवल्शन के परिणाम की लंबाई से अधिक या उसके बराबर है, तो दोनों समान हैं। अन्यथा, दोनों समान नहीं हैं (जब तक कि डेटा किसी तरह इसे बनाने की साजिश नहीं करता है, उदाहरण के लिए यदि एक संकेत शून्य था)।


ज़रूर, लेकिन कोई ऐसा क्यों नहीं कर सकता, बस यह सुनिश्चित करना चाहिए कि एफएफटी / आईएफएफटी आकार अंतिम कन्वेंशन लंबाई के साथ कम्यूटेट हैं? उदाहरण के लिए, दीक्षांत की लंबाई N + M - 1 है, इसलिए सुनिश्चित करें कि आप लंबाई M-1 के साथ फूरियर डोमेन में एक आवृत्ति प्रतिक्रिया 'आकर्षित' करें। वह काम क्यों नहीं करेगा? दिलचस्प सामान btw। :)
TheGrapeBeyond

1
-1

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

10

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

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

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


6

पुन: 1): हाँ, आप आवृत्ति प्रतिक्रिया (दोनों परिमाण और चरण में) को "ड्राइंग" करके एक एफआईआर फ़िल्टर डिज़ाइन कर सकते हैं। हालांकि, यह बहुत ही अक्षम है: आवेग प्रतिक्रिया की लंबाई (और फ़िल्टर क्रम) बस पूर्व है -अपने एफएफटी लंबाई के आधार पर। यदि आपने एक 128 पॉइंट एफएफटी चुना है तो आपको आवेग प्रतिक्रिया के लिए 128 नल मिलते हैं और यदि आपने 4096 बिंदु एफएफटी चुना है तो आपको 4096 फिल्टर नल मिलते हैं।

पुन: 2): हाँ, आप आवृत्ति डोमेन में गुणा करके फ़िल्टर कर सकते हैं और यह वास्तव में बड़े आवेग प्रतिक्रियाओं के लिए कुशलतापूर्वक करने का एकमात्र तरीका है। हालांकि, जैसा कि पीटर के ने बताया है, आवृत्ति डोमेन में गुणा परिपत्र कनवल्शन से मेल खाती है। रैखिक कनवल्शन को लागू करने का सबसे आम तरीका "ओवरलैप ऐड" या "ओवरलैप सेव" एल्गोरिदम (आसानी से गुगली) हैं।


3

मुझे यकीन नहीं है कि मैं यहाँ पर कही गई हर बात को समझता हूँ, लेकिन मैं फूरियर ट्रांसफ़र विधि के लिए मामला बनाना चाहूँगा।

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

दूसरे, यह वास्तव में मामला है कि उदाहरण के लिए पार्क्स मैकक्लेलन विधि, कुछ विशिष्ट आवश्यकताओं के लिए फूरियर विधि की तुलना में बेहतर फिल्टर उत्पन्न कर सकती है, लेकिन इसकी टैप गणना को नियंत्रित करना आसान नहीं है और इसके लिए परिमाण, चरण, और चरण प्रतिक्रिया को भी परिभाषित करें। तरीका।

उदाहरण के लिए, मान लें कि आप 10 पोल IIR बेसेल के समान विशेषताओं वाला एक एफआईआर फिल्टर डिजाइन करना चाहते हैं, लेकिन आप ट्रांज़िशन बैंड को थोड़ा बढ़ाना चाहते हैं (स्टेप रेस्पॉन्स ओवरशूट की कीमत पर)। फिर फूरियर विधि लगभग 22 नल के साथ हल करने के लिए यह एक आसान समस्या बनाती है, यह निर्भर करता है कि संक्रमण बैंड कितना संकीर्ण है।

यदि आप देखना चाहते हैं कि फूरियर विधि क्या सक्षम है, तो इस एफआईआर कार्यक्रम की कोशिश करें http://www.iowahills.com/5FIRFiltersPage.html (यह मुफ़्त है)। यह, उदाहरण के लिए, गॉस, बेसेल, बटरवर्थ और व्युत्क्रम Chebyshee फिल्टर के लिए IIR समकक्ष डिजाइन कर सकता है। सामान्य तौर पर, यह आपको फिल्टर की प्रतिक्रिया को लगभग कुछ भी समायोजित करने की अनुमति देता है, जो कि फूरियर विधि का मजबूत बिंदु है। नीचे की तरफ, फिल्टर कुछ विशिष्ट आवश्यकताओं के लिए शायद इष्टतम नहीं हैं।


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

1

AFAIK को "भोली छानने का तरीका" कहा जाता है। आप वर्णक्रमीय सामग्री को कुछ बिंदुओं पर आवृत्ति स्थान पर प्रभावित कर सकते हैं, लेकिन आप उन बिंदुओं के बीच आवृत्ति सामग्री के लिए कुछ भी उपयोगी नहीं करते हैं। यदि आप उचित एफआईआर फिल्टर डिजाइन करते हैं, तो आप वास्तव में उन प्रमुख बिंदुओं के बीच के बिंदुओं को भी ध्यान में रखते हैं और इस तरह का फिल्टर ज्यादा बेहतर होता है।

सादर, बुल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.