Signal Processing

SciPy के signal.butter का उपयोग करके बटरवर्थ फिल्टर डिज़ाइन करना

Spread the love

SciPy लाइब्रेरी वैज्ञानिक कम्प्यूटिंग के लिए एक शक्तिशाली संसाधन है, और इसका scipy.signal मॉड्यूल सिग्नल प्रोसेसिंग के लिए व्यापक उपकरण प्रदान करता है। फ़िल्टरिंग सिग्नल प्रोसेसिंग का एक मूलभूत पहलू है, और बटरवर्थ फ़िल्टर अक्सर उनके पासबैंड में अधिकतम समतल परिमाण प्रतिक्रिया के कारण नियोजित होते हैं। यह लेख scipy.signal.butter फ़ंक्शन में तल्लीन करता है, जो SciPy के भीतर इन फ़िल्टरों को डिज़ाइन करने के लिए एक प्रमुख उपकरण है।

विषयसूची

बटरवर्थ फ़िल्टर को समझना

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

scipy.signal.butter का उपयोग करना

scipy.signal.butter फ़ंक्शन SciPy में बटरवर्थ फ़िल्टर डिज़ाइन करने के लिए प्राथमिक उपकरण है। इसके प्रमुख पैरामीटर हैं:

  • N: फ़िल्टर क्रम। उच्च क्रम स्टीपर रोल-ऑफ देते हैं लेकिन जटिलता और संभावित अस्थिरता को बढ़ाते हैं।
  • Wn: कटऑफ़ आवृत्ति (या बैंडपास और बैंडस्टॉप फ़िल्टर के लिए आवृत्तियाँ), नाइक्विस्ट आवृत्ति (नमूना दर का आधा) के लिए सामान्यीकृत। 0.5 का मान नमूना दर का आधा दर्शाता है।
  • btype: फ़िल्टर प्रकार: ‘lowpass’, ‘highpass’, ‘bandpass’, या ‘bandstop’.
  • analog: True एक एनालॉग फ़िल्टर डिज़ाइन करता है; False (डिफ़ॉल्ट) एक डिजिटल फ़िल्टर डिज़ाइन करता है।
  • output: आउटपुट प्रारूप निर्दिष्ट करता है। ‘ba’ (संख्यात्मक और हर गुणांक) और ‘sos’ (द्वितीय-क्रम खंड) सामान्य विकल्प हैं। विशेष रूप से उच्च-क्रम फ़िल्टर के साथ, संख्यात्मक स्थिरता के लिए ‘sos’ को आम तौर पर प्राथमिकता दी जाती है।

उदाहरण: एक लोपास बटरवर्थ फ़िल्टर डिज़ाइन करना

आइए 100 Hz सैंपलिंग दर मानते हुए, 10 Hz कटऑफ़ आवृत्ति के साथ चौथे क्रम का लोपास बटरवर्थ फ़िल्टर डिज़ाइन करें:


import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

# सैंपलिंग दर
fs = 100  # Hz

# कटऑफ़ आवृत्ति (सामान्यीकृत)
cutoff = 10 / (fs / 2)  # नाइक्विस्ट आवृत्ति के लिए सामान्यीकृत करें

# फ़िल्टर क्रम
order = 4

# स्थिरता के लिए SOS का उपयोग करके फ़िल्टर डिज़ाइन करें
sos = signal.butter(order, cutoff, btype='lowpass', analog=False, output='sos')

# SOS प्रिंट करें
print("द्वितीय-क्रम खंड (sos):", sos)

उदाहरण: फ़िल्टर लागू करना और विज़ुअलाइज़ेशन

फ़िल्टर लागू करने और परिणामों को देखने के लिए:


# उदाहरण सिग्नल
t = np.linspace(0, 1, fs, endpoint=False)
sig = np.sin(2 * np.pi * 20 * t) + np.sin(2 * np.pi * 5 * t)

# फ़िल्टर लागू करें
filtered_sig = signal.sosfilt(sos, sig)

# मूल और फ़िल्टर किए गए सिग्नल को प्लॉट करें
plt.figure(figsize=(10, 6))
plt.plot(t, sig, label='मूल सिग्नल')
plt.plot(t, filtered_sig, label='फ़िल्टर किया गया सिग्नल')
plt.xlabel('समय (s)')
plt.ylabel('आयाम')
plt.title('मूल बनाम फ़िल्टर किया गया सिग्नल')
plt.legend()
plt.grid(True)
plt.show()

निष्कर्ष

scipy.signal.butter बटरवर्थ फ़िल्टर डिज़ाइन करने के लिए एक शक्तिशाली उपकरण है। इसके पैरामीटर को समझना और संख्यात्मक स्थिरता के लिए ‘sos’ आउटपुट का उपयोग करना आपके सिग्नल प्रोसेसिंग वर्कफ़्लो के भीतर प्रभावी फ़िल्टर डिज़ाइन के लिए महत्वपूर्ण है। नाइक्विस्ट आवृत्ति को कटऑफ़ आवृत्तियों को सामान्यीकृत करना याद रखें। मैटप्लॉटलिब का उपयोग करके फ़िल्टर प्रतिक्रियाओं को देखने से समझ बढ़ती है और प्रदर्शन विश्लेषण की अनुमति मिलती है।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *