您的位置:首页 > 编程语言 > MATLAB

信号与系统课程中关于各种编码MATLAB仿真的绘图函数

2010-04-27 20:39 651 查看
function plot2code(signal,type)
%--------------------------------------------------------------------------
%输入参数
%signal ,表示二进制编码信号
%type ,编码类型,不分大小写,包括如下种类
% 'Mil' ,Miller密勒码(默认)
% 'CMI' ,CMI(传号反转码)
% 'Man' ,Manchester(曼彻斯特),或称双相码
% 'Dif' ,Differential Coding(差分编码),或称增量编码
% 'AMI' ,AMI码
% 'sNRZ' ,单极性不归零码
% 'sRZ' ,单极性归零码
% 'dNRZ' ,双极性不归零码
% 'dRZ' ,双极性归零码
% 'mNRZ' ,多极性不归零码
% 'mRZ' ,多极性归零码
% 'HDB' ,HDB3码
%局部变量
%sf ,16倍输入信号码速(可修改)
%len ,输入信号signal的长度
%最后更新 2010/4/15
%----------------------------------结束------------------------------------
sf=16;
len=length(signal);
ymaxl=max(signal);
yminl=min(signal);
flag=1;
if isequal(lower(type),'mil')>0 || isequal(lower(type),'cmi')>0 || ...
isequal(lower(type),'man')>0 || isequal(lower(type),'srz')>0 || ...
isequal(lower(type),'drz')>0 || isequal(lower(type),'mrz')>0
len=ceil(len/2);
sy=zeros(1,sf*len);
sx=0:1/sf:len-1/sf;
for i=1:len
sy(sf*(i-1)+1:sf*i-sf/2)=signal(2*i-1);
sy(sf*i-sf/2:sf*i)=signal(2*i);
end
else
if isequal(lower(type),'hdb')>0
flag=3;
else
flag=2;
end
sy=zeros(1,sf*len);
sx=0:1/sf:len-1/sf;
for i=1:len
sy(sf*(i-1)+1:sf*i)=signal(i);
end
end

yper=yminl-0.1*ymaxl:0.2:ymaxl+0.3*ymaxl;
xt=ones(length(yper),len);
yt=ones(length(yper),len);
for i=1:len
xt(1:end,i)=i;
yt(1:end,i)=yper(1:end);
end
plot(sx,sy,xt,yt,'r--');
set(gca,'XLim',[-0.05*len len*1.05]);
if flag<2
for i=1:len
text('Position',[i-0.8,1.3*ymaxl],'String',sprintf('%d%d',signal(2*i-1:2*i)));
end
elseif flag<3
for i=1:len
text('Position',[i-0.8,1.3*ymaxl],'String',signal(i));
end
%elseif flag<3
% for i=1:len
% text('Position',[i-0.8,1.3*ymaxl],'String',signal(i));
% end
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: