1.已知f=[-2 -1.9 -1.5 0.123 1.09 2],编写量化函数进行量化,并记录实验结果。
参考程序如下:
function h=junyun(f,V,L)
% 量化函数,f是输入信号序列,V是量化电平最大值,L是量化电平数
n=length(f); %n是输入信号序列长度
t=2*V/L; %级间间隔电压值
p=zeros(1,L+1);
for i=1:L+1
p(i)=-V+(i-1)*t; %产生量化输出电平
end
for i=1:n
flag=0; %设立标志,“flag=0”表示f(i)还未量化
if f(i)>=V
h(i)=V; flag=1;
end
iff(i)<-V
h(i)=-V; flag=1;
end
forj=1:L+1 %当前输入信号f依次与p(j)输出电平做比较
if (flag==0)
if ( f(i)<=p(j))
h(i)=p(j); flag=1;
end;
end;
end;
end;
2.已知模拟信源
,要求利用quantiz、lloyds函数或自编的量化函数实现量化,量化区间小于等于0.1,要求输出量化结果。
3.已知A律对数压缩公式
,编写函数实现A律对数压缩,并编写程序调用此函数输出压缩系数A分别等于1、10、87.65时的压缩特性曲线。
参考函数程序如下:
function y=apcm(x,a)
%本函数实现将输入序列x进行参数为a的对数A律压缩
%x为一个序列,值0到1之间;a为正实数大于1
t=1/a;
for i=1:length(x)
if (x(i)>=0)
if(x(i)<=t)
y(i)=(a*x(i))/(1+log(a));
else
y(i)=(1+log(a*x(i)))/(1+log(a));
end
else
if(x(i)>=-t)
y(i)=-(a*-x(i))/(1+log(a));
else
y(i)=-(1+log(a*-x(i)))/(1+log(a));
end
end
end
4.编写自然数线性编码函数。
参考自然数编码函数如下:
function co=exadc(len,vi)
% len码长,vi输入的自然数。
v=vi;
for n=1:len
r=rem(v,2);
v=(v-r)/2;
code(n)=r;
end
co=fliplr(code);
5.编写整数编码函数,要求:结果中首位为符号位,1表示正,0表示负。
6. 编写实现均匀PCM量化编码的函数。要求:简单进行关键代码功能分析,并编写程序调用函数实现
的量化编码,并记录仿真结果。
function [sqnr,a_quan,code]=upcm(a,n)
% a输入信号序列,变量n为量化级数
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(log(n))
code=zeros(length(a),nu);
for i=1:length(a)
forj=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))
7. 在Simulink中,搭建语音信号的PCM调制与解调系统模型,如图9-31所示,并仿真实现。
图9-31 PCM仿真模型
提示:(1)Pulse Generator模块参数中,周期设为1/8000;(2)取自Communications System Toolbox库中的A-Law Compressor与A-Law Expander模块参数压缩系数设为87.6;(3)取自DSP System Toolbox库中的Uniform Encoder与Uniform decoder模块参数bits都设为8。

