一种简单高效的音频降噪算法示例(附完整C代码)
近期比较忙,
抽空出来5.1开源献礼.
但凡学习音频降噪算法的朋友,肯定看过一个算法.
<<语音增强-理论与实践>> 中提及到基于对数的最小均方误差的降噪算法,也就是LogMMSE.
资料见:
<<Speech enhancement using a minimum mean-square error log-spectral amplitude estimator.>>
-----Ephraim, Y. and Malah, D. (1985)
之前也是花了不少时间去查阅降噪相关的思路,
但是最终发现前人的思路,有很多局限性或者说弊端.
一般都是提出一种数学先验的假设,换句话说,在paper里讲点故事.
然后最终,故事的结局都是it works.
但实际应用却差强人意.
而一般的图像降噪流程,见图:
也就是,一个降噪算法的基本组成部分有:
1.噪声提取(用于提取噪声)
2.静音检测(一般检测是否为人声,减少误判)
3.数学先验假设(用于降噪)
当然最小均方误差的降噪思路,用在图像上一样适用.
但是,大多数音频降噪算法仅仅适配某种特殊情况(特例).
工程化应用时,会发现,
一个坑接着一个坑,
然后不得不妥协.勉强能用就行,
要求太高不现实.
而当年看了logMMSE的思路之后,就很清楚地明白,
这思路是可行的,但是特别鸡肋.
话说如此,但是对作为学习信号处理,音频降噪来说,
这个是一个特别好的入门示例算法.
至少经过实践之后,你心中能有了个大概的印象.
音频降噪是一个什么样的工作,会碰到什么样的难点.
logmmse的各种实现,在github搜索一下,都能找得到.
这里,并不打算解析logmmse的算法细节.
只是分享一段非常简单有效的类似logmmse算法的c语言实现.
说是类似,不如说,
思路来自logmmse,只是更加的简洁明了.(自我以为)
自己动手,丰衣足食.
稍微改进一下,可以进一步适配各种环境和情况,
当然也不是那么容易,
例如:
+vad.
+延时记忆机制诸如此类
代码基于本人最近开源的基于傅里叶变换的重采样算法.
https://github.com/cpuimage/FFTResampler
题外话:
在之前为了找各种重采样算法,费心死了.
所以,写一个通用简洁的重采样算法是我的一个待办事项.
重采样算法算是暂时结束了.
https://github.com/cpuimage/resampler
https://github.com/cpuimage/FFTResampler
这两个平时应该是够用了,
下一步要继续做的话,
可能就是音频超分辨率算法了.
除了懒,没别的,能复用就复用了.
回到主题上,这个简易的算法用来去除平稳噪声或底噪,是非常合适的,
当然当前开源实现的算法,是非实时的,
当然稍微改进下可以应用在实时的环境.
值5.1放假之际,开源出来,给大家参考学习.
权当抛砖引玉,一起玩耍.
项目地址:
https://github.com/cpuimage/SimpleAudioDenoise
若有其他相关问题或者需求也可以邮件联系俺探讨。
当然一些基础性的问题,一概忽略.
有时间给我写邮件,不如多看点资料书籍.
邮箱地址是:
gaozhihan@vip.qq.com
一种简单高效的音频降噪算法示例(附完整C代码)的更多相关文章
- 简洁明了的插值音频重采样算法例子 (附完整C代码)
近一段时间在图像算法以及音频算法之间来回游走. 经常有一些需求,需要将音频进行采样转码处理. 现有的知名开源库,诸如: webrtc , sox等, 代码阅读起来实在闹心. 而音频重采样其实也就是插值 ...
- 基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...
- 基于傅里叶变换的音频重采样算法 (附完整c代码)
前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题. 坦白讲, ...
- 音频降噪算法 附完整C代码
降噪是音频图像算法中的必不可少的. 目的肯定是让图片或语音 更加自然平滑,简而言之,美化. 图像算法和音频算法 都有其共通点. 图像是偏向 空间 处理,例如图片中的某个区域. 图像很多时候是以二维数据 ...
- 音频自动增益 与 静音检测 算法 附完整C代码
前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...
- 音频自动增益 与 静音检测 算法 附完整C代码【转】
转自:https://www.cnblogs.com/cpuimage/p/8908551.html 前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用 ...
- 七大查找算法(附C语言代码实现)
来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...
- 经典傅里叶算法小集合 附完整c代码
前面写过关于傅里叶算法的应用例子. <基于傅里叶变换的音频重采样算法 (附完整c代码)> 当然也就是举个例子,主要是学习傅里叶变换. 这个重采样思路还有点瑕疵, 稍微改一下,就可以支持多通 ...
- 自动曝光修复算法 附完整C代码
众所周知, 图像方面的3A算法有: AF自动对焦(Automatic Focus)自动对焦即调节摄像头焦距自动得到清晰的图像的过程 AE自动曝光(Automatic Exposure)自动曝光的是为了 ...
随机推荐
- 如何理解MVVM?
随着前端页面越来越复杂,用户对于交互性要求也越来越高,MVVM模型应运而生. MVVM最早由微软提出来,它借鉴了桌面应用程序的MVC思想,在前端页面中,把Model用纯JavaScript对象表示,V ...
- 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ...
- php扩展开发-INI配置
php.ini文件是用来保存各项扩展配置的文件,每个扩展都或多或少需要有一个定制化的配置,ini文件是一个很好的保存配置的方式,我们来看下怎么在自己的扩展里,使用到ini的配置功能 //创建ini的配 ...
- 解决SecureCRT远程Linux遇到文件不能直接往CRT里直接拖入的问题
不能拖入到CRT的第一个原因可能是Options-->Global Options-->Terminal中的Mouse下的Copy on select没有勾选.当发现自己勾选了也不能往里面 ...
- 汉罗塔问题——Python
汉罗塔问题就是一个循环的过程:* (有两种情况) 如果被移动盘只有一个盘子,可以直接移动到目的盘 但是被移动盘有多个盘子,就先需要将上面的n-1个盘子通过目的盘移动到辅助盘,然后将被移动盘最下面一个盘 ...
- 匿名函数lambda python
lambda 的主体是一个表达式,不是一个代码块lambda 只有一行,仅仅能在lambda表达式种封装有限的逻辑进去匿名函数:需要一个函数,而又不想动脑筋去想名字 #普通函数的定义 def f(a, ...
- python——int()函数
1. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢? 小数取整会采用比较暴力的截断方式,即向下取整.(注:5.5向上取整为6,向下取整为5) 2. 我们人类思维是习惯于“四舍五入” ...
- ELK之Elasticsearch
安装并运行Elasetisearch cd elasticsearch-<version> ./bin/elasticsearch 如果你想把 Elasticsearch 作为一个守护进程 ...
- Java石头剪刀布小游戏
package com.neusoft.test; import java.awt.BorderLayout; import java.awt.Choice; import java.awt.Colo ...
- 理解JAVA与C的运行机制
1.java的运行机制 java的编译过程,将java的源程序(扩展名为.java的文件),由java编译程序将java的字节码文件(.class文件)在jvm上运行,机器码有cpu运行, jvm编译 ...