当前位置:编程学习 > Matlab >>

求高手,matlab多级矢量量化程序修改更改??叩谢!!!

原程序是4级MSVQ矢量量化分配的是128 64 64 64 (7 6 6 6 ) 我需要改成,3级搜索 比特数为8 6 6 论文上解释为(采用了A卜五最优路径树状搜索算法来最佳逼近 全局搜索,其中M二3,表示易做图量化,在每一级的量化中均保留L=8个量化距离 最小的码矢。即:在第一级保留与待量化矢量最近的L个码本矢量,然后以这L个 矢量分别作为根结点搜索第二级最佳的L个矢量,依此类推,直到最后M级(本文 为第易做图),计算使目标函数最小的那个路径(M个码本序号),即路径上各个码本加 起来使目标函数最小,来确定最佳路径 ) 原4级量化程序: %Quantization of Prediction Coefficients %Input: % lpcs(LPC parameters) % f(corresponding LSF parameters) %Output: % g(Index) function g=melp_msvq(lpcs,f) global stage1; global stage2; for j=1:10 %Get the Weighs w(j)=1+exp(-i*f(j)*(1:10))*lpcs'; end w=abs(w); w=w.^0.3; w(9)=w(9)*0.64; w(10)=w(10)*0.16; %d(m,1) is the judgement. %d(m,2:11) is the minus of the vector and the codeword %d(m,12:15) is the codeword. d(1:8,1:12)=10000000; for s=1:128 delta=f-stage1((s-1)*10+1:s*10); temp=w*(delta.^2)'; m=1; while m<9 if temp<d(m,1) d(m+1:9,:)=d(m:8,:); d(m,1)=temp; d(m,2:11)=delta; d(m,12)=s; break; end m=m+1; end end for s=1:3 e=d; d(1,2:11)=e(1,2:11)-stage2(s,1:10); d(1,1)=w*(d(1,2:11).^2)'; d(1,12:12+s)=[e(1,12:11+s),1]; for m=2:8 delta=e(m,2:11)-stage2(1,1:10); temp=w*(delta.^2)'; for num=1:(m-1) if temp<d(num,1) d(num+1:9,:)=d(num:8,:); d(num,1)=temp; d(num,2:11)=delta; d(num,12:11+s)=e(1,12:11+s); d(num,12+s)=1; break; end end if temp>=d(m-1,1) d(m,2:11)=delta; d(m,1)=temp; d(m,12:12+s)=[e(1,12:11+s),1]; end end for j=1:8 for k=2:64 delta=e(j,2:11)-stage2(s,(k-1)*10+1:k*10); temp=w*(delta.^2)'; for n=1:8 if temp<d(n,1) d(n+1:9,:)=d(n:8,:); d(n,1)=temp; d(n,2:11)=delta; d(n,12:11+s)=e(j,12:11+s); d(n,12+s)=k; break; end end end end end g=d(1,12:15);
补充:主要是 stage1这个码本不明白怎么用 我想用256替代128 但是现实超出矩阵大小 怎么办??写完程序可以发送到我邮箱 787102745@qq.com
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,