您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 畜牧/养殖 > 用FIR低通滤波器对语音信号进行处理
一、实验目的对一段已知的音频进行信号处理,将音频中2500Hz的噪声用低通滤波器滤除。二、实验思路1.用MATLAB设计滤波器系数,确定滤波器阶数;2.利用CCS设计FIR滤波器,将滤波器系数添加进来;3.用MATLAB将音频wav转换成CCS可以读的输入dat文件;4.将输入dat文件作为输入,经过卷积运算,输出输出dat文件;5.再将输出dat文件用MATLAB还原成语音wav格式。三、实验步骤1.用MATLAB设计FIR滤波器系数(1)键入fdatool(2)选择lowpass(3)选择FIR滤波器(4)Specifyordor(设计的是65阶)(5)Window选择hamming窗(6)采样频率fs:8000Hz(7)截止频率fc:(2000~2200)设计为2100Hz(8)点击design(9)File、export、Mat-file、export、保存2.用CCS设计FIR滤波器,程序如下:.titleFIR4.asm.mmregs.def_c_int00.bssy,1;给y分配一个存储单元xn.usectxn,66;定义xn的缓冲区域a0.usecta0,66PA0.set0;I/O口地址赋值PA1.set1.datatable.word-5;定义滤波器系数.word27.word1.word-35.word5.word49.word-17.word-70.word38.word94.word-72.word-120.word123.word144.word-195.word-160.word292.word161.word-416.word-139.word575.word79.word-777.word35.word1039.word-240.word-1408.word614.word2014.word-1417.word-3421.word4282.word15302.word15302.word4282.word-3421.word-1417.word2014.word614.word-1408.word-240.word1039.word35.word-777.word79.word575.word-139.word-416.word161.word292.word-160.word-195.word144.word123.word-120.word-72.word94.word38.word-70.word-17.word49.word5.word-35.word1.word27.word-5.text_c_int00:SSBXFRCTSTM#a0,AR1;AR1指向a0的首地址RPT#65;重复执行下条语句65次MVPDtable,*AR1+;从table首址重复传递66个数据STM#xn+65,AR3;AR3指向x(n-65)STM#a0+65,AR4;AR4指向a65STM#66,BK;循环缓冲区长度BK=5STM#-1,AR0;AR0=-1,双操作数减量LD#xn,DPPORTRPA1,@xn;输入xnSTM#1000h,AR6;输出数据缓冲区首址为#1000hSTM#9fffh,AR7;循环计算40959个样本点FIR:RPTZA,#65;A清0,共迭代65次MAC*AR3+0%,*AR4+0%,A;双操作数乘法累加STHA,@y;保存y(n)PORTW@y,PA0;输出y(n);BDFIRPORTRPA1,*AR3+0%;输入新数据STHA,*AR6+;保存y(n)BANZFIR,*AR7-;循环40959次end:Bend.END3.用MATLAB将音频wav转换成CCS可以读的input.dat文件,程序如下:y=wavread('E:\SpeechAndNosie.wav');%读入wav数据fid=fopen('E:\input.dat','w');%打开input.dat文件(没有就自动创建),获取文件IDfprintf(fid,'1651?1?0?1?0?\n');%写入dat文件的头几个参数fprintf(fid,'0x%x\n',round(y*100)+(y0)*2^16);%写入音频信号的数据,以16进制显示,负数用补码显示4.将input.dat文件作为输入,经过卷积运算,输出output.dat文件;5.再将output.dat文件用MATLAB还原成语音wav格式,程序如下:fid=fopen('E:\DSPprogram\FIR4\output.dat','rt');%打开output.dat文件,获取文件ID(fid)y=fscanf(fid,'%x\n');%将数据以16进制写入到变量y中y1=(y-(y2^15)*(2^16))/100;%16进制数转换为小数wavwrite(y1,8000,'E:\DSPprogram\FIR4\output.wav');%输出output.wav文件四、实验结果1.FIR低通滤波器对语音信号的响应及频谱:可以看到在2500Hz处,滤波器对语音信号的衰减很大2.通过处理后的语音与原始语音进行比较,可以明显的发现声音清晰,没有噪声的干扰。(结果已经发给了助教)五、实验体会1.STM#9fffh,AR7;循环计算40959个样本点在设置中尽量将数值设大,已期望循环计算的次数大,能将10秒的语音采样点全部进行运算;2.对于用MATLAB实现wav格式与dat格式转换的的问题上花了不少时间,上网查找资料后得以解决(用output.dat生成wav文件时,要将采样频率fs设为8000Hz)
本文标题:用FIR低通滤波器对语音信号进行处理
链接地址:https://www.777doc.com/doc-2202393 .html