www.pudn.com > pcm_chianelxie.rar > u_pcm.m


function[a_quan,code]=u_pcm(a,n) 
%u_pcm 一个序列的均匀PCM编码 
%[a_quan,code]=u_pcm(a,n) 
%a=输入序列 
%n=量化级数的数目(偶数) 
%a_quan=编码前的量化输出 
%code=编码后的输出 
amax=max(abs(a)); 
a_quan=a/amax;%归一化 
b_quan=a_quan;%赋初值 
d=2/n; 
q=d.*[0:n-1]; 
q=q-((n-1)/2)*d;%产生量化间隔 
for i=1:n%下面进行量化 
  a_quan(find((q(i)-d/2<=a_quan)&(a_quan<=q(i)+d/2)))=... 
  q(i).*ones(1,length(find((q(i)-d/2<=a_quan)&(a_quan<=q(i)+d/2)))); 
  b_quan(find(a_quan==q(i))) =(i-1).*ones(1,length(find(a_quan==q(i)))); 
end 
a_quan=a_quan*amax;%恢复原值 
nu=ceil(log2(n));%以下时编码 
code=zeros(length(a),nu); 
for i=1:length(a) 
   for j=nu:-1:0 
     if (fix(b_quan(i)/(2^j))==1) 
       code(i,(nu-j))=1; 
       b_quan(i)=b_quan(i)-2^j; 
       end 
   end 
end