噪声水平估计的想法/峰值存在时的自动阈值

信息处理 噪音 算法 估计 频域
2021-12-20 01:54:16

我有一些信号的 fft,并且想要粗略估计噪声水平,以便为我们的峰值检测算法选择合适的阈值。通常,fft 主要包含带有少量峰值的噪声(与所述噪声相比,这些峰值通常相当高)。作为参考,我附上了一个非常典型的 fft 的截图:

快速傅里叶变换

现在到我提出的噪声水平估计算法,它基于以下假设:

  • 我想要的是fft的均值和标准差
  • 如果 fft 仅包含(高斯)噪声,则中值将非常接近均值
  • 峰值不应过多影响中位数
  • 均值和标准差与样本的顺序无关
  • 因此我可以对 fft 进行排序并且仍然得到相同的结果

所以得到的算法如下所示:

  • 对 fft 进行排序(升序)
  • 计算排序后的fft的均值和标准差,但是一旦均值超过中位数就停止
  • 使用计算的平均值和标准偏差来选择峰值检测阈值
  • 利润?

我已经在一些典型信号上测试了这个算法,结果似乎相当不错(请记住,我不需要确切的噪声水平,只需要一些稳健的东西来选择合适的阈值)。排序当然有点贵,但我不希望噪音水平变化太大,所以我不需要为每个 fft 运行它。

话虽如此,算法本身感觉有点“错误”,因为我没有问实际问题“没有峰值,平均值和标准偏差是多少?” 而是“如果平均值是 X,标准差是多少?”。

那么您对此有何看法?这类问题有更好的算法吗?(我打赌有)

2个回答

我会对你的想法做一些小的调整(你真的把它们钉牢了)。

假设

  • 信号模型 - 信号 + 加性高斯白噪声 (AWGN)
    也许我们可以对其进行更多概括,但这超出了这个问题的范围。
  • 信号的 DFT 包含滚降相对较小的峰值
    这很重要,因为我们几乎可以说信号是稀疏数量的谐波信号的组合。由于波瓣宽度将隐藏噪声数据。因此观察窗口、信号波瓣宽度和采样率之间的比率意味着数据的 DFT 会产生尖锐的峰值。

估计

在上述假设下,我们知道:

  • 噪声是 DFT 中的 AWGN(因为高斯向量在线性变换下保持高斯)。它还表明平均值和中值是相似的(对称分布的实现)。
  • 如果没有信号数据,bean 的平均值和中值应该是相似的。
  • 被信号污染的箱的数量(写这个很有趣,哈?)是稀疏的。

所以我们可以对 bin 进行排序,但是对子集的均值进行排序和评估会产生偏差,除非我们确保子集围绕均值/中值对称。所以,我会对数据进行排序,并将 bin 保持在 25-75 Percentile 范围内。我会在那些上使用平均值。

确实有很多峰值检测算法,对于哪些是“好”或“坏”没有明确的共识。但是对于它的价值,你的方法是有意义的。使用中值或其他分位数来检测稀疏信号很常见,例如 Lasseck (2014) 中的“中值裁剪”阶段,在音频记录中大规模识别鸟类实际上,您将 FFT 幅度视为来自信号和噪声的混合,并且由于信号很少,您假设中值应该足够接近噪声的真实中值。

然而,标准偏差和平均值一样,会受到信号的存在和大小的影响。根据您的问题和假设,潜在的解决方案可能是使用不同的频带或已知的静默期来估计噪声。

(如果您已经假设噪声中位数和均值相似,您似乎根本不需要计算均值。)