目录

  • MATLAB——PCM编译码
    • 一、实验原理
      • 1.掌握PCM编码原理和译码原理
      • 2. 练习使用Matlab编程实现PCM编码和译码
      • 3. 了解失真度的概念,能对译码结果进行失真度分析
    • 二、实验原理
    • 三、实验要求
      • 1、用Matlab产生一模拟信号,如: 或者自己编写一信号,或者找某一语音信号……。
      • 2、在满足抽样定理要求下,对该信号进行抽样,用Matlab编程实现,画出抽样信号,并与原信号进行对比。
      • 3、对抽样信号进行PCM编码,用Matlab编程实现,画出编码波形(矩形脉冲、单极性不归零),并标出某个抽样值的8位编码结果。
      • 4、对经信道传输得到的PCM编码进行PCM解码,用Matlab编程实现,并画出解码波形。
      • 5、对解码结果进行失真度分析。
      • 6、(扩展练习)采用PCM编码,2PSK结合simulink实现语音信号(可使用Matlab自带的语音信号)的传输仿真。
    • 四、实验内容
      • 4.1用Matlab产生一模拟信号
      • 4.2画出抽样信号,并与原信号进行对比
      • 4.3对抽样信号进行PCM编码
      • 4.4 PCM解码
      • 4.5失真度分析
      • 4.6 simulink实现语音信号的传输仿真
    • 五、引用

MATLAB——PCM编译码

一、实验原理

1.掌握PCM编码原理和译码原理

2. 练习使用Matlab编程实现PCM编码和译码

3. 了解失真度的概念,能对译码结果进行失真度分析

二、实验原理

脉冲编码调制就是把一个时间连续,取值连续的模拟信号变换成时间离散,取值离散的数字信号后在信道中传输。脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码的过程。

抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号,抽样必须遵循奈奎斯特抽样定理。该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。它的抽样速率的下限是由抽样定理确定的。

量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示,通常是用二进制表示。

量化误差,量化后的信号和抽样信号的差值。量化误差在接收端表现为噪声,称为量化噪声。 量化级数越多误差越小,相应的二进制码位数越多,要求传输速率越高,频带越宽。 为使量化噪声尽可能小而所需码位数又不太多,通常采用非均匀量化的方法进行量化。 非均匀量化根据幅度的不同区间来确定量化间隔,幅度小的区间量化间隔取得小,幅度大的区间量化间隔取得大。一个模拟信号经过抽样量化后,得到已量化的脉冲幅度调制信号,它仅为有限个数值。

编码,就是用一组二进制码组来表示每一个有固定电平的量化值。然而,实际上量化是在编码过程中同时完成的,故编码过程也称为模/数变换,可记作A/D。
为解决均匀量化时小信号量化误差大,音质差的问题,在实际中采用不均匀选取量化间隔的非线性量化方法,即量化特性在小信号时分层密,量化间隔小,而在大信号时分层疏,量化间隔大。在实际中使用的是两种对数形式的压缩特性:A律和μ律。

三、实验要求

1、用Matlab产生一模拟信号,如: 或者自己编写一信号,或者找某一语音信号……。

2、在满足抽样定理要求下,对该信号进行抽样,用Matlab编程实现,画出抽样信号,并与原信号进行对比。

3、对抽样信号进行PCM编码,用Matlab编程实现,画出编码波形(矩形脉冲、单极性不归零),并标出某个抽样值的8位编码结果。

4、对经信道传输得到的PCM编码进行PCM解码,用Matlab编程实现,并画出解码波形。

5、对解码结果进行失真度分析。

6、(扩展练习)采用PCM编码,2PSK结合simulink实现语音信号(可使用Matlab自带的语音信号)的传输仿真。

四、实验内容

4.1用Matlab产生一模拟信号

t=0:1/2000:0.1;
f=cos(100*pi*t)+2*sin(200*pi*t)+3*cos(300*pi*t);plot(t,f);
xlabel('t');
title('f(t)的时域波形');

4.2画出抽样信号,并与原信号进行对比

clear;
clc;
T=0.0005;
t=-0.05:T:0.05;
fs=2000;
sdt=1/fs;
t1=-0.05:sdt:0.05;% 原始信号
f=cos(100*pi*t)+2*sin(200*pi*t)+3*cos(300*pi*t);
%抽样信号
fs=cos(100*pi*t1)+2*sin(200*pi*t1)+3*cos(300*pi*t1);figure;
subplot(2,1,1);plot(t,f);title('原始信号');grid on;
subplot(2,1,2);stem(t1,fs,'.');title('抽样信号');grid on;

4.3对抽样信号进行PCM编码

% 原始信号
f=cos(100*pi*t)+2*sin(200*pi*t)+3*cos(300*pi*t);
%抽样信号
fs=cos(100*pi*t1)+2*sin(200*pi*t1)+3*cos(300*pi*t1);
max = max(abs(fs));
% 原始信号figure;
subplot(2,1,1);plot(t,f);title('原始信号');grid on;
subplot(2,1,2);stem(t1,fs,'.');title('抽样信号');grid on;pcm_encode = PCMcoding(fs);
figure;
stairs(pcm_encode);%绘制信号的阶梯图
axis([0 328 -0.1 1.1]);
title('PCM 编码');axis([0 168 -0.1 1.1]);
set(gca,'xtick',[ 1 9  17 25 33 41 49 57 168]);
xticklabels({'1','9','17','25','33','41','49','57','168'})
grid on;function code=PCMcoding(S)z=sign(S);                                %判断S的正负MaxS=max(abs(S));                         %求S的最大值 S=abs(S/MaxS);                            %归一化Q=2048*S;                                 %量化code=zeros(length(S),8);                  %PCM编码存储矩阵%%% 段落码判断程序for i=1:length(S)if (Q(i)>128)&&(Q(i)<=2048)code(i,2)=1;            %在第五段与第八段之间,段位码第一位都为"1"endif (Q(i)>32)&&(Q(i)<=128)||(Q(i)>512)&&(Q(i)<=2048)code(i,3)=1;            %在第三四七八段内,段位码第二位为"1"endif (Q(i)>16)&&(Q(i)<=32)||(Q(i)>64)&&(Q(i)<=128)||(Q(i)>256)&&(Q(i)<=512)||(Q(i)>1024)&&(Q(i)<=2048)code(i,4)=1;            %在二四六八段内,段位码第三位为"1"endend%%% 段内码判断程序N=zeros(length(S));                              for i=1:length(S)N(i)=bin2dec(num2str(code(i,2:4)))+1;        %找到code位于第几段,bin2dec将二进制整数的文本表示转换为双精度值,enda=[0,16,32,64,128,256,512,1024];                 %13折线各段起始对应的量化单位数b=[1,1,2,4,8,16,32,64];                          %除以16,得到每段的最小量化间隔for i=1:length(S)  q=ceil((Q(i)-a(N(i)))/b(N(i)));              %求出在段内的位置,ceil将 X 的每个元素四舍五入到大于或等于该元素的最接近整数if q==0code(i,(5:8))=[0,0,0,0];                 %如果输入为零则输出"0"else k=dec2bin(q-1,4);                       %将字符数组或字符串转换为数值数组,编码段内码为二进制,dec2bin将十进制整数转换为其二进制表示字符向量code(i,5)=str2num(k(1));code(i,6)=str2num(k(2));code(i,7)=str2num(k(3));code(i,8)=str2num(k(4));end%符号位的判断if z(i)>0code(i,1)=1;elseif z(i)<0code(i,1)=0;end                                        endcode = reshape(code', 1, []);
end




我们选取观察的点是模拟信号中负值最大的点,同时也是抽样信号的第5个点。它的PCM编码结果应该是0111 1111,我们打开Workbench中pcm_encode,观察第33~40位。发现编码结果确实是0111 1111,符合编码逻辑,证明代码编写无误。

4.4 PCM解码

function s=PCMdecoding(encode, max)encode=(reshape(encode',8,length(encode)/8))';l=size(encode,1);a=[0,16,32,64,128,256,512,1024];b=[1 1 2 4 8 16 32 64];c=[0 1.5:15.5];for i=1:lx=encode(i,1);T=bin2dec(num2str(encode(i,(2:4))))+1;Y=bin2dec(num2str(encode(i,(5:8))));if Y==0k(i)=a(T)/2048;elsek(i)=(a(T)+b(T)*c(Y))/2048;endif x==0s(i)=-k(i);elses(i)=k(i);endends = s*max;
end


通过原始信号与PCM编码译码后的对比可以看到能够比较好地重建出原始信号。通过下图能够更好得出对比的效果。

4.5失真度分析

figure;
subplot(2,1,1);plot(t,f);title('原始信号');grid on;
subplot(2,1,2);stem(t1,fs,'.');title('抽样信号');grid on;pcm_encode = PCMcoding(fs);pcm_decode = PCMdecoding(pcm_encode, max);
figure;
plot(t, pcm_decode);hold on
title('PCM 译码');grid on;
plot(t,f);
title('原始信号');grid on;% 计算失真度
da=0;
for i=1:length(t)dc=(f(i)-pcm_decode(i))^2/length(t);da=da+dc;
end
fprintf('失真度是:%.6f\n',da);

失真度我们认为是前后信号之间的均方误差,经过计算得到为:
失真度是:0.010716

4.6 simulink实现语音信号的传输仿真

首先我设计了一个2psk的编码模块,可以将单极性基带二进制码转换为2PSK信号。从Scope模块中我们可以得到Bernoulli Binary模块生成的随机二进制基带信号生成的2PSK波形,验证模块的正确性。



接下来我将之前编写的PCM编码和解码模块和2PSK模块结合起来,模拟语音信号编码、传输和解码过程。我使用了MATLAB自带的语音包crisp,可以发出鸟鸣的声音。
接下来我将之前编写的PCM编码和解码模块和2PSK模块结合起来,模拟语音信号编码、传输和解码过程。语音信号的选择我使用了MATLAB自带的语音包crisp,可以发出鸟鸣的声音。

load chirp % matlab自带语音信号
y1=[y,y];
x=y1(1:20000); %取前20000个采样点
sound(x,Fs);

接下来就是将语音信号进行传输的Simulink仿真了,simout就是经过传输的语音信号,但注意这是pcm八进制编码的形式,必须要进行解码,同时和原信号进行对比,验证传输的正确性。

%% 译码
demodata=simout(2:160001);
zz=pcm_decode(demodata,0.8);
figure;
subplot(1,1,1);
plot(zz);
title('译码的语音信号');
sound(zz,Fs);
%x是初始的语音信号矩阵
figure;
plot(x,'b');
hold on
%zz是译码得到的语音信号
plot(zz,'r');
legend('原语音信号','恢复的语音信号');
title('语音信号对比');



五、引用

[1]邢巨伟.模拟信号的数字化传输-PCM编码[J].黑龙江科技信息,2014(33):116.
[2]陈奎.语音PCM编码通信系统的SIMULINK仿真[J].福建电脑,2012,28(10):115-117.
[3]赵守彬,李鸿刚.利用Matlab实现PCM编码的A律13折线法量化[J].科技信息,2009(36):547.

MATLAB——PCM编译码实验相关推荐

  1. 【毕业设计/Matlab系列】基于PCM编译码和2ASK调制解调的通信系统仿真

    Date:2022.5.22 文章目录 前言 1.算法过程 2.仿真效果图 3.核心matlab代码 前言 在大学毕业设计的时候,课题要求实现<基于PCM编译码和2ASK调制解调的通信系统仿真& ...

  2. cmi编码实验_cmi编译码实验报告.docx

    cmi编译码实验报告 光纤通信实验报告 姓名:刘小彤 学号: 班级: 一.实验目的: 1.熟悉m序列NRZ码.任意周期码产生原理以及光纤线路CMI编译码原理. 2.初步熟练Altera公司Maxplu ...

  3. 基于matlab编译码器的设计,基于MATLAB循环码编译码仿真

    基于MATLAB循环码编译码仿真(论文11000字) 摘要:在具体了解循环码的编码理论的基础上,使用 M ATLA B 软件设计了循环码编译码器. 通过 M ATLAB 软件实现循环码的编译码 ,通过 ...

  4. 【编码译码】基于matlab HDB3编译码仿真【含Matlab源码 1961期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[编码译码]基于matlab HDB3编译码仿真[含Matlab源码 1961期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. cmi编码实验_实验二 - 光纤通信系统线路码型CMI - 编译码实验 - 图文 -

    实验二 光纤通信系统线路码型CMI 编译码实验 一.实验目的 1.了解线路码型在光纤传输系统中的作用 2.掌握线路码型CMI码的编译码过程以及电路实现原理 二.实验内容 1.验证符合光纤传输系统的线路 ...

  6. 信工实验参考——《通信原理实验1——话音信号的PCM编译码综合实验》

  7. 基于matlab的卷积码实验报告,基于MATLAB的卷积码编译码设计仿真.doc

    摘要:在数字信号的传输过程中,会受到信道特性不理想和噪声的影响,通常采用差错控制编码来提高系统的可靠性.卷积码是P.Elias等人提出的,这一编码技术至今广泛使用.目前,卷积码已普遍在无线通信标准使用 ...

  8. 基于MATLAB的PCM编解码

    (一)13 折线法编码的 Matlab 实现 (a)编程思想 "模拟信号的抽样"已经得到了时间离散.幅度连续的抽样信号.若将对抽样信号非均匀量化编码编出的 8 位码组用 C1 C2 ...

  9. 码长6075的qc-ldpc编译码的MATLAB误码率仿真

    1.算法简介 为满足高的数据需求,提出一种新的QC-LDPC码.该校验矩阵的校验部分为近似下三角结构,上对角线下面的非零元素可以任意放置,因此是一种半确定的结构.这种结构的码设计灵活,性能也极高.通过 ...

最新文章

  1. 20145240《网络对抗》MSF基础应用
  2. 今天看到两个题 写出来思考一下
  3. 基于Mybatis,处理多表联合获取
  4. 将长度为n的绳子分为m段求各段乘积的最大值
  5. nodejs --inspect-brk结合Chrome开发者工具的调试
  6. html网页加密最终版,【原】记一次加密网页html的研究
  7. 谁动了我的选择器?深入理解CSS选择器优先级
  8. 枚举项的数量限制在64个以内
  9. UVA11398 The Base-1 Number System【进制】
  10. CMake 添加头文件目录,链接动态、静态库(添加子文件夹)
  11. 超级备份还原v2.3.05_新手如何一键还原电脑系统(图文教程)
  12. android 磁盘日志记录,GitHub - xflyandroid/XLog: 一个简易的日志打印框架(支持打印策略自定义,默认提供2种策略:logcat打印和磁盘打印)...
  13. ORA-01157报错cannot identify/lock data file
  14. 海康威视多摄像头视频实时采集——OpenCV显示
  15. 数字孪生:迈向未来,智慧城市大脑运营方案及整体建设解决方针
  16. oracle赋权directory,ORACLE DIRECTORY目录管理步骤
  17. python利用scipy.integrate中的odeint方法解微分方程
  18. kibana快照存储库实现定时备份elasticsearch集群索引
  19. bnu 33970 Ears Cutting
  20. Nokia 手机软件签名安装全过程.

热门文章

  1. 证券交易买进卖出手续费公式
  2. HDU 4183 Pahom on Wate【网络流+路径问题】
  3. EDID:识别和解决常见问题指南
  4. 电容6大特性参数,你知道几个?
  5. 信号完整性的定义、干扰因素及解决方法详解
  6. CPU核数和线程数有什么作用?CPU核数和线程的关系与区别,服务器CPU与电脑主机CPU的区别
  7. 非全也要卷?复旦大学软件非全很多高分
  8. 易语言之ocr自动识别验证码dll文件
  9. 【射影几何05】齐次坐标系(Homogeneous coordinates)
  10. Web安全-表单域隐藏