900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > MATLAB仿真——PCM编码——通信原理实验

MATLAB仿真——PCM编码——通信原理实验

时间:2023-01-17 22:51:42

相关推荐

MATLAB仿真——PCM编码——通信原理实验

PCM编码仿真比较简单,我这里给出了实验代码和结果图

一、实验原理

二、实验代码

clear;clc;T=0.0005;t=-0.01:T:0.01;fs=2000;sdt=1/fs;t1=-0.01:sdt:0.01;xt=cos(2*pi*30*t)+sin(2*pi*120*t);st=cos(2*pi*30*t1)+sin(2*pi*120*t1);max = max(abs(st));% 原始信号figure;subplot(2,1,1);plot(t,xt);title('原始信号');grid on;subplot(2,1,2);stem(t1,st,'.');title('抽样信号');grid on;pcm_encode = PCMcoding(st);figure;stairs(pcm_encode);%绘制信号的阶梯图axis([0 20 -0.1 1.1]);title('PCM 编码');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;endendcode = reshape(code', 1, []);end

三、实验结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。