硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4071|回复: 1
收起左侧

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

[复制链接]

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2015-3-12 15:05:02 | 显示全部楼层 |阅读模式
特别说明:完整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界面说明


l Current Folder
    用于访问电脑中的文件。
l Command Window
    用于输入命令,公式计算等也可以在这里进行。
l Workspace
    浏览用户创建的数据或者从文件中导入的数据。
l Command History
    记录用户在command窗口输入的命令,双击这些历史命令可以返回到command窗口继续执行。
    下面通过简单的例子说明一下command窗口的使用。

3.1.1 简单计算

1. 在command窗口输入变量a =1,然后回车,再次输入a,然后回车

第一次输入a = 1并回车后会将变量a及其数值加入到Workspace中。
第二次输入a 并回车后会将变量a以前的赋值显示出来。

3.1.2 稍复杂计算

在command窗口输入以下计算

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

3.1.3 历史命令行调用

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

3.2 矩阵和阵列

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

3.2.1 创建数组

    下面在matlab中创建一个一行四列的数组,数组中的每个元素用逗号或者空格分开。比如创建数组

这种类型的数组也称为行向量。
下面创建一个多行的矩阵,不同的行用分号隔开

当然,也可以使用Matlab自带的函数进行创建,比如ones,zeros,rand等


3.2.2 矩阵和阵列运算

    MATLAB允许客户使用一个单一的算术运算符或函数来处理所有在矩阵中的值。比如:

下面继续说一下matlab矩阵的转置,求逆矩阵。

1. 给矩阵a加上符号a'用于求逆矩阵。
2. inv()用于求逆矩阵。
3. 矩阵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.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

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。
3.1.png
3.2.png
3.3.png
3.4.png
3.5.png
3.6.png
3.7.png
3.8.jpg
3.8.png
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
 楼主| 发表于 2015-3-12 15:08:20 | 显示全部楼层
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清除当前工作区中的变量。

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

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

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(&#39lot 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的简单使用方法,后面复杂的使用需要大家多查手册,多练习。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-8 11:04 , Processed in 0.171259 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表