您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页MATLAB通信系统仿真实验报告

MATLAB通信系统仿真实验报告

来源:尚车旅游网


MATLAB通信系统仿真实验报告

专业姓学指导实验实验实验

2014-2015 学年第 2 学期)

年级 通信2012级 班 名 号 教师 刘金梅 学时 18 时间 2-9周,11周,周四3、4节 地点 信息楼112机房 (

实验一、MATLAB的基本使用与数算

目的:学习MATLAB的基本操作,实现简单的数算程序。

内容:1、要求在闭区间[0,2π]上产生具有10个等间距采样点的一维数组。试用两种不同的指令实现。

2、用M文件建立大矩阵x:

[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9]

3、已知A=[5,6;7,8],B=[9,10;11,12],用MATLAB分别计算A+B、A*B、A.B、 A^3、A.^3、A/B、A\\B。

4、任意建立矩阵A,然后找出在[10,20]区间的元素位置。 程序代码及运行结果: 1.(1)程序代码:

方法1: a = 0:2*pi/10:2*pi 方法2: a1 = inspace(0,2*pi,10) (2)运行结果如图1-1所示:

图 1- 1

2.(1)程序代码:x=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9;

1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9;

2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9;

3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9]

运行结果如图1-2所示:

图 1-2

3.(1)程序代码:A=[5,6;7,8];

B=[9,10;11,12]; C=A+B D=A*B E=A.*B F=A^3 G=A.^3 H=A/B I=A\\B

(2)运行结果:C =

14 16 18 20 D =

111 122 151 166 E =

45 60 77 96 F =

881 1026 1197 1394 G =

125 216 343 512 H =

3.0000 -2.0000 2.0000 -1.0000 I =

-3.0000 -4.0000 4.0000 5.0000

4.(1)程序代码:>>A=[4,15,-45,10,6;56,0,17,-45,0] B=find(A>=10&A<=20) (2)运行结果:A=

4 15 -45 10 6 56 0 17 -45 0

B=

3 6 7

总结:通过本次实验学习MATLAB的基本操作,实现简单的数算程序。第一次 MATLAB实验,没有注意到点乘,在输入代码是有时候没注意到是英文输入还是中文输入。

通过实验学会了在同一个窗口显示几个算法指令,像数组和矩阵的各种运算符号,尤其要注意到两者的区别。例如A*B是是指内维相同的矩阵相乘,而A*B是指A数组和B数组对应元素相乘。同时也要注意到左除和右除的区别。

实验二、MATLAB程序的编写

目的:掌握顺序结构、选择结构、循环结构程序设计方法。学会编写函数。 内容:

1、编写程序,建立向量N=[1,2,3,4,5],然后利用向量N产生下列向量:

(1)2, 4, 6, 8, 10, (2)1/2, 1, 3/2, 2, 5/2 (3) 1, 1/2, 1/3, 1/4, 1/5 (4) 1, 1/4, 1/9, 1/16, 1/25

2、从键盘输入一个三位整数,将它反向输出,如输入639,输出936。输入一个百分制成绩,要求输出成绩等级A,B,C,D,E。其中90~100分为A,80~分为B,70~79分为C,60~69分为D,60分以下为E。

要求:

(1)分别用if语句和switch语句实现。

(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出错误信息。

3、输入20个两位随机数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数、min函数来实现。

4、写出下列程序的输出结果。 (1) s=0;

a=[12,13,14,15,16,17,18,19,20,21,22,23]; for k=a for j=1:4

if rem(k(j),2) ~=0 s=s+k(j); end end end s

(2)命令文件exe.m global x

x=1:2:5;y=2:2:6; exsub(y);

x y

(3)函数文件sub.m function fun=exsub(z) global x z=3*x; x=x+z;

程序代码及运行结果:

1.(1)程序代码:N=[1,2,3,4,5]; format rat A=N.*2 B=N./2 C=N.^(-1) D=N.^(-2)

(2)运行结果如图2-1所示:

图2-1

2. (1)程序代码: 反向输出:

m=input('请输入一个三位数:'); m1=fix(m/100);

m2=rem(fix(m/10),10); m3=rem(m,10);

m=m1+m2*10+m3*100;

disp(m)

if语句,实现输入一个百分制成绩,输出成绩等级: c=input('请输入一个百分制数'); if c>=90 & c<=100 disp('A');

elseif c>=80 & c<90; disp('B');

elseif c>=70 & c <80; disp('C');

elseif c>=60 & c <70; disp('D'); elseif c>=0 & c<60; disp('E'); else

disp('输入出错'); end

switch语句,实现输入一个百分制成绩,输出成绩等级: c=input('请输入一个百分制数'); switch fix(c/10) case{9,10} m='A'; case{8} m='B'; case{7} m='C'; case{6}; m='D';

case num2cell(0:5) m='E'; otherwise

m='输入出错'; end disp(m) 运行结果:

反向输出结果如图2-2所示:

图 2-2

if、switch语句,实现输入一个百分制成绩,输出成绩等级的实验结果如图2-3所示:

图 2-3

3.(1)程序代码:a=input('请输入二十个数'); max=a(1); min=a(1); for i=1:20; if maxend

if min>a(i); min=a(i); end end max min

(2) 运行结果如图2-4所示:

图 2-4

4.(1)程序代码:s=0;

a=[12,13,14,15,16,17,18,19,20,21,22,23]; for k=a for j=1:4

if rem(k(j),2)~=0 s=s+k(j); end end end s

运行结果:s=108 (2)程序代码:

函数文件:function fun=exsub(z) global x z=3*x; x=x+z

命令文件:global x

x=1:2:5;y=2:2:6;

sub(y); x y

运行结果:x= 4 12 20 y= 2 4 6

总结:MATLAB不仅是一个功能强大的工具软件,同时也可以理解为一种编程语言。MATLAB本身就是MATLAB语言的变异环境。MATLAB本身还具有很强大的函数,例如本次实验的第三题就是利用了MATLAB的函数调用功能。 通过本次实验我发现自己对知识的掌握不能做到举一反三,例如第一题,我只是直接的输入题目所给的数据进行编程,并没有考虑到分数的输出,编程并进行编译,最终得到的结果是小数,后来通过查找资料,添加指令最后的到题目所要求的输出结果。

本次实验的目的是让我们掌握顺序结构、选择结构、循环结构程序设计方法。学会编写函数。例如实验的第三题要求我们分别利用if、switch语句,当我进行编写程序的时候发现我对if和switch语句的使用并不熟悉,并且会对一些语句进行混用,通过对相似例题的分析,写出程序,并得到正确的运行结果。 总之, 我们在做实验的是要做到认真、仔细。

实验三、MATLAB图形处理

目的:能够根据数据绘制各种形状的二、三维图形。 内容:1.绘制曲线y=x3+x+1,x的取值范围为[-5,5]。

2.有一组测量数据满足y=e-at,t的变化范围为0~10,用不同的线型和标记点画出a=0.1、a=0.2和a=0.5三种情况下的曲线。

3.x=[66 49 71 56 38],z绘制饼图,并将第五个切块分离出来。 程序代码及运行结果:

1.(1) 程序代码:x=-5:0.1:5

y=x.*x.*x+x+1; plot(x,y); (2)运行结果如图3-1所示:

图 3-1

2(1)程序代码:t=0:0.1:10; y1=exp(-0.1.*t); y2=exp(-0.2.*t); y3=exp(-0.5.*t); plot(t,y1,t,y2,t,y3); xlabel('Variable t'); ylabel('Variable y');

text(3,0.8,'曲线y1=exp(-0.1.*t)'); text(4,0.5,'曲线y2=exp(-0.2.*t)'); text(6,0.1,'曲线y3=exp(-0.5.*t)'); legend('y1','y2','y3') (2)运行结果如图3-2所示:

图 3-2

3.(1)程序代码:y=[66 49 71 56 38]; subplot(1,2,1); pie(y);

subplot(1,2,2); pie(y,[0,0,0,0,1]) (2)运行结果如图3-3所示:

图 3-3

总结:本次实验利用了MATLAB提供的多种的二维图形指令,但其中最重要、最基本的指令是plot。其他的许多特殊绘图指令或者一它为基础而形成的。

在做第一题的时候,在输入程序的时候直接输入y=x^3+x+1,得不出实验结果,通过提示的错误发现该函数的输入格式不正确,最终,在检查后输入正确的

函数指令y=x.*x.*x+x+1,得出如图1所示的曲线。

对于第二题,吸取上一题的经验,根据实验要求,逐步完成实验内容,最终顺利得出了正确的函数曲线,对函数指令的理解有所加深。但是由于实验时间的,在做实验的时候忘了加图形标题,通过回顾课本相关内容,应在编程时加入“'x from 0 to 10'”这一指令。

第三题的饼图,参照课本例题,按照步骤依次输入相关指令以及题目要求的参数,得出了相关的实验数据及结论。

实验四、MATLAB仿真模拟调制

目的:能用MATLAB仿真调幅信号和调角信号。 内容:

1、习题5-1 用在区间[0,2]内的信号

m(t)=

{ t 0≤t≤1

-t+2 1≤t≤2

以DSB-AM方式调制一个载波频率为25Hz、幅度为1的载波产生已调信号u(t),写一个Matlab的M文件,并用该文件做下面问题: (1) 画出已调信号; (2) 求已调信号的功率;

求已调信号的振幅谱,并与信息信号m(t)的频谱作比较。

2、习题5-2 设AM调整时,输入信号为m(t)=0.2sin1000πt+0.5cos1000πt,A=1,载波中心频率fc=10KHz。

(1) 用MATLAB画出AM信号的波形及其频谱。

3、习题5-3 设FM调制时,调频器的输入信号为一个周期性的锯齿波,锯齿波的一个周期为信号g(t)={t 0≤t<1,FM的中心频率fc=100Hz,KFM=10Hz/V,试做:

0 其它

(1)画出调频后的信号波形及其振幅谱;

(2)若接收端采用鉴频器进行解调,且AWGN信道的功率谱密度为N0/2,试画出当解调器输入信噪比为0dB、10dB、20dB时的解调输出信号,并与原信号进行比较;

(3)通过MATLAB仿真获得输入。输出信噪比的关系,并观察是否存在“门限”效应。

程序代码以及运行结果:

1、(1)程序代码:function [f, sf]=FFT_SHIFT(t, st)

dt=t(2)-t(1); T=t(end); df=1/T; N=length(t);

f=[-N/2:N/2-1]*df; sf=fft(st);

sf=T/N*fftshift(sf);

dt=0.01; %时间采样间隔

fc=25; T=1;

N=floor(T/dt); t1=[0:N]*dt; t2=t1+1;

mt1=t1; %信源 mt2=-t2+2;

dsb1=mt1.*cos(2*pi*fc*t1); dsb2=mt2.*cos(2*pi*fc*t2); subplot(2,2,1);axis([0 2 0 1]);

plot(t1,dsb1);hold on;plot(t2,dsb2); pwr1=mt1.^2;pwr2=mt2.^2; subplot(2,2,2);axis([0 2 0 1]);

plot(t1,pwr1);hold on;plot(t2,pwr2); [df1,dfft1]=FFT_SHIFT(t1,dsb1); [df2,dfft2]=FFT_SHIFT(t2,dsb2); subplot(2,2,3);plot(df2,abs(dfft2),'r'); [mtf1,mtfft1]=FFT_SHIFT(t1,mt1); [mtf2,mtfft2]=FFT_SHIFT(t2,mt2); subplot(2,2,4);plot(mtf2,(mtfft2),'r');

(2) 运行结果如图4-1所示:

图4-1

2、(1)程序代码:dt=0.00001; %时间采样间隔

fm1=500;fm2=500*1.414; %信源频率

fc=10000; %载波中心频率 T=0.01;

N=floor(T/dt); t=[0:N-1]*dt;

mt=0.2*sin(2*pi*fm1*t)+0.5*cos(2*pi*fm2*t); %信源

%AM modulation A=1;

am=(A+mt).*cos(2*pi*fc*t); [f,AMf]=FFT_SHIFT(t,am); subplot(311); plot(t,mt); subplot(312); plot(t,am); subplot(313); plot(f,AMf);

(2)运行结果如图4-2所示:

图4-2

3、(1)程序代码:dt=0.001;

fc=100; T=1;

N=floor(T/dt); t=[0:N]*dt; kf=10; mt=t;

mti=t.^2/2;

fmt=cos(2*pi*fc*t+2*pi*kf*mti); figure(1);

subplot(2,1,1);

plot(t,fmt);hold on;plot(t,mt,'r'); [f,ft]=FFT_SHIFT(t,fmt);

subplot(2,1,2); plot(f,abs(ft)); s=1/2;

sn=100;db=s/(10^(sn/10)); noise1=sqrt(db)*randn(size(t)); fmt1=fmt+noise1; figure(2);

subplot(2,1,1); plot(t,fmt1); N=length(fmt); dfmt=zeros(1,N); for k=1:N-1

dfmt(k)=(fmt1(k+1)-fmt1(k))/dt; end

envlp=abs(hilbert(dfmt)); subplot(2,1,2) plot(t,envlp);

;

(2)、运行结果如图4-3所示:

图4-3

总结:

实验五、MATLAB仿真模拟信号的数字传输

目的:能用MATLAB仿真函数的抽样、量化过程,掌握信号编码方法。

实验六、MATLAB仿真数字信号的基带传输

目的:能够绘制常用码型,码型功率谱和眼图。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务