【STM32H7的DSP教程】第3章 Matlab简易使用之基础操作
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547
第3章 Matlab简易使用之基础操作
本期教程开始讲解Matlab的简易使用之基础操作,作为学习DSP的必备软件,掌握简单的Matlab操作是必须的。
3.1初学者重要提示
3.2 Matlab界面说明
3.3 Matlab矩阵和阵列
3.4 Matlab检索矩阵中的数据
3.5 Matlab工作区中的数据保存和加载
3.6 Matlab字符串
3.7 Matlab函数
3.8 Matlab绘图功能
3.9 总结
3.1 初学者重要提示
- 本章主要介绍了matlab的基础操作,如果之前没有接触过这方面的知识,务必要实际动手操作。
3.2 Matlab界面说明
- 当前文件夹(Current Folder)
用于访问电脑中的文件。
- 命令窗口(Command Window)
用于输入命令,公式计算等也可以在这里进行。
- 工作区(Workspace)
浏览用户创建的数据或者从文件中导入的数据。
- 命令历史记录(Command History)
记录用户在command窗口输入的命令,双击这些历史命令可以返回到command窗口继续执行。
下面通过简单的例子说明一下command窗口的使用。
3.2.1 简单计算
在command窗口输入变量a =1,然后回车,再次输入a,然后回车。
第一次输入a = 1并回车后会将变量a及其数值加入到工作区(Workspace)中。
第二次输入a 并回车后会将变量a以前的赋值显示出来。
3.2.2 稍复杂计算
在command窗口输入以下计算:
注意:上面输入一行后加入了分号,这个分号很重要,加上分号后再回车就可以输入下个计算,否则会输出计算结果。在需要获得结算结果的时候,就不再需要这个分号了,直接回车即可。
如果没有结果变量的话,输出会是ans = xxx(使用ans作为输出变量) 。
3.2.3 历史命令行调用
历史命令行的调用除了可以在右下角的Command里面调用以外,还可以通过键盘上面的按键↑ 和 ↓实现历史命令的查询。
3.3 Matlab矩阵和阵列
Matlab的主要设计是对整个矩阵和数组操作。不管什么类型的数据,所有MATLAB的变量是多维数组。矩阵是一个二维阵列通常用于线性代数。
3.3.1 创建数组
下面在matlab中创建一个一行四列的数组,数组中的每个元素用逗号或者空格分开。比如创建数组
这种类型的数组也称为行向量。
下面创建一个多行的矩阵,不同的行用分号隔开:
当然,也可以使用Matlab自带的函数进行创建,比如ones,zeros,rand等。
3.3.2 矩阵和阵列运算
MATLAB允许客户使用一个单一的算术运算符或函数来处理所有在矩阵中的值。比如:
下面继续说一下matlab矩阵的转置,求逆矩阵。
- 给矩阵a加上符号a'用于求转置矩阵。
- inv()用于求逆矩阵。
- 矩阵a乘以a的逆矩阵就是求单位矩阵。
注意上面的a*inv(a)得到的结果已经不再是整数矩阵,Matlab存储结果的时候会以浮点的形式进行存储,Matlab实际存储的数值和当前命令窗口显示的数值是有区别的。为了获得更高的显示精度可以使用下面的数据格式
执行逐个元素乘法,而不是矩阵的乘法可以使用符号 .* 来实现:
>> a.*a ans = 1 4 9 16 25 36 49 64 100
下面是实现矩阵各个元素的3次方
>> a.*a ans = 1 4 9 16 25 36 49 64 100
3.3.3 矩阵的合并
矩阵的合并主要有以下两种形式:
>>A = [a,a] A = 1 2 3 1 2 3 4 5 6 4 5 6 7 8 10 7 8 10 >>A = [a; a] A = 1 2 3 4 5 6 7 8 10 1 2 3 4 5 6 7 8 10
3.3.4 复数
复数的表示是由实部和虚部组成的,比如我们在matlab命令窗口输入:
>>sqrt(-1) ans = 0 + 1.0000i
为了表示复数的虚部,可以使用i或者j来表示:
>>c = [3+4i, 4+3j, -i, 10j] c = 3.0000 + 4.0000i 4.0000 + 3.0000i 0 - 1.0000i 0 +10.0000i
3.4 Matlab检索矩阵中的数据
有时矩阵中的元素比较多,为了方便用户可以检索矩阵中所需要查找的元素,调用相关命令即可。比如:先用magic函数生成4阶幻方矩阵:
>>A = magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
- 如果我们要获得第4行第2列的数据(注意,行列从1开始算的),可以采用如下的方法:
>>A(4,2) ans = 14
- 简单点,也可以使用如下方法进行定位:
>>A(8) ans = 14
- 如果检索超出了矩阵的范围,会报错,如下:
>> test = A(4,5) Attempted to access A(4,5); index out of bounds because size(A)=[4,4].
- 用户可以通过如下方法增加行和列
>> A(5,5) = 14 A = 16 2 3 13 0 5 11 10 8 0 9 7 6 12 0 4 14 15 1 0 0 0 0 0 14
- 用户可以通过如下方法访问某行某列的某些数据
>> A(1:3,2) ans = 2 11 7 >> A(3,:) ans = 9 7 6 12 0
- 使用冒号运算符,用户可以获得一个等间距序列,冒号隔开的数值分别表示start:step:end
start:step:end >> B = 0:10:100 B = Columns 1 through 10 0 10 20 30 40 50 60 70 80 90 Column 11 100
如果不设置step,那么输出结果默认步是1。
3.5 Matlab工作区中的数据保存和加载
工作区中的变量来自用户创建,外部数据加载或者其它的编程加入。比如我们在命令窗户输入以下两个函数。
>> A = magic(4); B = rand(3,5,2);
通过命令whos可以查看工作区中的变量内容。
>> whos Name Size Bytes Class Attributes A 4x4 128 double B 3x5x2 240 double
工作区中的变量如下,和通过命令whos查看的效果是一样的。
如果用户退出Matlab后,再次进入工作区中,那么里面的数据变量将被清空。如果想保持这些变量可以
通过如下命令进行保存:
>> save myfile.mat
下次打开MATLAB可以通过如下命令加载这些变量:
>>load myfile.mat
另外用户可以通过命令clear清除当前工作区中的变量。
3.6 Matlab字符串
- 在matlab中显示字符串跟使用C不一样,matlab中使用单引号即可。比如:
>> myText = 'Hello, world' myText = Hello, world >> otherText = 'You''re right' %特别的注意这里,显示单引号需要写两个才可以。 otherText = You're right >> whos Name Size Bytes Class Attributes myText 1x12 24 char otherText 1x12 24 char
- 如果想合并两个字符串可以用如下的方法:
>> longText = [myText,' - ',otherText] longText = Hello, world - You're right
- 如果想把数字转换成字符串显示,可以用函数num2str 或者int2str.
>> f = 71; c = (f-32)/1.8; tempText = ['Temperature is ',num2str(c),'C'] tempText = Temperature is 21.6667C
3.7 Matlab函数
MATLAB支持的函数非常多,下面举一个简单的例子说明下,后面具体用到那个函数查阅手册即可。
>> A = [1 3 5]; B = [10 6 4]; >> max(A) %求最大值 ans = 5 >> max(A,B) %求A,B中的最大值 ans = 10 6 5 >> maxA = max(A) %将最大值付给maxA maxA = 5 >> [maxA,location] = max(A) %将最大值和次最大值赋给两个变量 maxA = 5 location = 3
- 显示任何字符串可以调用函数:
>> disp('hello armfly') hello armfly
- 命令窗口数据的清除可以使用命令
>>clc
3.8 Matlab绘图功能
Matlab的绘图功能非常强劲,下面分别简单介绍下。
3.8.1 画线
下面使用绘图功能创建一个二维图:
>> x = 0:pi/100:2*pi; y = sin(x); plot(x,y)
通过如下函数可以给绘图加上标题:
>> x = 0:pi/100:2*pi; y = sin(x); plot(x,y); xlabel('x'); ylabel('sin(x)'); title('Plot of the Sine Function')
通过函数plot(x,y,'r--')可以改变曲线的颜色和显示方式。
如果想把两个波形显示在一个图中,可以采用函数hold on,如下所示:
>> x = 0:pi/100:2*pi; y = sin(x); plot(x,y) hold on y2 = cos(x); plot(x,y2,'r:') legend('sin','cos')
3.8.2 3-D绘图
Matlab也支持3-D绘图,下面举一个简单的例子,主要是为了说明显示效果:
>> [X,Y] = meshgrid(-2:.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(X,Y,Z)
3.8.3 多个子图的绘制
Matlab也支持在一幅图中绘制多个子图片,主要是通过函数subplot实现:
>> t = 0:pi/10:2*pi; [X,Y,Z] = cylinder(4*cos(t)); subplot(2,2,1); mesh(X); title('X'); subplot(2,2,2); mesh(Y); title('Y'); subplot(2,2,3); mesh(Z); title('Z'); subplot(2,2,4); mesh(X,Y,Z); title('X,Y,Z');
3.9 总结
本期主要跟大家讲解了Matlab的简单使用方法,后面复杂的使用需要大家多查手册,多练习。