可以使用哪些技术来估计噪声信号中正弦音调突发的开始时间?

假设音突发具有已知的固定频率(但相位未知)和非常陡峭的上升时间,并且目标是在不到上升时间一半的时间内估计开始时间,和/或音调频率的一个周期(如果可能)。如果信噪比很低(远小于1),估计技术将如何改变?

添加:假设音调突发的长度未知,但比上升的一小倍长时间和频率周期。

已添加:DFT / FFT显示了非常可能存在的音调。问题是要精确地找出在FFT窗口内的音频(或相同频率的多个音调脉冲串)可能在FFT窗口中的何处开始,或者确定当前音频是否在该DFT窗口之外开始。其他时域数据。

雷达脉冲检测精度更接近我需要的分辨率,除了我只有一个边缘,因为音调的长度未知,并且除了已知的上升时间外,未调制。窄带通滤波器会使上升时间失真,从而杀死边缘到达估计分辨率。

评论

我们能对噪音有什么假设吗?它是静止的吗?它遵循任何形式的分布吗?

检测器发出的虚假警报是否不可取?您是否有关于正确检测每个脉冲的概率的规范?这非常类似于前端雷达信号处理(的简化版本)。定位嵌入到噪声中的(可能是经过调制的)脉冲并估算其参数。

您需要实时执行此操作,还是离线分析?

@ hotpaw2:按照这个答案,您对Goertzel算法不满意吗?

Goertzel算法用于音调检测,这似乎正是您所追求的。滤波器的输出是信号在其调谐频率下的“功率”估计。选择一个阈值。如果过滤器输出高于此值,则表明已检测到声音。适当设置您的阈值,您可以更早地检测到音调的开始(并且更容易出现误报警)。

#1 楼

正如我们在评论中一直讨论的那样,Goertzel算法是检测噪声中音调的常用方法。讨论之后,我不确定这是否是您想要的(您想要开始时间),但是对于Goertzel算法如何应用于您的问题似乎有些困惑,所以我想我会写出来在这里。

Goertzel算法

如果您知道所要查找的音调的频率(称为$ f_g $),并且您愿意,则Goertzel算法非常有用对噪声水平有一个合理的了解,以便您可以选择合适的检测阈值。

可以将Goertzel算法视为总是计算ONE FFT bin的输出:

$$ y(n)= e ^ {\ jmath 2 \ pi f_g n} \ sum_ {k = 0} ^ nx(n)e ^ {-\ jmath 2 \ pi f_g k} $$

其中$ f_g $是您要寻找的频率。

维基百科页面提供了一种更好的计算方法。尝试实现它:

function [y,resultr,resulti] = goertzel(f_goertzel,x)
realW = 2.0*cos(2.0*%pi*f_goertzel);
imagW = sin(2.0*%pi*f_goertzel);

d1 = 0;
d2 = 0;

for n = 0:length(x)-1,
    y(n+1) = x(n+1) + realW*d1 - d2;
    d2 = d1;
    d1 = y(n+1);
    resultr(n+1) = 0.5*realW*d1 - d2;
    resulti(n+1) = imagW*d1;
end
endfunction


考虑信号$ f = 0.0239074 $和$ \ phi = 4.4318752 $:

$$ x = \ sin(2 \ pi fn + \ phi)+ \ epsilon(n)$$

其中$ \ epsilon(n)$是零均值,单位方差高斯白噪声。

音调开始从索引1001处开始进入信号的三分之一。

如果使用$ f_g = f $在其上运行Goertzel算法,则会得到图形的底部两条轨迹。

$ x $(蓝色)和$ y $(红色)为$ f_g = 0.0229074 $
结果$ \ sqrt {resultr ^ 2 + resulti ^ 2} $
$ f_g的$ x $(蓝色)和$ y $(红色)= 0.0239074 $
结果$ \ sqrt {resultr ^ 2 + resulti ^ 2} $(实线)和第一个结果(虚线) 。

如您所见,我们感兴趣的音调出现在约250的峰值处。如果将检测阈值设置为该值的一半左右(125),则检测发生(平方根值大于125 )大约在声调开始后的索引1450 --- 450采样处。输出为115.24,我们不能在没有错误检测的情况下将阈值降低太多。

将阈值降低到116会在实际情况下(对于此运行)在索引1401处进行检测...但是我们冒着更多错误警报的风险。



评论


$ \ begingroup $
如果仅在固定长度的窗口内寻找存在估计,则运行Goertzel过滤器更为合适。运行中的Goertzel没有丢失/衰减项,则会在其整个长度上改变其带宽,并且随着时间的推移,较窄的带宽会导致到达时间的估计变差,对噪声和阈值误差更加敏感。
$ \ endgroup $
– hotpaw2
2011年9月5日15:09



$ \ begingroup $
@ hotpaw2:正确。您可以引入一个“遗忘因素”以保持Goertzel的运行,但否则它会记住所有事情。
$ \ endgroup $
– Peter K.♦
2011年9月5日15:27

$ \ begingroup $
还记得一切吗?这是一个FIR,可以递归形式实现。我在这里错过了什么?
$ \ endgroup $
–奥利弗·查尔斯沃思(Oliver Charlesworth)
2011年9月5日在21:28

$ \ begingroup $
@Oli:如果看上面$ y(n)$的方程,您会注意到它并没有结束。是的,它估计的是(缩放的)DFT系数,但绝对不是FIR。
$ \ endgroup $
– Peter K.♦
2011年9月5日23:26