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 이제 진짜 ...하지만 하나 (진폭과 위상에) 분명히 다른
filteredSignal = ifft(FFTfilteredSignal, NFFT, 'symmetric');
"필터"기능을 직접 사용합니다. 그리고이 "대칭"옵션은 분명히 허수 부나 그와 비슷한 것을 버려서 아마 그것을 사용하는 것은 좋지 않을 것입니다 ...
미리 감사드립니다. (내 영어 죄송합니다)
감사!먼저 James의 솔루션을 시도한 다음 귀하의 의견을 보았습니다. 둘 다 같은 결과를 얻었습니다 (다행스럽게도!). 지금 나는 그것을 얻는다 :) – user3015199