?? 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 + -