专业方向设计LPC.docx
- 文档编号:7477299
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:18
- 大小:495.45KB
专业方向设计LPC.docx
《专业方向设计LPC.docx》由会员分享,可在线阅读,更多相关《专业方向设计LPC.docx(18页珍藏版)》请在冰豆网上搜索。
专业方向设计LPC
西南科技大学
专业方向设计报告
课程名称:
通信工程专业方向设计
设计名称:
基于MATLAB的音频信号预测误差编码仿真设计
姓名:
学号:
班级:
指导教师:
起止日期:
2013年12月10日-2014年1月3日
西南科技大学信息工程学院制
方向设计任务书
学生班级:
学生姓名:
学号:
设计名称:
基于MATLAB的音频信号预测误差编码仿真设计
起止日期:
2013年12月10日-2014年1月3日指导教师:
设计要求:
(1)取得一段wav格式的音频文件(可以自己用麦克风录制、也可以从网上下载、或者从mp3等其他格式的音频文件转换得到),然后在MATLAB平台上编写对此音频文件进行预测编码和解码的程序。
(2)所有程序代码自己编写,不得调用现成编解码函数模块,只限于使用滤波函数(filter)、方波生成函数(square)等基本模块函数。
(3)显示各个环节对应的波形,观察对比原始音频信号和经过编解码后重建的音频信号效果。
(4)报告中应画出预测编解码的系统框图,给出预测编解码的数学公式,画出编码后的预测误差曲线图。
方向设计学生日志
时间
设计内容
2013.12.10
开始着手,去图书馆查阅相关书籍
2013.12.12
了解、理解WAV音频数据格式
2013.12.13
了解、理解线性预测编码技术,学习使用MATLAB
2013.12.22
了解用MATLAB如何实现对语音信号的读取、识别
2013.12.23
编程实现线性语音预测编码、解码以及误差分析
2013.12.28
撰写方向设计报告
2014.1.3
方向设计答辩
课程设计评语表
指导教师评语:
成绩:
指导教师:
年月日
基于MATLAB的音频信号预测误差编码仿真设计
一、摘要
在数字语音方面,语音编码是而且将仍然是一个重要问题。
线性预测编码技术作为一种基于全极点模型假定和均方预测误差最小准则下的波形逼近技术,线性预测分析是最有效的语音分析技术之一。
本文简要介绍了LPC技术的基本原理,并利用MATLAB这一有力工具对语音信号进行了LPC分析、预测,并采用A律13折线对数压缩技术对预测后的语音误差信号进行编码以及解码。
在数字语音信号分析中使用 MATLAB 可以简化程序编写和实验构建的过程,文章重点研究了 MATLAB 语言应用于数字语音信号预测,分析了 MATLAB 的语言功能,
二、设计目的和意义
线性预测技术作为一种基于全极点模型假定和均方预测误差最小准则下的波形逼近技术,线性预测分析是最有效的语音分析技术之一,在语音编码、语音合成、语音识别和说话人识别等语音处理领域中得到了广泛的应用。
语音线性预测的基本思想是:
利用过去的样值对新样值进行预测一个语音信号,然后将样值的实际值与其预测值相减得到一个误差信号,显示误差信号的动态范围远小于原始语音信号动态范围,然后采用A律13折线进行量化编码和解码,可以大大减少量化所需的比特数,是编码所需的速率降低。
[1]
三、设计原理
1、线性预测编码原理
LPC分析为线性时不变因果稳定系统
建立一个全极点模型,并利用均方误差准则,对已知的语音信号
进行模型参数估计。
设语音信号的样值序列为:
如果利用P个取样值来进行预测,则称为P阶线性预测。
假设用过去P个取样值
的加权之和来预测信号当前取样值
,此时的预测器称为P阶预测器。
设
为
的预测值,则可以得到:
(1)
其中加权系数用
表示,称为预测系数,P阶线性预测器的传递函数为:
(2)
线性预测误差
,也成为线性预测残差:
信号
与其线性预测值之差。
表示式为:
(3)
对(3)式两边进行z变换可以得到:
(4)
预测误差
是信号
通过如下系统的输出:
(5)
称为线性预测编码误差滤波器。
线性预测编码分析:
即设计预测误差滤波器
的过程,也就是求解预测系数,使得预测器的误差
在某个预定的准则下最小。
要使预测最佳,则要使短时平均预测误差最小有。
图1线性预测编码误差滤波器
因此,
可以让语音信号
通过一个全零点的滤波器
而得到[2]。
可以设想,如式(4)预测效果很好的话,那么预测残差
的幅度变化范围和平均能量必定比原来的语音信号
要小;如果对残差序列
做量化和编码,在同样信号量化噪声比条件下,所需的量化比特数就可以减少,从而达到压缩编码的目的。
基于这一原理的方法称作预测编码,当预测系数是自适应地随语音信号变化时,又称自适应预测编码。
从数字传输的角度看,一个完整的语音编码系统是由编码器和解码器两部分组成,而解码过程可看作是编码的逆过程。
基本的自适应语音编解码系统可以用图2表示为:
图2基本的自适应预浏编码系统
其原理简述为:
编码端将预测误差
量化为
经编码为
,经声道传输,再在解码接收端用一个与编码端同样的量化器对量化的差值信号
(不考虑信道误码)进行“逆量化”并解码,恢复差值信号
,最后将
与预测器预测值
之和作为解码端的重建语音信号
。
2.A律13折线编码和解码原理
模拟信号抽样后变成时间离散的信号,经过量化后,此抽样信号才能成为数字信号。
分析可知:
最简单的均匀量化器对于小输入信号很不利。
为了改善小信号时的信号量噪比,在实际应用中常采用非均匀量化。
非均匀量化时,量化间隔随信号抽样值的不同而变化。
信号抽样值小时,量化间隔
也小;信号抽样值大时,量化间隔
也变大。
实际应用中,用13折线法近似A压缩律,来进行非均匀量化。
图3A律13折线
图3中横坐标x在0至1区间中分为不均匀的8段。
1/2至1间的线段称为第8段;1/4至1/2间的线段称为第7段;1/8至1/4间的线段称为第6段;依此类推。
图中纵坐标y则均匀地划分作8段。
将与这8段相应的座标点(x,y)相连,就得到了一条折线。
在语音通信中,通常采用8位的PCM编码就能够保证满意的通信质量。
在13折线法中采用的折叠码有8位。
第一位c1表示量化值的极性正负。
后面的7位分为段落码和段内码两部分,用于表示量化值的绝对值。
其中第2至4位(c2c3c4)是段落码,共计3位,可以表示8种斜率的段落;其他4位(c5--c8)为段内码,可以表示每一段落内的16种量化电平。
段内码代表的16个量化电平是均匀划分的。
所以,这7位码总共能表示
=128种量化值。
在下面的表中给出了段落码和段内码的编码规则。
表1段落码表2段内码
段落序号
段落码
段落范围
量化间隔
段内码
量化间隔
段内码
8
111
1024-2048
15
1111
7
0111
7
110
512-1024
14
1110
6
0110
6
101
256-512
13
1101
5
0101
5
100
128-256
12
1100
4
0100
4
011
64-128
11
1011
3
0011
3
010
32-64
10
1010
2
0010
2
001
16-32
9
1001
1
0001
1
000
0-16
8
1000
0
0000
在上述编码方法中,段内码是按量化间隔均匀编码的,但是因为各个段落的斜率不等,长度不等,故不同段落的量化间隔是不同的。
其中第1和2段最短,斜率最大,其横坐标x的归一化动态范围只有1/128。
再将其等分为16小段后,每一小段的动态范围只有(1/128)/(1/16)=1/2048。
第8段最长,其横坐标x的动态范围为1/2。
将其16等分后,每段长度为1/32。
假若采用均匀量化而仍希望对于小电压保持有同样的动态范围1/2048,则需要用11位的码组才行。
现在采用非均匀量化,只需要7位就够了。
四、详细设计步骤
1、打开一个WAV语音文件
fopen是一个打开文件的函数。
news=fopen('aa.wav','rb');%文档打开方式为只读,文件指针指到开始处
x=fread(news,'short')/2^15;
fclose(news);
也可以设计为:
InputFilename='aa.wav';%读取WAV文件应与程序在一个文件夹内
[inspeech,Fs,bits]=wavread(InputFilename);%读取WAV文件
2、LPC预测阶数P的选择
注意如下几点:
有效的参数是从
开始。
默认为1,是无用的;上图中的H函数,和前面我们提到的H函数是不一致的。
这个H,是单纯线性预测的传递函数。
而前面提到的H,是语音合成的传递函数,别搞混了。
但是
函数的含义是一致的,都是逆滤波器,输出的是残差。
图4原始信号频谱和不同系数LPC传递函数对比
从图4中不难看到,阶数越高,那么对频谱的峰值匹配的越好。
但是频谱的细节是丢失的。
这点可以这样理解:
在阶数P的选择上,和采样频率有关。
人的语音基本上每KHz有2个极点(或一个复数极点)。
这样,当采样频率为Fs(KHz)时候,需要Fs个极点来表示语音频谱。
另外,还需要3至4个极点e来表示源激励频谱和嘴巴辐射频谱,这样对于10KHz采样的语音,p值为13至14个。
对于4KHz语音的分析而言,通常需要显示的共振峰至少4个,也就是说传递函数(或滤波器)的阶数至少8个。
对应的传递函数为:
(6)
于是,LPC的语音合成传递函数和误差传递函数就走到一起去了:
(7)
同时,
也就成为了输入激励
。
所以
也叫逆滤波器。
通过这个
,就得到了语音合成时候的原始输入
。
这也就是对现有语音进行LPC参数计算的时候,得到残差的物理意义。
通过这个残差,也得到语音合成的输入,以及提取阶数。
在解的稳定性方面,也就是所得到的系统也就是公式(6)中,是否稳定,若
的所有极点位于单位圆内,则系统稳定,亦即要求公式(5)中的的所有零点位于单位圆内。
对于自相关法,
的所有根位于单位圆内,因而其解是稳定的。
但是应当指出,如果计算自相关函数的精度不够,那么解的稳定性就不能保证。
实验结果表明,如果对语音进行预加重,使其谱尽可能平滑,则可以使不稳定性尽可能避免。
杜宾算法中利用下式作为检验稳定性的方法,即部分相关系数
满足
(8)
满足上述条件就满足了解的稳定的充要条件。
对于协方差法,测器解的稳定性是不能保证的。
然而,当每个分析帧的取样点数足够大,协方差法和自相关法所得的结果相同,则协方差法的解稳定。
对于格型法,因为预测器系数求解中,部分相关系数
满足(8)式,故其解稳定。
关于预测器阶数P的选择问题,它和采用哪一种方法无关。
P的选择主要和取样频率的选择有关。
被分析的语音谱一般可以用每千赫具有2个极点的系统来表示声道响应,也就是说,当采样频率为F3(KHZ)时,语音谱最高频率为F3/2(KHz)时,总共需要F3个极点.若F3=10(KHZz),则需要10个极点的系统来表示声道响应。
此外,还要3~4个极点来表示激励源和辐射负载,因此,对于10(KH)取样频率,要求p值为12至13。
当p进一步增加时,预测误差并不减少许多,因而选择P=12~13,已经基本可以了,所以本文当中采用的预测阶数为12。
关于分析段长度N的选择问题。
从运算量考虑,希望N尽可能小,因为对于所有这三种方法,总运算量正比于N。
然而,对于自相关法,N的大小必须等于基音周期的若干倍,以使窗效应不致严重影响得到的结果。
当取样频率为10kHz时,自相关法要求选择N=400左右。
而对于协方差法和格型法,如果分析能够限制在每个基音周期范围内,一般取N=2p,而对于大多数不能进行基音同步分析的系统,则N的选择与自相关法差不多。
要准确得到语音信号特征信息,适当地选取LPC阶数是必要的。
一般情况下12阶的LPC分析已经达到电话语音信号要求。
[2]
3、预测误差
在MATLAB中,也有LPC函数[a,g]=lpc(x,p)。
其中,x是输入序列,p是阶数,a是预测系数,g是总预测误差[3]。
对于这些参数的理解,说明如下:
(9)
图5LPC运算原理图
利用matlab函数,获取相关的lpc的过程量代码如下:
[a,g]=lpc(x2,12);%获取lpc参数
%绘制lpc的谱域图。
要用合成的H,而不是上图的H。
也就是1/A的H
freqz(1,[1-a(2:
end)]);
%和原始输入x2的频谱对比
freq=[-Freqs/2:
Freqs/lx:
Freqs/2-Freqs/lx];
S=fftshift(abs(fft(y)));
Sdb=10*log10(S);
plot(freq,Sdb);
%由lpc参数,得到预测的x值。
注意,
被舍弃
est_x=filter([0-a(2:
end)],1,x);
%计算原始x和预测x的差值。
如果绘图的话,可以看到和激励
类似的周期性结构。
e=x-est_x;
4、A律13折线编码设计
functiony=zhe13(x)
x=x/max(x);%求S的最大值
z=sign(x);%求得每一序列值的符号
x=abs(x);%求序列的绝对值
%进行基于13折线的分段映射
fori=1:
length(x)
ifx(i)<1/64%序列值位于第1和第2折线
y(i)=16*x(i);
elseifx(i)<1/32%序列值位于第3折线
y(i)=8*x(i)+1/8;
elseifx(i)<1/16%序列值位于第4折线
y(i)=4*x(i)+2/8;
elseifx(i)<1/8%序列值位于第5折线
y(i)=2*x(i)+3/8;
elseifx(i)<1/4%序列值位于第6折线
y(i)=x(i)+4/8;
elseifx(i)<1/2%序列值位于第7折线
y(i)=1/2*x(i)+5/8;
else%序列值位于第8折线
y(i)=1/4*x(i)+6/8;
end
end
y=z*y;
图6编码函数设计流程图
4.A律13折线解码设计
functiony=zhe13jie(name)
%从文件读入压缩编码
fid=fopen([name,'.a'],'rb');
x=fread(fid,'int8');
s=sign(x);
x=abs(x);%归一化
x=x/128;
ypcm=zeros(length(x),1);
fori=1:
length(x)%基于13折线的分段解码映射
ifx(i)<2/8%序列值位于第1和第2折线
y(i)=1/16*x(i);
elseifx(i)<3/8%序列值位于第3折线
y(i)=1/8*(x(i)-1/8);
elseifx(i)<4/8%序列值位于第4折线
y(i)=1/4*(x(i)-2/8);
elseifx(i)<5/8%序列值位于第5折线
y(i)=1/2*(x(i)-3/8);
elseifx(i)<6/8%序列值位于第6折线
y(i)=x(i)-4/8;
elseifx(i)<7/8%序列值位于第7折线
y(i)=2*(x(i)-5/8);
else%序列值位于第8折线
y(i)=4*(x(i)-6/8);
图7解码函数设计流程图
五、设计结果及分析
在这里我们进行观察,线性预测阶数为12,看到图8所示的原始语音帧的波形,图9预测语音波形和它们之间预测误差的波形,图11为它们之间预测误差的波形。
图8原始语音的波形
图9预测语音波形和原始语音信号重合波形
由图10原始数据可以看出,原始数据的两端的波形幅度很小,波形幅度趋于平稳,适合进行模型化处理。
图10预测系数中取线性预测阶数P=30,并对语音信号进行Durbin算法的LPC分析,获得线性预测系数。
图10还可以看出,随着阶数P取值的增大,
和预测器残差能量的值逐渐下降,但当P增大到一定程度时,下降的幅度不再明显,趋于平稳,所以由图可以判断出P的取值最好在1至25之间。
图10预测阶数P的选择仿真波形
图11预测误差波形
图13和图14分别给出了编码后的语谱图和经过解码的语谱图,通过比较发现,预测语音的预测效果还可以,大致轮廓还是看的出来的。
经过解码的信号和原始语音信号通过对比我们可以发现,解码后的失真还是很明显的,有很多毛刺和尖峰,还需要更精确的编解码算法进行还原才能得到更好的音频质量,和满足消费者的需求。
主观上经过多位同学的人耳测试,是无法区分原始语音和处理之后的语音的,在客观的波形图上看,二者之间的差异还是比较大的,音质效果实在人耳的误差允许范围之内。
图12原始语音的波形
图13经过编码的图谱
图14编码后的图谱
六、体会
通过本次的方向设计,发现数字信号处理相关内容还很欠缺,已经对音频文件的处理,很明显,要下很大的力气去理解,程序运行结果理想,波形直观。
此次设计针对语音识别的特殊要求,以数字信号处理为基础,实现了对语音信号LPC分析的研究。
从总体来看,基本达到了设计要求。
由于时间和学识有限,设计中仍然存在着很多问题,本文仍有很多东西还需要改进和提高。
写论文是一个不断学习的过程,从最初刚写论文时对语音信号LPC分析的模糊认识到最后能够对该问题有深刻的认识,我体会到实践对于学习的重要性,以前只是明白理论,没有经过实践考察,对知识的理解不够明确,通过这次设计,真正做到理论与实践的相结合。
MATLAB提供了很多专用工具箱、灵活利用这些工具箱和函数,可以实现很多信号处理的任务。
另外对WAV音频文件的格式也有了一定的了解,之前用MATLAB做相关数字信号课程设计的时候根本不需要考虑音频文件内部的内容,而是直接调用WAV格式的音频来使用就行了。
特别是处理效果的可视性和可感知,有利于理解信号处理的本质,有利于激发学习和研究的兴趣,也有利于培养MATLAB软件的操作技能。
以上主要介绍了LPC技术的基本部原理,经MATLAB的仿真实验,我们看到了使用LPC技术得到的一些特征参数,并对阶数的选取做了对比,可见LPC技术在语音信号的处理和语音识别等领域都有广泛的应用。
总之,通过这次方向设计,我深刻体会到要做好一个完整的事情,需要有系统的思维方式和方法,对待问题,要有耐心,善于运用已有的资源来充实自己。
同时我也深刻的认识到,在对待一个新事物时,一定要从整体考虑,完成一步之后再作下一步,这样才能事半功倍。
七、参考文献
【1】程佩青.数字信号处理教程[M].北京:
清华大学出版社,2003
【2】张登奇,蒋敏.基于MATLAB的音频信号处理技术实现[J].电脑知识与技术.2009年第5期.
【3】罗军辉,罗勇江,白义臣等.MATLAB7.0在数字信号处理中的应用[M].北京:
机械工业出版社,2005
年5月第一版.
文本有错误自己改吧代码都是在PUDN下的可以找到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专业 方向 设计 LPC