MATLAB在通信中的应用实验指导书.docx
- 文档编号:7177061
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:25
- 大小:179.04KB
MATLAB在通信中的应用实验指导书.docx
《MATLAB在通信中的应用实验指导书.docx》由会员分享,可在线阅读,更多相关《MATLAB在通信中的应用实验指导书.docx(25页珍藏版)》请在冰豆网上搜索。
MATLAB在通信中的应用实验指导书
《MATLAB在通信中的应用》
实验指导书
李敏编写
乐山师范学院物理与电子信息科学系
2010年3月
前言
《MATLAB在通信中的应用》是通信工程专业学生的专业基础课。
通过本课程的学习,旨在使学生掌握运用MATLAB进行信号和系统分析以及通信系统仿真和辅助设计方面的基本方法;培养学生分析问题、解决问题的能力;掌握利用MATLAB进行理论研究的基本技能;为进一步学习通信原理、数字信号处理打好基础,并为今后从事科学研究奠定基础。
设置的具体实验项目有8个。
主要内容包括熟悉MATLAB环境、MATLAB数值运算及绘图功能、程序设计基础、MATLAB在信号与系统及通信系统仿真中的应用、SIMULINK仿真基础。
其中SIMULINK仿真基础为验证性实验,其它全部为基本实验。
该指导书适用专业:
通信工程、信息工程。
编者
2010年3月
目录
前言i
目录ii
实验一熟悉MATLAB环境1
实验二MATLAB数值运算及绘图功能3
实验三MATLAB程序设计基础8
实验四MATLAB在信号与系统中的应用-波形合成与分解13
实验五MATLAB在通信系统仿真中的应用16
实验六离散卷积的MATLAB演示实验20
实验七傅氏变换数值计算的MATLAB实现23
实验八SIMULINK仿真基础25
实验一熟悉MATLAB环境
一、[实验目的]
1.熟悉MATLAB主界面,学会常用的窗口的操作
2.学会简单的矩阵输入
3.熟悉MATLAB基本语句的使用、矩阵与向量的基本运算
二、[实验原理]
1. 用户第一次使用MATLAB时,可通过demo命令,启动MATLAB的演试程序,领略MATLAB所提供的强大的运算与绘图功能。
也可以键入help,通过帮助进行进一步了解。
2.MATLAB是以矩阵作为基本编程单元的一种程序设计语言。
它提供了各种矩阵的运算与操作,并有较强的绘图功能。
在MATLAB中输入矩阵最方便的的方式是直接输入矩阵的元素,其方法为:
1)用中括号[]把所有矩阵元素括起来;
2)同一行的不同数据元素之间用空格或逗号间隔;
3)用分号(;)指定一行结束;
4)也可以分成几行进行输入,用回车符代替分号;
5)矩阵元素可以是任何matlab表达式(系统将自动计算结果),可以是实数,也可以是复数,复数可用特殊函数i,j输入
。
3.MATLAB语言最基本的赋值语句结构为:
变量=表达式。
表达式由操作符或其它字符,函数和变量名组成,表达式的结果为一个矩阵,显示在屏幕上,同时输送到一个变量(ans为默认)中并存放于workspace工作空间中以备调用。
三、[实验内容]
1.矩阵的输入:
(1)用空格或逗号输入矩阵A=[123;456;789]或A=[1,2,3;4,5,6;7,8,9]
(2)试用回车代替A中的分号,观察输出结果。
要求:
总结矩阵的输入方法
2.输入矩阵
B=[9,8,7;6,5,4;3,2,1];C=[4,5,6;7,8,9;1,2,3];
要求:
(1)说明;的作用
(2)给出查看B及C的结果的方法?
3.用edit或选择File|new菜单中的M-file进入编辑器,输入:
Base=[9,8,7;6,5,4;3,2,1];
Base_info=Base+1
保存为Base.m文件,并通过Debug中的run命令(或F5)运行之,观察能否得到Base_info的值。
要求:
解释异常现象的原因。
4.打开Workspce窗口,学习save及load命令的使用
(1)用save命令将上述输入的A、B、C三个变量存入data或data.mat文件;
(2)通过CurrentDirectory查找data;
(2)然后使用clc及clear命令;
(3)最后通过loaddata(或data.mat)命令(可通过向上的方向键找到上条save命令再修改成load命令的方法)将变量A、B、C调入Workspce;
(4)执行命令A+B+C
要求:
(1)观察使用上述命令后Workspce的变化;
(2)使用命令savedata_newAB-ascii(或ASCII),改变存储格式,重复上述过程(第2步查找data_new,第3步loaddata_new,第4步改为A+B),观察Workspce显示结果的不同;
(3)查看data_new,在data_new中取出A的值。
四、[实验报告]
针对实验内容中的各项要求,做出总结,给出实验报告。
实验二MATLAB数值运算及绘图功能
一、[实验目的]
1.掌握MATLAB特殊函数创建矩阵及利用已有矩阵创建新矩阵的方法
2.掌握矩阵的操作,矩阵之间的运算方法
3.学会使用常用的几种矩阵函数进行简单的问题求解
4.掌握plot基本绘图语句的使用
二、[实验原理]
1.利用MATLAB特殊函数创建矩阵
x=a:
b;x=linspace(a,b,n);
zeros(m,n);
ones(m,n)
;eye(m,n)等
randint(m,n):
m×n0,1等概率随机阵
rand(m,n):
m×n(0,1)间均匀分布随机阵
randn(m,n):
m×n均值为0,方差为1的标准正态分布随机阵
2.矩阵的操作
(1)矩阵中元素的表示:
一是用两个下标来表示矩阵元素A(i,j),二是采用矩阵元素的索引值来引用矩阵元素-A(index)称序号(索引)表示法。
(2)矩阵中元素的提取和修改
1)矩阵元素的提取
矩阵A的第r行:
A(r,:
)
矩阵A的第r列:
A(:
,r)
取矩阵A的第i1~i2行、第j1~j2列,构成新矩阵:
A(i1:
i2,j1:
j2)
A的第i1~i2行,构成新矩阵:
A(i1:
i2,:
)
删除A的第j1~j2列,构成新矩阵:
A(:
,j1:
j2)=[]
将矩阵A和B拼接成新矩阵:
[AB];[A;B]
2)矩阵元素的修改
可利用下标对矩阵元素进行修改,可用find函数修改
(3)矩阵中元素的数学运算
元素取整函数:
•round(A)%四舍五入取整
•fix(A)%将矩阵A中元素按离0近的方向取整
•floor(x)%向负无穷方向取整,即取不足整数
•ceil(x)%向正无穷方向取整,即取过剩整数
(4)矩阵的一些特殊操作(旋转与变形)
1)矩阵的变维
a=[1:
12];b=reshape(a,3,4)
c=zeros(3,4);c(:
)=a(:
)
2)矩阵的变向
rot90:
旋转;fliplr:
左右翻;flipud:
上下翻
3)矩阵的抽取
diag(D)%取D矩阵的主对角元素
X=diag(v)%以向量v为主对角线元素,其余元素为0构成矩阵X
a1=diag(A,1)%取A阵“第一上对角线”的元素
A1=diag(a1,-1)%产生以a1数组元素为“第一下对角线”元素的二维数组
4)矩阵的扩展
repmat(D,1,3)%在水平方向“铺放”三个D阵
3.矩阵之间的运算
(1)矩阵乘法:
A*B,只有当前一矩阵的列数和后一矩阵的行数相同或者其中一个为标量时才能进行。
(2)矩阵除法:
运算符有两种“\”(左除)和“/”(右除),两矩阵相除,主要用于方程组求解。
A*x=B的解为x=A\B;x*A=B的解为x=B/A。
要解上述的联立方程式,可利用矩阵左除\做运算,即:
X=A\B,左除时要求A、B的行数相等。
(3)矩阵的乘方:
a^p,要求a
4.常用的几个矩阵函数
n=numel(A)%计算矩阵A中元素的个
n=length(a)%计算向量a中元素的个数
[m,n]=size(A)%返回矩阵的行列数
size(A,1)%返回矩阵的行
size(A,2)%返回矩阵的列数
max、min—各列最大、最小值,
如:
[Y,I]=max(A)%返回各列最大值Y及最大值在各列的位置
mean各列平均值;sum各列求和;std各列标准差;
var各列方差;sort各列递增排序
三、[实验内容]
1.依
(1)~(4)的指示,输入下列的矩阵:
A=[505B=[02+i3-2iC=[123
0502-i0-5+4i51015
404]3+2i-5-4i0]369]
(1)使用diag函数相加的形式,输入A矩阵;
(2)使用复数矩阵的两种方法输入B矩阵,观察其显示结果;
(3)利用冒号(:
),输入C矩阵;
(4)利用zeros预赋值后再输入行向量的方法,输入C矩阵;
要求:
写出矩阵输入的MATLAB表达式;
2.写出下列命令的运算结果,然后验证:
(1)A=[eye
(2);5:
5:
11]
(2)a=[1–2–45];b=(a>=-2&a<=5)
(3)a=linspace(-3,0,4);f=zeros(1,5);f(a+5)=a
(4)x=[7658104];y=find(x>4)
(5)m=[7658104];m(find(m>=7))=[]
*3.使用矩阵的除法(\)或(/)及利用函数inv解下列联立方程,验证结果是否相同。
(选做)
4.利用randn函数建立一个均值为0,方差为0.6的3×3的矩阵:
(1)使用函数sum,分别求此矩阵第一列的和、第三行的和;
(2)使用函数max,找出此矩阵中最大的元素。
5.利用randint产生长为10的等概0、1二进制序列,要求按行的顺序读入4*4(不足的补零)的方阵并按列的顺序读出原序列交织后的序列。
6.按如下要求,绘制两条曲线,一条是余弦曲线
,另一条是按100Hz抽样频率对余弦曲线进行抽样得到的离散序列。
设t的时长为0.1s。
要求:
(1)在同一窗口中使用holdon命令绘出上述两条曲线,并设置图形属性如下:
连续曲线:
黑色,实线
抽样序列:
红色,虚线,宽为3个象素
图题为“连续余弦曲线及其抽样序列”,并加图例;
(2)使用subplot命令绘出上述两条曲线;
(3)交互式绘图方式将图题改为“余弦曲线”。
7.画出如图所示单极性非归零码传输码型的示意图
单极性非归零码:
用电平1表示二元信息中的‘1’,用电平0表示二元信息中的0,电平在整个码元的时间里不变,记作NRZ码,波形如图1所示。
要求:
(1)因为要用离散的点来表示连续的码元1或0,需给出码元的采样点数,如sam_num=300;
(2)根据采样点数确定采样时间间隔,从而表示图中6个码元总时间的向量t,如t=0:
1/sam_num:
6;
(3)“0”或“1”码元的幅值可用函数zeros和ones产生;
(4)确定图示坐标axis的各参数;
(5)用text命令在每个码元的中间位置处标记出各码元对应的二元信息1或0
要求:
'FontWeight','bold','FontSize',14
四、[实验报告]
1.写出每一实验的设计过程及实验结果
2.总结实验,写出上机收获与体会
实验三MATLAB程序设计基础
一、[实验目的]
1.熟悉MATLAB的数据结构
2.熟悉流程控制语句的使用,搞清MATLAB中循环体与C语言的不同
3.掌握脚本与函数文件的编程方法
4.进一步掌握绘图语句的使用
二、[实验原理]
1.MATLAB的数据类型
在MATLAB中有六种常用基本数据类型:
double(双精度数值)
char(字符)
sparse(稀疏数据):
一般用于处理稀疏矩阵
storage(存储型):
只用于内存的有效存储
cell(单元数组):
struct(结构):
一般只在大型程序中使用
在MATLAB中,所有的数都用double浮点双精度类型来存储和运算。
因而省略了定义类型的语句,编程时无需去思考分辨,也减少了错误。
当然对于那些本来要用一两个字节来表示的变量来说,这种做法浪费内存,又降低了运算速度。
但用牺牲(存储)空间和(运算)时间来换取人机交互友善性的战略被证明是有效的,它形成了科学计算语言的特色,使人们不在编程的细节上花精力,而把注意力集中到科学计算的方法和建模合理性等大问题上去。
2.MATLAB的流程控制语句
与C语言类似,MATLAB程序的控制结构也有顺序结构、选择结构和循环结构三种,另外还有一种试探结构。
由于MATLAB以矩阵为运算单位,所以在for和while循环结构及分支结构的使用上与C略有不同,这是特别要注意的,希望通过本次实验加以理解。
(1)for循环的格式
for循环可接受有效维数的数组作为循环变量
forx=array
commands;
end
For循环语句的执行过程:
当循环变量为矩阵时,其执行过程是从矩阵的第一列开始,依次将矩阵的各列之值赋值给变量,然后执行语句组中的语句,直到最后一列。
(2)switch分支结构的格式
switchswitth_expr分支条件(数值或字符串)
case数值(或字符串)常量表达式1
<语句组1>
case{数值(或字符串)常量表达式case_expr2,数值(或字符串)常量表达式case_expr3…}
<语句组2>
case数值(或字符串)常量表达式N
<语句组n>
otherwise
<语句组n+1>
end
3.MATLAB的m文件
m文件是由MATLAB语句构成的ASCII码文件,用户可以用普通的文本编辑把一系列MATLAB语句写进一个文件里,给定文件名,确定文件的扩展名为.m,并存储。
m文件可分为两种:
(1)脚本文件(Scripts):
也称命令文件,是由用户为解决特定的问题而编制的;
(2)函数文件(Function):
子程序,可由用户编写,但它必须由其它m文件来调用
三、[实验内容]
1.按要求给出结果
(1)若有s=input(‘Pleaseinputa=’);给出运行时错误的输入方式:
A)2B)’John’C)[1234]D)John
(2)A=dec2bin(7,4)
(3)xf=[4300];
fork=0:
2
xshift(k+1,:
)=[zeros(1,k),xf(1:
end-k)];
end
xshift
2.使用switch语句编写DTMF(Dual-ToneMulti-Frequency)拨号音编码时域波形仿真程序。
说明:
(1)一个双音多频电话机可以对12个按键编码,每个码都是两个单频正弦信号之和,例如:
按键“5”由两个频率分别为770Hz和1336Hz的正弦信号组成;按键“#”分别由两个频率为941Hz和1447Hz的正弦信号组成。
这两个单频正弦信号分别来自两个频率组,即列频率组(或称低频群)与行频率组(或称高频群),它们与每个按键的对应关系如下图所示:
图1按键式拨号盘的配置
(2)DTMF信号的指标是:
在传送过程中每个按键数字占用100ms,其中DTMF必须存在至少40ms,且不得多于55ms,100ms里的其余时间是静声(无信号)。
要求:
1)每输入一个数字给出相应的波形
key=input('pleaseinputkeyvaluve,0~9or#or*:
','s');
2)fl表示低频率;fh表示高频率
3)根据所拨数字用switch给定fl及fh的值
4)主要参数如下:
fs=8000;%语音信号采样值
dt=1/fs;
t=0:
dt:
0.05;%按要求给出DTMF信号的时长
x=0.9*cos(2*pi*fl*t)+cos(2*pi*fh*t);
sound(x,8000)%按时长仿真发出的拨号音
plot(t,x)
zoomxon,gridon
3.使用switch语句编写函数,将百分制的学生成绩转换为五级制的成绩。
要求:
functiongrade=TranGrade(x)
%x为百分制成绩
%grade为五级制成绩
4.利用如下两种方法,将随机产生的同一帧数据(如:
randint(1,3*3)或randint(1,4*5)),重新换位输出以实现交织:
方法一:
利用随机数产生函数alpha=randperm(data_length),实现交织。
说明:
data=[11101];
data_length=5;
alpha=randperm(data_length);
%输出alpha为随机生成的5个数,若alpha=53124,可认为是索引号
data_inter=data(alpha);
%随机交织后的输出帧为data_inter=[11110],即data的第5位是data_inter的%第1位,依次类推。
方法二:
仿照方法一,编写函数alpha2=lincol_inter(data_length),使之产生按行读入,按列读出的序号;再利用data_inter=data(alpha2)完成一帧数据的交织。
5.试编写一函数,使之具有如下功能:
将随机产生的二进制序列按每2位(00:
0,01:
1,10:
2,11:
3)、3位或4位二进制位与十进制相对应的关系转变成相应十进制数序列。
functionNumTrans=fun_bin2dec(Xframe,COdelen)
%Xframe随机产生的二进制序列
%COdelen表示码长2、3、4等
%NumTrans返回转变后的十进制序列
Xlen=length(Xframe);%二进制信号序列长度
NumTrans=zeros(1,Xlen/COdelen);%生成一行向量放转变成十进制的数
6.将实验二中单极性非归零码的图形显示程序改写成函数形式:
functionsnrz(data,sam_num)
%输入一段二进制0,1码作为信源data
%可在运行调用函数snrz前使用data=input('请输入所要传输的二进制0,1序列作为信源data='),或使用randint随机产生0、1序列
%给出码元的采样点数sam_num
%求信源的二进制单极性序列的输出序列y_data
四、[实验报告]
1.写出每一实验的设计过程;
2.总结实验写出相应的体会;
3.总结程序调试常用技巧
实验四MATLAB在信号与系统中的应用-波形合成与分解
一、[实验目的]
1、通过本实验熟悉周期信号的合成、分解原理,进一步了解信号频谱的含义。
2、加深对傅里叶级数及Gibbs现象的理解。
3、掌握holdon图形保持命令的使用。
二、[实验原理]
1.傅里叶级数
按傅里叶级数的原理,任何周期信号
都可以用一组三角函数
的线性组合表示:
也就是说,可以用一组正弦波或余弦波来合成任意形状的周期信号。
2.Gibbs现象
对于具有不连续点(跳变点)的波形,所取级数项数越多,近似波形的均方误差虽可减少,但在跳变点处的峰值不减小,此峰值随项数增多而向跳变点靠近,而峰值趋于跳变值的9%。
3.周期信号波形的合成与分解的MATLAB实现
例:
已知方波的周期为
,方波信号的角频率为:
,其傅立叶级数展开式为:
它只含有1,3,5…等奇次谐波分量。
设计MATLAB程序,演示由谐波合成方波的情况,并观察Gibbs现象。
分析:
分别计算
直到N次谐波,并做图。
三、[实验内容]
有一周期为2,幅度为1的周期锯齿波信号,
,其三角形式傅立叶系数
,故其三角形式的傅立叶级数形式为:
1.做出N=10时各次谐波累计的图形。
2.分别做出一个周期内级数项数取N=31,N=81时的近似波形。
比较一个周期内的合成信号与原信号
的异同,并观察Gibbs现象。
四、[思考题]
对周期为
的周期方波信号,计算其傅里叶级数的系数,并观察Gibbs现象。
.
五、[实验报告]
写出实验的设计过程,并总结实验。
实验五MATLAB在通信系统仿真中的应用
一、[实验目的]
1.掌握信源随机二进制信号的产生方法
2.了解数字信号复数映射的方法
3.了解信道编码的仿真方法
4.了解噪声信道和多径信道的仿真方法
5.熟悉利用MATLAB仿真通信系统的基本过程
二、[实验原理]
1.数字通信系统基本组成
常用的数字通信系统基带传输模型如图6-1所示:
6-1数字通信系统基带传输模型
2.数字通信系统基本传输的仿真
根据上述模型需完成以下仿真过程:
1.随机二进制0、1信源信号的产生
随机信号经常用来模拟噪声、错误或信号源。
除了MATLAB的内置函数rand和randn,通信工具箱还提供randint函数。
格式如下:
out=randint(m,n)
功能说明:
产生m×n的矩阵,其元素相互独立,取值范围为1或0,取值是等概的。
2.信道的仿真方法
(1)高斯白噪声信道
高斯过程又称正态随机过程,它是一种普遍存在和重要的随机过程,在通信信道中的噪声,通常是一种高斯过程,故又称为高斯噪声。
利用awgn函数可为信号叠加高斯白噪声,其常见的使用格式说明如下:
①y=awgn(x,snr)
%addswhiteGaussiannoisetothevectorsignalx.Thescalarsnrspecifiesthesignal-to-noiseratiopersample,indB.Ifxiscomplex,thenawgnaddscomplexnoise.Thissyntaxassumesthatthepowerofxis0dBW.
②y=awgn(x,snr,'measured')
%Itisthesameasy=awgn(x,snr),exceptthatawgnmeasuresthepowerofxbeforeaddingnoise
本次实验采用第二种方法。
(2)多径衰落信道
在仿真过程中,若以抽样的序列来表示信号,多径的影响可以表示如下:
其中
是第i条路径的衰落值,可以用一个信道向量表示为
,其中
表示延迟
个码元信道的平均衰落。
举例说明,用信道向量[100000.5]来表示莱斯多径,它意味着电磁波通过一个没有延迟,没有衰落的信道;和一个延迟为5个码元,衰落系数为0.5的信道。
在这样的两径信道里,接收信号为:
在仿真噪声及多径对信号的影响时,可先对信号加噪,再做多径处理,表示为:
其中
是信道向量决定的滤波器。
在MATLAB中可使用函数filter(Multipath,1,BaseSignal)给信号BaseSignal按Multipath所代表的多径向量加多径。
3.数字信号的调制映射
数字信号的调制映射的基本思想是将二进制序列,分成长度为n=1、2、4的组,分别对应BPSK、QPSK、16QAM。
然后再把这些二进制序列组分别映射为星座图中对应点的复
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 通信 中的 应用 实验 指导书