玩转matlab之通信应用(一)
本人所撰写的文章都是由个人经验所集成,如有错误观点请指正,如不喜请勿喷
matlab挺好玩的,也挺强大的,希望更多人喜欢上matlab,学会使用matlab以辅助个人工作与学习。
兴趣是最好的老师,这句话是真理。
假如你把使用matlab当做兴趣的话,我想做不管是做工程的你,还是搞科研的你,预工作应该做得很不赖。什么,说话没什么逻辑,是吧?哈哈。
废话不多说。附图+举例+言简意赅:
编程就是玩逻辑,那么首先就来看看matlab的逻辑语句:%?????
%ifelse
%switchcase
%while
a=3
b=1ones(1,10);
c=2ones(1,10);
d=3ones(1,10);
while(a~=4)
ifa==3
figure(22)
plot(b)
a=1;
elseifa==2
figure(44)
plot(c)
a=0;
elseifa==1
figure(33)
plot(d)
a=2;
else
switcha
case3
a=a+1;
case2
a=a+1;
case1
a=a+1;
case0
a=a+1;
end
end
end
运行以上程序自动无限循环,依次跳出figure(22)、33、44
Matlab的原理就是在玩数字,想得到想要的仿真、画图结果,就要清楚其画图原理,可以自己编写与下面的程序相似的程序,画图,去意会matlab的原理。
以下为循环语句的实例
数组的玩转:为甚么会画出这样呢?自己编程去体会
只要两个数组同时与一个序列有一定的关系,就能用plot(t,y)画图,.其实一样长就可以了呵呵。
懂得了matlab的画图原理及逻辑语句、循环语句,再记住matlab的程序是从上往下依次运行的,再记住几个常用函数,就ok了,已经算matlab初级入门了!!简单吧!!
学会几个最常用函数:
Ones
Zeros
Reshape
Plot
Stem
Find
Max
Min
Randint
Length
Size
序列变:
100:-1:1
1:1:100
1:2:100
玩matlab,最主要的是实现算法!算法就是王道啊!!
玩转matlab之通信应用(二)
本人所撰写的文章都是由个人经验所集成,如有错误观点请指正,如不喜请勿喷
用matlab仿真qpsk;
刚开始学习通信,如何画出像如上的星座图呢?
从图中可以看到四个点:(-1,-1),(1,-1),(-1,1),(1,1),
也就是说我们只有画出这四个点来就成了,
我们从结果入手来指导从开始。
程序如下:
Clc---------------------清楚命令窗口的显示
clearall--------------------清除上次产生的结果
closeall--------------------关闭窗口
original_bits=randint(1,100,[01]);-----------产生100个由0和1组成的随机数
flag=find(original_bits==0);---------------找到原始数据中为0的位置,
将位置寄存为数组形式
original_bits(flag)=-1;--------------------根据数组映射原理,将原始数据中的
0变为-1
----------------以下就是所谓的串并转换,分i、q两路
i=original_bits(1:2:99);---i路
q=original_bits(2:2:100);---q路
xingzuo=complex(i,q);-----------------将i、q两路合为一个复数,然后就可以画图了,因为画复数的时候,默认实部位x轴,虚部为y轴
plot(xingzuo,'''')-----------------画图用‘’来让每个星座点独立起来,不然画出来的会是以下那样,因为星座点之间用线连起来了
axis([-22-22])-----------------------设置显示区域,以便更好观察
同理就可以画出很多调制的星座图来,8qam、16qam、64qam、256qam、8-psk等也是一样的。
玩转matlab之通信应用(三)
本人所撰写的文章都是由个人经验所集成,如有错误观点请指正,如不喜请勿喷
matlab之查看帮助:
学会自己学习帮助里的东西,学会看英文帮助。
(二)matlabGUI编程:
接下来就可以拖拉控件,产生.m文件进行编辑来做一个可视化的程序了。想要深入学习,可以上优酷下载视频进行自学,很简单的,一点也不难!
simulink
Simulink本人用的比较少,因为本人为光通信,一般用optisystem去了。
玩转matlab之通信应用(四)
放个烟花:
%{
y=pointtopoint(x,1,1,0.7,0.8)
z=zmax.(x>0);
y1=pointtopoint(x1,1,1,0.7,0.8)
z1=zmax.(x1>0)
plot3(x1,y1,z1)
holdon
plot3(x,y,z)
holdon
%}
这样为大范围进行注释。
先自定义个函数点到点的线的画图;
functiony=pointtopoint(x,x1,y1,x2,y2)
y=(x-x1)/(x1-x2)(y1-y2)+y1;
End
自定义完个函数后就可以开始了;
closeall
clc
clearall
x=1;
y=1;
figure(1)
forzmax=1.01:0.1:2.01
z=1:0.01:zmax;
plot3(x,y,z,''b-'')
pause(0.05)
holdon
axis([020203])
end
forzmax=1.01:0.1:2.01
z=1:0.01:zmax;
plot3(x,y,z,''w-'')
pause(0.0001)
holdon
axis([020203])
end
z=zmax;
plot3(x,y,z,''b'')
pause(0.0005)
plot3(x,y,z,''w'')
forxmax=1.11:0.01:1.51
x=1.1:0.01:xmax;
y=pointtopoint(x,1,1,2,1);
z=zmax.(x>0);
delta=xmax-1.1;
x1=(0.9-delta):0.01:0.9;
y1=pointtopoint(x,1,1,2,1);
z1=zmax.(x1>0);
plot3(x1,y1,z1)
holdon
plot3(x,y,z)
holdon
y=pointtopoint(x,1,1,2,2);
z=zmax.(x>0);
y1=pointtopoint(x1,1,1,2,2);
z1=zmax.(x1>0);
plot3(x1,y1,z1)
holdon
plot3(x,y,z)
holdon
y=pointtopoint(x,1,1,0.5,1.3);
z=zmax.(x>0);
y1=pointtopoint(x1,1,1,0.5,1.3);
z1=zmax.(x1>0);
plot3(x1,y1,z1)
holdon
plot3(x,y,z)
holdon
x2=1;
y2=1;
z2=xmax+1;
plot3(x2,y2,z2)
holdon
end
pause(0.000001)
forxmax=1.11:0.01:1.51
x=1.1:0.01:xmax;
y=pointtopoint(x,1,1,2,1);
z=zmax.(x>0);
delta=xmax-1.1;
x1=(0.9-delta):0.01:0.9;
y1=pointtopoint(x,1,1,2,1);
z1=zmax.(x1>0);
plot3(x1,y1,z1,''w'')
holdon
plot3(x,y,z,''w'')
holdon
y=pointtopoint(x,1,1,2,2);
z=zmax.(x>0);
y1=pointtopoint(x1,1,1,2,2);
z1=zmax.(x1>0);
plot3(x1,y1,z1,''w'')
holdon
plot3(x,y,z,''w'')
holdon
y=pointtopoint(x,1,1,0.5,1.3);
z=zmax.(x>0);
y1=pointtopoint(x1,1,1,0.5,1.3);
z1=zmax.(x1>0);
plot3(x1,y1,z1,''w'')
holdon
plot3(x,y,z,''w'')
holdon
x2=1;
y2=1;
z2=xmax+1;
plot3(x2,y2,z2,''w'')
holdon
end
plot3(1,1.5,2,'''')
plot3(1.5,1.5,2,'''')
plot3(1.5,1,2,'''')
plot3(1,0.5,2,'''')
plot3(0.5,1,2,'''')
plot3(0.5,0.5,2,'''')
pause(0.05)
plot3(1,1.5,2,''w'')
plot3(1.5,1.5,2,''w'')
plot3(1.5,1,2,''w'')
plot3(1,0.5,2,''w'')
plot3(0.5,1,2,''w'')
plot3(0.5,0.5,2,''w'')
程序效果如下:
程序运行结果:如上,依次往下出现。
|
|