这又是我的打detector探测器。
当有任何东西时,我非常擅长检测信号-可以跟踪从墙壁剥落的打ore声到您甚至在录音中都听不到的呼吸声。问题是,我无法确定信号何时降至可检测的水平以下,并且该应用程序只是在“听到声音”。而且,不幸的是,打nor /呼吸经常不规则,以至于简单的自相关或类似的间隔定时方案不太可能有很大帮助。(实际上,在某些情况下,噪音比呼吸更规律。)
那么,当没有信号时,我有什么窍门想不通吗?考虑到“信号”的开始是如此的杂音,似乎我在这里遇到了困难。
(也许这与我遇到的另一个问题有关:奇怪的是,即使声音很大,我也无法准确(甚至近似)测量信号电平。由于我仍然需要使用滚动平均值和比率来检测信号,级别信息会迷路。我正在寻找一些技巧来重新构造它。)
基本技巧
(尤达)
对音频信号进行采样(出于各种原因,通常以8000Hz的频率进行采样),然后以1024个块进行FFT。(在我的实验中,汉明滤镜和重叠块似乎影响不大,尽管稍后可能会重新讨论。)
FFT分为“频段”(当前为5个,在大小上稍有偏斜以在低端放置更多细节),并且将每个频段的“频谱差异”和电平相加。峰值限制值的长期平均值用作“阈值”,进一步的偏差调整用于维持大约20%的“超阈值”速率。
每个“超阈值”值的权重均为1(低于阈值的权重为0),但此权重由频段中的表观“可变性”(大约2Hz)进行调整,以赋予频段更大的权重携带更明显的信号。
将频带的权重相加,然后将后续块的权重相加约一秒钟,以产生连续的“得分”。再次将其与运行中的平均阈值(加上几种启发式方法)进行比较,以检测打sn的起伏。
更新资料
我突然想到,如果我的算法有效地保持恒定水平的信号(针对我的信号水平问题),则有效地测量SNR的方法就是在没有信号时测量噪声。
方便地,打sn是断断续续的,中间有很多“死气”。而且我已经在检测打the信封了。因此,在信封外的任何东西(在一个打sn声的结束与下一个打sn声的开始之间)可能是噪音!我可以(以一定程度的准确性/重复性)进行测量。(当然,我们花了三倍的努力才提出了一种中途的算法-现实与理论不符。)
所以我还没有完整的答案,但是我已经取得了进步。
(虽然以上技术为我提供了相当不错的SNR指标,但我仍然无法估计实际的信号水平。我的“相对水平”指示可能会超出刻度,导致几乎听不到呼吸声,对于窗户响尾蛇来说也是如此。我需要某种绝对级别的代理。)