function[sqnr,a_quan,code]=u_pcm(a,n)
%u_pcm 一个序列的均匀PCM编码
%[sqnr,a_quan,code]=u_pcm(a,n)
%a=输入序列
%n=量化级数的数目(偶数)
%sqnr=输入信号量化噪声比(以dB为单位)
%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
sqnr=20*log10(norm(a)/norm(a-a_quan));%
- 1
- 2
- 3
前往页