1、内蒙古工业大学本科毕业设计说明书1语音信号矢量量化器的设计及实现算法的MATLAB仿真引言21世纪是信息的社会,各种科技领域的信息大爆炸。数字信号的数据量通常很巨大,对存储器的存储容量,通信信道的带宽及计算机的处理速度带来压力,因此必须对其进行量化压缩来紧缩数据存储容量,较快地传输各种信号,并使发信机功率降低。矢量量化(VQ)是一种极其重要的信号压缩方法,其在语音信号处理中占有十分重要的地位,广泛应用于语音编码,语音识别,语音合成等领域。在许多重要的课题中,VQ都起着非常重要的作用。采用矢量量化技术对信号波形或参数进行压缩处理,可以获得非常高的效益。VQ不仅可以压缩表示语音参数所需的数码率,而
2、且在减少运算量方面也是非常高效的,它还能直接用于构成语音识别和说话人识别系统。语音数字通信的两个关键部分是语音质量和传输数码率。但这两者是矛盾的要获得较高的语音质量,就必须使用较高的传输码率;相反,为了实现高效地压缩传输数码率,就很难得到良好的语音质量。但是矢量量化却是一种既能得到高效压缩的数码率,又能保证语音质量的方法。量化可以分为两大类一类是标量量化,一类是矢量量化VQ。标量量化是把抽样后的信号值逐个进行量化,而矢量量化是先将K个抽样值组成K维空间中的一个矢量,然后将此矢量进行量化,它可以极大的降低数码率,优于标量量化。各种数据都可以用矢量表示,直接对矢量进行量化,可以方便的对数据进行压缩
3、。矢量量化属于不可逆压缩方法,具备比特率低,解码简单,失真较小的优点。矢量量化的发展大致可以分为两各阶段第一阶段约为1956至1977年。1956年STEINHAUS第一次系统的阐述了最佳矢量量化的问题。1957年,在LOYD的“PCM中的最小平方化”一文中给出了如何划分量化区间和如何求量化值问题的结论。约于此同时MAX也得出同样的结果。虽然他们谈论的都是标量量化问题,但他们的算法对后面的矢量量化的发展有着深刻的影响。1964年,NEWMAN研究了正六边形原理。1977年,BERGER的率失真理论一书出版。总体来说,内蒙古工业大学本科毕业设计说明书2这一阶段的工作多是理论性的,但它为第二阶段的
4、发展奠定了一定的基础。第二阶段约为1978年至今。1978年,BUZO第一个提出实际的矢量量化器。他提出的量化系统组成分为两步第一步将语音信号做线性预测分析,求出预测系数,第二步,对这些系数做矢量量化,于是得到压缩数码的语音编码器。1980年,LINDE,BUZO和GRAY将LOYDMAX算法推广,发表了第一个矢量量化器的设计算法,通常称为LBG算法。这就将矢量量化的研究向前推动了一大步。这一时期,人们对矢量量化问题展开了全面的研究,其中主要是对失真测度的探讨,码书的设计,各种矢量量化系统的研究,快速搜索算法的寻找等等。矢量量化研究的进展是很快的,1980年,美国加州公司在原来的编码速度为24
5、KB/S的线性预测声编码器的基础上,仅将滤波系数从标量量化改为矢量量化,就可以使编码速率降低到800B/S,而声音质量基本未下降。1983年,美国BBN公司研制了一种分段式声编码器。由于该声码器采用了矢量量化,所以可以用150B/S的速率来传送可懂的话音。近几十年来在已经提出的各种矢量量化方法和系数的基础上,更多更好的矢量量化方法渐渐出现。在图像数据压缩和语音识别的应用方面,矢量量化研究也得到了很快的发展,提出各种各样的矢量量化系统,用硬件实现矢量量化系统的方法也越来越多矢量量化压缩技术的应用领域非常广阔,如军事部门和气象部门的卫星或航天飞机遥感照片的压缩编码和实时传输、雷达图像和军用地图的存
6、储与传输、数字电视和DVD的视频压缩、医学图像的压缩与存储、网络化测试数据的压缩和传输、语音编码、图像识别和语音识别等等。内蒙古工业大学本科毕业设计说明书3第一章矢量量化器11矢量量化概述矢量量化技术涉及到许多学科的技术和理论知识,且应用范围非常广泛。由于矢量量化的数据压缩具有编码简单,效率高,压缩比大等优点,所以矢量量化最先在语音,图像,视频这些媒体信息的压缩中取得了巨大的应用。由于矢量量化的高压缩比,使得它可以应用在民用的高清电视,网络视频的实时传输上,也可以应用在军用国防的卫星遥感,雷达监测等方面。矢量量化技术在其他方面的应用也发展十分迅速,如矢量量化技术已广泛地应用于语音识别,说话人识
7、别,数字水印,文件检索,纹理压缩,移动通信等众多科学领域。矢量量化的三大关键步骤和技术是码书设计,码字搜索和码字索引分配前两项是矢量量化过程中的关键。码书设计可以看成是一个统计聚类的过程。从另一个角度来看,码书设计也是一个迭代过程,码书可以视为一个类似函数优化的问题,所以要搜索最优化的全局码书,就需要一种全局算法。从以上分析可以看出,码书的优化是一个很重要的任务。人们试图找到各种新的码书优化的算法和策略。多种理论研究都应用到了码书算法,例如神经网络,模糊集合论,遗传算法等。此外,先进的预测技术也是提高压缩比的一种方法。111矢量量化的基本概念要了解矢量量化首先要了解量化和标量量化等基本概念量化
8、就是把一个模拟信号值的连续范围分为若干相邻并具有唯一量值的区间,凡落在某区间的抽样信号样值都指定为该区间量值的过程。量化分为两类标量量化和矢量量化一标量量化整个动态范围被分成若干个小区间,每个小区间有一个代表值,量化时落入小区间的信号值就用这个代表值代替,或者叫被量化为这个代表值。这时的信号量是一维的,所以称为标量量化。内蒙古工业大学本科毕业设计说明书4图(11)标量量化原理图二矢量量化矢量量化若干个标量数据组成一个矢量,矢量量化是对矢量进行量化,它把矢量空间分成若干个小区域,每个小区域寻找一个代表矢量,量化时落入小区域的矢量就用这个代表矢量代替,或者叫着被量化为这个代表矢量。在输入信号序列中
9、,每K个连续样点可以组成一组K维欧式空间中的一个矢量,矢量量化就是把这个K维输入矢量X映射成另一个K维量化矢量。其中量化矢量构成的集合127,YYYY称为码书或码本,码书中的每个矢量IY称为码字或码矢。比如说,当K2时,所得到的是二维矢量。所有可能的二维矢量就构成了一个平面,记为(A1,A2),所有可能的(A1,A2)就是一个二维空间。如图(A)所示,矢量量化就是将平面分成M小区域,即1S,2S,MS,从每个小区域中找出代表向量IY,这些代表向量的集合就是有M个区间的二维矢量量化器。若要对落在二维矢量空间中的一个模拟矢量12,XAA进行量化,首先要选择一个合适的失真测度,而后利用最小失真原则,
10、分别计算用量化矢量1,2,7IYI替代X所带来的失真。其中最小失真值所对应的那个量化矢量1,2,7IYI中的某一个,就是模拟矢量X的重构矢量(或称恢复矢量)。通常把所有M个量化矢量构成的集合IY称之为码书(CODEBOOK)或码本。码书中的量化矢量称为码字(CODEWORD)或码矢(CODEVECTOR),例如图(B)中所示的矢量量化器的码书127,YYYY,其中每个量化矢量127,YYY称为码字或码矢。不同的划分或不同的量化矢量选取就可以构成不同的矢量量化器。内蒙古工业大学本科毕业设计说明书5(A)B图13矢量量化示意图根据上面对矢量量化的描述,我们可以给矢量量化以下的定义矢量量化是把一个K
11、维模拟矢量KXXR映射成为另一个K维量化矢量,其数学表达式为YQX式(11)12,KNNIYYYYYYR式(12)式中X表示输入矢量;X表示信源空间;KR表示K维欧氏空间;Y表示量化矢量(码字或码矢);NY表示输出空间(即码书);Q表示量化符号;N表示码书的大小(即码字的数目)。矢量量化系统通常可以分解为两个集合的映射,即Q式(13)式中,是编码器,它是将输入矢量KXXR映射为信道符号集12,NNIIII中的一个元JI;是译码器,它是将信道符号JI映射为码书中的一个码字IY,即JXI,JNXXII式(14)JIIY,JNINIIYY式(15)内蒙古工业大学本科毕业设计说明书6112矢量量化步骤
12、矢量量化共有三个关键技术,即码书设计,码字搜索和码字索引分配。其中前两项最关键一码书设计对于矢量量化首先要解决的问题是设计出一个性能好的码书。如果没有码书,那么编码将根本无法实现。如果用平方误差测度作为失真测度并且训练矢量数为N,想要生成含有MM002当相对失真小于002时结束程序J2J21FORJ1SAMPLE_NUMFORK1BOOK_SIZEA0FORM1BOOK_DIMENAAT_SAMPLEJ,MSK,M2计算训练样本与当前码书质心的距离ENDDKAENDDN,IMIND找出训练样本与所有当前码书距离最小值NUMBERJI距离最小值对应的码书索引END求与训练样本距离最近的码书,则距
13、离最近的码书索引就是训练样本所属的码书号结束N1ZEROSBOOK_SIZE,1内蒙古工业大学本科毕业设计说明书39求码书质心过程FORT1BOOK_SIZEYZEROSBOOK_DIMEN,1N0FORJ1SAMPLE_NUMIFTNUMBERJFORM1BOOK_DIMENYMYMT_SAMPLEJ,MENDNN1计算每个码书的样本个数ENDENDN1T,1N属于每个码书的样本个数IFN1T,10FORM1BOOK_DIMENY_CENTERT,MYM/N1T,1求每个码书的质心FINAL_CODEBOOKT,MY_CENTERT,M把训练出来的质心赋给FINAL_CODEBOOKST,M
14、Y_CENTERT,MENDENDEND求码书质心结束求平均失真PJ_DISTORTJ20FORN1SAMPLE_NUMFORM1BOOK_DIMENPJ_DISTORTJ2PJ_DISTORTJ2T_SAMPLEN,MFINAL_CODEBOOKNUMBERN,M2求所有训练码本和其所属码书质心的距离ENDENDPJ_DISTORTJ2PJ_DISTORTJ2/SAMPLE_NUM求平均失真结束XD_SHIZHENJ2ABSEPJ_DISTORTJ2/EEPJ_DISTORTJ2XD_VALUEXD_SHIZHENJ2ENDJ1XUNHUAN_NUM当相对失真小于002,直接循环次数J1为循
15、环XUNHUAN_NUM以结束循环ENDFIDFOPEN训练好的码书2TXT,WN1FORT1BOOK_SIZEFORM1BOOK_DIMENFPRINTFFID,62F,FINAL_CODEBOOKT,MZNFINAL_CODEBOOKT,MNN1ENDFPRINTFFID,NENDT1LENGTHZ/FS时间的向量SUBPLOT212,PLOTT,ZXLABEL时间,YLABEL幅度,TITLE码书余下FCLOSEFIDCPU_TIMETOCDISPCPU_TIMEDISPCPU_TIMEDISPPJ_DISTORT平均失真DISPPJ_DISTORTDISPXD_SHIZHEN相对失真D
16、ISPXD_SHIZHENDISPN1每个码书的样本个数DISPN1DISPJ2循环次数DISPJ2DISPFINAL_CODEBOOKDISPFINAL_CODEBOOK内蒙古工业大学本科毕业设计说明书40覆盖算法的仿真程序CLEARALLCLCY,FSWAVREADE/WAV/8SINGLEWAVYY,1SAVEVOICEDATAMATYLENGLENGTHYFIDFOPENVOICEDATATXT,WTFORI1LENGFPRINTFFID,DN,YIENDFCLOSEFIDCODEBOOK_DIMEN5码书维数CODEBOOK_SIZE16SIGNAL_NUM200参加训练样本的个数F
17、IDFOPENVOICEDATATXT,RTAFSCANFFID,F把输入文件中的数据赋给AFCLOSEFIDXA10011000SIGNAL_NUMCODEBOOK_DIMENTRAIN_SIGNALZEROSSIGNAL_NUM,CODEBOOK_DIMENR1FORI1SIGNAL_NUMFORJ1CODEBOOK_DIMENTRAIN_SIGNALI,JXRRR1ENDENDR0019YTRAIN_SIGNALY_NUMSIGNAL_NUMK1DISPYDISPYBAOQIANG_NUM1000T0TICWHILEBAOQIANG_NUMCODEBOOK_SIZEYTRAIN_SIGN
18、ALY_NUMSIGNAL_NUMK1RR0001DISPRDISPRI0MAZIZEROSSIGNAL_NUM,CODEBOOK_DIMENNUMZEROS1,SIGNAL_NUMWHILEY_NUMCODEBOOK_DIMENMAZIK,Y1,KK1P0Q0FORJ2Y_NUMA0FORM1CODEBOOK_DIMENAAYJ,MY1,M2ENDIFACODEBOOK_SIZE如果胞腔大于六BZEROSGESHUTGESHU1FORI1TFORJ1GESHUIFIJBI,JZUIDAENDENDENDDISPB2DISPBZUIXIAOMINMINBFORI1GESHUFORJ1GESHU
19、IFBI,JZUIXIAOMINJENDENDENDDISPMDISPMDISPNDISPN可以找出矩阵最小值元素,并把行数列数赋给M,NDISP码字间失真最小值DISPZUIXIAOMAZI_NUMM,1MAZI_NUMM,1MAZI_NUMN,1X1,AM,AN,X1,X1,/2AM,X1,DISPXDISPX过渡用的一行矩阵DISPA1DISPA两个问题,计算新码字赋给YI,算每个胞腔中的码字个数IFNGESHUAN,0MAZI_NUMN,10ELSEAN,AGESHU,AGESHU,0MAZI_NUMN,1MAZI_NUMGESHU,1MAZI_NUMGESHU,10END内蒙古工业大
20、学本科毕业设计说明书43DISPA2DISPADISPMAZI_NUMDISPMAZI_NUMGESHUGESHU1DISPENDFORI1CODEBOOK_SIZEFINAL_BOOKI,AI,ENDKSIGNAL_NUMCODEBOOK_SIZEDISP循环次数DISPKDISPFINAL_BOOKDISPFINAL_BOOKDISPCUP_TIMEDISPTOCDISP每个胞腔中的码字个数FORI1CODEBOOK_SIZEDI,1MAZI_NUMI,1ENDDISPDNDA0B0LONGLENGTHNFORI1LONGAANI,1II1ENDAA/LONGFORI1LONGBBNI,1A2II1ENDBB/LONGDISP方差为DISPB谢辞内蒙古工业大学本科毕业设计说明书44在毕业设计完成之际,我真心的感谢在设计之中给予我帮助的杨玉兰老师和我的同班同学,在这三个月中,杨老师给予了鼓励和耐心的指导,特别是在课题的理解上,杨老师严谨的科学思维和专业的知识对我产生了很大的影响,并使我受益非浅,当我在编译程序遇到瓶颈时,杨老师帮助我检查程序并不断的鼓励我让我不断探索。同班同学王振宇也给我很多的帮助,使我做到对MATLAB编程语言从入门到熟练,同时还有互联网上MATLAB论坛上的很多热心网友的帮助,在这里我衷心的感谢他们。