1、通信系统建模和仿真试验汇报试验2:MATLAB编程实现 A律PCM编码系统设计和仿真1 关键技术指标:输入信号:s(t)=Asin(2ft+);输入信号幅值:A=-700dB;输入信号频率:f=4Hz;抽样频率:fs=100Hz;2 总体系统设计框图 图1. A律PCM编解码系统框图3 程序块步骤设计和检验3.1 A律PCM编码模块3.1.1 A律PCM编码规则:图2 段落码和段内码编码规则3.1.2 PCM编码步骤输入信号x后,先判定x符号,x0时C1=1,x0时C1=0;判定完符号后将信号进行归一化和量化,再进行段落判定和段内判定,最终将C1C8输出。步骤图以下: 输入信号S判定符号 归一
2、化、量化输出 段内判定 段落判定 3.2.A律PCM译码模块对已经编码信号进行译码时,先输入已经编码码组,依据极性码规则提取符号,判定符号位,接着再判定段落位置和段内位置,最终将译码后结果输出,其译码步骤图以下: 输入信号S判定符号 归一化、量化输出 段内判定 段落判定 4 程序代码及测试仿真结果4.1 连接全程序输入信号进行参数设定:抽样频率fs=40,dt=1/fs,t=0:dt:2,输入正弦信号幅度不一样,vm1=-70:5:0,这是以分贝为单位,要将她转换为以伏特为单位vm=10.(vm1/20);开始画图调用各个模块函数:PCM均匀量化编码sqnrM,zxx,zz=upcm(x,M)
3、,PCM编码y=pcm_encode(sxx),PCM解码yy=pcm_decode(y,v);还要计算噪声平均功率和信号平均功率来得到信号量化信噪比:nq(m)=sum(x-yy).*(x-yy)/length(x); sq(m)=mean(yy.2); snr(m)=(sq(m)/nq(m);4.2 仿真结果在matlab上运行主函数pcm_e_decode.m,可得到原始信号波形,PCM译码后波形,不一样幅度下PCM编码后量化信噪比和均匀量化量化信噪比波形 图3 原始抽样信号(上)和PCM译码后重建信号(下)原始抽样信号和PCM译码后信号全部是正弦波,能够看出经过PCM译码后重建信号和原
4、始信号相比没有失真,译码正确。图4 A律PCM编码和均匀量化编码量化信噪比比较从上图能够看出:(1)对均匀编码和非均匀编码,量化信噪比伴随输入信号幅度改变而改变;(2)在输入正弦信号幅度相同情况下,经过A律13折线近似PCM非均匀量化编码后信号量化信噪比要比均匀量化编码后信噪比小,所以,能够得出结论:非均匀量化能够有效地改善量化信噪比。4.3 Matlab源程序程序代码%均匀量化编码:functionsqnr,a_quan,code=upcm(a,n)amax=max(abs(a);a_quan=a/amax; %抽样值归一化b_quan=a_quan;d=2/n;q=d.*0:n-1-(n-
5、1)/2*d;%对归一化输入信号序列进行量化for i=1:n index=find(q(i)-d/2=a_quan)&(a_quan0 out(i,1)=1; else out(i,1)=0 endif abs(x(i)0 & abs(x(i)=32 & abs(x(i)=64 & abs(x(i)=128 & abs(x(i)=256 & abs(x(i)=512 & abs(x(i)=1024 & abs(x(i)=2048 & abs(x(i)=4096) out(i,2:8)=1 1 1 1 1 1 1; else tmp=floor(abs(x(i)-st)/step); t=de
6、c2bin(tmp,4)-48; %函数dec2bin输出是ASCII字符串,48对应0 out(i,5:8)=t(1:4); endendout=reshape(out,1,8*n);%PCM译码:functionout=pcm_decode(in,v)%decode the input pcm code%in, input the pcm code 8bits sample%v, quantized leveln=length(in);in=reshape (in,8,n/8);slot(1)=0;slot(2)=32;slot(3)=64;slot(4)=128;slot(5)=256;
7、slot(6)=512;slot(7)=1024;slot(8)=2048;step(1)=2;step(2)=2;step(3)=4;step(4)=8;step(5)=16;step(6)=32;step(7)=64;step(8)=128;for i=1:n/8 ss=2*in(1,i)-1; tmp=in(2,i)*4+in(3,i)*2+in(4,i)+1; st=slot(tmp); dt=(in(5,i)*8+in(6,i)*4+in(7,i)*2+in(8,i)*step(tmp)+0.5*step(tmp); out(i)=ss*(st+dt)/4096*v;end%主程序中
8、:figure(1)for k=1:length(vm) for m=1:2 x=vm(k)*sin(2*pi*4*t+2*pi*rand(1); sqnrM,zxx,zz=upcm(x,M); %PCM均匀量化编码 srm(m)=sqnrM; v=vm(k); xx=x/v; %normalize sxx=floor(xx*4096); y=pcm_encode(sxx); %PCM编码 yy=pcm_decode(y,v); %PCM解码 nq(m)=sum(x-yy).*(x-yy)/length(x); %噪声平均功率 sq(m)=mean(yy.2); %信号平均功率 snr(m)=(sq(m)/nq(m); %信号量化信噪比 usnrq(k)=mean(srm); snrq(k)=10*log10(mean(snr); %量化信噪比end