पायथन के साथ शुरुआती लोगों के लिए कम पास फिल्टर और एफएफटी


23

मैं सिग्नल प्रोसेसिंग और विशेष रूप से एफएफटी के लिए नया हूं, इसलिए मुझे यकीन नहीं है कि अगर मैं यहां सही काम कर रहा हूं और मैं परिणाम से थोड़ा भ्रमित हूं।

मेरे पास एक असतत वास्तविक कार्य (माप डेटा) है और उस पर एक कम पास फ़िल्टर स्थापित करना चाहता हूं। पसंद का उपकरण खस्ता पैकेज के साथ पायथन है। मैं इस प्रक्रिया का पालन करता हूं:

  • मेरे फंक्शन की गणना
  • उच्च आवृत्तियों को काट दें
  • उलटा प्रदर्शन करें

यहाँ वह कोड है जो मैं उपयोग कर रहा हूँ:

import numpy as np
sampling_length = 15.0*60.0 # measured every 15 minutes
Fs = 1.0/sampling_length
ls = range(len(data)) # data contains the function
freq = np.fft.fftfreq(len(data), d = sampling_length)
fft = np.fft.fft(data)
x = freq[:len(data)/2] 
for i in range(len(x)):
if x[i] > 0.005: # cut off all frequencies higher than 0.005
    fft[i] = 0.0
    fft[len(data)/2 + i] = 0.0
inverse = np.fft.ifft(fft)

क्या यह सही प्रक्रिया है? परिणाम inverseमें जटिल मूल्य शामिल हैं, जो मुझे भ्रमित करता है।


1
जब मैं एफएफटी सीख रहा था, तो मुझे यह ब्लॉग पोस्ट बहुत मददगार लगी। glowingpython.blogspot.com/2011/08/…
डेविड पूले

जवाबों:


23

तथ्य यह है कि परिणाम जटिल है उम्मीद की जानी चाहिए। मैं कुछ बातें बताना चाहता हूं:

N

X[k]=X[Nk],k=1,2,,N21(Neven)

X[k]=X[Nk],k=1,2,,N2(Nodd)
  • NX[0]X[N2]NX[0]

मैं देखता हूं कि आपने अपने कोड में ऐसा कुछ करने का प्रयास किया है, लेकिन यह बिल्कुल सही नहीं है। यदि आप उपरोक्त शर्त को उस संकेत पर लागू करते हैं जो आप उल्टे FFT के पास करते हैं, तो आपको एक वास्तविक सिग्नल आउट करना चाहिए।

sinc(x)sinc

sinc

Sinc फ़ंक्शन का प्लॉट

sincsinc

समय और फ़्रीक्वेंसी डोमेन, दोनों में लोपास फ़िल्टर लागू करने के अधिक व्यावहारिक साधन हैं। परिमित आवेग प्रतिक्रिया और अनंत आवेग प्रतिक्रिया फिल्टर सीधे उनके अंतर समीकरण प्रतिनिधित्व का उपयोग करके लागू किया जा सकता है । या, यदि आपके फ़िल्टर में पर्याप्त रूप से लंबी आवेग प्रतिक्रिया है, तो आप अक्सर ओवरलैप की तरह, एफएफटी के आधार पर तेजी से दृढ़ संकल्प तकनीकों का उपयोग करके प्रदर्शन लाभ प्राप्त कर सकते हैं (आवृत्ति को डोमेन में आवृत्ति के बजाय फ़िल्टर को लागू करके)। सहेजें और ओवरलैप-जोड़ें विधियाँ।


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

1
हां, मेरा परिणाम सममित नहीं था। मैंने कोड को ठीक किया, अब सब कुछ ठीक है। धन्यवाद!
तक B

3
@endolith - एक Sinc प्रक्षेप की certains प्रकार के लिए एक आदर्श क्षेपक है, लेकिन इस तरह के पास बैंड प्रतिक्रिया, रोक बैंड अस्वीकृति, और आदि की समतलता के रूप में आम फिल्टर आवश्यकताओं, के सबसे प्रकार के लिए एक फिल्टर के रूप आदर्श से दूर किया जा सकता है
hotpaw2

+1 के अच्छे स्पष्टीकरण के लिए "क्यों लोग फिल्टर को लागू नहीं करते हैं जैसा कि पीओ करता है"
सिब्ब्स जुआ

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