2012-06-05 6 views
4

신호가 fft(signal, nfft) 일 때 nfft가 결과를 어떻게 변경합니까? 그 이유는 무엇입니까? nfft에 고정 값 (예 : 2^18)을 주거나 2^nextpow2(2*length(signal)-1)으로 이동해야합니까?MATLAB에서 점 수를 변경하면

나는 자기 상관의 FFT를 취하여 두 신호의 파워 스펙트럼 밀도 (PSD)를 계산하고 있으며, 결과를 비교하고 싶다. 신호의 길이가 다르므로 nfft를 수정하지 않으면 걱정이됩니다. 비교가 어려울 것입니다!

답변

3

2의 거듭 제곱 (power-of-two)을 사용하는 고유 한 이유는 없습니다 (어떤 경우에는 처리를보다 효율적으로 만들 수 있습니다).

그러나 두 개의 서로 다른 신호의 FFT를 "비례 (equensurate)"로 만들려면 FFT를 사용하기 전에 하나 또는 다른 신호를 동일한 길이로 제로 패드해야합니다.


는 그러나, 나는 말할 의무가 기분이 :이 요청해야하는 경우, 당신은 당신이 유용 아무것도 할 수있을 것있는 DSP의 학습 곡선의 한 점에서 아마 아니에요 결과. DSP 이론에 대한 적절한 책을 얻어야합니다. this.

3

대부분의 최신 FFT 구현 (FFTW를 기반으로하는 MATLAB 포함)에서는 이제 신호의 시계열을 2의 거듭 제곱에 맞도록 패딩해야합니다. 그러나 거의 모든 구현은 FFT의 데이터 벡터가 2보다 큰 경우 더 좋고 때로는 훨씬 더 우수한 성능을 제공합니다. MATLAB의 경우, 2의 거듭 제곱이나 낮은 소수 요소가 많은 길이로 패딩하면 최상의 성능을 얻을 수 있습니다 (N = 1000 = 2^3 * 5^3은 우수 할 것이고 N = 997은 끔찍한 선택 일 수 있습니다) .

제로 패딩은 PSD의 주파수 해상도를 높이 지 않지만 주파수 도메인의 빈 크기를 줄입니다. 따라서 길이 N의 신호 벡터에 NZeros를 추가하면 FFT는 길이 (N + NZeros)/2 + 1의 벡터를 출력합니다. 즉, 각 주파수 빈의 폭은 이제

빈폭 (Hz) = F_s/(N + NZeros)

여기서 F_s는 신호 샘플 주파수이다.

주파수 영역에서 두 개의 밀집한 봉우리를 분리하거나 식별해야하는 경우 샘플 시간을 늘려야합니다. 제로 패딩이 당신에게 그 무엇도 사주지 않는다는 것을 빨리 알게 될 것입니다. 직감적으로 그것이 우리가 기대하는 것입니다. 우리 입력에 더 많은 정보 (더 긴 시계열)를 추가하지 않고 우리의 힘 스펙트럼에서 더 많은 정보를 기대할 수 있을까요?

보다도,

관련 문제