信号与系统课程中关于各种编码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
%--------------------------------------------------------------------------
%输入参数
%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
相关文章推荐
- matlab step函数跟踪斜坡信号及阶跃响应绘图
- 郑君里 信号与系统,傅里叶级数,逼近函数仿真,吉布斯验证
- MATLAB各类函数详细讲解 simulike系统仿真分析
- 郑君里 信号与系统,傅里叶级数,逼近函数仿真,吉布斯验证
- 控制中的各种函数MATLAB仿真
- 关于Matlab绘图(1)——plot函数
- MATLAB模糊逻辑系统根据模糊系统模型绘图
- 关于R语言的绘图函数[转]
- 读书笔记:离散时间信号处理:有理系统函数的频率响应
- [R]关于R语言的绘图函数
- matlab 自动交易系统 函数内部全局变量
- 关于LineDDA函数(主要是关于其是否有绘图操作)
- Third order system anlysis 自控 三阶系统的稳定性分析 matlab multisim仿真分析
- [Matlab 基础] Matlab函数笔记 - 绘图
- matlab给图表加注记的各种函数
- 现代通信系统(MATLAB版)(第二版) 图1.3 矩形脉冲的各种傅利叶级数的近似
- MATLAB 与Modelsim之间对测试系统的联合仿真
- 【matlab】关于uiwait和uiresume两个函数的理解及用途
- Matlab 各种画图函数用法
- MATLAB在连续时间系统的时域分析中的应用(2)(信号与系统)