您正在绘制整个音频剪辑的 FFT 的事实让我认为您正在寻找错误的解决方案类别。从信号 A 和 B 的波形可以清楚地看出,您的噪声和信号不是静止的。如果您想使用频域降噪技术,在您的情况下,应该在较短的重叠窗口上完成,您可以假设信号和噪声的属性是固定的。您无法避免使用短期傅立叶变换。
在这篇文章的其余部分,我会将符号切换为:
- X原始(无噪声)信号
- N噪声信号
- Y=X+N你的观察,也就是说B.X是你想要恢复的,N在你的情况下是已知的(信号A)
大多数去噪方法具有相同的结构:得到一个 STFT 表示Y和N(矩阵Y(p,k)和N(p,k), 在哪里p是帧索引和k频率仓索引),处理来自行的 FFT 帧对Y和N得到一个估计X^去噪信号频谱的切片,并使用它来构建应用于频域的滤波器/掩码Y,通过重叠相加执行到时域的转换。
我建议你尝试实现 Ephraim-Malah 算法,这是一种经典且经常被引用的“基线”去噪方法。它基于两个直观的技巧:
- 估计 SNR 并在具有低 SNR 的段中衰减去噪滤波器的强度(这可以防止在信号接近噪声水平的区域出现许多伪影)。
- 使用时间平滑(如果我们在一帧中具有高 SNR,则在下一帧中使滤波/减法更强,因为它也可能包含信号......)。
我找到了一组关于这个主题的相对独立的幻灯片——作者介绍了越来越复杂的去噪规则,从光谱减法到成熟的 Ephraim-Malah。他没有告诉您进行实际实施的唯一一件事是如何获得估算值S^x(p,k)- 因为你不观察X(p,k), 只是Y(p,k)和N(p,k). 最简单的方法是从信号的功率谱中减去噪声的功率谱,并将结果为负的 STFT 单元归零:
S^x(p,k)={|Y(p,k)|2−|N(p,k)|20when|Y(p,k)|2−|N(p,k)|2>0otherwise
然后,您可以尝试幻灯片第 5 页和第 10 页上显示的过滤规则。