您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > LBG算法实现语音信号的矢量量化
语音信号的矢量量化一.实验内容:采用LBG算法实现语音信号的矢量量化二.实验原理:基本LBG算法的基本框架为:1.已知码书尺寸M,给定设计的失真阈值即停止门限)10(,给定一个出示码书)0(MY。已知一个训练序列]1,...,1,0,[mjXj。先取n=0(n为迭代次数),并设出示平均失真)1(D。2.用给定的码本MY,求出平均失真最小条件下的所以区域边界),...,2,1(MiSi。即根据最佳划分准则把训练序列划分为M个胞腔。应该用训练序列ijSX,使))(,(),(MjijYYYXdYXd,从而得出最佳区域边界)(niS。然后,计算在该区域下训练序列的平均失真10)(),(min1mjYrjnMYXdmD。在这一步中要累计最小失真并在最后计算平均失真。3.计算相对平均失真(即与第n-1次迭代的失真相对而言),如果它小于阈值,即)()()1(nnnDDD,则认为满足设计要求,此时停止计算,并且MY就是所设计的码书,)(niS就是所设计的区域边界。如果平均失真的条件不满足则进行第四步。4.按前面给出的最佳码书设计方法,计算这时划分的各胞腔的形心,由这M个新形心构成(n+1)次迭代的新形心)1(nMY。置n=n+1,返回到第2步再进行计算,直到满足失真测度公式,得到所要求的码书为止。三.结果分析:在本实验中采用语音参数的矢量量化,即将语音信号经过分析,得到各种参数,然后再将这些按桢或按段分析所得的数组构成矢量,进行矢量量化。其中输入的语音文件波形如图一所示。图1声音波形输入信号的语音参数为20个MPCC参数,码本尺寸为16,最后得到的码字为r,r是一个1620的矩阵,在MATLAB7.0里用工作空间的画图功能可得到下面的图。图2实验数据四.实验程序[s,fs]=wavread('s1.wav');%数据准备m=100;n=256;l=length(s);nbFrame=floor((l-n)/m)+1;fori=1:nforj=1:nbFrameM(i,j)=s(((j-1)*m)+i);endendh=hamming(n);M2=diag(h)*M;fori=1:nbFrameframe(:,i)=fft(M2(:,i));endt=n/2;tmax=l/fs;m=melfb(20,n,fs);n2=1+floor(n/2);z=m*abs(frame(1:n2,:)).^2;v=dct(log(z));%LBG算法k=16;e=.01;r=mean(v,2);dpr=10000;fori=1:log2(k)r=[r*(1+e),r*(1-e)];while(1==1)z=disteu(v,r);[m,ind]=min(z,[],2);t=0;forj=1:2^ir(:,j)=mean(v(:,find(ind==j)),2);x=disteu(v(:,find(ind==j)),r(:,j));forq=1:length(x)t=t+x(q);endendif(((dpr-t)/t)e)break;elsedpr=t;endendend%失真测度functiond=disteu(x,y)[M,N]=size(x);[M2,P]=size(y);if(M~=M2)error('Matrixdimensionsdonotmatch.')endd=zeros(N,P);if(NP)copies=zeros(1,P);forn=1:Nd(n,:)=sum((x(:,n+copies)-y).^2,1);endelsecopies=zeros(1,N);forp=1:Pd(:,p)=sum((x-y(:,p+copies)).^2,1)';endendd=d.^0.5;%滤波器functionm=melfb(p,n,fs)f0=700/fs;fn2=floor(n/2);lr=log(1+0.5/f0)/(p+1);bl=n*(f0*(exp([01pp+1]*lr)-1));b1=floor(bl(1))+1;b2=ceil(bl(2));b3=floor(bl(3));b4=min(fn2,ceil(bl(4)))-1;pf=log(1+(b1:b4)/n/f0)/lr;fp=floor(pf);pm=pf-fp;r=[fp(b2:b4)1+fp(1:b3)];c=[b2:b41:b3]+1;v=2*[1-pm(b2:b4)pm(1:b3)];m=sparse(r,c,v,p,1+fn2);
本文标题:LBG算法实现语音信号的矢量量化
链接地址:https://www.777doc.com/doc-1872968 .html