第一部分:MATLAB基础与通信系统仿真
1.变量及常量
MATLAB内部有很多预定义的变量和常量,其表示了特殊的含义。
(1) 变量ans:指当前未定义的变量名的计算结果,反馈到command window中。
(2) 常数eps:表示浮点相对精度,其值是从1.0到下一个最大浮点数之间的差值。该变量常作为一些
MATLAB函数计算的相对浮点精度,按IEEE标准,eps=2-52,近似为2.2204e-016。
(3) 常数Inf:表示无穷大。当输入或者计算中有出现除以0时产生Inf。
(4) 常数pi:表示圆周率π。
(5) 虚数单位i,j:表示复数虚部单位,i^2=-1或者j^2=-1。
(6) NaN:表示不定型值,由0/0运算产生。
(7) nargin:函数输入的变量个数。
(8) nargout:函数输出的变量个数。
- 注意:
MATLAB变量名以字母开头,后接字母、数字和下划线的字符序列,最多63个字符,区分字符的大小写。
局部变量是指每个函数体内部自己定义的变量,不能从其他函数和MATLAB工作空间访问的变量。
全局变量是指用关键词”global”声明的变量,应该尽量大写以表示它的含义。如果要在工作空间和几个函数内都能访问一个全局变量,那么就必须在工作空间和这几个函数内都声明该变量是全局变量。
2.常用特殊矩阵
MATLAB具有强大的矩阵运算和数据处理能力,但是矩阵的处理都必须满足代数规则。
(1) eye(m,n)或eye(m)用于产生m*n或m*m的单位矩阵。
(2) zeros(m,n)或zeros(m)用于产生m*n或m*m的零矩阵。
(3) ones(m,n)或ones(m)用于产生m*n或m*m的全元素为1的矩阵。
(4) randn(m,n)或randn(m)用于产生m*n或m*m的随机矩阵。矩阵每一行,每一列元素都服从于均值为0,方差为1的高斯分布。
(5) rand(m,n)或rand(m)用于产生m*n或m*m的随机矩阵。矩阵每一行,每一列元素都服从[0,1]上的均匀分布。
3.MATLAB绘图函数
MATLAB具有非常强的图形处理能力,提供了大量的二维,三维图形函数。
(1) plot函数:
plot(x,y),其中x和y为坐标矢量。函数功能:以矢量x、y为轴,绘制曲线。
plot(x,y1,x,y2,x,y3,…)形式,表示以公共矢量x为x轴,分别以y1,y2,y3,…为y轴,在同一幅图内绘制出多条曲线。
plot(x,y1,’cs’,…),表示可以绘制不同颜色的曲线,其中c表示颜色,s表示线形。
(2) subplot函数:
subplot(m,n,p)命令将当前图形窗口分成m*n个绘图区域,即每行n个,共m行,区号按行优先编号,且选
定第p个为当前绘图区。
(3) loglog函数:
loglog(x,y),双对数坐标,横坐标和纵坐标都采用下x,y的对数。
semilogx(x,y),单对数坐标,横坐标采用x的对数。
semilogy(x,y),单对数坐标,纵坐标采用y的对数。
(4) title函数
title(‘sin(x)曲线’) 表示所绘制的图形的名称为”sin(x)曲线”,位于图形正上方。
(5) xlabel/ylabel函数
xlabel(‘时间’)/ylabel(‘幅度’)分别用来说明横/纵坐标为”时间”和”幅度”,分别标注在x轴和y轴上。
(6) text函数
text(x(100),y(200),’sin(x)曲线’),用于在指定位置添加标注,其中x(100)表示在矢量x的第100个值,y(200)
表示在矢量y的第200个值,二者交点出添加标注”sin(x)曲线”。
(7) grid on函数
grid on,表示显示坐标网格。
grid off,表示不显示坐标网格。
(8) legend函数
legend(‘sin(x)’,’cos(x)’),用于添加图例说明,表示分别给两个函数图像添加图例说明”sin(x)”和”cos(x)”。
(9) axis函数
axis([0 2*pi -1 1]),用于限定图形显示范围,即限定x∈[0,2π],y∈[-1,1],只显示这个范围内的图形。
(10) hold函数
hold on,表示设置图形保持状态,即可以在同一个窗口里绘制多个曲线。
hold off,表示关闭图形保持。
4.MATLAB程序结构
MATLAB程序结构与其他高级语言是一致的,可以分为顺序结构、循环结构、分支结构。
(1) 顺序结构
顺序结构在此就不再说明了。
(2) 循环结构
1) for-end循环
for i=循环初始值:循环步长:循环结束值
可执行语句
end
2) while-end循环
while 表达式
循环体语句
end
(3) 分支结构
分支结构的语句有if语句和switch语句。
1) if语句
格式1
if 条件
可执行语句组
end
格式2
if 条件
可执行语句组1
else
可执行语句组2
end
格式3
if 条件1
可执行语句组1
elseif 条件2
可执行语句组2
.
.
.
elseif 条件m
可执行语句组m
else
可执行语句组m+1
end
2) switch语句
switch 表达式
case 值1
可执行语句组1
case 值2
可执行语句组2
.
.
.
case 值m
可执行语句组m
otherwise
可执行语句组m+1
end
- 注意:
break语句与continue语句,需要中断循环可以使用break语句和continue语句。其中break语句是终止循环,执行循环体后的语句。用于跳出for/while的循环体。而continue语句则是终止本次循环,本次循环中的continue语句后面的循环语句不再执行,而是执行新的循环。
5.文件操作
包括文件的打开与关闭、文件的读/写操作、文件定位
(1) M文件
M文件有两种形式:脚本文件(Script File)和函数文件(Function File)。这两种文件的扩展名,均为”.m”。
脚本文件(Script File):类似于编写C/C++程序,可以在一个文件里编写完整的程序代码,命名保存。后续可以继续修改,完善程序。
函数文件(Function File):用于编写一些可以实现某些特定功能的程序包。就像一个黑箱,输入一些数据,经过特定的处理加工后输出结果。一般形式如下:
function 输出形参表 = 函数名(输入形参表)
- 注意:
函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。M文件的文件名必须是”函数名.m”。
(2) 数据文件
MATLAB提供了对数据文件建立、打开、读、写及关闭等一系列函数,数据文件一般存放在磁盘等介质上,用文件名标识,系统对文件名没有特殊要求。
1)fopen函数
fid=fopen(filename,permission)
其中,fid是fopen函数打开的文件句柄,在对文件经行其他操作时会用到它。filename为文件名,permission为文件格式,具体
文件格式如下:
文件格式说明:
选项 | 说明 |
---|---|
‘r’ | 打开文件,读数据,文件必须存在 |
‘w’ | 打开文件,写数据,若文件不存在,系统会自动建立 |
‘a’ | 打开文件,在文件末尾添加数据 |
‘r+’ | 打开文件,读和写数据,文件必须存在 |
‘w+’ | 打开文件,供读与写数据 |
‘a+’ | 打开文件,供读与添加数据 |
‘W’ | 打开文件供写数据用,无自动刷新功能 |
‘A’ | 打开文件供添加数据用,无自动刷新功能 |
fid=fopen('test.dat','r')
上述打开格式均为二进制格式,如果想用ASCII文本格式,则必须在格式字符串中加上字符t,例如’rt’表示以ASCII格式打开供读操作的数据文件。
2)fclose函数
rt=fclose(fid)
其中,fid是用fopen打开的文件句柄。rt表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
3)fread函数
[A,count]=fread(fid,size,precision)
fread用来读取二进制文件。如果A为数据矩阵,count返回所读取的数据元素个数。size为可选项,若不选用则读取整个文件内容,若选用则它的值可以为下列值:
size选项说明:
选项 | 说明 |
---|---|
n | 读取n个元素到一个列向量 |
inf | 读取整个文件 |
[m,n] | 读取数据到m*m的矩阵中,数据按列存放 |
4)fwrite函数
count=fwrite(fid,A,precision)
fwrite函数以二进制格式向数据文件写数据。
5)fscanf函数
[A,count]=fscanf(fid,format,size)
fscanf用来读取ASCII文件。如果A为数据矩阵,count返回所读取的数据元素个数。format用以控制读取的数据格式,由%加上格式符组成。
6)fprintf函数
count=fprintf(fid,format,A)
其中,A为要写入文件的数据矩阵,先按format格式化数据矩阵A,后写入进入fid所指定的文件。
6)fseek函数
status=fseek(fid,offset,origin)
fseek函数定位文件位置指针。fid为文件句柄,offset表示位置相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动,origin表示位置指针移动的参照位置,它的取值有3种可能如下:
origin选项说明:
选项 | 说明 |
---|---|
‘cof’ | 文件当前位置 |
‘bof’ | 文件开始位置 |
‘eof’ | 文件结束位置 |
7)ftell函数
position=ftell(fid)
ftell函数返回文件指针当前位置。返回值为从文件开始到文件指针当前位置的字节数,不包括当前位。如果返回值为-1表示获取文件当前位置失败。