Matlab的信号处理仿真应⽤上海电⼒学院课程报告
课程名称:Matlab的信号处理仿真应⽤
班级:2014071
姓名:郭茂学号:20140898
⼀:MATLAB概述与⼊门
1.MATLAB强⼤的计算功能及命令窗⼝的简单使⽤
简单计算:
例1.计算sin(45° )
>>sin(45*pi/180)
运⾏窗⼝如图⼀;图⼀:
例2.计算半径为5.2m的圆的周长和⾯积。
>>radius=5.2; %圆的半径
>>area=pi*radius^2, circle_len=2*pi*radius
运⾏窗⼝如图⼆;
图⼆:
2.MATLAB的演⽰功能
例3:绘制复杂的3d图形
t = linspace(0, 2*pi, 512);
[u,v] = meshgrid(t);
a = -0.4;
b = .5;
c = .1;
n = 3;
x = (a*(1 - v/(2*pi)) .* (1+cos(u)) + c) .* cos(n*v);
y = (a*(1 - v/(2*pi)) .* (1+cos(u)) + c) .* sin(n*v);
z = b*v/(2*pi) + a*(1 - v/(2*pi)) .* sin(u);
surf(x,y,z,y)
axis off
axis equal
colormap(hsv(1024))
shading interp
material shiny
lighting phong
camlight('left', 'infinite')
view([-160 25]) 图三:复杂3D图形的绘制结果如图三;
例4.求解线性⽅程组
a = [2,3,-1;8,2,3;45,3,9];%建⽴系数矩阵a
b = [2;4;23];%建⽴列向量b x = inv(a)*b 图四:运⾏结果
所得结果如图四:
运⽤MATLAB 中的INV 函数(如图五,MALAB 中的help 指令)求得系数的逆矩阵,进⽽所得线性⽅
程组的解;图五:INV 函数的说明
例5.多项式曲线拟合
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 原函数: y=[1.2, 3, 4, 4, 5, 4.7, 5, 5.2, 6, 7.2] ⼀次多项式拟合: p1 = polyfit(x,y,1) 三次多项式拟合: p3 = polyfit(x,y,3)
plot 原始数据、⼀次拟合曲线和三次拟合曲线 x2=1:0.1:10; y1=polyval(p1,x2) y3=polyval(p3,x2)
plot( x, y, ’*’, x2, y1, ‘:’, x2, y3) 拟合图形如图六:图六:拟合结果
由图可见,三次拟合结果较好。
Polyfit :多项式函数拟合:a=polyfit(xdata,ydata,n),其中n 表⽰多项式的最⾼阶数,xdata ,ydata 为将要拟合的数据,它是⽤数组的⽅式输⼊。输出参数a 为拟合多项式;
Polyval :y = polyval(p,x)返回n 次多项式p 在x 处的值。输⼊变量p 是⼀个长度为n+1的向量,其元素
为按降幂排列的多项式系数;
Plot :plot(x1,y1,x2,y2,……)在此格式中,每对x,y 必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每⼀对x,y 绘制曲线。
x y z x y z x y z +-=??
++=??++=?
23282344539
2332[1205(25]
)y x x x In MA B y TLA =---=-
1
2345678910
12
3
456
7
8
3.⼩结:
结合第⼀讲PPT中的各个例程,基本熟悉了MATLAB的部分操作,它各样的函数,简洁的编程语⾔,强⼤的矩阵运算功能及演⽰功能着实吸引了我。在多项式拟合那个例程中我经查阅资料运⽤MATLAB中的cftool得到了更加简明准确的拟合关系。如下图七:
图七:MATLAB cftool下的多项式拟合
⼆:MATLAB数据及其运算
1.MATLAB数值表⽰及数组的简单运算
例6.数组加减法
>>a=zeros(2, 3);
>>a(:)=1:6;
>>b=a+2.5
b =
3.5000 5.5000 7.5000
4.5000 6.5000 8.5000
>>c=b-a
c =
2.5000 2.5000 2.5000
2.5000 2.5000 2.5000 图⼋
运⾏结果如图⼋;
zeros(m,n):产⽣m×n的double类零矩阵,zeros(n)产⽣n×n的全0⽅阵。按着同维矩阵依次相加即可;
2.结构数组变量
例7.使⽤struct创建结构数组变量
>>student = struct('name', {'张三', '
李四'}, 'scores', {[50 60], [65 80]});
student(1), student(2)
如图九;
图九
例8.计算平均值;(课后思考问题)数据如例7;
计算平均值(使⽤mean函数)
计算每科考试的平均值
>>average1=mean(cat(1, student.scores)) 注:成绩
张三:50; 60;
matlab求导李四:65; 80;average1 =
57.5000 70.0000
思考:如何计算每个学⽣成绩的平均值?
average2=mean(cat(1, student.scores),2)
average2 =
55.0000 图⼗
72.5000 如图⼗;
cat函数: 排列结构数组某字段的值,格式:cat(dim, structurefield),dim=1, 竖排;dim=2, 横排;
mean(A,dim):当dim为1时,该函数等同于mean(A)返回⼀个⾏向量,其第i
个元素是A的第i列的算术平均值。当dim为2时,返回⼀个列向量,其第i个元素是A的第i⾏的算术平均值;
3.⼩结:
在第⼆讲中主要涉及了MATLAB中的数据类型及矩阵,数组运算实例,通过此讲的学习对其中的数据和函数有了更深⼀步的理解。
Matlab数据类型⾮常丰富,除数值型、字符型等基本数据类型外,还有结构体、单元等更为复杂的数据类型。
各种数据类型都以矩阵形式存在,矩阵是Matlab最基本的数据对象,并且矩阵的运算是定义在复数域上的。
对课后思考题的处理过程中,⾃⼰查阅相关函数资料,较轻松得解决了问题,锻炼了⾃⼰的学习能⼒。
三:MATLAB数值计算
1.MATLAB多项式计算
例9.多项式的导数 (polyder)
求b(x)= x3+4x2+9x+16的导数。
>> b=[1 4 9 16];
d=polyder(b) 3 8 9 d =
结果为: 3x^2+8x +9
运⾏结果,如图⼗⼀;图⼗⼀
另外两种形式为: p = polyder(P,Q):求P*Q 的导函数;
[p,q] = polyder(P,Q):求P/Q 的导函数,导数分⼦存⼊p ,分母存⼊q ;
2.MATLAB 数值导数及积分运算
例10:数值导数运算
在[-3,3]区间内以0.01为步长求
数值导数。并画出导函数图像。
>> f = inline('sqrt(x.^3+2*x.^2-x+12)+(x+5).^(1/6)+5*x+2'); %内联函数 x = -3:0.01:3;
dx = diff(f([x,3.01]))/0.01; %根据定义式求导数 plot(x,dx)
结果如图⼗⼆;
MATLAB 中没有直接提供数值导数的函数,只有计算向前差分的函数diff ,其调⽤格式为:
DX = diff(X) 计算向量X 的向前差分
DX = diff(X ,n) 计算向量X 的n 阶向前差分
图⼗⼆例11:数值积分运算
求解定积分⽤quad 指令求积分
>>ff=inline('sqrt(log(1./x))','x'); Isim=quad(ff,0,1) Isim = 0.8862
运⾏结果如图⼗三;
图⼗三
quad 函数:q = quad(fun,a,b)输⼊量fun 为被积函数的句柄。输⼊量a, b 分别是积分的下限、和上限,都必须是确定的数值; 326()212552f x x x x x x =+-+++++101ln I dx x =
3.⼩结
本讲⾃我感觉是对第⼆讲的延伸和扩展,在数值运算的基础上对多项式的计算和求导积分,进⼀步学习MATLAB 强⼤的计算能⼒。⼏个例程中主要还是各个函数的调⽤及使⽤,在这⾥help 及doc 指令体
现出了很⼤的作⽤,同时锻炼了我们独⽴⾃学的能⼒。
四.数据和函数的可视化
1.MATLAB ⼆维曲线及三维绘图
例12.⼆维曲线绘图(重绘曲线)
重绘波形
及其包络线。
t=(0:pi/100:pi)'; %长度为101的时间采样列向量 y1=sin(t)*[1,-1]; %包络线函数值,是(101x2)的矩阵 y2=sin(t).*sin(9*t); %长度为101的调制波列向量 t3=pi*(0:9)/9; y3=sin(t3).*sin(9*t3); plot(t,y1,'r:’) hold on
plot(t,y2,'b ‘)
plot(t3,y3,'bo') axis([0,pi,-1,1]) %控制轴的范围 hold off
hold on 保持当前坐标轴和图形,并可以接受下⼀次绘制。
hold off 取消当前坐标轴和图形保持,这种状态下,调⽤plot 绘制完全新的图形,不保留以前的坐标格式、曲线。
图⼗四例13.三维⽹线图(mesh)和曲⾯图(surf)
绘制函数z=x^2+y^2的曲⾯
x=-4:4;y=x;
[X,Y]=meshgrid(x,y); %⽣成 x-y 坐标“格点”矩阵 z=X.^2+Y.^2; %计算格点上的函数值 subplot(1,2,1), mesh(X,Y,z); %三维⽹格图
)9sin()sin(t t y
subplot(1,2,2), surf(X,Y,z); %三维曲⾯图
colormap(hot);
subplot(m, n, k)的