我試圖用FFT和逆FFT(IFFT)在Matlab中過濾(真實)信號。我有一個IIR濾波器(係數'b'和'a')。我期待(約?)相同的結果,如果我只是做到了這一點:MATLAB:使用帶有IIR濾波器的FFT/IFFT在頻域中進行濾波
filteredSignal = filter(b,a,signal);
所以這是我做過什麼:
NFFT = length(signal);
FFTsignal = fft(signal, NFFT);
FilterFreqResponse = freqz(b,a,NFFT);
FFTfilteredSignal = FFTsignal .* FilterFreqResponse;
filteredSignal = ifft(FFTfilteredSignal, NFFT);
而且這裏的問題是,所產生的信號( filteredSignal
)是複雜的。我想要一個真實的信號(作爲我的輸入信號)。 filter
函數也返回一個真實信號。所以......我做錯了什麼?用IIR濾波器進行基於FFT的濾波是不可能的?我的意思是:我的濾波器的頻率響應相對於原點不是對稱的,所以我的濾波信號的頻譜也不會是對稱的,所以時域中的濾波信號不能是真實的...?
PS:有在IFFT功能的「對稱」選項:
filteredSignal = ifft(FFTfilteredSignal, NFFT, 'symmetric');
如果我這樣做,是filteredSignal現在真正...但顯然是不同的(幅度和相位)從一個我直接使用「過濾器」功能。而這個「對稱」選項顯然丟棄虛構的部分,或類似的東西,所以它可能不是一個好主意,我想用它...
非常感謝提前! (和抱歉,我的英語水平)
謝謝!我首先嚐試了詹姆斯的解決方案,然後我看到了你的評論,並且都給出了相同的結果(幸運的是!)。現在我明白了:) – user3015199