Octave द्वारा कम पास फ़िल्टर बनाएँ

हालांकि मेरे पास ऑक्टेव में कोडित कम पास फ़िल्टर का एक उदाहरण था और मुझे यकीन है कि यह काम करता है, मैं समझ नहीं पा रहा हूं। यह काम कैसे खुराक? और मैं इस फ़िल्टर की कट ऑफ आवृत्ति कैसे जान सकता हूं?

Original_data 1Hz के साथ प्राप्त जल गुणवत्ता डेटा का एक स्तंभ है।

l = rows(original_data);
a = fft(original_data);
for i = (1:l);
 if i >9
  a(i) = 0;
 endif
endfor
b = fft(original_data);
for i = (1:l)
 if i > 1
  b(i) = 0;
 endif
endfor
c = real(ifft(a));
c(1);
d = real(ifft(a))*2-c(1);

यदि आपके पास कोई विचार है, तो कृपया मेरी मदद करें।

0
जोड़ा संपादित
विचारों: 1
यह फ़िल्टरिंग करने का एक बहुत बुरा तरीका है - यह फ्रीक्वेंसी डोमेन में एक ईंट की दीवार है जिसका अर्थ है कि समय डोमेन में गंभीर बजाने वाले कलाकृतियों का होगा। इससे बचने के लिए आवृत्ति डोमेन में एक विंडो फ़ंक्शन का उपयोग करें।
जोड़ा लेखक Paul R, स्रोत
कट ऑफ आवृत्ति एफएफटी के आकार पर निर्भर करती है, जो l प्रतीत होता है, इसलिए यह लगभग Fs * 10/l होगा, और आप कहते हैं कि एफएस = 1 हर्ट्ज </कोड>, तो यह लगभग 10/l Hz होगा।
जोड़ा लेखक Paul R, स्रोत
धन्यवाद, पॉल। क्या आप जानते हैं कि इस फ़िल्टर की कट ऑफ आवृत्ति को कैसे जानना है?
जोड़ा लेखक user3021107, स्रोत

2 उत्तर

मैं टिप्पणी से सहमत हूं, आपको बहुत कम फ़ंक्शन डिज़ाइन करने की अनुमति देने के लिए बहुत सारे फ़ंक्शन हैं (देखें http://octave.sourceforge.net/signal/overview.html , विशेष रूप से आईआईआर और एफआईआर फिल्टर डिजाइन खंड)। एक बार जब आप अपना फ़िल्टर डिज़ाइन कर लेंगे तो आप इसे फ़िल्टर या filtfilt फ़ंक्शन का उपयोग करके लागू कर सकते हैं।

उदाहरण के तौर पर, इसके बारे में जाने का एक आसान तरीका यह होगा:

[b,a] = butter(n, Wc) % low pass Butterworth filter with cutoff pi*Wc radians - choose the order of the filter n and cut-off frequency Wc to suit
filtered_data = filter(b,a,original_data);
2
जोड़ा

सबसे पहले यह जानना महत्वपूर्ण है कि आवृत्ति डोमेन में काम सिग्नल फ़िल्टर करने का सबसे अच्छा तरीका नहीं है, समय डोमेन विधियां अच्छी तरह से काम कर सकती हैं!

क्या आप कट ऑफ आवृत्ति जानना चाहते हैं? आपको अपने एफएफटी के संवाददाता बिन की आवृत्ति की गणना करने के लिए नमूना दर और अपने एफएफटी की लंबाई की आवश्यकता है।

नमूना दर = एफएस, सबसे पहले आपको Nyquist की गणना करने की आवश्यकता है।

Nyquist = FS/2;

अब आवृत्ति रिज़ॉल्यूशन पाएं, इस मामले में आपका एफएफटी आकार आपके मूल_डेटा जैसा ही है।

Resolution=Nyquist/(length(original_data)/2);

ठीक है लगभग, आप अपने एफएफटी के पहले आठ (8) डिब्बे में मान 0 रख रहे हैं, तो अब आपको संवाददाता बिन की आवृत्ति की आवश्यकता है!

round(1 * Resolution)
round(2 * Resolution)
round(3 * Resolution)
.
.
round(8 * Resolution)

परिणाम कट ऑफ आवृत्ति हैं, इसका मतलब है कि आप पहले और आठवीं बिन के बीच आवृत्तियों काट लेंगे

0
जोड़ा