使用希尔伯特变换的噪声频率估计

信息处理 频率 估计者
2022-01-06 11:06:35

我正在寻找一种方法来估计具有低时变的瞬时频率。以下 MATLAB 函数(另存为test_fest.m)使用Hilbert变换对单个 10 Hz 正弦音进行此操作。采样率为f_s1000 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比我预期的要大。我的方法有问题吗?

1个回答

数字希尔伯特变换很难做到,因为理想的希尔伯特变换器需要一个具有从-无穷大到+无穷大的脉冲响应的 FIR 滤波器。显然这是做不到的,所以数字问题是不可避免的。它们在低频时往往最差,所以我猜你会在 100 Hz 时看到更小的误差。Andrew Duncan 的论文“The Analytic Impulse”对数字希尔伯特变换能做什么和不能做什么进行了透彻的分析。http://www.andrewduncan.ws/air/index.html

这里讨论了一些测量频率的替代方法:是否有一种算法可以在没有 DFT 或 FFT 的情况下找到频率?