语音信号线性预测分析_第1页
语音信号线性预测分析_第2页
语音信号线性预测分析_第3页
语音信号线性预测分析_第4页
语音信号线性预测分析_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、视频语音处理技术语音信号线性预测分析学院名称: 计算机与信息工程学院 专业名称: 计算机科学与技术 年级班级: 姓 名: 学 号: 计算机与信息技术学院综合性、设计性实验报告专业:计算机科学技术 年级/班级:2011级 20122013学年第一学期课程名称视频语音处理技术指导教师张新明本组成员学号姓名1108114153 王彦秋实验地点计科楼324实验时间项目名称语音信号线性预测分析实验类型综合性一、实验目的: 综合采用各种线性预测分析的方法,能够达到预测更为准确。要求掌握各种下列语音信号线性预测分析技术,提高学生数字语音信号处理的能力。利用MATLAB编程环境和强大的处理功能,实现语音信号线

2、性预测。主要训练如下的项目从而获得线性预测的综合能力:1、LPC方程的自相关解法。2、LPC参数到LSP参数的转换。3、LSP参数到LPC参数的转换。4、LPC参数到ISP参数的转换。二、实验仪器或设备:windowsXP下的Matlab编程环境三、总体设计(设计原理、设计方案及流程等) 线性预测编码原理:利用过去的样值对新样值进行预测,然后将样值的实际值与其预测值相减得到一个误差信号,显然误差信号的动态范围远小于原始语音信号的动态范围,对误差信号进行量化编码,可大大减少量化所需的比特数,使编码速率降低。1.LPC方程的自相关解法利用对称托普利兹(Toeplitz)矩阵的性质,自相关法求解可用

3、Levinson-Durbin(莱文逊-杜宾)递推算法求解。该方法是目前广泛采用的一种方法。利用Levinson-Durbin算法递推时,从最低阶预测器开始,由低阶到高阶进行逐阶递推计算。自相关法递推过程如下: 联立左面5式可对i=1、2、p进行递推求解,其最终解为 对于p阶预测器,在上述求解预测器系数的过程中,阶数低于p的各阶预测器系数也同时得到。2、LPC参数到LSP参数的转换。 将P(z)和Q(z)中与LSP系数无关的两个实根取得到如下两个新的多项式 从LPC系数到LSP系数的转换过程,其实就是求解使以上两式等于零时的的值。可采用以下几种方式求解。第一种方法:利用代数方程式求解。由令根据

4、得第二种方法:离散傅立叶变换(DFT)方法 对 和 系数求离散傅立叶变换,得到各点的值,搜索最小值的位置,即是零点所在。由于除了0和p之外,总共有p个零点,而且 和 的根是相互交替出现的,因此只要很少的计算量即可解得,其中N的取值取64128就可以第三种方法:利用切比雪夫(Chebyshev)多项式求解则可以写作其中是m阶的Chebyshev多项式 。f(i)是由递推关系计算得到的 和 的每个系数。用下面的递推关系其中 。多项式C(x)在x=cosw时的递推关系是: 其中初始值 第四种方法:将0p之间均分为60个点,以这60个点的频率值代入(6-41)、(6-42)式,检查它们的符号变化,在符

5、号变化的两点之间均分为4份,再将这三个点频率值代入方程(6-41)、(6-42),符号变化的点即为所求的解。这种方法误差略大,计算量较大,但程序实现容易。3、LSP参数到LPC参数的转换 已知量化和内插的LSP系数 ,可用下式计算 和 的系数 和 :以下的递推关系可利用qi,i=0、1、p-1,来计算 其中 ,初始值 把上面递推关系中的q2i-1替换为q2i,就可以得到 根据 , 和 和利用 得到LPC系数为4、LPC参数到ISP参数的转换。语音编码时,可将LPC系数转换为ISP系数以进行量化和内插。 LPC系数与ISP系数之间的转换与LSP类似。从LPC转换为ISP系数时,首先应用求解LSP

6、参数的方法求解出前p-1个ISP系数,再给第p个参数赋上合适的值,即可得到ISP系数。解码时,首先根据量化ISP系数得到p-1个LPC系数,再根据第p个ISP系数得到最后一个LPC系数。四、实验步骤(包括主要步骤、代码分析等)1.下面给出从LPC参数到LSP参数转换的MATLAB程序:a_lsf_main.m% 已知语音文件求出其LPC系数后,调用a_lsfLconversation.m函数求其对应的LSF% a_lsf_main.mclear;close all% 将所有变量置为0clc% 清除命令窗口fid=fopen('sx86.txt','r');p1=

7、fscanf(fid,'% f');fclose(fid);p=filter(1 -0.68,1,p); % 预加重滤波x=fra(320,160,p); % 分帧,帧移为160个样点x=x(60,:); % 取第60帧作为分析帧N=16% 给线性预测分析的阶次赋值a1=lpc(x,N);% 调用MATLAB库函数中的lpc函数求解出LPC系数a1% 此处也可以调用本章赋的函数lpc_coeffi-% cients(s,p),调用语句为a1=lpc_coefficients(x,N)a=a1(:);% 将线性预测系数a1赋给矩阵a lsf=a_lsf_conversion(a)

8、;% 调用函数a_lsf_conversion实现从LPC系数到LSF参数 % 转换% lsf=poly21lsf(a);% 也可调用MATLAB库函数中的poly21lsf(a)函数求解出LSF系数,调用 % 结果为归一化角频率lsf_abnormalized=lsf.*(6400/3.14);% 将求得的lsf参数反归一化到 % 06400Hz% 使用时可根据实际需要进行更改,如窄带语言编码语音信号频带范围为3003400Hz,此时% 就需要将6400Hz改为3400Hz% 将求得的归一化、反归一化lsf参数输出到文本文件:从lpc系数解得的lsf参数.txtfid= fopen('

9、;从lpc系数解得的lsf参数.txt','w'); fprintf(fid,'归一化的lsf:n'); fprintf(fid,'%6.2f,',lsf); fprintf(fid,'n'); fprintf(fid,'反归一化的lsf:n'); fprintf(fid,'% 8.4f,',lsf_abnormalized); fclose(fid);% EOF a_lsf_main.m函数 a_lsf_conversion 的MATLAB程序见 a_lsf_conversion.m.%

10、程序 a_lsf_conversion.m.function lsf=a_lsf_conversion(a)%如果a不是实数,输出错误信息:LSF不适用于复多项式的求解ifisreal(a), error('Line spectral frequencies are not defined for complex polynomials.');end% 如果a(1)不等于1,将其归一化为1if a(1)=1.0, a=a./a(1);% 将矩阵a的每个元素除以a(1)在赋给矩阵aend% 判断线性预测多项式的跟是否都在单位园内,如果不在,则输出错误信息if (max(abs(r

11、oots(a)>=1.0), error('The polynomil must have all roots inside of the unit circle.');end% 求对称和反对称多项式的系数p=length(a)-1; % 求对称和反对称多项式的阶次a1=a;0; % 给行矩阵a再增加一个元素为0的行a2=a1(end:-1:1); % a2的第一行为a1的最后一行,最后一行为a1的第一行p1=a1+a2; % 求对称多项式的系数Q1=a1-a2; % 求反对称多项式的系数% 如果阶次p为偶数次,从p1取掉实数根z=-1,从Q1去取掉实数根z=1% 如果阶

12、次p为奇数次,从Q1去取掉实数根z=1及z=-1if rem(p,2),% 求解p除以2的余数,如果p为奇数次,余数为1,否则为0 Q=deconv(Q1,1 0 -1);% 奇数阶次,从Q1取掉实数根z=1 p=p1;else % p为偶数阶次执行下面操作 Q=deconv(Q1,1 -1);% 从Q1取掉实数根z=1 p=deconv(P1,1 1);% 从P1取掉实数根z=-1endrp=roots(P);% 求去掉实根后的多项式P的根rQ=roots(Q);% 求去掉实根后的多项式Q的根aP=angle(rp(1:2:end);% 将多项式P的根转换为角度(为归一化角频率)赋给apaQ

13、=angle(rQ(1:2:end);% 将多项式Q的根转换为角度(为归一化角频率)赋给aQlsf=sort(aP;aQ);% 将P、Q的根(归一化角频率)按从小到大顺序排序后即为lsf% EOF a_lsf_conversion.m其中a_lsf_conversion.m为求解LSF的函数,a_lsf_main.m为主程序。由于MATLAB程序本身有求多项式根的函数,因此在求解 和 零点时直接调用即可,这极大简化了求解过程。 2. LPC转换为ISP系数的MATLAB程序和ISP系数转换为LPC的MATLAB程序a_isf_lpc_conversion.m%已知语音文件求出其LPC系数后,求

14、其对应的ISF,再将ISF转换为a。其中isf为转换后的ISF值,a为isf转换后的lpc系数clear;close allclcfid=fopen('sx86.txt','r');p1=fscanf(fid,'% f')fclose(fid);p=filter(1-0.68,1,p1);%预加重滤波x=fra(320,160,p);x=x(60,:);a3=lpc(x,15);a4=a3(:);%将线性预测系数赋给矩阵alsf=a_lsf_conversion(a4);%调用函数a_lsf_conversion实现从LPC系数到lsf参数的转换

15、%函数a_lsf_conversion()的MATLAB程序见本章6.6.2节所赋程序,此处也可调用MATLAB自带的%库函数lsf=poly21sf(a4);isf=lsf;isf(16,1)=0.5*acos(a4(16,1);%isp的最后一个参数取为a的最后一个参数,isf的最后一个参数取为0.5*acos(a4(16,1)%下面是从isf求a的程序,其中前p-1个a参数根据前p-1个isf参数得到,最后一个a参数根据isf的第p个参数得到isf1=isf(1:(size(isf)-1),:);%将isf前p-1个参数赋给isf1a2=lsf_lpc_conversion(isf1)%

16、调用函数lsf_lpc_conversion实现从lsf参数到LPC系数的转换a2(1,16)=cos(2*isf(16,1);%最后一个a参数根据isf的第p个参数得到a=a2;%将转换得到的lpc系数赋给a%EOFa_isf_lpc_conversion.m a_isf_lpc_conversion_20frame.mclear;close allclcfid=fopen('sx86.txt','r');p1=fscanf(fid,'%f')fclose(fid);p=filter(1-0.68,1,p1);%预加重滤波x1=fra(320,160,p);for i=60:79x=x1(i,:)a3=lpc(x,15);a4=a3(:);%将线性预测系数付给矩阵a4lsf=a_lsf_conversion(a4)%调用函数a_lsf_conversion实现从LPC系数到lsf参数的转换isf=lsf;isf(16)=0.5*acos(a4(16,1);%isp的最后一个参数取为a的最后一个参数,isf的最后一个参数取为0.5*acos(a4(16,1))isp=cos(isf);hold on%让连续20帧isp及isf绘制在一个图形中figure(1); for j=1:16 isf2(i-59,j)=isf(j); en

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论