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

简介: 基于MATLAB的PCM的编码译码仿真

基于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

五、实验结果

相关文章
|
9月前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
8月前
|
5G
基于IEEE 802.11a标准的物理层MATLAB仿真
基于IEEE 802.11a标准的物理层MATLAB仿真
430 0
|
8月前
|
算法
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
1019 30
|
8月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
9月前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
391 15
|
8月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
9月前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
1468 5
|
9月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
9月前
|
机器学习/深度学习 边缘计算 算法
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
379 0
|
9月前
|
人工智能 供应链 新能源
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
电动汽车参与运行备用的能力评估及其仿真分析(Matlab代码实现)
178 0

热门文章

最新文章