FFT 길이와 주파수 분해능의 관계는 무엇입니까?


67

적절한 샘플링 방법 (Nyquist, 필터링 등)을 사용하여 신호를 샘플링 한 경우 FFT의 길이를 얻을 수있는 결과 주파수 분해능과 어떻게 관련시킬 수 있습니까?

사인파가 2,000Hz와 1,999Hz 인 것처럼 두 파동의 차이를 정확하게 나타내는 데 필요한 FFT의 길이를 어떻게 결정합니까?

답변:


81

주파수 분해능은 FFT 길이와 입력 신호의 샘플링 속도 사이의 관계에 따라 다릅니다.

FFT를 위해 8192 개의 샘플을 수집하면 다음과 같은 결과를 얻게됩니다.

8192 samples2=4096 FFT bins

샘플링 속도가 10 kHz이면 Nyquist-Shannon 샘플링 정리에 따르면 신호에 최대 5 kHz의 주파수 내용이 포함될 수 있습니다. 주파수 빈 분해능은 다음과 같습니다.

5 kHz4096 FFT bins1.22 Hzbin

빈 해상도는 단지 . 여기서 는 입력 신호의 샘플링 속도이고 N은 FFT 포인트의 수입니다. 사용됨 (샘플 길이).fsampNfsamp

위에서 FFT 빈을 더 작게 만들려면 FFT를 더 길게 (즉 , FFT를 실행하기 전에 동일한 속도로 더 많은 샘플 채취) 샘플링 속도를 줄일 수 있습니다.

캐치 :

시간 해상도와 주파수 해상도 사이에는 항상 상충 관계가 있습니다.

위의 예에서 FFT를 실행하기 전에 8192 개의 샘플을 수집해야합니다. 10kHz에서 샘플링 할 때 0.82 초가 걸립니다.

더 긴 FFT를 실행하여 더 작은 FFT 빈을 얻으려고하면 필요한 샘플을 수집하는 데 시간이 더 오래 걸립니다.

괜찮을 수도 있고 아닐 수도 있습니다. 중요한 점은 고정 샘플링 속도에서 주파수 분해능을 높이면 시간 분해능이 감소한다는 것입니다. 즉, 주파수 영역에서 측정이 정확할수록 시간 영역에서 정확도가 떨어집니다. FFT 길이 내의 모든 시간 정보를 효과적으로 잃게됩니다.

이 예에서, 1999 Hz 톤이 8192 샘플 FFT의 상반기에 시작되고 중지되고 2002 Hz 톤이 창의 하반기에 재생되면 둘 다 표시되지만 둘 다 동일하게 발생한 것으로 보입니다 시각.

처리 시간도 고려해야합니다. 8192 포인트 FFT는 적절한 처리 능력을 필요로합니다. 이 필요성을 줄이는 방법은 샘플링 속도를 줄이는 것인데, 이는 주파수 분해능을 높이는 두 번째 방법입니다.

귀하의 예에서 샘플링 속도를 4096Hz와 같이 떨어 뜨린 경우 1Hz 빈 * 4096Hz를 달성하기 위해 4096 포인트 FFT 만 필요하면 1Hz 빈을 달성하기 위해 4096 포인트 FFT 만 필요하며 여전히 2khz 신호. 이는 FFT 빈 크기를 줄이지 만 신호 대역폭도 줄입니다.

궁극적으로 FFT를 사용하면 항상 주파수 분해능과 시간 분해능간에 균형이 유지됩니다. 모든 목표에 도달하려면 약간의 균형 조정 작업을 수행해야합니다.


헤더 태그와 일부 형식을 사용하면이 게시물이 좋을 수도 있습니다. 내가 메모하고 싶었던 모든 것을 만졌지만 글의 형식이 매겨진 방식은 길이가 엄청 나지 않아서 글을 읽는 사람이 적습니다. 그 스위트와 당신의 +1 수는 많이 증가 할 것입니다. 당신이 이미 벌었 듯이 물론 나에게서 아닙니다.
Kortuk

@kurtuk 나는 이것을 서둘러 뱉어 냈으며, 여가 시간이있을 때 서식을 정리 할 것입니다 (또는 원하는 경우 자유롭게 편집하십시오).
Mark

1
@kortuk, 이름은 'o'로 시작합니다. 나는 당신이 이미 가지고 있다고 생각했는데, 당신이 아직 몰랐다면 당신을 위해, 그러나 전체적으로 지역 사회를 위해 더 많이 생각합니다.
Kortuk

1
FFT를 계산할 필요는 없습니다. 몇 개의 구간 만 알고 싶다면 많은 구간을 공유하여 모든 구간을 한 번에 계산하는 최적화 된 FFT를 실행하는 것보다 해당 구간의 DFT를 계산하는 것이 더 저렴합니다.
Chris Stratton

유사한 주파수 / 시간 도메인 트레이드 오프가 아날로그 및 IIR 필터에 적용된다는 점도 주목할 가치가 있습니다.
Caleb Reister 5

10

기본 FFT 해상도는 . 여기서 는 샘플링 주파수입니다.fsNfs

매우 근접한 두 신호를 구별하는 기능은 상대 진폭과 사용 된 윈도 잉 기능에 따라 크게 달라집니다.

Baudline 신호 분석기를 사용하는 것이이 문제에 대한 직관을 개발하는 좋은 방법 이라는 것을 알 수 있습니다. 아니면 FFT를 실행하고 Matlab 또는 Python / Numpy에서 한 번에 하나의 스펙트럼을 플로팅하는 것은 실제로 동일하지 않습니다.

편집 : 입력을 0으로 채우고 더 큰 FFT를 취하는 트릭도 있습니다. 분화 능력을 향상 시키지는 않지만 스펙트럼을 더 읽기 쉽게 만들 수 있습니다. 기본적으로 벡터 그래픽의 앤티 앨리어싱과 유사한 트릭입니다.


라텍스 코드가 올바르게 표시되지 않는 유일한 사람입니까?
stevenvh

@stevenvh 나에게도 효과가 없습니다.
테라스

나를 위해 작동합니다. 라텍스는 2 곳뿐입니다.
Kortuk

2
고정됨 (이미 일정 시간). Firefox의 NoScript 애드온이 mathjax.org를 차단했습니다.
stevenvh

3

FFT는 Sample [k] * SineRefWave [j] [k] 및 Sample [j] * CosRefWave [j의 여러 개별 쌍 쌍 (k = 0..sample_length-1)을 계산하는 대신 사용할 수 있습니다. ] [k], 모든 j에서 샘플 길이의 절반까지. 모든 주파수에서 진폭 판독 값이 필요한 경우, FFT는 O (NlgN) 시간에 모두이를 계산하는 반면, 개별적으로 계산하려면 O (N ^ 2) 시간이 걸립니다. 반면에, 몇 개의 주파수에서 진폭 판독 값 만 필요로하는 경우, 특히 개별 스타일 계산을 효율적으로 계산할 수있는 프로세서 또는 DSP를 사용하는 경우에는 개별적으로 계산하는 것이 더 좋습니다.

예를 들어 20ms 샘플링 윈도우가있는 FFT는 단일 1975Hz 톤 또는 N <25에 대해 주파수 (1975-N) Hz와 (1975 + N) Hz의 조합을 구분할 수 없지만, 근처에 다른 스펙트럼 성분이없는 경우 샘플링 창보다 더 정밀하게 분리 된 주파수를 측정하는 데 사용할 수 있습니다. 1974Hz와 1976Hz 톤의 조합과 마찬가지로 1950Hz와 2000Hz 빈에서 1975Hz의 단독 주파수가 동일하게 선택됩니다. 그러나 분리 된 1974Hz 톤은 2000Hz 빈보다 1950Hz 빈에서 더 강하게 들리고 1976Hz 톤은 2000Hz 빈에서 더 강하게 들립니다.


1

주파수 분해능은 FFT의 길이에 의존하지 않지만 총 샘플링 시간 T의 길이, 즉 1 / T이며 이는 가장 낮은 주파수 성분입니다.

제로 패딩은 주파수 해상도를 증가시키지 않습니다. 제로 패딩 신호의 DFT는 단지 원래 신호의 DTFT의 더 나은 근사치 일 뿐이다.


0

가능한 입력 주파수 범위를 알고 있고 범위가 좁 으면 샘플 수와 FFT 계산 시간을 줄이기 위해 언더 샘플링을 적용 할 수 있습니다. 256 개의 샘플과 256Hz의 샘플 주파수로 원하는 1Hz 해상도와 128Hz의 앨리어스없는 대역폭을 얻을 수 있습니다.


-3

이 사진을보세요. 알았습니다. fs와 fft 해상도의 관계

여기에 이미지 설명을 입력하십시오


5
이 그림에서 무슨 일이 일어나고 있는지 명확하지 않습니다. (그림이 영어로되어 있지 않은 것은 도움이되지 않습니다.) 다른 답변에서 언급하지 않은 점이 무엇입니까?
Greg d' Eon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.