你怎么知道是否有信号(当你的信号看起来很像噪音时)?

信息处理 噪音 信噪比
2022-01-03 10:35:05

这又是我的打鼾探测器。

当那里有任何东西时,我已经非常擅长检测信号 - 可以从墙壁剥离的鼾声到你甚至在录音中都听不到的呼吸。问题是,我无法判断信号何时降至可检测水平以下,而应用程序只是“听到声音”。而且,不幸的是,打鼾/呼吸通常是不规则的,简单的自相关或类似的间隔计时方案不太可能有太大帮助。(实际上,在某些情况下,噪音可能比呼吸更规律。)

那么,我是否缺少任何技巧来确定没有信号的时间?鉴于“信号”一开始就很像噪音,我似乎在这里遇到了一个困难的地方。

(也许这与我遇到的另一个问题有关:奇怪的是,即使声音很大,我也无法准确(甚至近似)测量信号电平。因为无论如何我都需要使用滚动平均值和比率来检测信号,关卡信息会丢失。我正在寻找一些技巧来重建它。)

基本技术

(尤达)

音频信号被采样(通常以 8000Hz,由于各种原因),然后在 1024 个块中进行 FFT。(在我的实验中,汉明过滤器和重叠块似乎没有什么影响,尽管稍后可能会重新访问。)

FFT 被划分为“波段”(目前为 5 个,大小略微倾斜以将更多细节放在低端),并将每个波段的“光谱差异”和电平相加。峰值限制值的长期平均值用作“阈值”,并使用进一步的偏差调整来保持大约 20% 的“超过阈值”率。

每个“超过阈值”值的权重为 1(低于阈值的权重为 0),但随后该权重通过频段中明显的“可变性”(大约 2Hz)进行调整,以赋予频段更多权重携带更明显的信号。

将频带的权重相加,然后将后续块的权重相加大约一秒钟以产生运行“分数”。这再次与运行平均阈值(加上几个启发式)进行比较,以检测打鼾的开始/偏移。

更新

我突然想到,如果我的算法有效地保持恒定电平信号(根据我的信号电平问题),有效测量 SNR 的方法是在没有信号时测量噪声。

方便的是,打鼾是间歇性的,中间有很多“死气”。而且我已经检测到打鼾信封了。因此,信封之外的任何东西(在一次鼾声结束和下一次鼾声开始之间)都可能是噪音!我可以(以一定程度的准确度/可重复性)测量。(当然,我们花了 3 次尝试才想出一个中规中矩的算法——现实永远与理论不符。)

所以我还没有完整的答案,但我已经取得了进展。

(虽然上述技术为我提供了一个相当好的 SNR 代理,但我仍然无法估计实际信号电平。我的“相对电平”指示可能超出了几乎听不见的呼吸声的范围,而对于窗户嘎嘎声则马马虎虎。我需要某种绝对级别的代理。)

2个回答

到目前为止,您似乎通过音频中存在强烈的周期性模式来识别打鼾。如果您告诉我可能还有其他具有相同属性的来源,那么是时候继续关注更具体的打鼾信号的属性了;我建议更准确地研究录制声音本身的音色。鉴于人类听众可以在呼吸时打鼾,您可能会求助于传统的音频信号分类方法。计算音频数据上的 MFCC 和波动模式等特征,并训练贝叶斯分类器(或更复杂的)来区分打鼾和呼吸。

也许是时候回顾一下关于这个话题的文献了......例如我发现了这个:http ://web.itu.edu.tr/kamasak/pubs/pdf/pm7_8_007.pdf

您可能需要构建一个动态分类器,它可以适应当前的主题、睡眠阶段和音频环境,而不是调整到固定的训练集。