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

📄 u_pcm.m

📁 pcm编译码实现
💻 M
字号:
function [sqnr,a_quan,code]=u_pcm(a,n)

%U_PCM  	Uniform PCM encoding of a sequence.
%       	[SQNR,A_QUAN,CODE]=U_PCM(A,N)
%       	a=input sequence.
%       	n=number of quantization levels (even).
%       	sqnr=output SQNR (in dB).
%		a_quan=quantized output before encoding.
%		code=the encoded output.

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;%q是从-(1-1/n)到(1-1/n),且间隔为2/n的序列;

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;   %循环结束后,a_quan中为量化后的值,b_quan为量化码号
nu=ceil(log2(n));     %天花板函数求得PCM码比特数
code=zeros(length(a),nu); %二维数组储存PCM码

%下面代码为求PCM码矩阵code
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));

⌨️ 快捷键说明

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