MATLAB: filter im Frequenzbereich mit FFT/IFFT mit einem IIR-filter

Ich versuche zu filtern, einen (echten) signal in Matlab unter Verwendung der FFT und die inverse FFT (IFFT). Ich habe ein IIR-filter (Koeffizienten 'b' und 'a'). Ich erwarte (ungefähr?) das gleiche Ergebnis, als hätte ich es einfach getan:

filteredSignal = filter(b,a,signal);

Also das ist, was ich getan habe:

NFFT = length(signal);
FFTsignal = fft(signal, NFFT);
FilterFreqResponse = freqz(b,a,NFFT);
FFTfilteredSignal = FFTsignal .* FilterFreqResponse;
filteredSignal = ifft(FFTfilteredSignal, NFFT);

Und das problem hier ist, dass das resultierende signal (filteredSignal) ist Komplex. Und ich hätte gerne ein richtiges signal (wie mein input-signal). Die filter Funktion gibt auch ein richtiges signal. So... was mache ich falsch? Ist es unmöglich zu verwenden, FFT-basierte Filterung mit einem IIR-filter? Ich meine: der Frequenzgang meiner filter ist nicht symmetrisch mit Bezug auf den Ursprung, also das Spektrum meiner gefilterte signal wird nicht symmetrisch sein, weder... also das gefilterte signal im Zeitbereich kann nicht real sein...?

PS: gibt es ein "symmetrisches" - option in der ifft-Funktion:

filteredSignal = ifft(FFTfilteredSignal, NFFT, 'symmetric');

Wenn ich das mache, die filteredSignal ist jetzt real... aber ist deutlich unterschiedlich (in amplitude und phase) von der, die ich bekommen über den "filter" - Funktion direkt. Und dieses "symmetrischen" option anscheinend verwirft den imaginären Teil oder etwas ähnliches, so dass es wahrscheinlich nicht eine gute Idee, es zu benutzen, denke ich....

Vielen Dank im Voraus! (und sorry für mein Englisch)

InformationsquelleAutor user3015199 | 2013-11-20
Schreibe einen Kommentar