⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vq.m

📁 采用LBG算法计算矢量量化器的Matlab仿真程序。
💻 M
字号:
function [codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance)
%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.

if (nargin==3)
  tolerance=0.001;
end
m=round(length(training_seq)/dimension);
if (m*dimension-length(training_seq)<0)
  error('length of training_seq is not a multiple of dimension')
end
%	Initialize the codebook.
initial=training_seq(1:dimension*codebook_size);
initialcodebook=(reshape(initial,dimension,codebook_size))';
updated_codebook=initialcodebook;
%	first update
newdistortion=0;
distortion=0;
for i=1:m;
  training_seq_block=training_seq((i-1)*dimension+1:i*dimension);
  training_matrix(i,:)=training_seq_block;
  distortion_block=[ ];
  for j=1:codebook_size;
    distort=sum((training_seq_block-updated_codebook(j,:)).^2);
    distortion_block=[distortion_block distort];
  end
  [distortion_min,ind]=min(distortion_block);
  newdistortion=newdistortion+distortion_min;
  index(i)=ind;
end
for l=1:codebook_size;
  partition=(index==l);
  if sum(partition)>0
    updated_codebook(l,:)=partition*training_matrix/sum(partition);
  end
end
newdistortion=newdistortion/m;
%	furthur updated until the desired tolerance is met
while(abs(distortion-newdistortion)/newdistortion>tolerance)
  distortion=newdistortion;
  newdistortion=0;
  for i=1:m;
    training_seq_block=training_seq((i-1)*dimension+1:i*dimension);
    training_matrix(i,:)=training_seq_block;
    distortion_block=[ ];
    for j=1:codebook_size;
      distort=sum((training_seq_block-updated_codebook(j,:)).^2);
      distortion_block=[distortion_block distort];
    end
    [distortion_min,ind]=min(distortion_block);
    newdistortion=newdistortion+distortion_min;
    index(i)=ind;
%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.%VQ.m 	vector quantizer design using K-means algorithm
%	[codebook,distortion]=VQ(training_seq,dimension,codebook_size,tolerance).
%	training_seq = training sequence.
%	dimension = dimension of the quantizer.
%	codebook_size = size of the codebook (rate=log2(codebook_size)/dimension).
%	tolerance = desired relative distortion (default=0.001).
%	Length of training_seq must be a multiple of the dimension of quantizer.

  end
  for l=1:codebook_size;
    partition=(index==l);
    if sum(partition)>0
      updated_codebook(l,:)=partition*training_matrix/sum(partition);
    end
  end
  newdistortion=newdistortion/m;

end
codebook=updated_codebook;
distortion=newdistortion/dimension;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -