FFT로 주파수 보기
시간 영역 신호를 주파수 성분으로 바꿔 진동과 노이즈가 어느 주파수에 몰려 있는지 봅니다. MCU에서 FFT를 쓰는 방법.
FFT가 주는 것
N개의 샘플을 넣으면 0부터 fs/2까지 N/2개 주파수 칸(bin)의 크기와 위상이 나옵니다.
- 주파수 분해능 = fs / N
- 예) fs = 1kHz, N = 1024 → 칸 하나가 약 1Hz
임베디드 활용
- 진동 진단: 모터 베어링 불량, 불균형은 특정 주파수에 피크로 나타남
- 노이즈 원인 찾기: ADC 값에 섞인 노이즈가 PWM 주파수인지, 전원 리플인지 구분
- 제어 튜닝: 공진 주파수를 찾아 노치 필터 설계
- 오디오: 음정 검출, 스펙트럼 표시
구현
arm_rfft_fast_instance_f32 S;
arm_rfft_fast_init_f32(&S, 1024);
arm_rfft_fast_f32(&S, in, out, 0);
arm_cmplx_mag_f32(out, mag, 512);
CMSIS-DSP를 쓰면 Cortex-M4에서 1024점 FFT가 1ms 안팎입니다.
창 함수
샘플 구간의 시작과 끝이 이어지지 않으면 주파수가 퍼져 보입니다(누설). 해닝 같은 창 함수를 곱한 뒤 FFT합니다.
먼저 PC에서
데이터를 로그로 모아 Python(numpy)으로 FFT를 해 보면 무엇을 봐야 할지 빨리 알 수 있습니다. 그 뒤에 MCU 실시간 처리가 필요한지 판단합니다.