求高手,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