एफएफटी डिब्बे को शून्य करके फ़िल्टर करना एक बुरा विचार क्यों है?


72

इस पर एक FFT प्रदर्शन करके, कुछ डिब्बे को शून्य करना और फिर एक IFFT प्रदर्शन करके सिग्नल को फ़िल्टर करना बहुत आसान है। उदाहरण के लिए:

t = linspace(0, 1, 256, endpoint=False)
x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t)
X = fft(x)
X[64:192] = 0
y = ifft(X)

उच्च आवृत्ति घटक पूरी तरह से इस "ईंटवॉल" एफएफटी फिल्टर द्वारा हटा दिया जाता है।

लेकिन मैंने सुना है कि यह उपयोग करने के लिए एक अच्छा तरीका नहीं है।

  • यह आम तौर पर एक बुरा विचार क्यों है?
  • क्या ऐसी परिस्थितियां हैं जिनमें यह एक अच्छा या अच्छा विकल्प है?

[ जैसा कि pichenettes द्वारा सुझाया गया है ]

जवाबों:


74

sin(ωt)/ωt

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

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

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


3
इस उत्तर में अच्छी चीजें हैं, लेकिन मैं गिब्स प्रभाव पर अधिक ध्यान देना पसंद करूंगा।
जिम क्ले

4
गिब्स प्रभाव का जवाब पाने का प्रयास यहां पहले से ही पूछा गया था: dsp.stackexchange.com/questions/1144/…
hotpaw2

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

यह फ़िल्टर डिज़ाइन के लिए विंडो विधि से कैसे संबंधित हो सकता है?
फ़िलिप पिंटो

किसी भी आयताकार खिड़की के साथ वॉन हैन विंडो (et.al.) के रूपांतरण की तुलना करें। सामान्य रूप से बेहतर फिल्टर प्रतिक्रिया, विशेष रूप से एफएफटी के बीच स्टॉप-बैंड में। सामान्य तौर पर, संक्रमणों के निकट शून्य-शून्यिंग बिलकुल शून्य नहीं है।
hotpaw2

3

इस सवाल ने भी मुझे लंबे समय तक भ्रमित किया। @ hotpaw2 की व्याख्या अच्छी है। आप matlab का उपयोग करते हुए सरल प्रयोग में रुचि ले सकते हैं।

https://poweidsplearningpath.blogspot.com/2019/04/dftidft.html


सूचना नवीनीकरण।

इस तथ्य को सत्यापित करने के लिए सरल है, हमें बस एक आदर्श (?) बैंड पास फिल्टर के आवेग प्रतिक्रिया के स्पेक्ट्रम का सावधानीपूर्वक निरीक्षण करने की आवश्यकता है जो एफएफटी डिब्बे को बस शून्य करता है। मुझे क्रिया विशेषण "सावधानीपूर्वक" जोड़ने की आवश्यकता क्यों है? यदि हम आवेग की प्रतिक्रिया का निरीक्षण करने के लिए FFT के समान आकार का उपयोग करते हैं, तो हमें धोखा दिया जाएगा जैसा कि चित्र 1 में दिखाया गया है । फिर भी, यदि हम फ़िल्टर के आउटपुट का अवलोकन करते समय डीएफटी के आदेश को जोड़ते हैं, अर्थात् आवेग प्रतिक्रिया को शून्य कर रहे हैं, तो हम तथाकथित गिब्स घटना, आवृत्ति डोमेन में तरंगों को प्राप्त कर सकते हैं, जैसा कि चित्र 2 में दिखाया गया है ।

वास्तव में परिणाम विंडोिंग प्रभाव से आता है। यदि आप समस्या को पूरी तरह से समझना चाहते हैं, तो कृपया DSP (1) के बाइबिल के अध्याय 7.6 और अध्याय 10.1-10.2 का संदर्भ लें। संक्षेप में, तीन प्रमुख बिंदु यहां दिए गए हैं।

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

इसलिए, अंजीर 2 में सघन स्पेक्ट्रम की मदद से , हम आदर्श (नकली) बैंड पास फिल्टर के मुखौटा के माध्यम से देख सकते हैं।

यहाँ छवि विवरण दर्ज करेंधोखे से फ्रीक। प्रतिक्रिया।

यहाँ छवि विवरण दर्ज करेंफ्रीक में गिब्स घटना। प्रतिक्रिया।

(1) एलन वी। ओपेनहाइम और रोनाल्ड डब्ल्यू। 2009. असतत-समय सिग्नल प्रोसेसिंग (तीसरा संस्करण)। अप्रेंटिस हॉल प्रेस, ऊपरी सैडल नदी, एनजे, यूएसए।

fps = 15;

LPF = 1;
HPF = 2;

n = -511:512;
n0 = 0;
imp = (n==n0);

NyquistF = 1/2*fps;

%% Ideal BPF
tmp_N = 512;
tmp_n = 0:1:tmp_N-1;
freq = ( n .* fps) ./ tmp_N;
F = fft(imp, tmp_N);  
F_bpf = IdealBandpassFilter(F, fps, LPF, HPF);
imp_rep =[real(ifft(F_bpf))'];

% Zero padding.
imp_rep2 =[zeros(1,2048) real(ifft(F_bpf))' zeros(1,2048)];

N = 2^nextpow2(length(imp_rep));
F = fft(imp_rep,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Mis leading Freq Response');


N = 2^nextpow2(length(imp_rep2));
F = fft(imp_rep2,N);
freq_step = fps/N;
freq = -fps/2:freq_step:fps/2-freq_step;
freq = freq(N/2+1:end)';

figure;
plot(freq,abs(F(1:N/2)));
xlabel('freq(Hz)');
ylabel('mag');
title('Zero Padding (DFT) with more points');

%% Function
function filered_signal = IdealBandpassFilter(input_signal, fs, w1, w2)

    N = length(input_signal);
    n = 0:1:N-1;
    freq = ( n .* fs) ./ N;

    filered_signal = zeros(N, 1);

    for i = 1:N
        if freq(i) > w1 & freq(i) < w2
            filered_signal(i) = input_signal(i);
        end

    end
end

क्या इसे टिप्पणी में बदला जा सकता है?
एंडोलिथ

क्षमा करें, मेरे पास पर्याप्त प्रतिष्ठा नहीं है। URL में स्पष्टीकरण मेरे स्वयं के द्वारा भी लिखा गया है। मैं सिर्फ एक परीक्षण कोड प्रदान करना चाहता हूं जो लहर के बुरे प्रभाव की कल्पना कर सकता है।
पो-वेई हुआंग

1

एफएफटी खराब समय का समाधान देता है अर्थात यह उस समय की जानकारी नहीं देता है कि विशेष आवृत्ति किस समय मौजूद है। यह दी गई सिग्नल अवधि के लिए मौजूदा आवृत्ति घटकों की जानकारी देता है।

एफएफटी में डिब्बे को शून्य करने से समय डोमेन में आईएफएफटी के बाद खराब रिज़ॉल्यूशन मिलता है।


हालाँकि, बहुत लंबे सिग्नल के लिए fft और फिर ifft लेने के लिए कम्प्यूटेशनल कठिनाइयाँ हैं। एक सिग्नल के ज़िटर / रिंगिंग फ़िल्टरिंग से बचने के लिए बैंड को रोकने के लिए पास बैंड से आसानी से पारगमन करना पड़ता है।
इत्ता गौतमी

"एफएफटी खराब समय समाधान देता है" एफएफटी कोई समय संकल्प नहीं देता है, यह एक वर्णक्रमीय डोमेन परिवर्तन है और इसलिए, जैसा कि बाद में कहा गया है, केवल सिग्नल के आवृत्ति घटकों के बारे में जानकारी देता है।
एडराडॉक्स

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