如何确定频率范围内的“可变性”?

信息处理 声音的 噪音 频谱
2022-01-08 20:54:42

这是上一个问题的延续。

我正在尝试分析呼吸和打鼾的声音,虽然我现在可以很好地检测到打鼾,但呼吸是一个更大的挑战。

我了解到,如果我将分析的频率范围(大约 4KHz,以大约 8KHz 采样,帧大小为 1024)分成大约 5 个子范围,通常其中一个子范围表现出良好的灵敏度(使用光谱差异)被掩埋在整个范围内的噪音。诀窍是确定何时“信任”哪个子范围。

据推测,“值得信赖”的子范围会以大约 2Hz 和 0.05Hz 之间的速率表现出变化,而“坏”的子范围会表现得更加随机,它们的大部分变化都在较短的间隔内。

我可以拼凑某种算法以亚秒级分辨率平滑值,然后计算更长间隔内的可变性,但我想知道是否没有针对这类事情的“罐装”算法——可能有背后有一点理论吗?

有什么建议?

[注:我意识到理论上可以使用 FFT 来提取此信息,但这似乎是使用棒球棒杀死跳蚤。也许更轻量级的东西?]

添加:

在某种意义上(打个比方)我试图在射频传输中检测“基带”信号(只有“射频”是音频,“基带”低于 8Hz)。而且,从某种意义上说,“RF”是“扩频”——​​我想要检测的声音往往会产生大量的谐波和/或有几个单独的频率分量,所以如果频谱的一个频段太嘈杂,我可以可能会利用另一个。目标是基本上确定一些类似于各种频带的 SNR 的度量,假设大多数“噪声”> 2Hz 并且我的信号小于 2Hz。

我将每个频段的原始幅度(所有包含频率的 FFT 幅度之和)作为该算法的输入,以 8Hz 间隔测量。

(应该注意的是,虽然我没有进行任何正式的 SNR 测量,但经过处理的频谱的整体 SNR 似乎经常接近或低于 1.0——如果您在 Audacity 等工具中目视观察声音包络,则无需调制包络很明显(即使耳朵可以清楚地辨别呼吸音)。这就是为什么有必要分析频带以找到具有良好 SNR 的频带。)

4个回答

丹尼尔,

重新阅读您的问题后,在这种情况下,我所学到的被称为“Gabor 带宽”的内容似乎对您有用,因为您试图测量“光谱变异性”。(Dilip 为我的此处有关光谱时刻的问题)。

当我进一步研究它时,Gabor-Bandwidth 似乎真的只是衡量频谱与其平均值的“扩展”程度。(因此操纵时刻)。

看看你的想法。

你试过光谱通量吗?这里有 MATLAB 实现:http: //blog.weisu.org/2009/12/spectral-flux-sf-in-audio.html

你需要的东西似乎比跳蚤大得多。因此,您可能需要朝相反的方向发展,而不仅仅是 FFT。也许低频倒谱或倒谱分析来找到你的“退出”频率。

您的输入是类似低分辨率频谱图的表示X(m,n)其中 m 是帧索引,n 是波段(子范围索引)。正确的?

这是我的建议:

对于每个 n:

  • 计算自相关rn(l)序列的X(:,n)
  • 计算任何峰值度量rn(l)对于 0.05 到 2 Hz 范围内的滞后 l(假设帧之间有 50% 的重叠,则为 8 到 31)。

选择具有最高自相关峰值的子带(= 更“尖锐”)。

要查看的峰值测量:

  • 在所考虑的范围内归一化自相关的最大值。maxlLrn(l)rn(0)
  • 峰度
  • 几何平均数与算术平均数之比

这些类型的度量例如用于区分浊音/清音语音。