8월, 2024의 게시물 표시

추천 게시물

FFT Peak 주파수 추정 방식 (이차 보간법, 가중평균법, parabolic inpterpolation, weighted average) 비교

이미지
FFT를 그냥 진행하면 Leakage(누설)가 발생한다. 누설이라는 용어보단 Leakage가 편해서 Leakage로 표현하겠다. 이는 우리가 흔히 FBIN이라고 하는 주파수 Resolution이 입력 신호와 맞지 않아 발생하는 흔한 현상이다. 이해를 돕기 위해서 부연하면 FBIN은 FFT의 X축의 간격이다. 이런 현상을 완화시키기 위해서 윈도우를 씌우기도 하지만 Leakage를 완전히 막지는 못한다. 따라서 정확한 Peak 주파수를 얻기 위해선 Peak 주파수 주변 신호를 활용해 정확도를 높이는 방식을 적용해 볼 수 있다. 여기서 소개할 방식은 2가지로 신호에서 흔히 사용되는 이차 보간법과 가중평균법이다. 결론적으로 주파수를 가변하며 FFT를 하고 FFT의 결과에서 2가지 방식을 통해 주파수를 다시 계산했다. 그리고 원래 입력 주파수와 계산된 주파수의 차이를 Error로 하여 결과에 Plot하는 코드를 작성했다. 코드는 OCTAVE로 작성되어서 MATLAB에서도 무난히 동작할 것이다. 코드 예제 이차보간법 코드 (Parabolic Interpolation) % Load the signal package pkg load signal; % Octave Script for Precise Peak Frequency Estimation Considering Windowing Effect % Parameters Fs = 128;                   % Sampling frequency NFFT = 2048;                % FFT points freq_range = 0.5:0.0001:4;     % Frequency range to test errors = zeros(size(freq_range)); % Initialize error array % Window function (Hann window) window = hann(NFFT); for i = 1:length(freq_range)     % Generate the signal with