📄 vqlbg.m
字号:
%该段程序采用循环算法,每次循环分裂生成本次循环的初始码本,再用LBG算法生成本次循环的最终的码本,要生成k=2^i个码字的码本只要经过i次这样循环就可生成最终的码本
function r = vqlbg(d,k)
% Inputs:
% d:训练数据矢量
% k:码本尺寸
% Output:
% r:VQ码本
e = .001;
%求质心
r = mean(d,2);%行平均即质心
dpr = 10000;%畸变初值
%分裂质心
for i = 1:log2(k)%分裂次数
r = [r*(1+e), r*(1-e)];
while (1)
z = disteu(d, r);
[m,ind] = min(z, [], 2);%最小欧氏距离给m,所在位置的标号给ind
t = 0;
%聚类
for j = 1:2^i
r(:, j) = mean(d(:, find(ind == j)), 2);%将输入信号根据最邻近准则分成了2^j个子集并求得每个子集的新质心
x = disteu(d(:,find(ind == j)), r(:, j));%本次畸变
for q = 1:length(x)
t = t + x(q);%i次迭代后的总畸变值
end
end
if (((dpr - t)/t) < e)
break;
else
dpr = t;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -