背景: 我正在开发一个 iPhone 应用程序(在 其他几篇 文章中提到),它在一个人睡着时“听”打鼾/呼吸,并确定是否有睡眠呼吸暂停的迹象(作为“睡眠实验室”的预屏幕)测试)。该应用程序主要使用“光谱差异”来检测打鼾/呼吸,并且在针对睡眠实验室记录(实际上非常嘈杂)进行测试时,它工作得很好(相关性约为 0.85--0.90)。
问题: 大多数“卧室”噪音(风扇等)我可以通过多种技术过滤掉,并且通常可以可靠地检测人耳无法检测到的 S/N 水平的呼吸。问题是语音噪音。在后台播放电视或收音机(或只是让远处有人说话)并不罕见,并且声音的节奏与呼吸/打鼾密切相关。事实上,我通过应用程序运行了已故作家/讲故事者比尔霍尔姆的录音,它与打鼾的节奏、水平变化和其他几个指标基本上没有区别。(尽管我可以说他显然没有睡眠呼吸暂停,至少在清醒时没有。)
所以这有点长镜头(可能还有一些论坛规则),但我正在寻找一些关于如何区分声音的想法。我们不需要以某种方式过滤掉鼾声(认为那会很好),而是我们只需要一种方法来拒绝被语音过度污染的“太吵”的声音。
有任何想法吗?
发布的文件:我在 dropbox.com 上放置了一些文件:
第一个是一段相当随意的摇滚(我猜)音乐,第二个是已故比尔霍尔姆讲话的录音。两者(我用它作为我的“噪声”样本与打鼾区分开来)都与噪声混合以混淆信号。(这使得识别它们的任务变得更加困难。)第三个文件是你真正记录的十分钟,其中前三分之一主要是呼吸,中间三分之一是混合呼吸/打鼾,最后三分之一是相当稳定的打鼾。(你会咳嗽以获得奖金。)
所有三个文件都已从“.wav”重命名为“_wav.dat”,因为许多浏览器使得下载 wav 文件变得异常困难。下载后只需将它们重命名为“.wav”。
更新:我认为熵对我来说是“诀窍”,但事实证明它主要是我使用的测试用例的特殊性,加上一个设计得不太好的算法。在一般情况下,熵对我的作用很小。
随后,我尝试了一种技术,在该技术中,我计算了整体信号幅度(我尝试了功率、频谱通量和其他几个测量值)的 FFT(使用几个不同的窗口函数),每秒采样大约 8 次(从主 FFT 周期中获取统计数据)即每 1024/8000 秒)。对于 1024 个样本,这涵盖了大约两分钟的时间范围。由于打鼾/呼吸与声音/音乐的节奏缓慢(并且这也可能是解决“可变性”问题的更好方法),我希望能够看到其中的模式,但是虽然有提示这里和那里的模式,没有什么我可以真正抓住的。
(更多信息:在某些情况下,信号幅度的 FFT 会产生一个非常明显的模式,在大约 0.2Hz 和阶梯谐波处有一个强峰值。但这种模式在大多数情况下并不是那么明显,并且语音和音乐可以产生不太明显的类似模式的版本。可能有某种方法可以计算品质因数的相关值,但似乎需要曲线拟合到大约 4 阶多项式,并且在手机中每秒执行一次似乎不切实际。)
我还尝试对我将频谱分成的 5 个单独的“波段”进行平均幅度的相同 FFT。频带是 4000-2000、2000-1000、1000-500 和 500-0。前 4 个频段的模式通常与整体模式相似(尽管没有真正的“突出”频段,并且在较高频段中通常会出现非常小的信号),但 500-0 频段通常只是随机的。
赏金: 我将赏金给内森,即使他没有提供任何新的东西,因为他是迄今为止最有成效的建议。不过,如果他们提出了一些好主意,我仍然愿意将一些积分奖励给其他人。