语音信号处理实验三.docx
- 文档编号:27869989
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:19
- 大小:143.51KB
语音信号处理实验三.docx
《语音信号处理实验三.docx》由会员分享,可在线阅读,更多相关《语音信号处理实验三.docx(19页珍藏版)》请在冰豆网上搜索。
语音信号处理实验三
程名称:
语音信号处理
实验项目:
用修正的短时自相关检测语音的
基音周期
实验地点:
起点机房
专业班级:
//////班学号:
2009/////
学生姓名:
//////
指导教师:
/////
2012年10月23日
一.实验目的
1.熟悉前一个实验程序以及中心削波的意义。
.
2.用Matlab实现用修正的短时自相关检测语音的基音周期。
3.分析修正的短时自相关在基音周期检测中的应用。
4.能够对程序进行重新编制。
二.实验原理
如果x(n)是一个周期为P的信号,则其自相关函数也是周期为P的信号,且在信号周期的整数倍处,自相关函数取最大值。
语音的浊音信号具有准周期性,其自相关函数在基音周期的整数倍处取最大值。
计算两相邻最大峰值间的距离,就可以估计出基音周期。
观察浊音信号的自相关函数图,其中真正反映基音周期的只有少数几个峰,而其余大多数峰都是由于声道的共振特性引起的。
因此为了突出反映基音周期的信息,同时压缩其他无关信息,减小运算量,有必要对语音信号进行适当预处理后再进行自相关计算以获得基音周期。
第一种方法是先对语音信号进行低通滤波,再进行自相关计算,因为语音信号包括十分丰富的谐波分量,基音频率的范围分布宰0~500Hz左右,即使女高音升c调最高也不会超过1Kz,所以采用1Kz的低通滤波器先对语音信号进行滤波,保留基音频率,再用2Kz采样频率进行采样;最后用2~20ms的滞后时间计算短时自相关,帧长取10~20ms,即可估计出基音周期。
且中心削波函数如式(3-1)
一般削波电平X
取本帧语音幅度的60%~70%。
将削波后的序列f(x)用短时自相关函数估计基音周期,在基音周期位置的峰值更加尖锐,可以有效减少倍频或半频错误。
三.实验要求
1.实验前自己用CoolEdit音频编辑软件录制浊音部分,并把它保存为.txt文件。
2.分别取长度N=160和N’=N+K的矩形窗函数作用于语音信号上,首先对其进行中心削波,比较削波前和削波后语音信号波形,并使得削波后的信号进行乘积并求和,计算延迟为0 3.写出实验报告,分析实验结果。 四.实验条件 计算机Matlab软件 五.实验程序及数据 fid=fopen('zhuoyin.txt','rt'); [a,count]=fscanf(fid,'%f',[1,inf]); L=length(a); m=max(a); fori=1: L a(i)=a(i)/m; end m=max(a); n=min(a); ht=(m+n)/2; fori=1: L; a(i)=a(i)-ht; end figure (1); subplot(2,1,1); plot(a,'k'); axis([0,450,-1,1]); title('中心削波前语音'); xlabel('样点数'); ylabel('幅度值'); coeff=0.7; th0=max(a)*coeff; fork=1: L; ifa(k)>=th0 a(k)=a(k)-th0; elseifa(k)<=(-th0); a(k)=a(k)+th0 else a(k)=0; end end m=max(a); fori=1: L; a(i)=a(i)/m; end subplot(2,1,2); plot(a,'k'); axis([0,450,-1,1]); title('中心削波后语音波形'); xlabel('样点数'); ylabel('幅度值'); fclose(fid); fid=fopen('zhuoyin.txt','rt'); [b,count]=fscanf(fid,'%f',[1,inf]); fclose(fid); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+b(m)*b(m+k-1); end A(k)=sum; end fork=1: 160 B(k)=A(k)/A (1); end figure (2); subplot(2,1,1); plot(B,'k'); title('中心削波前修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+a(m)*a(m+k-1); end A(k)=sum; end fork=1: 160; C(k)=A(k)/A (1); end subplot(2,1,2); plot(C,'k'); title('中心削波后修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); 六.思考题 1.在相同的实验环境下,用Matlab程序实现短时自相关检测语音的基音周期的图形,并与修正的短时自相关进行比较。 fid=fopen('zhuoyin.txt','rt'); [a,count]=fscanf(fid,'%f',[1,inf]); L=length(a); m=max(a); fori=1: L a(i)=a(i)/m; end m=max(a); n=min(a); ht=(m+n)/2; fori=1: L; a(i)=a(i)-ht; end figure (1); subplot(2,1,1); plot(a,'k'); axis([0,450,-1,1]); title('中心削波前语音'); xlabel('样点数'); ylabel('幅度值'); coeff=0.7; th0=max(a)*coeff; fork=1: L; ifa(k)>=th0 a(k)=a(k)-th0; elseifa(k)<=(-th0); a(k)=a(k)+th0 else a(k)=0; end end m=max(a); fori=1: L; a(i)=a(i)/m; end subplot(2,1,2); plot(a,'k'); axis([0,450,-1,1]); title('中心削波后语音波形'); xlabel('样点数'); ylabel('幅度值'); fclose(fid); fid=fopen('zhuoyin.txt','rt'); [b,count]=fscanf(fid,'%f',[1,inf]); fclose(fid); N=160; A=[]; fork=1: 160; sum=0; form=1: N-(k-1); sum=sum+b(m)*b(m+k-1); end A(k)=sum; end fork=1: 160 B(k)=A(k)/A (1); end figure (2); subplot(2,1,1); plot(B,'k'); title('中心削波前自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); N=160; A=[]; fork=1: 160; sum=0; form=1: N-(k-1); sum=sum+a(m)*a(m+k-1); end A(k)=sum; end fork=1: 160; C(k)=A(k)/A (1); end subplot(2,1,2); plot(C,'k'); title('中心削波后自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); 2.分析清音的修正的短时自相关图形。 fid=fopen('qingyin.txt','rt'); [a,count]=fscanf(fid,'%f',[1,inf]); L=length(a); m=max(a); fori=1: L a(i)=a(i)/m; end m=max(a); n=min(a); ht=(m+n)/2; fori=1: L; a(i)=a(i)-ht; end figure (1); subplot(2,1,1); plot(a,'k'); axis([0,450,-1,1]); title('中心削波前语音'); xlabel('样点数'); ylabel('幅度值'); coeff=0.7; th0=max(a)*coeff; fork=1: L; ifa(k)>=th0 a(k)=a(k)-th0; elseifa(k)<=(-th0); a(k)=a(k)+th0 else a(k)=0; end end m=max(a); fori=1: L; a(i)=a(i)/m; end subplot(2,1,2); plot(a,'k'); axis([0,450,-1,1]); title('中心削波后语音波形'); xlabel('样点数'); ylabel('幅度值'); fclose(fid); fid=fopen('qingyin.txt','rt'); [b,count]=fscanf(fid,'%f',[1,inf]); fclose(fid); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+b(m)*b(m+k-1); end A(k)=sum; end fork=1: 160 B(k)=A(k)/A (1); end figure (2); subplot(2,1,1); plot(B,'k'); title('中心削波前修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+a(m)*a(m+k-1); end A(k)=sum; end fork=1: 160; C(k)=A(k)/A (1); end subplot(2,1,2); plot(C,'k'); title('中心削波后修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); 3.用Matlab程序实现语音信号的三电平削波,再对它进行修正的短时自相关。 并与中心削波进行对比。 分析它们在语音信号处理中的应用。 fid=fopen('zhuoyin.txt','rt'); [a,count]=fscanf(fid,'%f',[1,inf]); L=length(a); m=max(a); fori=1: L a(i)=a(i)/m; end m=max(a); n=min(a); ht=(m+n)/2; fori=1: L; a(i)=a(i)-ht; end figure (1); subplot(2,1,1); plot(a,'k'); axis([0,450,-1,1]); title('三电平削波前语音'); xlabel('样点数'); ylabel('幅度值'); coeff=0.7; th0=max(a)*coeff; fork=1: L; ifa(k)>=th0 a(k)=1; elseifa(k)<=(-th0); a(k)=-1; else a(k)=0; end end m=max(a); fori=1: L; a(i)=a(i)/m; end subplot(2,1,2); plot(a,'k'); axis([0,450,-1,1]); title('三电平削波后语音波形'); xlabel('样点数'); ylabel('幅度值'); fclose(fid); fid=fopen('zhuoyin.txt','rt'); [b,count]=fscanf(fid,'%f',[1,inf]); fclose(fid); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+b(m)*b(m+k-1); end A(k)=sum; end fork=1: 160 B(k)=A(k)/A (1); end figure (2); subplot(2,1,1); plot(B,'k'); title('三电平削波前修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]); N=160; A=[]; fork=1: 160; sum=0; form=1: N; sum=sum+a(m)*a(m+k-1); end A(k)=sum; end fork=1: 160; C(k)=A(k)/A (1); end subplot(2,1,2); plot(C,'k'); title('三电平削波后修正自相关'); xlabel('延迟k'); ylabel('幅度值'); axis([0,320,-1,1]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 信号 处理 实验