人类语音噪声滤波器

信息处理 过滤器 声音的 噪音 语音识别
2021-12-25 01:33:29

有谁知道过滤器来衰减非语音?我正在编写语音识别软件,并想过滤除人类语音以外的所有内容。这将包括背景噪音、由蹩脚的麦克风产生的噪音,甚至是背景音乐。我已经实现了补偿功率谱 6 dB 滚降的一阶滤波器,但我仍然听到噪音(虽然语音听起来更清晰)。我曾想过使用低通滤波器,但我不确定这样做有两个原因:

  1. 我不知道低通前置滤波器是否会干扰其余的语音处理。尽管人耳只能检测到低于 20 kHz 的声音,但我不想冒险消除处理语音可能需要的任何高阶谐波(尽管我不知道是否是这种情况。但是我不想冒险)。

  2. 我知道某些辅音(如 f、h 和 s)的激发几乎完全是白噪声。可以这么说,我不想实现可以消除良好噪声的噪声滤波器。

理想情况下,我希望只留下对着麦克风讲话的人的讲话。如果您有任何想法,或者我缺少某些东西,请告诉我。非常感激!

3个回答

电话中使用的语音通信信道通常具有 300 Hz 到 3 kHz 的频率响应。尽管这会抑制正常语音中的大量能量,但可理解性仍然相当好 - 主要问题似乎是某些爆破辅音,例如“p”和“t”,如果没有更高频率的成分,可能会有点难以区分.

因此,您可能正在使用通常在消费者音频中发现的完整 20 Hz - 20 kHz 带宽和用于语音通信的最激进的过滤(见上文)之间的某个“最佳位置”。我建议从 50 Hz 到 8 kHz 的带通滤波器开始。它可能最多只能将 SNR 提高几个 dB,但它可能会有所帮助,尤其是在您有很多高频背景噪声的情况下。

使用与语音带宽匹配的通带滤波器会有所帮助。

如果您有多个麦克风(就像现在手机上的情况一样),有很多类似 ICA 的方法可以利用这一点 - 但您的问题暗示我您只有一个输入。

您要做的是“单麦克风源分离”(名称取自 Roweis 的开创性论文),也称为“单传感器”。警告:这远不是一个已解决的问题,并且该领域的所有研究都是最近的,没有算法或方法是“明显的赢家”(与高斯混合模型 + FST 用于语音识别不同)。

一个很好的框架是通过维纳过滤。见 Benaroya 等人。“基于维纳滤波和多窗口 STFT 的单传感器源分离”(阅读第 1 和第 2 节,除非您真的需要,否则不要打扰多分辨率的事情)。简而言之,您计算信号的 STFT,对于每个 STFT 帧,您尝试获得语音频谱和噪声频谱的估计值,然后使用 Wiener 滤波从中恢复语音频谱的最佳估计值(这类似于“软屏蔽”频谱)。

您现在的问题如下:给定一个 STFT 帧,从中估计语音和噪声分量。Benaroya 的论文中描述的更简单的方法是通过矢量量化 - 用多个说话者进行数小时的语音,计算 STFT,在其上运行 LBG 以找到 512 或 1024 个典型语音帧的码本;对噪音做同样的事情。现在,给定输入信号的一帧,将其非负投影(论文中描述了乘法梯度更新过程)到语音和噪声基础上,您就可以得到语音和噪声估计值。如果您不想处理非负投影的事情,只需使用最近的邻居。这确实是“单传感器源分离”部门可能工作的最简单的事情。

请注意,语音识别系统确实可以为分离系统提供一些输入。使用您的语音识别系统进行第一次解码。对于每一帧,从获得最佳分数的高斯中获取平均 MFCC 向量。将其转换回频谱。繁荣,您有一个掩码,可以为您提供类语音位的最可能的频谱位置,您可以将其用作维纳滤波的输入。这听起来有点像挥手,但要旨是要分离一个源,你需要一个好的模型,而后退的语音识别系统是一个很好的语音信号生成模型。

您可能应该考虑进行独立分量分析 (ICA),因为您的问题与经常用于描述 ICA 的“鸡尾酒会”问题非常相似。简而言之,ICA 可以找到彼此独立的信号分量。这假定环境中的其他噪声(洗碗机、白噪声、风扇嗡嗡声)将独立于语音的信号源并且可以分离。

ICA 类似于 PCA(主成分分析),但它不是最大化主轴上的方差,而是最大化独立性。有许多 ICA 实现应该插入到您正在使用的任何编码环境中。