这是因为这是一个复杂的问题吗?我的意思是广泛,因此它不存在简单/通用的解决方案?
因为每个(几乎)制作信号处理的软件(Avisoft、GoldWave、Audacity…)都具有降低信号背景噪声的功能。通常它使用 FFT。但是我在 Matlab 中找不到允许我们做同样事情的函数(已经实现)?那么手动制作它的正确方法是什么?
谢谢。
这是因为这是一个复杂的问题吗?我的意思是广泛,因此它不存在简单/通用的解决方案?
因为每个(几乎)制作信号处理的软件(Avisoft、GoldWave、Audacity…)都具有降低信号背景噪声的功能。通常它使用 FFT。但是我在 Matlab 中找不到允许我们做同样事情的函数(已经实现)?那么手动制作它的正确方法是什么?
谢谢。
Audacity 等内置的常见音频降噪方法基于频谱减法,它估计傅里叶变换幅度域中稳定背景噪声的水平,然后从每一帧中去除那么多能量,只留下信号“戳上方”这个噪音层。
您可以在 Matlab 中找到许多光谱减法的实现;这个在 Matlab 文件交换中得到了高度评价:
http://www.mathworks.com/matlabcentral/fileexchange/7675-boll-spectral-subtraction
减少噪声需要对噪声类型和信号类型以及它们之间的区别做出一些假设。音频处理器通常假设(正确或错误地)音频是语音或音乐,并且噪音是典型的录音会话背景嘶嘶声、A/C 电源嗡嗡声或黑胶唱片爆裂声。
Matlab 用于一般用途(微波无线电、数据通信、亚音速地震、心跳等),因此不能做出这样的假设。
问题是,你在寻找什么样的降噪?没有一种解决方案可以满足所有需求。这里有一些方法:
对信号进行低通滤波可以降低噪声,但也可以去除信号的高频分量。对于某些应用程序,这是完全可以接受的。有很多低通滤波器函数,Matlab 可以帮助您应用其中的很多。需要了解数字滤波器的工作原理。我不会在这里讨论它。如果您想了解更多详细信息,请考虑提出更集中的问题。
适用于许多情况的方法是使用噪声门:例如,只要信号的 RMS 电平低于某个阈值,就简单地衰减信号。换句话说,这会杀死音频中安静的部分。但是,您将在信号的更活跃部分保留噪声,如果您在实际信号中有很多动态,您也会摆脱一些信号。这往往适用于稍微嘈杂的语音样本,但不适用于非常嘈杂的古典音乐录音。我不知道Matlab是否有这个功能。
一些方法涉及制作噪声的“指纹”,然后在整个信号中消除它。但是,它往往会使结果听起来很奇怪,并且无论如何这可能足够复杂且特定于领域,因此它属于特定于音频的工具而不是相当通用的数学/ DSP系统。
matlab 不完全是一个音频处理器。你必须实现自己的过滤器。您必须根据需要正确设计过滤器。