为什么不是';Matlab中是否有一个简单的函数来降低音频信号的背景噪声?

为什么不是';Matlab中是否有一个简单的函数来降低音频信号的背景噪声?,matlab,signal-processing,noise-reduction,Matlab,Signal Processing,Noise Reduction,这是因为这是一个复杂的问题吗?我的意思是广泛,因此不存在简单/通用的解决方案 因为每个(几乎)信号处理软件(Avisoft、GoldWave、Audacity…)都具有降低信号背景噪声的功能。通常它使用FFT。但是我在Matlab中找不到一个函数(已经实现)可以让我们做同样的事情?那么手工制作的方法正确吗 谢谢。matlab并不是一个真正的音频处理器。你必须实现你自己的。您必须根据需要正确设计滤波器。matlab并不是一个真正的音频处理器。你必须实现你自己的。您必须根据需要正确地设计滤波器。问题

这是因为这是一个复杂的问题吗?我的意思是广泛,因此不存在简单/通用的解决方案

因为每个(几乎)信号处理软件(Avisoft、GoldWave、Audacity…)都具有降低信号背景噪声的功能。通常它使用FFT。但是我在Matlab中找不到一个函数(已经实现)可以让我们做同样的事情?那么手工制作的方法正确吗


谢谢。

matlab并不是一个真正的音频处理器。你必须实现你自己的。您必须根据需要正确设计滤波器。

matlab并不是一个真正的音频处理器。你必须实现你自己的。您必须根据需要正确地设计滤波器。

问题是,您想要什么样的降噪效果?没有一种解决方案可以满足所有需求。以下是一些方法:

  • 对信号进行低通滤波可降低噪声,但也可去除信号的高频成分。对于某些应用,这是完全可以接受的。有许多低通滤波器函数,Matlab可以帮助您应用它们。需要了解数字滤波器的工作原理。我不想在这里讨论它;如果你想要更多的细节,请考虑一个更为集中的问题。

  • 一种适用于许多情况的方法是使用噪声门:例如,只要信号的RMS电平低于某个阈值,就可以简单地衰减信号。换句话说,这会杀死音频中安静的部分。不过,在信号中更活跃的部分会保留噪声,如果在实际信号中有很多动态,也会去除一些信号。比如说,这种方法对轻微噪声的语音样本效果较好,但对非常噪声的古典音乐录音效果不佳。我不知道Matlab是否有这个功能

  • 有些方法涉及对噪声进行“指纹”处理,然后在整个信号中消除噪声。不过,它往往会让结果听起来很奇怪,而且在任何情况下,这可能都足够复杂,并且是特定于特定领域的,因此它属于特定于音频的工具,而不属于相当通用的数学/DSP系统


问题是,你想要什么样的降噪?没有一种解决方案可以满足所有需求。以下是一些方法:

  • 对信号进行低通滤波可降低噪声,但也可去除信号的高频成分。对于某些应用,这是完全可以接受的。有许多低通滤波器函数,Matlab可以帮助您应用它们。需要了解数字滤波器的工作原理。我不想在这里讨论它;如果你想要更多的细节,请考虑一个更为集中的问题。

  • 一种适用于许多情况的方法是使用噪声门:例如,只要信号的RMS电平低于某个阈值,就可以简单地衰减信号。换句话说,这会杀死音频中安静的部分。不过,在信号中更活跃的部分会保留噪声,如果在实际信号中有很多动态,也会去除一些信号。比如说,这种方法对轻微噪声的语音样本效果较好,但对非常噪声的古典音乐录音效果不佳。我不知道Matlab是否有这个功能

  • 有些方法涉及对噪声进行“指纹”处理,然后在整个信号中消除噪声。不过,它往往会让结果听起来很奇怪,而且在任何情况下,这可能都足够复杂,并且是特定于特定领域的,因此它属于特定于音频的工具,而不属于相当通用的数学/DSP系统


降低噪声需要对噪声类型和信号类型以及它们之间的区别做出一些假设。音频处理器通常(正确或错误地)假设音频是语音或音乐,而噪声是典型的录制会话背景嘶嘶声、空调电源嗡嗡声或乙烯基录制砰砰声


Matlab是通用的(微波无线电、数据通信、亚音速地震、心跳等),因此不能进行此类假设。

减少噪声需要对噪声类型和信号类型以及它们的不同之处进行一些假设。音频处理器通常(正确或错误地)假设音频是语音或音乐,而噪声是典型的录制会话背景嘶嘶声、空调电源嗡嗡声或乙烯基录制砰砰声


Matlab是通用的(微波无线电、数据通信、亚音速地震、心跳等),因此无法进行此类假设。

Audacity等内置的常见音频降噪方法基于谱减法,它在傅里叶变换幅度域中估计稳定背景噪声的水平,然后从每一帧中去除大量能量,只在信号“戳到”噪声层的地方留下能量

你可以在Matlab中找到许多谱减法的实现;这一项在Matlab文件交换中得到高度评价:


像Audacity这样内置的常见音频降噪方法是基于谱减法的,谱减法在傅里叶变换幅度域中估计稳定背景噪声的水平,然后从每一帧中去除大量能量,只在信号“戳到上面”的地方留下能量这是噪音地板

你可以在Matlab中找到许多谱减法的实现;这一项在Matlab文件交换中得到高度评价: