检测频率扫描正弦曲线及其参数?

信息处理 信号分析 频谱 信号检测
2022-02-07 06:27:16

给定一个(FFT 大小的)数据帧,并在该窗口的 F​​FT 中统计地检测高于噪声底的频谱分量,可以使用哪些特征或信号分析来确定该频谱分量更可能是线性的扫过正弦曲线,而不是在整个框架上静止的正弦曲线?

并且,假设跨数据窗口的 dF/dt 扫描很小(从 FFT bin 的一小部分到几个 bin),如何估计扫描参数(但是,除了对这个问题的回答,假设这是一个估计噪声中检测到的信号。)

一种提供的解决方案似乎是将 FFT 帧分割成几个较短的子帧,做较短的 STFT,并在结果子帧 FFT 峰值幅度频率估计集之间寻找线性最佳拟合(由于较短的子帧,所有这些都具有较差的频率分辨率)。是否有其他或更好的检测和估计选项?

1个回答

您可以计算帧中信号的瞬时频率。这可以按照本文中的概述来完成(例如方程(9))。您需要使用希尔伯特变换器计算解析信号:

(1)xa[n]=x[n]+jxh[n]

其中的希尔伯特变换。瞬时频率由 (1) 的相位的(离散时间)导数给出。如果您使用一阶差分来近似离散时间导数,您将得到方程式中给出的公式。(9) 上面引用的论文。给定瞬时频率的估计值,您可以简单地拟合一条线来估计扫描参数。xh[n]x[n]

这个小 Matlab/Octave 脚本显示了这种方法如何处理一个玩具问题:

% create chirp signal
N = 256;
n=(0:N-1)';
fx=(0.1+0.01*n/N);
x=sin(2*pi*fx.*n);

% compute analytic signal
xh=hilbert(x);
xr=real(xh);xi=imag(xh);

% compute instanteneous frequency (could be done over fewer points)
tmp1 = xr(1:N-1).*xi(2:N) - xr(2:N).*xi(1:N-1);
tmp2 = xr(1:N-1).*xr(2:N) + xi(1:N-1).*xi(2:N);
f=atan2(tmp1,tmp2)/(2*pi);  % (biased) estimate of instanteneous frequency

% linear regression over center values of f
skip = floor(N/4);    % skip unreliable points at beginning and end of f
na = skip:(N-skip);
A=[ones(length(na),1),na(:)];
u=A\f(na);

f0=u(1); k=u(2)/2;  % remove bias
[f0,k]

% reconstructed linear frequency
fr = f0 + k*n;

plot(n,fx,(2:N),f-k*(2:N)',n,fr,':')
legend('exact','estimated','reconstructed')
axis([0,N,f0*.9,(f0+k*N)*1.1])

该图显示了信号的实际线性频率(蓝色)、分析信号的估计值(绿色)以及通过估计频率拟合一条线获得的重建频率。请注意,两端的估计都不可靠,因此该线拟合到频率估计的中心值。

在此处输入图像描述