我正在寻找一种方法来估计具有低时变的瞬时频率。以下 MATLAB 函数(另存为test_fest.m
)使用Hilbert变换对单个 10 Hz 正弦音进行此操作。采样率为f_s
1000 Hz。
function test_fest()
%TEST_FEST() Test Frequency Estimation using Various Techniques.
fS = 1000;
f = [10]'; % Sine Wave Frequency
nFFT = fS;
x = sin(linspace(zeros(length(f),1), f*2*pi, fS));
X = hilbert(x,nFFT);
fE = diff(unwrap(angle(X))) * fS / (2*pi); % Frequency Estimate
eE = mean((fE/f-1).^2); % MSQ Error
plot(fE,'.');
title(sprintf('Hilbert Transform Instantaneous Frequency Estimation of Sine Wave f=%.2f Hz, f_S=%g Hz, Mean-Square Error:%.2g', f, fS, eE))
输出显示在这里:
但是,我得到的错误2.3e-5
比我预期的要大。我的方法有问题吗?