资源描述:
《基于matlab的语音处理》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、数字语音处理处理上机报告指导老师:陈振兴姓名:班级序号:071112-11日期:2014年09月30日12目录一、题目要求:3二、算法设计:31、加窗处理函数:32、计算能量函数:33、计算幅值函数44、计算过零率45、计算自相关函数56、运行脚本文件:5三、运行效果及分析:61.原始信号、能量谱及幅度谱效果对比(N=500):62.根据过零率判断清音及浊音:83.自相关函数效果:84.N=1000时重复实验效果:10四、实验小结1212一、题目要求:使用Matlab读取一段语音信号做如下处理:1)将语音信号加窗;2)
2、计算每一帧信号能量;3)计算每一帧信号幅度;4)计算过零率;5)计算自相关系数;二、算法设计:1、加窗处理函数:function[wav_out,R,C]=Add_win(wav_in,N)%输入原始语音数据和窗宽,输出加窗后语音数据[C,R]=size(wav_in);%获得语言信号矩阵尺寸wav_out=zeros(C/N/2+1,N);%创建新矩阵,用于存放结果cnt=1;fori=1:(N/2):(C-N)%遍历原始数据,根据N加窗forj=1:Nwav_out(cnt,j)=wav_in((cnt-1)*N/
3、2+j,1);endcnt=cnt+1;endend2、计算能量函数:function[wav_e]=Calculate_E(wav_in)%输入帧语音数据,输出帧能量[C,R]=size(wav_in);%获得语言信号矩阵尺寸temp=zeros(C,R);%创建新矩阵,用于缓存数据wav_e=zeros(1,C);%创建新矩阵,用于存放结果fori=1:Cforj=1:Rtemp(i,j)=wav_in(i,j)*wav_in(i,j);%计算每个数据的能量end12endfori=1:Cforj=1:Rwav_e
4、(1,i)=wav_e(1,i)+temp(i,j);%计算每帧数据能量endendend3、计算幅值函数function[wav_a]=Calculate_A(wav_in)%输入帧语音数据,输出帧幅度[C,R]=size(wav_in);%获得语言信号矩阵尺寸temp=zeros(C,R);%创建新矩阵,用于缓存数据wav_a=zeros(1,C);%创建新矩阵,用于存放结果fori=1:Cforj=1:Rtemp(i,j)=abs(wav_in(i,j));%计算每个数据的幅度endendfori=1:Cforj
5、=1:Rwav_a(1,i)=wav_a(1,i)+temp(i,j);%计算每帧数据幅值endendend4、计算过零率function[wav_rate]=Calculate_Rate(wav_in)%输入帧语音数据,输出帧过零率[C,R]=size(wav_in);%获得语言信号矩阵尺寸wav_rate=zeros(1,C);%创建新矩阵,用于存放结果fori=1:%遍历每一帧数据,将相邻数据相乘forj=1:R-1temp=wav_in(i,j)*wav_in(i,j+1);iftemp<012wav_rate
6、(1,i)=wav_rate(1,i)+1;%乘积小于零,则认为过零一次endendendend5、计算自相关函数function[wav_sr]=Calculate_sr(wav_in)%输入帧数据,输出自相关函数[C,R]=size(wav_in);%获得语言信号矩阵尺寸wav_sr=zeros(1,R-1);%创建新矩阵,用于存放结果fork=1:R-1%遍历每一帧数据,将间隔为k的数据相乘forj=1:R-kwav_sr(1,k)=wav_sr(1,k)+wav_in(20,j)*wav_in(20,j+k);
7、endendend6、运行脚本文件:clearall;closeall;wav_in=wavread('speech_Chinese.wav');%读取语言信号[wav_out,R,C]=Add_win(wav_in,500);%加窗处理plot(wav_in);holdon;%绘制原始信号图像figure;[wav_e]=Calculate_E(wav_out);%计算能量[wav_a]=Calculate_A(wav_out);%计算幅值[wav_rate]=Calculate_Rate(wav_out);%计算过
8、零率[wav_sr]=Calculate_sr(wav_out);%计算自相关函数plot(wav_e);holdon;%绘制能量谱figure;plot(wav_a);holdon;%绘制幅度谱figure;plot(wav_rate);holdon;%绘制过零率曲线figure;plot(wav_sr);holdon;%绘制自