使用与语音带宽匹配的通带滤波器会有所帮助。
如果您有多个麦克风(就像现在手机上的情况一样),有很多类似 ICA 的方法可以利用这一点 - 但您的问题暗示我您只有一个输入。
您要做的是“单麦克风源分离”(名称取自 Roweis 的开创性论文),也称为“单传感器”。警告:这远不是一个已解决的问题,并且该领域的所有研究都是最近的,没有算法或方法是“明显的赢家”(与高斯混合模型 + FST 用于语音识别不同)。
一个很好的框架是通过维纳过滤。见 Benaroya 等人。“基于维纳滤波和多窗口 STFT 的单传感器源分离”(阅读第 1 和第 2 节,除非您真的需要,否则不要打扰多分辨率的事情)。简而言之,您计算信号的 STFT,对于每个 STFT 帧,您尝试获得语音频谱和噪声频谱的估计值,然后使用 Wiener 滤波从中恢复语音频谱的最佳估计值(这类似于“软屏蔽”频谱)。
您现在的问题如下:给定一个 STFT 帧,从中估计语音和噪声分量。Benaroya 的论文中描述的更简单的方法是通过矢量量化 - 用多个说话者进行数小时的语音,计算 STFT,在其上运行 LBG 以找到 512 或 1024 个典型语音帧的码本;对噪音做同样的事情。现在,给定输入信号的一帧,将其非负投影(论文中描述了乘法梯度更新过程)到语音和噪声基础上,您就可以得到语音和噪声估计值。如果您不想处理非负投影的事情,只需使用最近的邻居。这确实是“单传感器源分离”部门可能工作的最简单的事情。
请注意,语音识别系统确实可以为分离系统提供一些输入。使用您的语音识别系统进行第一次解码。对于每一帧,从获得最佳分数的高斯中获取平均 MFCC 向量。将其转换回频谱。繁荣,您有一个掩码,可以为您提供类语音位的最可能的频谱位置,您可以将其用作维纳滤波的输入。这听起来有点像挥手,但要旨是要分离一个源,你需要一个好的模型,而后退的语音识别系统是一个很好的语音信号生成模型。