当前位置 博文首页 > 仇天朔 廊坊师范学院信息技术提高班 十七期:基于MATLAB的PCM的

    仇天朔 廊坊师范学院信息技术提高班 十七期:基于MATLAB的PCM的

    作者:[db:作者] 时间:2021-06-29 21:15

    基于MATLAB的PCM的编码译码仿真

    一、实验目的

    1.熟悉PCM原理
    2.掌握编写PCM程序的要点
    3.掌握使用MATLAB调制仿真的要点

    二、实验内容

    (1)根据PCM (脉冲编码调制)原理,设计源程序代码。
    (2)通过MATLAB软件仿真给定模拟信号编码后的波形。
    (3)对比原始信号波形和译码后的波形。

    三、实验原理

    1.脉冲编码调制
    脉冲编码调制在通信系统中是一种对模拟信 号数字化的取样技术,将模拟信号变换为数字信号的编码方式。PCM的实现主要包括三个步骤完成:抽样、量化、编码。分别为时间上离散、幅度上离散及量化信号的二进制表示。根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和μ律方式,本设计采用了A律方式。由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码
    2.抽样
    在一系列离散点上,对信号捕取样值称为抽样。

    四、实验代码

    T=0.002;
    t=-0.1:T:0.1;
    xt=cos(2*pi*30*t)+sin(2*pi*65*t);
    fs=500;
    sdt=1/fs;
    t1=-0.1:sdt:0.1;
    st=cos(2*pi*30*t)+sin(2*pi*65*t);
    figure(1);
    subplot(3,1,1);
    plot(t,xt);title('原始信号');
    grid on
    subplot(3,1,2);
    stem(t1,st,'.');
    title('量化信号');
    title('抽样信号');
    grid on
    
    n=length(st);
    M=max(st);
    C=(st/M)*2048;
    code=zeros(1,8);
    for i=1:n
        if C(i)>=0
            code(i,1)=1;
        else
            code(i,1)=0;
    end
        
     if abs(C(i))>=0&&abs(C(i))<16
         code(i,2)=0;code(i,3)=0;code(i,4)=0;step=1;start=0;
     else if 16<=abs(C(i))&&abs(C(i))<32
          code(i,2)=0;code(i,3)=0;code(i,4)=1;step=1;start=16;
     else if 32<=abs(C(i))&&abs(C(i))<64
          code(i,2)=0;code(i,3)=1;code(i,4)=0;step=2;start=32;
     else if 64<=abs(C(i))&&abs(C(i))<128
          code(i,2)=0;code(i,3)=1;code(i,4)=1;step=4;start=64;
     else if 128<=abs(C(i))&&abs(C(i))<256
          code(i,2)=1;code(i,3)=0;code(i,4)=0;step=8;start=128;
     else if 256<=abs(C(i))&&abs(C(i))<512
          code(i,2)=1;code(i,3)=0;code(i,4)=1;step=16;start=256;
     else if 512<=abs(C(i))&&abs(C(i))<1024
          code(i,2)=1;code(i,3)=1;code(i,4)=0;step=32;start=512;
     else if 1024<=abs(C(i))&&abs(C(i))<2048
          code(i,2)=1;code(i,3)=1;code(i,4)=1;step=64;start=1024;
    end
    end
    end
    end 
    end
    end 
    end
    end
      B=floor((abs(C(i))-start)/step);
      t=dec2bin(B,4)-48;
      code(i,5:8)=t(1:4);
    end
    code=reshape(code',1,8*n);
    subplot(313);
    stem(code,'.');
    axis([1 64 0 1]);
    title('编码信号');
    grid on 
    y=awgn(code,5);
    figure(2);
    stem(y,'.');axis([1 64 0 3]);
    title('叠加加性高斯信号的信号');
    
    n=length(code);
    code=reshape(code',8,n/8)';
    slot(1)=0;slot(2)=32;
    slot(3)=64;slot(4)=128;
    slot(5)=256;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*code(i,1)-1;
       tmp=code(i,2)*4+code(i,3)*2+code(i,4)+1;
       st=slot(tmp);
       dt=(code(i,5)*8+code(i,6)*4+code(i,7)*2+code(i,8))*step(tmp)+0.5*step(tmp);
       v=1;
       r(i)=ss*(st+dt)/4096*v;
    end
    T=0.002;
    t=-0.1:T:0.1;
    figure(3);
    subplot(111);
    plot(t,r);
    title('译码后的原始信号');
    grid on
    

    五、实验结果

    在这里插入图片描述