您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > matlab正弦信号PCM编码译码
附录C对正弦信号m(t)进行编码和译码%给定正弦信号%=======================================================================clear;t=0:0.001:1;%给定10个单位的时间x=0:0.002*pi:2*pi;Signal_m=10*sin(x);%给一个正弦信号,信号输入范围为[-10,10]subplot(2,1,1);plot(t,Signal_m);title('输入正弦信号');grid;%=======================================================================%PCM编码%=======================================================================%------------------------随机的产生抽样值,给出PCM码组-----------------------Is=round(2048*(Signal_m/10));%归一化Len=length(Is);Code=zeros(Len,8);%---------------------------------极性码-----------------------------------fori=1:Lenif(Is(i)0)Code(i,1)=1;endend%----------------------------------段落码----------------------------------Signal=abs(Is);fori=1:Lenif(Signal(i)=128)Code(i,2)=1;%为1在5~8段,否则在1~4段endif(Code(i,2)==1)%++++++++++确在5~8段++++++++++if(Signal(i)=512)Code(i,3)=1;%为1在7~8段,否则在5~6段endif(Code(i,3)==1)%-------确在7~8段-------if(Signal(i)=1024)Code(i,4)=1;%为1在第8段,否则在第7段elseendif(Signal(i)=256)Code(i,4)=1;endendelse%++++++++++确在1~4段++++++++++if(Signal(i)=32)Code(i,3)=1;%为1在3~4段,否则在1~2段end;if(Code(i,3)==1)%-------确在3~4段-------if(Signal(i)=64)Code(i,4)=1;%为1在第4段,否则在第3段elseendif(Signal(i)=16)Code(i,4)=1;endendendend%---------------------------------段内码---------------------------------QidianDianping=[0,16,32,64,128,256,512,1024];%段落起点电平LianghuaJiange=[1,1,2,4,8,16,32,64];%段落量化间隔DuanluoN=zeros(1,Len);fori=1:LenDuanluoN(i)=bin2dec(num2str(Code(i,2:4)))+1;endfori=1:Lentemp=num2str(dec2bin((Signal(i)-QidianDianping(DuanluoN(i)))/LianghuaJiange(DuanluoN(i)),4));endCode(i,5)=bin2dec(temp(1));Code(i,6)=bin2dec(temp(2));Code(i,7)=bin2dec(temp(3));Code(i,8)=bin2dec(temp(4));%=======================================================================%PCM译码%=======================================================================LianghuaDanweiN=zeros(1,Len);Lianghuazhi=zeros(1,Len);Mark=zeros(1,Len);Signal_trans=zeros(1,Len);fori=1:LenDuanluoN(i)=bin2dec(num2str(Code(i,2:4)))+1;LianghuaDanweiN(i)=bin2dec(num2str(Code(i,5:8)));Mark(i)=QidianDianping(DuanluoN(i));Lianghuazhi(i)=LianghuaJiange(DuanluoN(i));sign=1;if(Code(i,1)==0)sign=-1;endendSignal_trans(i)=sign*(Mark(i)+Lianghuazhi(i)*LianghuaDanweiN(i));fori=1:LenSignal_trans(i)=10*(Signal_trans(i)/2048);endsubplot(2,1,2);plot(t,Signal_trans);title('编码再译码后的正弦信号');grid;%======================================================================附录BPCM译码的Matlab实现%--------------------------随机的产生一个PCM码组----------------------------clear;Code=zeros(1,8);fori=1:8Code(i)=floor(2*unifrnd(0,1));endCode%------------------------------译码----------------------------------------DuanluoN=bin2dec(num2str(Code(2:4)))+1;%由段落码确定所在码段LianghuaDanweiN=bin2dec(num2str(Code(5:8)));QidianDianping=[0,16,32,64,128,256,512,1024];%段落起始电平LianghuaJiange=[1,1,2,4,8,16,32,64];%相应的段落量化值Mark=QidianDianping(DuanluoN);Lianghuazhi=LianghuaJiange(DuanluoN);sign=1;if(Code(1)==0)sign=-1;endSignal=sign*(Mark+Lianghuazhi*LianghuaDanweiN);Signal附录APCM编码的Matlab实现%--------------------------随机的产生一个抽样值-----------------------------clear;Code=zeros(1,8);Is=round(2048*unifrnd(-1,1));Is%------------------------------极性码---------------------------------------if(Is0)Code(1)=1;endSignal=abs(Is);%-----------------------------段落码----------------------------------------if(Signal=128)Code(2)=1;%为1在5~8段,否则在1~4段endif(Code(2)==1)%++++++++++确在5~8段++++++++++if(Signal=512)Code(3)=1;%为1在7~8段,否则在5~6段endif(Code(3)==1)%-------确在7~8段-------if(Signal=1024)Code(4)=1;%为1在第8段,否则在第7段elseendif(Signal=256)Code(4)=1;endendelse%++++++++++确在1~4段++++++++++if(Signal=32)Code(3)=1;%为1在3~4段,否则在1~2段end;if(Code(3)==1)%-------确在3~4段-------if(Signal=64)Code(4)=1;%为1在第4段,否则在第3段elseendif(Signal=16)Code(4)=1;endendend%-----------------------------段内码----------------------------------------QidianDianping=[0,16,32,64,128,256,512,1024];%段落起点电平LianghuaJiange=[1,1,2,4,8,16,32,64];%各段落量化间隔DuanluoN=bin2dec(num2str(Code(2:4)))+1;%由段落码确定所在码段temp=num2str(dec2bin((Signal-QidianDianping(DuanluoN))/LianghuaJiange(DuanluoN),4));Code(5)=bin2dec(temp(1));Code(6)=bin2dec(temp(2));Code(7)=bin2dec(temp(3));Code(8)=bin2dec(temp(4));Code
本文标题:matlab正弦信号PCM编码译码
链接地址:https://www.777doc.com/doc-6218688 .html