由崎星空 发表于 2023-10-17 15:04:40

【分享开源】语音降噪算法

哈喽,已经有好久没有跟大家分享一些东西了,刚好看到论坛坛友问了一些问题,就想着本次分享一些,语音降噪的 东西吧。
一开始从事无线通信系统这块的项目的时候,走了很多坎坷的道路。从基础的语音采集和转换,到链路的搭建和实现。一步一个坎慢慢下来,虽然现在也还是很多坎,不过慢慢来。(进入正题)

本次分享的算法是:Melpe里面的 降噪部分,这个算法对 机械噪音,白噪音效果较好。Melpe本身是语音编解码算法,但是它自带了一个降噪的算法,测试效果也不错。
分享2个工程,一个是原始工程,原始工程是直接在 win32上面的,然后如果直接移植到 arm上运行效率很低,然后对一些函数做了一些优化,用arm的dsp库。


使用方法也很简单,详细看下图:



最重要是看效果。

原始波形:


带噪音音频波形:


降噪之后的波形:






分享以上,感兴趣的朋友可以自己看一下具体的实现流程。



eric2013 发表于 2023-10-17 15:17:36

强{:8:}

由崎星空 发表于 2023-10-17 15:25:21

eric2013 发表于 2023-10-17 15:17


{:6:} TI之前的工程师太强了,算法几十年都效果这么好。

庄永 发表于 2023-10-17 16:02:52

顶一个

winterduyudong 发表于 2023-10-25 16:13:41

感谢分享,试试效果。。。

131202110 发表于 2023-10-30 18:32:01

在pc上处理了下,不知道啥问题,看起来不太对。:'(

由崎星空 发表于 2023-11-1 13:48:27

131202110 发表于 2023-10-30 18:32
在pc上处理了下,不知道啥问题,看起来不太对。

你用的是什么工程哇,vs 工程吗,vs工程可以直接打开的运行的。我看现象应该是 数据的 输入大小不对。

我忘了说 一些参数了:
1. 输入语音采样率必须是 8K、单声道。16bit以内,如果是32bit可以缩方到16bit.
2. NoiseSuppression 函数输入的 语音 数组是 22.5ms帧,换算过来就是 180个采样sample。加上是16bit的,那么输入的数据大小必须是 180 * 2Byte = 360 Byte.如果输入数据不对就会转换成你这样。

131202110 发表于 2023-11-6 13:50:55

由崎星空 发表于 2023-11-1 13:48
你用的是什么工程哇,vs 工程吗,vs工程可以直接打开的运行的。我看现象应该是 数据的 输入大小不对。

...

使用vs工程,输入语音采样率8k,单声道,uint8_t转成int16_t,180个数据处理一次。

由崎星空 发表于 2023-11-6 21:39:01

131202110 发表于 2023-11-6 13:50
使用vs工程,输入语音采样率8k,单声道,uint8_t转成int16_t,180个数据处理一次。

你发来我看看是不是处理的不对

131202110 发表于 2023-11-7 14:28:49

vs工程+wav语音

由崎星空 发表于 2023-11-7 16:25:04

131202110 发表于 2023-11-7 14:28
vs工程+wav语音

看了你改的内容了,你的wav文件格式是8bit的。需要放大到16bit.因为你是直接把 8bit赋值到了16bitd数组里面,其实实际上这个值会变成很小,因为你默认的wav是8bit的,但是处理的是16bit,它的滤波器会把你的赋值较低的部分给删除掉,因此你看起来你的波形有很大区别,这样也会音质受损。

建议:把8bit转成16bit在处理。可以直接把数据源文件转为16bit。

xujuanliang 发表于 2024-3-19 19:46:26

记录一下 学习了
页: [1]
查看完整版本: 【分享开源】语音降噪算法