ट्यूबल बटरवर्थ फिल्टर के लिए कोई मानक कार्यान्वयन फॉर्म हैं?


17

बटरवर्थ फ़िल्टर को लागू करने के मानक तरीकों में से एक दूसरे-क्रम वर्गों के एक झरना के साथ है, प्रत्येक जटिल-संयुग्मित डंडे की एक जोड़ी के अनुरूप है। चौथे क्रम के फिल्टर के लिए, उदाहरण के लिए, दो सेकंड-ऑर्डर अनुभाग होंगे। अगर हम विचार करें कि कट-ऑफ़ के लिए जेड-प्लेन में लोअर फ़िल्टर फ़िल्टर के लिए पोल स्थान कैसे बदल जाते हैं क्योंकि कटऑफ 0hz के पास Nyquist के लिए डिज़ाइन किया गया है, तो पोल के प्रत्येक जोड़े द्वारा "बह निकला" यूनिट सर्कल के अंदर आर्क्स की एक जोड़ी से मेल खाती है। , जैसा कि निम्नांकित चित्र द्वारा दिखाया गया है [चौथे क्रम के फिल्टर के लिए]:

चौथे क्रम के बटरवर्थ लोवर फिल्टर के लिए जेड-प्लेन पोल पोजिशन

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

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

क्या एक ट्यून करने योग्य [डिजिटल] दिए गए आदेश के बटरवर्थ फ़िल्टर को लागू करने का कुछ मानक तरीका है कि 1) में इष्टतम गुण (जैसे दक्षता, मजबूती), और 2) में पूरी रेंज शामिल है?

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

मुझे यह पता चला: चर कटऑफ आवृत्ति के साथ एक बहुउद्देश्यीय बटरवर्थ फ़िल्टर , लेकिन पहले Googling में इस बारे में अधिक जानकारी नहीं लगती है कि इसमें क्या है।

अपडेट (पुनः: उत्तर)

बस थोड़ा और स्पष्ट होने के लिए:

  • मैं एक "मेटा-डिज़ाइन" के लिए एक पैरामीटर ([0,1] से कहता हूं) की तलाश कर रहा हूं, जो समय-बदलती प्रणाली में उपयोग के लिए डीसी से Nyquist (जबकि लाभ को सामान्य बनाए रखते हुए) को स्वचालित रूप से समायोजित करेगा। बटरवर्थ बाधाओं के अलावा इस दो-पोल गुंजयमान यंत्र की तरह कुछ । विचार यह है कि रनटाइम पर सामान्य ऑफ़लाइन डिज़ाइन प्रक्रिया से गुजरने की तुलना में पैरामीटर की गणना करना अधिक कुशल होगा।
  • मैं जरूरी नहीं कि एक "मेटा-फ़िल्टर" कैसे डिजाइन करना चाहता हूं (यानी संख्याओं के बजाय चर के साथ गणित करें), मैं सोच रहा हूं कि क्या मानक [गैर-स्पष्ट] कार्यान्वयन रूपों के लिए विकल्प हैं - क्योंकि, कहते हैं, जो सीधा-साधा दृष्टिकोण है, वह स्थिर मामले से मेल खाता है, समय-समय पर अलग-अलग मामलों में संख्यात्मक मुद्दों को समाप्त करता है।
  • हो सकता है कि कोई समस्या न हो, और सीधी बात यह है कि व्यवहार में इसका उपयोग किया जाता है। वह महान होगा। मेरी चिंता यह है कि मैंने इस विषय में स्पष्ट रूप से उल्लेख किए गए स्रोतों में से किसी में भी नहीं देखा है जो मैंने परामर्श दिया है, लेकिन शायद मैं अभी कुछ स्पष्ट याद कर रहा हूं, इसलिए मैं पूछ रहा हूं।
  • यहां अधिक विवरण जोड़ने की प्रक्रिया में, मैं पैरामीट्रिक बाइकाड संरचनाओं के एक सामान्य उपचार में भाग गया , जो लगभग वही है जो मैं देख रहा हूं (और कुछ अच्छे संदर्भ हैं)।

अपडेट २

मैं जवाब की तलाश कर रहा हूं जैसे कि मैंने जेसन आर को अपनी दूसरी टिप्पणी में रखा था, इस प्रकार है:

"अरे हाँ, आप टैप-थ्रू स्टेट लेटिस के रूप में पैरामीशन III-2 बी का उपयोग करना चाहते हैं, क्योंकि यह बहु-संख्या की न्यूनतम संख्या का उपयोग करते हुए इस तरह के और इस तरह के किनारे के मामले को हल करता है।"

शायद ऐसा कुछ भी मौजूद नहीं है, लेकिन मेरा सवाल यह है कि क्या यह होता है, और यदि ऐसा है, तो यह क्या है, या मुझे यह कहां मिल सकता है?

जैकपोट

जेसन आर के जवाब में comp.dsp धागे में टिम वेस्कॉट द्वारा दिए गए "ऑब्जर्वर कैनोनिकल फॉर्म" के एक संदर्भ के आधार पर , मैंने यह मानने का फैसला किया कि मुझे नियंत्रण प्रणाली साहित्य में चारों ओर खुदाई शुरू करनी पड़ सकती है, इसलिए मैंने एक खोज करने की कोशिश की बटरवर्थ "स्टेट स्पेस" , और इसने निम्नलिखित को बहुत ही शांत कर दिया, डिजाइनिंग / इम्प्लीमेंटेशन का उपचार, न केवल पैरामीट्रिक बटरवर्थ, बल्कि चेबीशेव और एलिप्टिक फिल्टर:

सोफोकल्स जे। ऑरफैनिडिस, "हाई-ऑर्डर डिजिटल पैरामीट्रिक इक्वालाइज़र डिज़ाइन," जे ऑडियो इंजी। सोक्स।, वॉल्यूम। 53, पीपी। 1026-1046, नवंबर 2005।

इसमें खुदाई करने में थोड़ा समय लगने वाला है, लेकिन मैंने अब तक जो भी पढ़ा है, उसके आधार पर अगर मुझे वह नहीं मिल रहा है तो मुझे बहुत आश्चर्य होगा। मैं इस एक को comp.dsp संदर्भ के लिए जेसन आर को दे रहा हूं जिसने मुझे ऑर्फ़नीडिस पेपर पर ले जाया। उनका जवाब बटरवर्थ फिल्टर को डिजाइन करने का एक अच्छा व्यावहारिक अवलोकन भी है।

जवाबों:


10

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

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

  2. बिलिनियर ट्रांसफ़ॉर्मेशन का उपयोग करके , फ़िल्टर के आपके डिजिटल अहसास में एनालॉग प्रोटोटाइप के पोल स्थानों को उनके संबंधित स्थानों पर मैप करें।

  3. फिर से, डिजिटल फ़िल्टर को चरण 2 में पाए गए पोल स्थानों द्वारा परिभाषित किया गया है। पोल को जोड़ियों में समूह बनाकर फ़िल्टर को दूसरे क्रम के खंडों में तोड़ें ।

बस। जैसा कि मैंने कहा, यह प्रोग्रामेटिक रूप से एक बटरवर्थ फ़िल्टर का उपयोग करने के लिए सीधा है जो भी मापदंडों की आवश्यकता हो सकती है; कोई भी ऑपरेशन लागू करने के लिए बहुत जटिल नहीं है।

संपादित करें: मुझे वास्तव में यकीन नहीं है कि आप किस अंतिम परिणाम की तलाश कर रहे हैं। मुझे लगता है कि आप इसके बजाय समय-भिन्न गुणांक वाले IIR फ़िल्टर को लागू करने में सबसे अधिक रुचि रखते हैं, जरूरी नहीं कि यह बटरवर्थ फ़िल्टर के लिए विशिष्ट हो। मुझे लगता है कि आपका लक्ष्य फ़िल्टर कटऑफ आवृत्ति को बदलते समय कलाकृतियों को कम करना है; यह इस वर्ष के प्रारंभ में comp.dsp न्यूज़ग्रुप पर एक चर्चा में शामिल किया गया था । हालांकि मुझे यकीन नहीं है कि इस फ़िल्टर संरचना के लिए आपका उपयोग मामला या आवश्यकताएं क्या हैं, स्विचिंग को पूरा करने के कई तरीके हैं।

मुझे पता है कि आपने कहा था कि आप अपने फ़िल्टर को एक एकल पैरामीटर देना चाहेंगे जो कटऑफ आवृत्ति को परिभाषित करता है, लेकिन तथ्य यह है कि आपके ट्यूनेबल संरचना में आवश्यक गुणांक (या बटरवर्थ मामले में,) में कटऑफ आवृत्ति का अनुवाद करने का एक तरीका होना चाहिए पोल स्थानों)। ऊपर वर्णित प्रक्रिया मैं वांछित सामान्यीकृत नमूना दर के आधार पर पोल स्थानों को बनाने के लिए उपयुक्त है।

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


जेसन, मैं किसी दिए गए बटरवर्थ विनिर्देश को कैसे डिजाइन करना चाहता हूं, मैं "मेटा-डिजाइन" की तलाश में नहीं हूं। मैं थोड़ा और विस्तार के साथ प्रश्न को अपडेट करूंगा।
datageist

1
पुन: संपादित करें। अंतिम पैराग्राफ में आपके द्वारा बताई गई प्रक्रिया ठीक उसी तरह है जैसे मैं इसे कैसे समझूंगा - मैं अभी सोच रहा हूं कि क्या यह वास्तव में कहीं भी कवर किया गया है। दूसरे शब्दों में, "ओह, हाँ, आप पैराडाइजेशन III-2 बी का उपयोग करना चाहते हैं, ताकि थिसिस राज्य जाली रूप में, और-इसलिए थीसिस का उपयोग किया जा सके क्योंकि यह न्यूनतम संख्या का उपयोग करते हुए ऐसे-और किनारे के मामले को हल करता है। "
datageist

1
लघु नाइट-पिकी टिप्पणी: जेड प्लेन में BW फिल्टर वास्तव में शून्य है। कम पास फिल्टर के लिए वे सभी -1 पर हैं और उच्च पास फिल्टर के लिए वे +1 पर हैं।
हिलमार

रों±रोंरों0

2

हां, बटरवर्थ के मानक मानक रूप हैं, और लगभग हर दूसरे फ़िल्टर प्रतिक्रिया। वे सभी मेरे खुले स्रोत IIR फिल्टर लाइब्रेरी में पूरी तरह से लागू हैं। यहाँ कोड का एक टुकड़ा है जो मनमाने डिग्री के बटरवर्थ फ़िल्टर के लिए पोल / शून्य जोड़े का निर्माण करता है:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

जैसा कि आप देख सकते हैं, पोल की स्थिति की गणना एस-प्लेन को "जोड़े" समान खंडों में विभाजित करके की जाती है।

सभी सामान्य प्रकार के फिल्टर प्रतिक्रियाओं के लिए उपयुक्त कोड प्रदान किया गया है: चेबीशेव, एलिप्टिक, लीजेंड्रे, प्रत्येक के शेल्फ संस्करणों सहित।

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

स्क्रीनशॉट


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