语音信号线性预测分析
更新时间:2023-08-15 04:41:01 阅读量: 人文社科 文档下载
《视频语音处理技术》
语音信号线性预测分析
学院名称: 计算机与信息工程学院 专业名称: 计算机科学与技术 年级班级:
姓 名:
学 号:
计算机与信息技术学院综合性、设计性实验报告
一、实验目的:
综合采用各种线性预测分析的方法,能够达到预测更为准确。要求掌握各种下列语音信号线性预测分析技术,提高学生数字语音信号处理的能力。利用MATLAB编程环境和强大的处理功能,实现语音信号线性预测。主要训练如下的项目从而获得线性预测的综合能力:
1、LPC方程的自相关解法。 2、LPC参数到LSP参数的转换。 3、LSP参数到LPC参数的转换。 4、LPC参数到ISP参数的转换。
二、实验仪器或设备:windowsXP下的Matlab编程环境 三、总体设计(设计原理、设计方案及流程等)
线性预测编码原理:利用过去的样值对新样值进行预测,然后将样值的实际值与其
预测值相减得到一个误差信号,显然误差信号的动态范围远小于原始语音信号的动态范围,对误差信号进行量化编码,可大大减少量化所需的比特数,使编码速率降低。
1.LPC方程的自相关解法
利用对称托普利兹(Toeplitz)矩阵的性质,自相关法求解可用Levinson-Durbin(莱文逊-杜宾)递推算法求解。该方法是目前广泛采用的一种方法。利用Levinson-Durbin算法递推时,从最低阶预测器开始,由低阶到高阶进行逐阶递推计算。 自相关法递推过程如下:
E 0 r 0 Ei (1 ki2)E(i 1)
ki r(i)- a
j 1
i-1
(i-1)
j
r(i j) E(i 1) , 1 i p
(i)a ki i
i 1) i 1
a( -ka, 1 j i 1jii j
p) a( , 1 j p j
a(i)
j
联立左面5式可对i=1、2…、p进行递推求解,其最终解为 aj
对于p阶预测器,在上述求解预测器系数的过程中,阶数低于p的各阶预测器系数也同时得到。
2、LPC参数到LSP参数的转换。
将P(z)和Q(z)中与LSP系数无关的两个实根取得到如下两个新的多项式
p2pP(z) 1j i 1 j i
P (z) (1 ze)(1 ze) (1 2cos iz 1 z 2) 1 1 zi 1i 1
p2p2
Q(z) 1j i 1 j i
Q (z) (1 ze)(1 ze) (1 2cos iz 1 z 2) 1
i 1i 1
1 z
从LPC系数到LSP系数的转换过程,其实就是求解使以上两式等于零时的 cos 、cos
i
i
的值。可采用以下几种方式求解。 第一种方法:利用代数方程式求解。 由 令 根据
1 2cos iz 1 z 2 2z 1(0.5z cos i 0.5z 1)
2z 1[0.5(z z 1) cos i]
z ej
得
ej cos jsin
z z 1 2cos 2x
第二种方法:离散傅立叶变换(DFT)方法
P (z)和 Q (z)系数求离散傅立叶变换,得到 对
jk zk exp( , k 0、1、 、N 1 N
各点的值,搜索最小值的位置,即是零点所在。由于除了0和 之外,总共有p个零点,
P (z)和 Q (z)的根是相互交替出现的,而且 因此只要很少的计算量即可解得,其中N
的取值取64~128就可以
第三种方法:利用切比雪夫(Chebyshev)多项式求解
z
ej
p
j
p
则 P (z)Q (z)可以写作 P (z) 2e
C(x)
j
Q (z) 2eC(x)
其中
pp
C(x) Tp(x) f(1)Tp(x) f(2)Tp(x) f( 1)T1(x) f() 1 222222
Tm(x) cosmx
(zQ)P ( z)是m阶的Chebyshev多项式 。f(i)是由递推关系计算得到的和 的每个系
数。
用下面的递推关系
f1(i 1) ai 1 ap i f1(i)
f2(i 1) ai 1 ap i f2(i)f1(0) f2(0) 1.0其中 。
多项式C(x)在x=cos 时的递推关系是:
i 0, 1, , p2
fork
p
12
to1p2
k 2x k 1 k 2 f( k)
end
p
C(x) x 1 2 f()2
p 1 p 0其中初始值第四种方法:
1
将0~ 之间均分为60个点,以这60个点的频率值代入(6-41)、(6-42)式,检查它们的符号变化,在符号变化的两点之间均分为4份,再将这三个点频率值代入方程(6-41)、(6-42),符号变化的点即为所求的解。这种方法误差略大,计算量较大,但程序实现容易。
3、LSP参数到LPC参数的转换
p (i)( z)( z) 已知量化和内插的LSP系数 ,可用下式计算 P 和 Q 的系数
和 :
p2p2
P(z) 1j i 1 j i 1 2
P (z) (1 ze)(1 ze) (1 2cos z z)i
1 z 1i 1i 1pp2Q(z) 1j i 1 j i 1 2
Q (z) (1 ze)(1 ze) (1 2cos z z)i
1 z 1i 1i 1
以下的递推关系可利用qi,i=0、1…、p-1,来计算 p (i)
for i 1 to p2
p (i) 2q2i 1p (i 1) 2p (i 2) for j i 1 to 1
p (j) p (j) 2q2i 1p (j 1) p (j 2) endend
2i 1
2i 1
p (0) 1其中 ,初始值 q cos
根据 p (i),
q (i) p1(i)
p ( 1) 0
把上面递推关系中的q2i-1替换为q2i,就可以得到
q (i)
P(z)和 Q(z)
P (z)和
Q (z)
p (i) p (i 1), i 1 , 2 ,, p2
i 1 , 2 ,, p2 q1(i) q (i) q (i 1),
1
A(z) [P(z) Q(z)]得到LPC系数为 利用2
i 1 , 2 ,, p 0.5p1(i) 0.5q1(i) ,
ai
i p2 1 ,p2 2 , ,p 0.5p1(p 1 i) 0.5q1(p 1 i) ,
4、LPC参数到ISP参数的转换。
语音编码时,可将LPC系数转换为ISP系数以进行量化和内插。 LPC系数与ISP系数之间的转换与LSP类似。从LPC转换为ISP系数时,首先应用求解LSP参数的方法求解出前p-1个ISP系数,再给第p个参数赋上合适的值,即可得到ISP系数。解码时,首先根据量化ISP系数得到p-1个LPC系数,再根据第p个ISP系数得到最后一个LPC系数。
2
四、实验步骤(包括主要步骤、代码分析等)
1.下面给出从LPC参数到LSP参数转换的MATLAB程序:
a_lsf_main.m
% 已知语音文件求出其LPC系数后,调用a_lsfLconversation.m函数求其对应的LSF
% a_lsf_main.m
clear;close all% 将所有变量置为0 clc% 清除命令窗口
fid=fopen('sx86.txt','r'); p1=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);% 调用函数a_lsf_conversion实现从LPC系数到LSF参数 % 转换
% lsf=poly21lsf(a);% 也可调用MATLAB库函数中的poly21lsf(a)函数求解出LSF系数,调用
% 结果为归一化角频率
lsf_abnormalized=lsf.*(6400/3.14);% 将求得的lsf参数反归一化到 % 0~6400Hz
% 使用时可根据实际需要进行更改,如窄带语言编码语音信号频带范围为300~3400Hz,此时
% 就需要将6400Hz改为3400Hz
% 将求得的归一化、反归一化lsf参数输出到文本文件:从lpc系数解得的lsf参数.txt fid= fopen('从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. % 程序 a_lsf_conversion.m. function lsf=a_lsf_conversion(a)
%如果a不是实数,输出错误信息:LSF不适用于复多项式的求解 if~isreal(a),
error('Line spectral frequencies are not defined for complex
polynomials.');
end
% 如果a(1)不等于1,将其归一化为1 if a(1)~=1.0,
a=a./a(1);% 将矩阵a的每个元素除以a(1)在赋给矩阵a end
% 判断线性预测多项式的跟是否都在单位园内,如果不在,则输出错误信息 if (max(abs(roots(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 % 如果阶次p为奇数次,从Q1去取掉实数根z=1及z=-1
if 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=-1 end
rp=roots(P);% 求去掉实根后的多项式P的根 rQ=roots(Q);% 求去掉实根后的多项式Q的根
aP=angle(rp(1:2:end));% 将多项式P的根转换为角度(为归一化角频率)赋给ap aQ=angle(rQ(1:2:end));% 将多项式Q的根转换为角度(为归一化角频率)赋给aQ lsf=sort([aP;aQ]);% 将P、Q的根(归一化角频率)按从小到大顺序排序后即为lsf % EOF a_lsf_conversion.m
其中a_lsf_conversion.m为求解LSF的函数,a_lsf_main.m为主程序。由于MATLAB
P (z)和 Q (z)零点时直接调用即可,这程序本身有求多项式根的函数,因此在求解
极大简化了求解过程。
2.LPC转换为ISP系数的MATLAB程序和ISP系数转换为LPC的MATLAB程序
a_isf_lpc_conversion.m
%已知语音文件求出其LPC系数后,求其对应的ISF,再将ISF转换为a。其中isf为转换
后的ISF值,a为isf转换后的lpc系数
clear;close all clc
fid=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(:);%将线性预测系数赋给矩阵a
lsf=a_lsf_conversion(a4);%调用函数a_lsf_conversion实现从LPC系数到lsf参数的转换
%函数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个参数赋给isf1
a2=lsf_lpc_conversion(isf1)%调用函数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.m
clear;close all clc
fid=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:79 x=x1(i,:) a3=lpc(x,15);
a4=a3(:);%将线性预测系数付给矩阵a4
lsf=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); end figure(2); plot(isp) end
%EOF a_isf_lpc_conversion_20frame.m 运行结果:
连续20帧语音信号的ISP轨迹图
连续20帧语音信号的ISF轨迹图
五、结果分析与总结
1.线性预测分析的基本思想是:一个语音取样的现在值可以用若干个语音取样过去值的加权线性组合来逼近。线性预测基本原理是建立在语音的数字模型基础上,为估计数字模型中的参数,线性预测法提供了一种可靠精确而有效的方法。
2.在上机实验的过程中,应注意避免一些小细节处的失误,提高效率。
教师签名:
年 月
日
正在阅读:
语音信号线性预测分析08-15
我的英语课改小故事01-14
上海市奉贤区2018届九年级化学上学期质量调研测试(一模)试题新人教版12-20
小学生一年级看图写话春天的早晨06-14
40102回风顺槽作业规程考试卷03-28
市交通运输局年度工作总结和2022年公路管护工作计划07-30
领导干部 现实表现材料【精选3篇】03-23
论中国古典音乐的审美特质05-17
- 粮油储藏基础知识
- 论文范文(包括统一封面和内容的格式)
- 经典解题方法
- 综合部后勤办公用品管理办法+领用表
- 学生宿舍突发事件应急预案
- 16秋浙大《生理学及病理生理学》在线作业
- 四分比丘尼戒本(诵戒专用)
- 浙江财经大学高财题库第一章习题
- 九大员岗位职责(项目经理、技术负责人、施工员、安全员、质检员、资料员、材料员、造价员、机管员)
- 旅游财务管理习题(学生版)
- 德阳外国语高二秋期入学考试题
- 投资学 精要版 第九版 第11章 期权市场
- 控制性详细规划城市设计认识
- bl03海运提单3国际贸易答案
- 2010-2011学年湖北省武汉市武珞路中学七年级(上)期中数学试卷
- VB程序填空改错设计题库全
- 教师心理健康案例分析 - 年轻班主任的心理困惑
- 民间借贷司法解释溯及力是否适用?
- 三联书店推荐的100本好书
- 《化工原理》(第三版)复习思考题及解答
- 信号线
- 语音
- 预测
- 分析