语音信号线性预测分析
更新时间:2023-06-02 17:43: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.在上机实验的过程中,应注意避免一些小细节处的失误,提高效率。
教师签名:
年 月
日
正在阅读:
语音信号线性预测分析06-02
张冬梅-让德育之花在跳跃的音符上绽放04-08
采用Parzen窗法的随机模式分类器研究05-25
安全标准化质量控制手册2-007-09
技论文写作整理系列(5) - Materials& method09-24
岗位职责_岗位职责范本_岗位职责说明书08-01
思想的洗礼 知识的充实--党课思想汇报12-04
也论中华民族多元一体格局的构建-2019年精选文档03-12
清华版六年级下册信息技术教案06-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 信号线
- 语音
- 预测
- 分析
- 上海市浦东新区第二学期初二年级数学期末考试试卷
- 实施乡村净化工程+构建文明和谐社会
- 股市技术分析基础一
- 公务员必懂常识汇总
- 英语语音发音规则
- 英语词汇学自考题-19
- 2014年福建厦门公务员考试面试热点:民营医院改革
- 复旦大学新闻与传播硕士考研辅导班课程进度
- 语文读书笔记250字
- 提高沥青路面面层压实度QC
- 猪圆环病毒多重PCR诊断方法的建立
- 2014年巴西世界杯赛程表(最新)
- 旅行社计调常用表格
- 第十章-结构动力学1
- 从国际经验看资源枯竭型城市如何转型
- 泡泡浴盐项目可行性研究报告评审方案设计(2013年发改委立项详细标准+甲级案例范文)
- 【考研数学】143分牛人的重点及难点归纳辅导笔记(免费)【免费下载】
- 三下科学第四单元2《气温有多高》
- 代际收入流动性与收入不平等
- 新竹小学开展“文明餐桌” 活动总结