48MATLAB语言在DSP设计中的应用Word文档格式.docx
《48MATLAB语言在DSP设计中的应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《48MATLAB语言在DSP设计中的应用Word文档格式.docx(40页珍藏版)》请在冰点文库上搜索。
如键入X=[-3.5sin(6*pi)8/5*(3+4)sqrt
(2)]则将显示:
X=
-3.5000-0.000011.20001.4142
数组放置在[]中;
数组元素用空格或逗号“,”分隔;
数组行用分号“;
”或“回车”隔离。
(二)复数
MATLAB中的每一个元素都可以是复数,实数是复数的特例。
复数的虚部用i或j表示。
复数的赋值形式有两种:
z=[1+1i,2+2i;
3+3i,4+4i]
z=[1,2;
3,4]+[1,2;
3,4]*i
得z=1.000+1.000i2.000+2.000i
3.000+3.000i4.000+4.000i
以上两式结果相同。
注意,在第二式中“*”不能省略。
在复数运算中,有几个运算符是常用的。
运算符“′”表示把矩阵作共轭转置,即把矩阵的行列互换,同时把各元素的虚部反号。
函数conj表示只把各元素的虚部反号,即只取共轭。
若想求转置而不要共轭,就把conj和“′”结合起来完成。
例如键入
w=z′,u=conj(z),v=conj(z)′
可得w=1.000-1.000i3.000-3.000i
2.000-2.000i4.000-4.000i
u=1.000-1.000i2.000-2.000i
3.000-3.000i4.000-4.000i
v=1.000+1.000i3.000+3.000i
2.000+2.000i4.000+4.000i
(三)数组寻访和赋值的格式
表M-1常用子数组的寻访、赋值格式
子数组的寻访
和赋值
使用说明
a(r,c)
由a的“r指定行”和“c指定列”上的元素组成的子数组
a(r,:
)
由a的“r指定行”和“全部列”上的元素组成的子数组
a(:
,c)
由a的“全部行”和“c指定列”上的元素组成的子数组
由a的各列按自左到右的次序,首尾相接而生成“一维长列”数组
a(s)
“单下标”寻访。
生成“s指定的”一维数组。
s若是“行数组”(或“列数组”),则a(s)就是长度相同的“行数组”(或“列数组”)
例:
a=[123;
789];
键入a(1,2)显示:
ans=
2
键入a(2,:
)显示:
456
键入a(:
3)显示:
3
6
9
其它情况读者可以自行上机观察使用,此处不再一一举例。
(四)执行数组运算的常用函数
表M-2三角函数和双曲函数
名称
含义
acos
反余弦
asinh
反双曲正弦
csch
双曲余割
acosh
反双曲余弦
atan
反正切
sec
正割
acot
反余切
atan2
四象限反正切
sech
双曲正割
acoth
反双曲余切
atanh
反双曲正切
sin
正弦
acsc
反余割
cos
余弦
sinh
双曲正弦
acsch
反双曲余割
cosh
双曲余弦
tan
正切
asec
反正割
cot
余切
tanh
双曲正切
asech
反双曲正割
coth
双曲余切
asin
反正弦
csc
余割
表M-3指数函数
含义
含义
exp
指数
log10
常用对数
pow2
2的幂
log
自然对数
log2
以2为底的对数
sqrt
平方根
说明:
表M-3、表M-4的使用形式与其它语言相似。
如
X=tan(60),Y=20*log(U/0.775),Z=1-exp(-1.5*t)。
表M-4复数函数
abs
模,或绝对值
conj
复数共轭
real
复数实部
angle
相角(弧度)
imag
复数虚部
例:
已知h=a+jb,a=3,b=4,求h的模。
输入:
a=3
b=4
h=a+b*j
abs(h)
将显示:
5
键入:
angle(h)
1.9273
real(h)
3
imag(h)
则显示:
4
表M-5取整函数和求余函数
ceil
向+∞舍入为整数
rem(a,b)
a整除b,求余数
fix
向0舍入为整数
round
四舍五入为整数
floor
向-∞舍入为整数
sign
符号函数
mod(x,m)
x整除m取正余数
键入ceil(1.45)
显示:
2
fix(1.45)
1
floor(-1.45)
-2
键入:
round(1.45)
round(1.62)
2
mod(-55,7)
显示:
rem(-55,7)
-6
(五)基本赋值数组
表M-6常用基本数组和数组运算
基本数组
zeros
全零数组(m×
n阶)
logspace
对数均分向量(1×
n阶数组)
ones
全么数组(m×
freqspace
频率特性的频率区间
rand
随机数数组(m×
meshgrid
画三阶曲面时的X,Y网格
randn
正态随机数数组(m×
linspace
均分向量(1×
eye(n)
单位数组(方阵)
:
将元素按列取出排成一列
特殊变量和函数
ans
最近的答案
Inf
Infinity(无穷大)
eps
浮点数相对精度
NaN
Not-a-Number(非数)
realmax
最大浮点实数
flops
浮点运算次数
realmin
最小浮点实数
computer
计算机类型
pi
3.14159235358579
inputname*
输入变量名
i,j
虚数单位
size
多维数组的各维长度
length
一维数组的长度
为便于大量赋值,MATLAB提供了一些基本数组。
举例说明:
A=ones(2,3),B=zeros(2,4),C=eye(3)
得A=111B=0000C=100
1110000010
001
线性分割函数linespace(a,b,n)在a和b之间均匀地产生n个点值,形成1×
n元向量。
D=linspace(0,1,5)
得D=00.25000.50000.75001.0000
(六)数组运算和矩阵运算
MATLAB中最基本的运算是矩阵运算。
但是在MATLAB的运用中,大量使用的是数组运算。
从外观形状和数据结构上看,二维数组和(数学中的)矩阵没有区别。
但是,矩阵作为一种变换或映射算子的体现,其运算有着明确而严格的数学规则。
而数组运算是MATLAB软件所定义的规则,其目的是为了数据管理方便、操作简单、指令形式自然简便以及执行计算有效。
虽然数组运算尚缺乏严谨的数学推理,数组运算本身仍在完善和成熟中,但它的作用和影响正随着MATLAB的发展而扩大。
为更清晰地表述数组运算与矩阵运算的区别,我们以表M-7叙述各数组运算指令的意义。
其中假定S=2,n=3,P=1.5。
A=[123;
456;
789],
B=[234;
567;
891]。
表M-7举例说明数组运算指令的意义
指令
运算结果
s+A
标量s分别与A元素之和
345
678
91011
A-s
A分别与标量s的元素之差
-101
234
567
s.*A
标量s分别与A的元素之积
246
81012
141618
s./A或
A.\s
s分别被A的元素除
2.00001.00000.6667
0.50000.40000.3333
0.28570.25000.2222
A.^n
A的每个元素自乘n次
1827
64125216
343512729
p.^A
以p为底,分别以A的元素为指数
求幂值
1.50002.25003.3750
5.06257.593811.3906
17.085925.628938.4434
A+B
对应元素相加
357
91113
151710
A-B
对应元素相减
-1-1-1
-1-1-1
-1-18
A.*B
对应元素相乘
2612
203042
56729
A./B或B.\A
A的元素被B的对应元素除
0.50000.66670.7500
0.80000.83330.8571
0.87500.88899.0000
exp(A)
以自然数e为底,分别以A的元素为指数,求幂
1.0e+003*
0.00270.00740.0201
0.05460.14840.4034
1.09662.98108.1031
log(A)
对A的各元素求对数
00.69311.0986
1.38631.60941.7918
1.94592.07942.1972
sqrt(A)
对A的各元素求平方根
1.00001.41421.7321
2.00002.23612.4495
2.64582.82843.0000
有一函数X(t)=tsin3t,在MATLAB程序中如何表示?
解:
X=t.*sin(3*t)
有一函数X(t)=sin3t/3t,在MATLAB程序中如何表示?
X=sin(3*t)./(3*t)
二、逻辑判断与流程控制
(一)关系运算
关系运算是指两个元素之间数值的比较,一共有六种可能。
如表M-8所列。
关系运算的结果只有两种可能,即0或1。
0表示该关系式为“假”,1表示该关系式为“真”。
例1:
A=3+4==7,得A=1。
例2:
已知N=0,B=[N==0],得B=1。
若N=2,B=[N==0],得B=0。
表M-8关系运算符
<
小于
>
=
大于等于
<
小于等于
==
等于
>
大于
~=
不等于
(二)逻辑运算
逻辑量的基本运算为“与(&
)”、“或(∣)”、“非(~)”三种,另外还可以用“异或(xor)”,如表M-9所示。
表M-9逻辑运算符
运算
A=0
A=1
B=0
B=1
B=0
A&
B
0
A|B
1
~A
xor(A,B)
(三)基本的流程控制语句
⑴if条件执行语句
格式:
if表达式语句,end
if表达式1语句组A,else语句组B,end
if表达式1语句组A,elseif表达式2语句组B,else语句组C,end
执行到该语句时,计算机先检验if后的逻辑表达式,为1则执行语句A;
如为0则跳过A检验下一句程序,直到遇见end,执行end后面的一条语句。
ifn<
=2
x=2;
elseifn>
x=3;
end
若n=5,则结果
x=
3
⑵while循环语句
while表达式语句组A,end
执行到该语句时,计算机先检验while后的逻辑表达式,为1则执行语句A;
到end处,它就跳回到while的入口,再检验表达式,如仍为1则再执行语句A,直到结果为0,就跳过语句组A,直接执行end后面的一条语句。
whilek<
=1000
k=k+1;
键入k将显示
k=
1001
⑶for循环语句
fork=初值:
增量:
终值语句组A,end
将语句组A重复执行N次,但每次执行时程序中k值不同。
增量缺省值为1。
y=0;
fork=1:
20
y=y+k;
end
键入y将显示
y=
210
⑷switch多分支语句
switch表达式(标量或字符串)
case值1
语句组A
case值2
语句组B
……………
otherwise
语句组N
当表达式的值与某case语句中的值相同时,它就执行该case语句后的语句组,然后直接跳到终点的end处。
三、基本绘图方法
(一)二维图形函数
MATLAB语言支持二维和三维图形,这里我们主要介绍常用的二维图形函数。
如表M-11所示。
表M-11常用图形函数库
基本X—Y图形
plot
线性X-Y座标绘图
polar
极座标绘图
loglog
双对数X-Y座标绘图
plotyy
用左、右两种Y座标画图
semilogx
半对数X座标绘图
semilogy.
半对数Y座标绘图
stem
绘制脉冲图
stairs
绘制阶梯图
bar
绘制条形图
坐标控制
axis
控制座标轴比例和外观
subplot
按平铺位置建立子图轴系
hold
保持当前图形
图形注释
title
标出图名(适用于三维图形)
gtext
用鼠标定位文字
xlabel
X轴标注(适用于三维图形)
legend
标注图例
ylabel
Y轴标注(适用于三维图形)
grid
图上加座标网格(适用于三维)
text
在图上标文字(适用于三维)
打印
print
打印图形或把图存为文件
orient
设定打印纸方向
printopt
打印机默认选项
常用的三维曲线绘图命令
Plot3
在三维空间画点和线
mesh
三维网格图
fill3
在三维空间绘制填充多边形
surf
三维曲面图
最常用的命令使用说明:
plot(t,y)表示用线性X-Y座标绘图,X轴的变量为t,Y轴的变量为y。
subplot(2,2,1)建立2×
2子图轴系,并选定图1。
axis([01-0.11.2])表示建立一个座标,横座标的范围从0至1,纵座标的范围从-0.1至1.2。
title('
X(n)曲线'
)在子图上端标注图名
作图时,线形、点形和颜色的选择可参考表M-12。
表M-12线形、点形和颜色
标志符
b
c
g
k
m
r
w
y
颜色
蓝
青
绿
黑
品红
红
白
黄
•
。
×
+
-
﹡
﹕
-.
┄
线、点
点
圆圈
号
+号
实线
星号
点线
点划线
虚线
(二)举例
以下举例说明二维图形函数在程序中的使用方法。
作一条曲线
,程序如下。
t=0:
0.5:
4*pi;
%将t在0到4π间每间隔0.5取一点
y=exp(-0.1*t).*sin(t);
subplot(2,2,1),plot(t,y);
%建立2×
2子图轴系,在图1处绘线性图
plot(t,y)'
);
%标注图名
subplot(2,2,2),stem(t,y);
%在2×
2子图轴系图2处绘脉冲图
stem(t,y)'
subplot(2,2,3),stairs(t,y);
2子图轴系图3处绘阶梯图
stairs(t,y)'
subplot(2,2,4),bar(t,y);
2子图轴系图2处绘条形图
bar(t,y)'
已知
,
。
在同一座标系对两条曲线作图,用不同的颜色和线型区分。
方法一:
将同时显示曲线的向量列入数组,t必须等长。
显示的线型和颜色不能任意选择。
0.01:
2;
y1=sin(2*pi*t);
y2=cos(4*pi*t);
plot(t,[y1;
y2]);
图M-1例2方法一
方法二:
显示曲线的向量t不必等长,显示的线型和颜色能任意选择。
作图时,先画第一条曲线保持住,再画第二条曲线。
图M-2例2方法二
t1=0:
1;
y1=sin(2*pi*t1);
t2=0:
y2=cos(4*pi*t2);
plot(t1,y1,'
*m'
),hold;
%让第一条曲线保持住,再画第二条曲线
plot(t2,y2,'
+b'
3 MATLAB在信号处理中常用的函数
MATLAB系统软件中具有专用的信号处理工具箱,对于我们学习信号与系统、数字信号处理等课程,进行通信、电子工程设计计算是一个非常有效的辅助手段。
这里,我们仅列写出最常用的部分,供大家参考。
一、常用的信号及信号的波形
(一)常用的信号
在MATLAB中的信号处理工具箱中,主要提供的信号是离散信号。
由于MATLAB对下标的约定为从1开始递增,例如x=[5,4,3,2,1,0],表示x
(1)=5,x
(2)=4,X(3)=3…
因此要表示一个下标不由1开始的数组x(n),一般应采用两个矢量,如
n=[-3,-2,-