FFT 주파수 분해능 계산기 쉽게 이해하기 — 개념과 원리
고속 푸리에 변환(FFT)은 표본 N개로 된 한 구간을 N개의 주파수 칸(빈, bin)으로 나눕니다. 이 칸이 스펙트럼을 얼마나 촘촘하게 나누는지, 한 구간이 시간으로 얼마나 되는지는 샘플링 주파수와 FFT 크기만으로 정해집니다. 이 계산기는 빈 폭, 프레임 시간, 나이퀴스트 주파수까지의 빈 수를 구해 스펙트럼 분석기, 튜너, 진동 감시, 오디오 플러그인의 설정을 정할 때 도움을 줍니다.
계산 방법
- 빈 폭(주파수 분해능): Δf = f_s ÷ N (Hz)
- 프레임 시간: T = N ÷ f_s (밀리초로 표시하려면 × 1000)
- 나이퀴스트까지의 빈 수: N ÷ 2
f_s는 샘플링 주파수(Hz), N은 FFT 한 번에 쓰는 표본 수로 1,024, 4,096, 16,384처럼 2의 거듭제곱을 많이 씁니다.
원리
이산 푸리에 변환은 표본 구간을 그 구간 안에 정수 번 반복되는 사인파들과 비교합니다. 가장 느린 파는 T초에 한 번 진동하므로 주파수가 1/T이고, 나머지는 그 정수배입니다. T = N/f_s이므로 간격은 f_s/N이 됩니다. 실수 신호에서는 f_s/2 위쪽 빈이 아래쪽을 거울처럼 반복하므로 새로운 정보는 절반 정도에만 있습니다. 여기서 시간–주파수의 맞바꿈이 생깁니다. 주파수를 더 잘게 보려면 구간이 길어져야 하고, 그만큼 시간 변화는 흐릿해집니다.
예제 풀이
- 입력값: f_s = 48,000 Hz, N = 4,096
- 빈 폭: 48,000 ÷ 4,096 = 11.71875 Hz
- 프레임 시간: 4,096 ÷ 48,000 = 0.08533초 = 85.33 ms
- 나이퀴스트까지의 빈 수: 4,096 ÷ 2 = 2,048 (0~24,000 Hz 범위)
| FFT 크기 | 빈 폭 (Hz) |
|---|---|
| 1,024 | 46.875 |
| 2,048 | 23.4375 |
| 3,072 | 15.625 |
| 4,096 | 11.71875 |
| 5,120 | 9.375 |
| 6,144 | 7.8125 |
| 8,192 | 5.859375 |
결과 해석
빈 폭이 11.7 Hz이면 대략 그만큼 떨어진 두 음을 구분할 수 있습니다. 고음역에서는 충분하지만, 50 Hz 부근에서는 반음 간격이 약 3 Hz에 불과해 저음역에서는 거칩니다. 더 잘게 보려면 N을 키우거나 샘플링 주파수를 낮추고, 빠른 과도 신호를 따라가려면 N을 줄입니다. 일반적인 오디오 분석기는 44.1 kHz나 48 kHz에서 2,048~8,192점을 쓰고, 프레임을 50~75% 겹쳐 시간 방향 표시를 부드럽게 합니다.
흔한 실수
- 제로 패딩으로 분해능이 높아진다고 믿는 경우(스펙트럼을 보간할 뿐, 실제 데이터 길이로 정해지는 분해능은 그대로입니다)
- 창함수를 고려하지 않는 경우(Hann 창 등은 주봉우리를 넓혀 실제 분해능이 Δf보다 거칠어집니다)
- 빈 개수를 셀 때 직류(DC)와 나이퀴스트 빈을 모두 넣으면 N/2 + 1개라는 점을 놓치는 경우
자주 묻는 질문
N은 반드시 2의 거듭제곱이어야 하나요?
그렇지 않습니다. 다만 기수-2 FFT 알고리즘이 2의 거듭제곱에서 가장 빨라 대부분의 소프트웨어가 이를 씁니다.
스펙트로그램의 시간 간격은 어떻게 구하나요?
홉 크기(N에서 겹치는 표본 수를 뺀 값)를 f_s로 나눕니다. 기본 입력에서 50% 겹치면 약 42.67 ms입니다.
저음을 정밀하게 보려면 FFT 크기를 얼마로 해야 하나요?
원하는 분해능으로 f_s를 나누면 됩니다. 48 kHz에서 약 1.5 Hz가 필요하면 N = 32,768이 적당하며, 이때 프레임은 약 0.68초입니다.
출처: J. W. Cooley and J. W. Tukey, "An Algorithm for the Machine Calculation of Complex Fourier Series," Mathematics of Computation, 1965 · F. J. Harris, "On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform," Proceedings of the IEEE, 1978