
一。产生长度为500的零均值,单位方差的高斯随机变量序列,用均匀pcm的方法用16电平进行量化:1)求所得的SQNR,该序列的前5个值,相应的量化值和相应的码字。2)画出量化误差(定义为输入值和量化值之间的差),同时 画出量化值作为输入值的函数的图。3)用128量化电平数重做2)题, 比较结果。
二。产生一个长度为500,按N(O,1)分布的随机变量序列,分别用16,128量化电平数和u=255的u律非线性进行量化,画出每种情况下量化器的误差和输入-输出关系,并求SQNR.
三。长度为500的非平稳序列a由两部分组成:前20个样本是按照均值为零和方差为400的高斯随机变量产生的,其余480个样本是根据均值和方差为1的高斯随机变量产生的,对这个序列分别用均匀pcm和非均匀pcm方法进行128电平量化,试比较两种情况下所得到的SQNR。
第一题的画出量化值作为输入值的函数不知道怎么写程序,出来的图都不太对,其他的的求SQNR,该序列前5个值,相应的量化值和相应的码字,以及量化误差都应该没错,程序为
function[sqnr,a_quan,code]=u_pcm(a,n)
% U_PCM 一个序列均匀的PCM编码.
% n=量化级数的数目(偶数).
% sqnr=输入信号量化噪声比(偶数)。
% 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));
然后在写程序
echo on
a=randn(1,500);
n=16;
[sqnr,a_quan,code]=u_pcm(a,16);
pause
sqnr%求出的是量化噪声比SQNR
pause
a(1:5)%前5个输入值
pause
a_quan(1:5)%前5个量化值
pause
code(1:5,:)%前5个码字
plot(a-a_quan)%量化误差
然后——画出量化值作为输入值的函数的图不知道怎么画了。。
128量化也是只会画量化误差。。量化值作为输入值的函数的图不知道怎么画了。。
第二题先写mulaw.m invmulaw.m mula_pcm.m
然后打程序
signum.m
function y=signum(x)
%SIGNUM finds the signum of a vector.
% Y=SIGNUM(X)
% X=input vector
y=x;
y(find(x>0))=ones(size(find(x>0)));
y(find(x<0))=-ones(size(find(x<0)));
y(find(x==0))=zeros(size(find(x==0)));
mulaw.m
function[y,a]=mulaw(x,mu)
a=max(abs(x));
y=(log(1+mu*abs(x/a)) ./log(1+mu)).*signum(x);
mula_pcm
function[sqnr,a_quan,code]=mula_pcm(a,n,mu)
[y,maximum]=mulaw(a,mu);%经过压缩曲线处理
[sqnr,y_q,code]=u_pcm(y,n);%把处理后的结果均匀量化
a_quan=invmulaw(y_q,mu);%恢复量化后的归一化序列
a_quan=maximum*a_quan;%恢复量化后的序列
sqnr=20*log10(norm(a)/norm(a-a_quan));%求量化信噪比
然后
echo on
a=randn(500);
n=16;
[dist,a_quan,code]=mula_pcm(a,16,255)
pause
sqnr
出不来结果。。不知道哪里错了,还是少了点什么。。第三题不太会。。
