首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Matlab中没有一个简单的函数来降低音频信号的背景噪声?

为什么在Matlab中没有一个简单的函数来降低音频信号的背景噪声?
EN

Stack Overflow用户
提问于 2014-05-09 15:13:14
回答 4查看 2.5K关注 0票数 1

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

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

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-09 15:23:57

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

  • 低通滤波信号,既降低了噪声,又消除了信号的高频成分.对于某些应用程序来说,这是完全可以接受的。这里有很多低通滤波器函数,Matlab可以帮助你应用这些功能。需要对数字滤波器的工作原理有一些了解。我不打算在这里讨论;如果你想要更多的细节,考虑问一个更集中的问题。
  • 一种适合于许多情况的方法是使用噪声门:例如,只要它的均方根电平低于某一阈值,就可以使信号衰减。换句话说,这会杀死音频中安静的部分。但是,你会在信号的更活跃的部分保留噪音,如果你在实际的信号中有很多的动态,你也会去除一些信号。例如,对于轻微噪音的语音样本来说,这种方法效果很好,但对于非常嘈杂的古典音乐录音,效果却不太好。我不知道Matlab是否有此功能。
  • 有些方法包括对噪声做一个“指纹”,然后在整个信号中去除它。它往往会使结果听起来很奇怪,但无论如何,这可能是足够复杂和特定领域的,它属于一个音频专用工具,而不是一个相当普遍的数学/DSP系统。
票数 1
EN

Stack Overflow用户

发布于 2014-06-03 15:11:36

常见的音频降噪方法是基于谱减法,它在傅里叶变换幅值域中估计稳定的背景噪声水平,然后从每一帧中去除大量的能量,只在信号“超过”这个噪声层时才会产生能量。

您可以在Matlab中找到许多谱减的实现;这个实现在Matlab文件交换中得到了很高的评价:

http://www.mathworks.com/matlabcentral/fileexchange/7675-boll-spectral-subtraction

票数 2
EN

Stack Overflow用户

发布于 2014-05-09 16:31:10

减少噪声需要对噪声类型和信号类型以及它们的区别作出一些假设。音频处理器通常假设(正确或不正确)类似的声音是语音或音乐,而噪音是典型的录音会话背景嘶嘶、A/C电源嗡嗡声或乙烯基唱片弹出。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23568129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档