FFT 빈을 제로화하여 필터링하는 것은 왜 나쁜 생각입니까?


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)

고주파 성분은이 "벽돌 벽"FFT 필터에 의해 완전히 제거됩니다.

그러나 이것이 좋은 방법이 아니라고 들었습니다.

  • 왜 일반적으로 나쁜 생각입니까?
  • 그것이 좋거나 좋은 선택 인 상황이 있습니까?

[ 피케 네트가 제안한대로 ]

답변:


74

sin(ωt)/ωt

이러한 리플은 FFT 조리개 폭에서 "통 사이"또는 정수가 아닌주기의 스펙트럼 내용에 대해 가장 클 것입니다. 따라서 원래 FFT 입력 데이터가 해당 윈도우에서 다소 비주기적인 데이터 (예 : 대부분 비동기 적으로 샘플링 된 "실제 세계"신호)의 윈도우 인 경우 해당 특정 아티팩트는 제로화 빈으로 생성됩니다.

그것을 보는 또 다른 방법은 각 FFT 결과 빈이 시간 영역에서 특정 주파수의 사인파를 나타내는 것입니다. 따라서 빈을 제로화하면 해당 사인파를 빼는 것과 동일한 결과를 얻거나 동일한 위상의 정확한 FFT 빈 중심 주파수의 사인파를 추가하는 것과 동일하게됩니다. 시간 영역에서 일부 내용의 주파수가 FFT 폭에서 정수 정수가 아닌 경우 정확히 정수주기 사인파의 역수를 추가하여 소거하지 않고 취소하려고하면 취소하는 것이 좋습니다. "비트"음 (다른 주파수의 AM 변조 사인파). 다시, 아마도 원하는 것이 아닙니다.

반대로, 원래의 시간 도메인 신호가 FFT 조리개 폭에서 정확히 정수인 정수의 순수한 변조되지 않은 정현파 몇 개이면, 제로잉 FFT 빈은 아티팩트없이 지정된 것을 제거합니다.


3
이 답변에는 좋은 점이 있지만 Gibbs 효과에 더 중점을 둡니다.
Jim Clay

4
깁스 효과에 대한 답변을 얻으려는 시도는 이미 여기에서 요청되었습니다 : dsp.stackexchange.com/questions/1144/…
hotpaw2

@ hotpaw2 이것은 좋은 설명입니다. 그러나 이것에 대한 참조가 필요하며 하나를 식별하는 데 어려움이 있습니다. 주파수 영역에서 작업하기보다는 시간 영역 필터링을 수행하는 이유입니다. (또한 시간 영역은 실시간 일 수 있습니다.) 그러나 아무도 이것을 언급하는 것으로 시작하지 않는 것 같습니다!

이것이 필터 디자인의 창 방법과 어떻게 관련 될 수 있습니까?
Filipe Pinto

Von Hann 윈도우 (et.al.)와 직사각형 윈도우의 변형을 비교하십시오. 일반적으로 특히 정지 대역의 FFT 빈 사이에서 훨씬 더 나은 필터 응답. 일반적으로 갑작스런 제로 빈은 전환 근처에서 제로가 아닌 빈보다 더 나쁩니다.
hotpaw2

3

이 질문은 오랫동안 저를 혼란스럽게했습니다. @ hotpaw2의 설명이 좋습니다. matlab을 사용한 간단한 실험에 관심이있을 수 있습니다.

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


업데이트 된 정보.

이 사실이 단순하다는 것을 확인하기 위해 FFT 빈을 0으로 만드는 이상적인 (?) 대역 통과 필터의 임펄스 응답 스펙트럼을주의 깊게 관찰하면됩니다. 부사를 "신중하게"추가해야하는 이유는 무엇입니까? 임펄스의 응답을 관찰하기 위해 동일한 크기의 FFT를 사용하면 그림 1 과 같이 속 입니다. 그럼에도 불구하고, 필터의 출력을 관찰 할 때, 즉 임펄스 응답을 0으로 채울 때 DFT 순서를 추가하면 그림 2 와 같이 소위 Gibbs 현상, 주파수 영역의 리플을 찾을 수 있습니다 .

실제로 결과는 윈도우 효과에서 비롯됩니다. 문제를 완전히 이해하려면 DSP (1) 성경의 7.6 장과 10.1-10.2 장을 참조하십시오. 요약하면 여기에 세 가지 핵심 사항이 있습니다.

  1. 창의 크기와 DFT (FFT)의 순서는 완전히 독립적입니다. 함께 섞지 마십시오.
  2. 창 속성 (유형 / 크기)이 DTFT의 모양을 지배합니다. (예 : 주 로브가 넓을수록 주파수 응답에서 과도 대역이 넓어집니다.)
  3. DFT는 주파수 영역에서 DTFT의 샘플링 일뿐입니다. 또한, DFT의 차수가 높을수록 DFT의 스펙트럼은 더 밀도가 높다.

따라서 그림 2 의 밀도가 높은 스펙트럼을 통해 이상적인 (가짜) 대역 통과 필터 마스크를 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오결정적으로 Freq. 응답.

여기에 이미지 설명을 입력하십시오Freq.의 깁스 현상 응답.

(1) Alan V. Oppenheim 및 Ronald W. Schafer. 2009. 이산 시간 신호 처리 (제 3 판). Prentice Hall Press, 미국 뉴저지 어퍼 새들 강.

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

이것을 주석으로 변환 할 수 있습니까?
endolith

평판이 충분하지 않아서 죄송합니다. URL의 설명은 나 자신도 작성했습니다. 리플의 나쁜 영향을 시각화 할 수있는 테스트 코드를 제공하려고합니다.
Po-wei Huang

1

FFT는 시간 분해능이 좋지 않습니다. 즉, 특정 주파수가 존재하는 시간에 정보를 제공하지 않습니다. 주어진 신호 지속 시간 동안 기존 주파수 성분에 대한 정보를 제공합니다.

FFT에서 빈을 제로화하면 시간 영역에서 IFFT 후 해상도가 떨어집니다.


그러나 매우 긴 신호가 fft를 취한 다음 ifft를 계산하는 데는 계산상의 어려움이 있습니다. 신호의 지터 / 링 링 필터링을 피하려면 통과 대역에서 정지 대역으로 부드럽게 전달해야합니다.
Itta Gouthami

"FFT는 시간 분해능이 좋지 않음"FFT는 시간 분해능을 제공하지 않으며 스펙트럼 도메인 변환이므로 신호의 주파수 성분에 대한 정보 만 제공합니다.
EdParadox

FFT가 제공하는 해상도는 창의 길이입니다. FFT 창 밖의 어떤 것도 FFT 창 안에있는 것으로 해석되지 않습니다.
hotpaw2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.