你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱——DSP教程】第3章 Matlab 简易使用(一)

[复制链接]
baiyongbin2009 发布时间:2015-3-12 15:30
本帖最后由 baiyongbin2009 于 2015-3-12 15:41 编辑

特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接
第3章 Matlab 简易使用(一)

    本期教程开始讲解Matlab的简易使用,作为学习DSP的必备软件,掌握简单的Matlab操作是必须的。
    3.1 Matlab界面说明
    3.2 矩阵和阵列
    3.3 检索矩阵中的数据
    3.4 工作区中的数据保存和加载
    3.5 字符串
    3.6 函数
    3.7 绘图功能
    3.8 总结
3.1 Matlab界面说明
3.1.png
l Current  Folder
    用于访问电脑中的文件。
l Command Window
    用于输入命令,公式计算等也可以在这里进行。
l Workspace
    浏览用户创建的数据或者从文件中导入的数据。
l Command History
    记录用户在command窗口输入的命令,双击这些历史命令可以返回到command窗口继续执行。
下面通过简单的例子说明一下command窗口的使用。

3.1.1
简单计算
1. 在command窗口输入变量a =1,然后回车,再次输入a,然后回车
3.2.png
    第一次输入a = 1并回车后会将变量a及其数值加入到Workspace中。
    第二次输入a 并回车后会将变量a以前的赋值显示出来。

3.1.2
稍复杂计算
    在command窗口输入以下计算
3.3.png
    注意:上面输入一行后加入了分号,这个分号很重要,加上分号后再回车就可以输入下个计算。要不会输出计算结果。在需要获得结算结果的时候,就不再需要这个分号了,直接回车即可。
     如果没有结果变量的话,输出会是ans = xxx(使用ans作为输出变量) 。

3.1.3
历史命令行调用
    历史命令行的调用除了可以在右下角的Command里面调用以外,还可以通过键盘上面的按键↑ 和 ↓实现历史命令的查询。

收藏 评论13 发布时间:2015-3-12 15:30

举报

13个回答
baiyongbin2009 回答时间:2015-3-12 15:32:55
本帖最后由 baiyongbin2009 于 2015-3-12 15:42 编辑

3.2 矩阵和阵列
    Matlab的一个缩写就是" matrix laboratory"(矩阵实验室),虽然其它编程语言与数字一起工作,Matlab的主要设计是对整个矩阵和数组操作。
    不管什么类型的数据,所有MATLAB的变量是多维数组,。矩阵是一个二维阵列通常用于线性代数。

3.2.1 创建数组
    下面在matlab中创建一个一行四列的数组,数组中的每个元素用逗号或者空格分开。比如创建数组
3.4.png
    这种类型的数组也称为行向量。
    下面创建一个多行的矩阵,不同的行用分号隔开
3.5.png
    当然,也可以使用Matlab自带的函数进行创建,比如ones,zeros,rand等
3.6.png

3.2.2 矩阵和阵列运算
    MATLAB允许客户使用一个单一的算术运算符或函数来处理所有在矩阵中的值。比如:
3.7.png
下面继续说一下matlab矩阵的转置,求逆矩阵。
3.8.jpg
1. 给矩阵a加上符号a'用于求逆矩阵。
2. inv()用于求逆矩阵。
3. 矩阵a乘以a的逆矩阵就是求单位矩阵。
    注意上面的a*inv(a)得到的结果已经不再是整数矩阵,Matlab存储结果的时候会以浮点的形式进行存储,Matlab实际存储的数值和当前命令窗口显示的数值是有区别的。为了获得更高的显示精度可以使用下面的数据格式
3.8.png
执行逐个元素乘法,而不是矩阵的乘法可以使用符号 .* 来实现
>> 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.2.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.2.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

baiyongbin2009 回答时间:2015-3-12 15:34:55
本帖最后由 baiyongbin2009 于 2015-3-12 15:42 编辑

3.3 检索矩阵中的数据
    有时矩阵中的元素比较多,为了方便用户可以检索矩阵中所需要查找的元素,调用相关命令即可。比如:先用magic函数生成4阶幻方矩阵:

>>A = magic(4)
    A =
          16     2     3    13
           5    11    10     8
           9     7     6    12
           4    14    15     1
l 如果我们要获得第4行第2列的数据,可以采用如下的方法:
>>A(4,2)
ans =
    14
l 简单点,也可以使用如下方法进行定位:
>>A(8)
ans =
        14
l 如果检索超出了矩阵的范围,会报错,如下:
>> test = A(4,5)
Attempted to access A(4,5); index out of bounds because size(A)=[4,4].
l 用户可以通过如下方法增加行和列
>> 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
l 用户可以通过如下方法访问某行某列的某些数据
>> A(1:3,2)
    ans =
      2
      11
          7
>> A(3,
ans =
         9     7     6    12     0
l 使用冒号运算符,用户可以获得一个等间距序列,冒号隔开的数值分别表示: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。

baiyongbin2009 回答时间:2015-3-12 15:36:17
3.4 工作区中的数据保存和加载
    工作区中的变量来自用户创建,外部数据加载或者其它的编程加入。比如我们在命令窗户输入以下两个函数。
>> A = magic(4);
B = rand(3,5,2);
通过命令whos可以查看工作区中的变量内容。
>> whos
      Name      Size             Bytes  Class     Attributes
      A         4x4                128  double              
      B         3x5x2              240  double      
工作区中的变量如下,和通过命令whos查看的效果是一样的。
3.9.png
如果用户退出Matlab后,再次进入工作区中,那么里面的数据变量将被清空。如果想保持这些变可以
通过如下命令进行保存:
>> save myfile.mat
下次打开MATLAB可以通过如下命令加载这些变量:
>>load myfile.mat
另外用户可以通过命令clear清除当前工作区中的变量。


baiyongbin2009 回答时间:2015-3-12 15:36:53
本帖最后由 baiyongbin2009 于 2015-3-12 15:43 编辑

3.5 字符串
l 在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   
l 如果想合并两个字符串可以用如下的方法:
>> longText = [myText,' - ',otherText]
longText =
Hello, world - You're right
l 如果想把数字转换成字符串显示,可以用函数num2str 或者int2str.
>> f = 71;
c = (f-32)/1.8;
tempText = ['Temperature is ',num2str(c),'C']
tempText =
Temperature is 21.6667C

baiyongbin2009 回答时间:2015-3-12 15:37:25
本帖最后由 baiyongbin2009 于 2015-3-12 15:43 编辑

3.6 函数
    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
l 显示任何字符串可以调用函数:
>> disp('hello armfly')
hello armfly
l 命令窗口数据的清除可以使用命令
>>clc

baiyongbin2009 回答时间:2015-3-12 15:39:31
3.7 绘图功能
    Matlab的绘图功能非常强劲,下面分别简单介绍下。
3.7.1 画线
    下面使用绘图功能创建一个二维图:
>> x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
3.10.png
通过如下函数可以给绘图加上标题:
>> x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
xlabel('x');
ylabel('sin(x)');
title('Plot of the Sine Function')
3.11.png
通过函数plot(x,y,'r--')可以改变曲线的颜色和显示方式。
3.12.png
如果想把两个波形显示在一个图中,可以采用函数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.13.png
3.7.2 3-D绘图
    Matlab也支持3-D绘图,下面举一个简单的例子,主要是为了说明显示效果。
>>  [X,Y] = meshgrid(-2:.2:2);                                
Z = X .* exp(-X.^2 - Y.^2);
surf(X,Y,Z)
3.14.png
3.7.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.15.png
3.8 总结
本期主要跟大家讲解了Matlab的简单使用方法,后面复杂的使用需要大家多查手册,多练习。

寂寞如她 回答时间:2015-3-12 17:29:10
好帖,必须顶
党国特派员 回答时间:2015-3-12 18:03:44
好高深啊。
拼命三郎 回答时间:2015-3-12 20:52:13
xxxxxxxxxx.jpg
拼命三郎 回答时间:2015-3-12 20:55:18
顶顶顶顶顶顶顶顶顶大大大.jpg
二宽 回答时间:2015-3-12 22:06:40
牛逼,大神
_ilikerome_ 回答时间:2015-3-13 08:45:57
matlab太高端了,以前尝试学习过,后来实在没时间,于是放弃。
stary666 回答时间:2015-3-13 09:37:56
能做出PDF发送一下,期待。。。。。。。。。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版