arm语音滤波体会

这一周的ARM语音滤波真是让我伤透了脑筋。高开低走。以实验为主导的做法可能就会是这样的过程。

 

1.周一通过GoldWav的帮助,让我很快发现高通滤波(600~800截止频率),用matlab进行仿真,效果确实不错,嗡嗡声已经小了很多,波形也比之前好很多,对语音信号进行端点检测会准不少。

 

2.着手准备设计滤波器往ARM上面移植,使用matlab fdtool进行滤波器的设计,最后发现,330阶的FIR椭圆型滤波器效果最好。将滤波器的系数用头文件的方式导出。

编写读入wav,滤波,保存wav的代码。可编程实在是我的弱项,一大堆错误。

 

3.晚上终于把整个程序写好,在ARM上一跑,2秒钟,顿时心凉了一截。开始尝试各种FIR滤波器,30阶的最小二乘是在性能和效果中比较折中的。同时发现,IIR滤波器在阶数很低的情况下,滤波器的幅频响应也能达到FIR的效果。

 

4.设计IIR滤波器(6阶,butterworth,同学建议chebyshev,有时间再试),速度很快,但是结果很不好。用书上的程序,有个精确到小数点15位的参数gain=0.004204816817972不知道什么意思,带来的结果是数据变得很小(这个诡异的精确数字在baidu、google上都没查出出自何处)。如果不用,失真很严重,没发现为什么。

 

5.见前一篇blog,干那事去了。

 

6.在同学的帮助下,终于发现,IIR滤波器虽然在matlab下看到幅频响应很好,只衰减不增强,但是计算后幅度会有超过50%的增大。虽然IIR适合进行语音处理(语音信号对相位不敏感),但是在16bit的量化面前,IIR就显得不是那么适合了。超过50%的增大使得在量化时失真很严重(PS:我量化的方法其实跟matlab中wavwrite一样,就是乘32768,超过32768或者小于-32768的强制截断)。接下来,我换了一种方式,首先测出设计的滤波器的幅度响应real_gain,再将4中说的gain设置为1/real_gain,输入信号先乘上gain(实际是衰减了)再滤波。效果不错,信号幅度略有衰减。至于real_gain的产生,翻阅一些资料后觉得是有限字长的效应,是滤波器系数量化成32bit后的影响,不过有待确证。

 

实验结果小结:

FIR, 330 Order,滤波效果最好,但是跑ARM上是浮云;

FIR,   30 Order,滤波效果最差,时间中等,0.3s的样子;

IIR,      6 Order,滤波效果中等,时间最快,瞬间;

 

优先考虑IIR,over。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值