郑州轻工业学院
课程设计说明书
题目:基于MATLAB 的连续时间信号的频域分析
姓 名: 院 (系): 电气信息工程学院 专业班级: 学 号: 指导教师:
成 绩:
郑州轻工业学院 课 程 设 计 任 务 书
题目 基于MATLAB 的连续时间信号的频域分析 专业、班级 学号 姓名 主要内容、基本要求、主要参考资料等: 主要内容:
利用MATLAB 的图形处理功能、符号运算功能和数值计算功能,实现对连续时间信号的频域分析的MATLAB 仿真,并绘制相应的信号频谱。
基本要求:
1、利用MATLAB 绘制单位冲激信号、单位阶跃信号、实指数信号、正弦信号、非周期矩形脉冲信号和非周期三角波脉冲信号的频谱,并进行相应的频域分析。
2、利用MATLAB 绘制周期方波信号、周期锯齿波信号和周期三角波信号的频谱,并进行相应的频域分析。
主要参考资料:
1、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。 2、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
3、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。
完 成 期 限: 2014.06.09~2014.06.13
指导教师签名: 课程负责人签名:
2014年 6月6日
目 录
摘 要 .................................................... 2
1 绪论 ................................................................. 3 2 傅里叶变换原理 ..................................................... 5 3 基于MATLAB 的连续时间信号频域分析 . ..................... 6
3.1 单位冲激信号时域波形图、频谱图 ...................... 6 3.2 单位阶跃信号时域波形图、频谱图 . ..................... 7 3.3 实指数信号时域波形图、频谱图 ........................ 9 3.4 正弦信号时域波形图、频谱图 . ........................ 10 3.5 非周期矩形脉冲信号时域波形图、频谱图 . .............. 12 3.6 非周期三角波脉冲信号时域波形、频谱图 ............... 13 3.7 周期方波信号时域波形、频谱图 . ...................... 14 3.8 周期锯齿波信号时域波形、频谱图 ..................... 16 3.9 周期三角波信号时域波形、频谱图 ..................... 17 结束语 .................................................. 20 致 谢 .................................................. 21 参考文献 ................................................ 22
基于MATLAB 的连续时间信号的频域分析
摘 要
随着时代的发展,人们对于广告的要求已经不再是那些平面上的画面。由于人们真实所接触的东西都是三维立体的,因而人们也更希望广告也能给与他们真实的触感。从而计算机图形设计的软件也越来越多。
专门用来进行绘图的软件有很多,例如,Photoshop,Clodraw,AutoCAD 等。另外还有些软件,如Flash,3D MAX,Maya 等,除了能够完成绘图与建模外,还提供了强大的动画制作功能。除了这些专用软件,诸多的语言也提供了画图工具,提供了用来制作动画的函数。
MATLAB 是矩阵实验室(matrix laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。经过不断完善,MATLAB 已经发展成为适合多学科,多种工作平台的功能强大的大型软件。由于MATLAB 提供了三维绘制函数,而且是基于矩阵的,同时还在图形窗口上和语言中都提供了变换视点等功能,可以直接的从各个角度观察绘制出的三维物体。本文要讲的就是如何用MATLAB 语言来绘制三维图形和动画设计。
关键字 三维立体广告/计算机图形/绘图/MATLAB语言
1. 绪论
在科学技术飞速发展的今天,计算机正扮演着愈来愈重要的角色。在进行科学研究与工程应用的过程中,科技人员往往会遇到大量繁重的数学运算和数值分析,传统的高级语言Basic 、Fortran 及C 语言等虽然能在一定程度上减轻计算量,但它们均用人员具有较强的编程能力和对算法有深入的研究。
MATLAB 是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。MATLAB 工作界面是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C 、Fortran )的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB 和Mathematica 、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
正是由于MATLAB 在数值计算及符号计算等方面的强大功能使MA TLAB
一路领先成为数学类科技应用软件中的佼佼者。目前MATLAB 已成为国际上公认的最优秀的科技应用软件。
了解MATLAB 在电子信息工程课程中的应用熟练掌握信号的各类变换域的
分析方法理解傅里叶级数傅里叶变换、拉氏变换、Z 变换的定义和性质可以利用MATLAB 软件编写函数实现各种变换通过修改参数生产曲线进而分析参数变化对各类信号曲线的影响熟悉MATLAB 语言的使用掌握MATLAB 矩阵输入、运算以及数字MATLAB 数值的运算功能。
MATLAB 的主要功能是用于矩阵运算,它具有丰富的矩阵运算函数能够在
求解诸如各种复杂计算问题是时显得简捷、高效 、方便。同时MATLBA 作为编程语言和可视化工具由于功能强大界面直观语言自然使用方便可解决工程、科
学计算和数学学科中许多问题是目前高等院校与科研院所广泛使用的优秀应用软件, 目前已经在信号处理、系统识别、自动控制、非线性系统、模糊控制、优化技术、神经网络、小波分析等领域得到了广泛的应用。MATLAB 之所以能得到广泛的应用是因为它具有如下的特点
● 高质量和强大的数值计算功能
● 有大量事先定义的数学函数,并且又很强的用户自定义函数的能力 ● 强大的符号计算功能 ● 灵活的程序接口功能
● 强大的非线性动态系统建模和仿真功能
● 能与其他语言编写的程序结合, 具有输入输出格式化数据的能力 ● 数值分析和科学计算可视化功能 ● 有在多个应用领域解决难题的工具箱 ● 功能强大可扩展性强 ● 界面友好编程效率高
● 有强大的绘图功能, 可方便地输出复杂的二维、三维图形 ● 较强的文字处理功能 ● 在线帮助 利于自学。
此外, MATLAB 还具有支持科学计算标准的开放式可扩充结构和跨平台兼容得特点, 能够很好地解决科学和工程领域内的复杂问题。MATLAB 语言已经成为科学计算、系统仿真、信号与图像处理的主流软件。
2. 傅里叶变换原理
设有连续时间周期信号f (t),它的周期为T ,角频率Ω=2πf =
2π
,且满足T
狄里赫利条件,则该周期信号可以展开成傅里叶级数,即可表示为一系列不同频率的正弦或复指数信号之和。傅里叶级数有三角形式和指数形式两种 1. 三角形式的傅里叶级数:
a 0
+a cos(2Ωt) ++b 1sin(Ωt) +b 2sin(2Ωt) +2
∞
a 0∞
=+∑a n cos(nΩt) +∑b n sin(nΩt) 2n =1n =1
f (t)=
(2—1)
式中系数a n ,b n 称为傅里叶系数,可由下式求得:
T 2Γ22
t a n =⎰Γf (t)cos(nΩt) dt b n =⎰2T f (t ) s i n Ω(n d t ) (2—2)
--T 2T 2
2. 指数形式的傅里叶级数:
f (t)=
n =-∞
∑C e
n
∞
jn Ωt
(2—3)
式中系数C n 称为傅里叶复系数,可由下式求得:
1T
C n =⎰2T f (t)e -jn Ωt dt (2—4)
-T 2 周期信号频谱具有三个特点[1]: (1) 离散性,即谱线是离散的;
(2) 谐波性,即谱线只出现在基波频率的整数倍上; (3) 收敛性,即谐波的幅度随谐波次数的增高而减小。
周期信号的傅里叶分解用Matlab 进行计算时,本质上是对信号进行数值积分运算。在Matlab 中有多种进行数值积分运算的方法,我们采用quadl 函数,它有两种其调用形式。 y =quadl(‘func ’, a, b) 其中func 是一个字符串,表示被积函数的.m 文件名(函数名);a 、b 分别表示定积分的下限和上限。
3. 基于MATLAB 的连续时间信号频域分析
3.1 单位冲激信号时域波形图、频谱图
δ(t)=0, t ≠0⎧ (3—1) ⎪y =⎨∞
δ(t)dt =1⎪⎰⎩-∞
" 单位冲激函数" 是“信号与系统”学科中的一个重要概念。它是一个“面积”等于1的理想化了的窄脉冲。也就是说,这个脉冲的幅度等于它的宽度的倒数。当这个脉冲的宽度愈来愈小时,它的幅度就愈来愈大。当它的宽度按照数学上极限法则趋近于零时,那么它的幅度就趋近于无限大,这样的一个脉冲就是“单位冲激函数”。在实际工程中,像“单位冲激函数”这样的信号是不存在的,至多也就是近似而已。在理论上定义这样一个函数,完全是为了分析研究方便的需要。单位冲激函数又称为狄拉克函数,它具有选择性。 程序 clear all; close all; N=1024; t0=0; f0=10; fs=50;T=1/fs; t=(0:N-1)*T; x=[(t-t0)==0]; subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1);
subplot(3,1,2);plot(k,aw1);grid; aw2=angle(y1);
subplot(3,1,3);plot(k,aw2);grid;
10.5
0510
n
152025
21
0-2510
-1-25
-20-15-10-[1**********]
-20-15-10-[1**********]
图3.1 单位冲激函数时域、频谱
3.2 单位阶跃信号时域波形图、频谱图
⎧1, u (t)=⎨
⎩0,
t >0 (3—2) t
单位阶跃信号是指在t 0的时候,信号量恒为1。它是一种理想化的模型,因为在实际中,信号总是连续的,不可能在0点出现这样的“突变”.但是,建立这样一种模型,可以使我们分析的问题大为简化,抓住了主要因素,忽略了次要因素。同时,建立这样一种简化的模型,有利于我们的学习,由浅入深,刚开始学习的时候不要考虑的太复杂。其中阶跃响应的表示符号为s(t)。
程序: clear all; close all; N=1024; t0=0; f0=10; fs=50;T=1/fs; t=(0:N-1)*T; x=[t>=0]; subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1); subplot(3,1,2);plot(k,aw1);grid; aw2=angle(y1);
subplot(3,1,3);plot(k,aw2);grid;
1.21
0.80.60.4
246n
81012
20001000
0-2510
-1-25
-20-15-10-[1**********]
-20-15-10-[1**********]
图3.2 单位阶跃信号时域、频谱图
3.3 实指数信号时域波形图、频谱图
y ke at (3—3)
正弦信号是频率成分最为单一的一种信号,因这种信号的波形是数学上的正弦曲线而得名。任何复杂信号——例如音乐信号,都可以通过傅里叶变换分解为许多频率不同、幅度不等的正弦信号的迭加。 程序: clear all; close all;
T=0.1;N=100; D=2*pi/(N*T); n=0:N-1; x=exp(-0.1*n*T); subplot(3,1,1); plot(n,x);
Xa=T*fftshift(fft(x));
k=floor(-(N-1)/2:(N-1)/2); Xa(1),subplot(3,1,2); plot(k*D,abs(Xa)); subplot(3,1,3); plot(k*D,angle(Xa));
10.5
0105
0-4020
-2-40
[***********]0100
-30-20-[1**********]
-30-20-[1**********]
图3.3 实指数信号时域、频谱
3.4 正弦信号时域波形图、频谱图
y =k sin(ωt +θ) (3—4)
正弦信号是频率成分最为单一的一种信号,因这种信号的波形是数学上的正弦曲线而得名。任何复杂信号——例如音乐信号,都可以通过傅里叶变换分解为许多频率不同、幅度不等的正弦信号的迭加。 程序: clear all; close all;
N=512; f0=10; fs=50;T=1/fs; t=linspace(-1,1,N); x=sin(2*pi*f0*t); subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1); subplot(3,1,2);stem(k,aw1);grid; subplot(3,1,3);plot(k,angle(y1));
10
-1-1
50-5-25
-0.8-0.6-0.4-0.2
0n
0.20.40.60.81
-20-15-10-[1**********]
图3.4 正弦信号时域、频谱
3.5 非周期矩形脉冲信号时域波形图、频谱图
⎧1, y =⎨
⎩0,
程序: close all; close all; t=0:0.001:4; T=1;
1≤t ≤3 (3—5) 其他
产生一个周期为2,以t=2为对称轴的矩形波
y=rectpuls(t-2*T,2*T); subplot(3,1,1); plot(t,y,'b'); axis([-6,6,0,1.5]); hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*t'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
plot(w,abs(F),'linewidth',1.5) subplot(3,1,3); plot(w,angle(F));
1.51
0.50-621
0-2050
-5-20
-4
-2
2
4
6
-15-10-505101520
-15-10-505101520
图3.5 非周期矩形脉冲信号时域、频谱
3.6 非周期三角波脉冲信号时域波形、频谱图
⎛t +2⎫⎛-t +2⎫ (3—6)
f (t)= ε(t+2) -t ε(t)+ε(t-2) ⎪ ⎪
22⎝⎭⎝⎭
产生以t=0,周期为4的三角波 程序: T=4; s=100000; x=-6:1/s:6; d=4;
y=tripuls(x,d,0.5); subplot(3,1,1); plot(x,y,'b'); axis([-4,4,0,1.5]);
hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*x'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
plot(w,abs(F),'linewidth',1.5) subplot(3,1,3); plot(w,angle(F));
1.51
0.50-4200100
0-2050
-5-20
-3
-2
-1
1
2
3
4
-15-10-505101520
-15-10-505101520
图3.6 非周期三角波脉冲信号时域、频谱
3.7 周期方波信号时域波形、频谱图
已知周期为T=2π,幅值为±1的周期性的方波信号,频率为10,占空比50%。
程序: clear all; close all; N=1024; f0=10; fs=30;
t=linspace(-1,1,N);
y=square(2*pi*10*t,50); %由函数生成锯齿波 axis([0 7*pi -1.5 1.5]); %规定尺度距离 subplot(3,1,1);
plot(t,y); %画出横轴为t 纵轴为y 的锯齿函数 xlabel(' t'); % 为x 轴添加标签 ylabel('幅度y'); % 为y 轴添加标签 axis([-0.5 0.5 0 2]); k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(y)); y2=y1*2/N;
aw1=abs(y2); subplot(3,1,2); stem(k,aw1); aw2=angle(y2); subplot(3,1,3); stem(k,aw2); grid;
2
幅度y
1
0-0.5-15
-0.4-0.3-0.2-0.1
0 t
0.10.20.30.40.5
-10-5051015
图 3.7 周期方波信号时域、频谱
3.8 周期锯齿波信号时域波形、频谱图
产生周期为0.2的三角波 width取值1 程序: clear all; close all; N=1024; f0=10; fs=50;
t=linspace(-3,3,N)
y= sawtooth(2*pi*5*t,1); %由函数生成锯齿波 axis([0 7*pi -1.5 1.5]); %规定尺度距离 subplot(3,1,1);
plot(t,y); %画出横轴为t 纵轴为y 的锯齿函数 xlabel(' t'); % 为x 轴添加标签
ylabel('幅度y'); % 为y 轴添加标签 axis([-1 1 0 2]); k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(y)); y2=y1*2/N;
aw1=abs(y2); subplot(3,1,2); stem(k,aw1); aw2=angle(y2); subplot(3,1,3); stem(k,aw2); grid;
2
幅度y
1
0-1-0.8-0.6-0.4-0.2
0 t
0.20.40.60.81
-25
-20-15-10-[1**********]
图 3.8 周期锯齿波信号时域、频谱
3.9 周期三角波信号时域波形、频谱图
产生一个宽度为4,周期为4的三角波
程序: T=4;
x=-50:0.002:50; d=-20:T:20;
y=pulstran(x,d,'tripuls',4); subplot(3,1,1); plot(x,y,'b'); axis([-6,6,0,1.5]); title('三角波信号') hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*x'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
stem(w,abs(F),'linewidth',1.5) subplot(3,1,3);
stem(w,angle(F),'linewidth',1.5) title('频谱图')
三角波信号
1.5
1
0.5
0-6
-20-4-20246频谱图-15-10-505101520
图3.9 周期三角波信号时域、频谱
通过这次课设,给我一个方向。Matlab 语言,初看起来不那么顺眼,但是一个小小的plot 就能画出那么形象生动的sinx 波形,这时我才明白,课本上的那些复杂的波形都可以通过matlab 画出,刚开始写程序的确很痛苦,因为matlab 的界面不是那么友好,字体,标记不如其它编译软件那么顺手,后来更改了字体和编辑工具,感觉对matlab 的兴趣有如对Fpga 一般。初学都是很痛苦的,需要很大的耐性和良好的身体素质,在电脑面前一呆好几个小时那是很正常的。但是呆的越久,写的越多,领悟也就越多。特别是那些在课本上晦涩难懂的傅里叶变换,那些当初怎么想也想不到的图形就这么在电脑前出现了。对那些变换性质有个更直观的理解,我想在学习信号与系统时,就应该好好同步学matlab 。Matlab 有很多应用的地方,数学,信号,我想现在我找到了学matlab 的方向,将重心集中在信号与系统方面,促进专业的学习。
课程设计暂告收尾,这也意味着我在大三这学期的结束。回首既往,自己一生最宝贵的时光能于这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这三年的时间里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。 论文的写作是枯燥艰辛而又富有挑战的。信号处理是业界一直探讨的热门话题,老师的谆谆诱导、同学的出谋划策及家长的支持鼓励,是我坚持完成论文的动力源泉。在此,我特别要感谢我的导师老师。从课程设计的选题、文献的采集、框架的设计、结构的布局到最终的课程设计定稿,从内容到格式,从标题到标点,她都费尽心血。没有老师的辛勤栽培、孜孜教诲,就没有我课程设计的顺利完成。 通过这一阶段的努力,我的课程设计终于完成了,自己学会了很多,不仅对matlab 有了更深一步的了解,而且学到了团队合作所应该有的品质,为将来的毕业论文做下了铺垫。
参考文献
1、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。
2、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
3、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。
4、精通MATLAB6.5版,张志涌编,北京航空航天大学出版社,2003.03(第一版)
5、MATLAB M语言高级编程,陈永春编,清华大学出版社,2004.01(第一版)
6、MATLAB 程序设计,阮沈勇、王永利等编,电子工业出版社,2004.01(第一版)
7、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。
8、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
9、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。
郑州轻工业学院
课程设计说明书
题目:基于MATLAB 的连续时间信号的频域分析
姓 名: 院 (系): 电气信息工程学院 专业班级: 学 号: 指导教师:
成 绩:
郑州轻工业学院 课 程 设 计 任 务 书
题目 基于MATLAB 的连续时间信号的频域分析 专业、班级 学号 姓名 主要内容、基本要求、主要参考资料等: 主要内容:
利用MATLAB 的图形处理功能、符号运算功能和数值计算功能,实现对连续时间信号的频域分析的MATLAB 仿真,并绘制相应的信号频谱。
基本要求:
1、利用MATLAB 绘制单位冲激信号、单位阶跃信号、实指数信号、正弦信号、非周期矩形脉冲信号和非周期三角波脉冲信号的频谱,并进行相应的频域分析。
2、利用MATLAB 绘制周期方波信号、周期锯齿波信号和周期三角波信号的频谱,并进行相应的频域分析。
主要参考资料:
1、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。 2、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
3、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。
完 成 期 限: 2014.06.09~2014.06.13
指导教师签名: 课程负责人签名:
2014年 6月6日
目 录
摘 要 .................................................... 2
1 绪论 ................................................................. 3 2 傅里叶变换原理 ..................................................... 5 3 基于MATLAB 的连续时间信号频域分析 . ..................... 6
3.1 单位冲激信号时域波形图、频谱图 ...................... 6 3.2 单位阶跃信号时域波形图、频谱图 . ..................... 7 3.3 实指数信号时域波形图、频谱图 ........................ 9 3.4 正弦信号时域波形图、频谱图 . ........................ 10 3.5 非周期矩形脉冲信号时域波形图、频谱图 . .............. 12 3.6 非周期三角波脉冲信号时域波形、频谱图 ............... 13 3.7 周期方波信号时域波形、频谱图 . ...................... 14 3.8 周期锯齿波信号时域波形、频谱图 ..................... 16 3.9 周期三角波信号时域波形、频谱图 ..................... 17 结束语 .................................................. 20 致 谢 .................................................. 21 参考文献 ................................................ 22
基于MATLAB 的连续时间信号的频域分析
摘 要
随着时代的发展,人们对于广告的要求已经不再是那些平面上的画面。由于人们真实所接触的东西都是三维立体的,因而人们也更希望广告也能给与他们真实的触感。从而计算机图形设计的软件也越来越多。
专门用来进行绘图的软件有很多,例如,Photoshop,Clodraw,AutoCAD 等。另外还有些软件,如Flash,3D MAX,Maya 等,除了能够完成绘图与建模外,还提供了强大的动画制作功能。除了这些专用软件,诸多的语言也提供了画图工具,提供了用来制作动画的函数。
MATLAB 是矩阵实验室(matrix laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。经过不断完善,MATLAB 已经发展成为适合多学科,多种工作平台的功能强大的大型软件。由于MATLAB 提供了三维绘制函数,而且是基于矩阵的,同时还在图形窗口上和语言中都提供了变换视点等功能,可以直接的从各个角度观察绘制出的三维物体。本文要讲的就是如何用MATLAB 语言来绘制三维图形和动画设计。
关键字 三维立体广告/计算机图形/绘图/MATLAB语言
1. 绪论
在科学技术飞速发展的今天,计算机正扮演着愈来愈重要的角色。在进行科学研究与工程应用的过程中,科技人员往往会遇到大量繁重的数学运算和数值分析,传统的高级语言Basic 、Fortran 及C 语言等虽然能在一定程度上减轻计算量,但它们均用人员具有较强的编程能力和对算法有深入的研究。
MATLAB 是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。MATLAB 工作界面是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C 、Fortran )的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB 和Mathematica 、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB 可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
正是由于MATLAB 在数值计算及符号计算等方面的强大功能使MA TLAB
一路领先成为数学类科技应用软件中的佼佼者。目前MATLAB 已成为国际上公认的最优秀的科技应用软件。
了解MATLAB 在电子信息工程课程中的应用熟练掌握信号的各类变换域的
分析方法理解傅里叶级数傅里叶变换、拉氏变换、Z 变换的定义和性质可以利用MATLAB 软件编写函数实现各种变换通过修改参数生产曲线进而分析参数变化对各类信号曲线的影响熟悉MATLAB 语言的使用掌握MATLAB 矩阵输入、运算以及数字MATLAB 数值的运算功能。
MATLAB 的主要功能是用于矩阵运算,它具有丰富的矩阵运算函数能够在
求解诸如各种复杂计算问题是时显得简捷、高效 、方便。同时MATLBA 作为编程语言和可视化工具由于功能强大界面直观语言自然使用方便可解决工程、科
学计算和数学学科中许多问题是目前高等院校与科研院所广泛使用的优秀应用软件, 目前已经在信号处理、系统识别、自动控制、非线性系统、模糊控制、优化技术、神经网络、小波分析等领域得到了广泛的应用。MATLAB 之所以能得到广泛的应用是因为它具有如下的特点
● 高质量和强大的数值计算功能
● 有大量事先定义的数学函数,并且又很强的用户自定义函数的能力 ● 强大的符号计算功能 ● 灵活的程序接口功能
● 强大的非线性动态系统建模和仿真功能
● 能与其他语言编写的程序结合, 具有输入输出格式化数据的能力 ● 数值分析和科学计算可视化功能 ● 有在多个应用领域解决难题的工具箱 ● 功能强大可扩展性强 ● 界面友好编程效率高
● 有强大的绘图功能, 可方便地输出复杂的二维、三维图形 ● 较强的文字处理功能 ● 在线帮助 利于自学。
此外, MATLAB 还具有支持科学计算标准的开放式可扩充结构和跨平台兼容得特点, 能够很好地解决科学和工程领域内的复杂问题。MATLAB 语言已经成为科学计算、系统仿真、信号与图像处理的主流软件。
2. 傅里叶变换原理
设有连续时间周期信号f (t),它的周期为T ,角频率Ω=2πf =
2π
,且满足T
狄里赫利条件,则该周期信号可以展开成傅里叶级数,即可表示为一系列不同频率的正弦或复指数信号之和。傅里叶级数有三角形式和指数形式两种 1. 三角形式的傅里叶级数:
a 0
+a cos(2Ωt) ++b 1sin(Ωt) +b 2sin(2Ωt) +2
∞
a 0∞
=+∑a n cos(nΩt) +∑b n sin(nΩt) 2n =1n =1
f (t)=
(2—1)
式中系数a n ,b n 称为傅里叶系数,可由下式求得:
T 2Γ22
t a n =⎰Γf (t)cos(nΩt) dt b n =⎰2T f (t ) s i n Ω(n d t ) (2—2)
--T 2T 2
2. 指数形式的傅里叶级数:
f (t)=
n =-∞
∑C e
n
∞
jn Ωt
(2—3)
式中系数C n 称为傅里叶复系数,可由下式求得:
1T
C n =⎰2T f (t)e -jn Ωt dt (2—4)
-T 2 周期信号频谱具有三个特点[1]: (1) 离散性,即谱线是离散的;
(2) 谐波性,即谱线只出现在基波频率的整数倍上; (3) 收敛性,即谐波的幅度随谐波次数的增高而减小。
周期信号的傅里叶分解用Matlab 进行计算时,本质上是对信号进行数值积分运算。在Matlab 中有多种进行数值积分运算的方法,我们采用quadl 函数,它有两种其调用形式。 y =quadl(‘func ’, a, b) 其中func 是一个字符串,表示被积函数的.m 文件名(函数名);a 、b 分别表示定积分的下限和上限。
3. 基于MATLAB 的连续时间信号频域分析
3.1 单位冲激信号时域波形图、频谱图
δ(t)=0, t ≠0⎧ (3—1) ⎪y =⎨∞
δ(t)dt =1⎪⎰⎩-∞
" 单位冲激函数" 是“信号与系统”学科中的一个重要概念。它是一个“面积”等于1的理想化了的窄脉冲。也就是说,这个脉冲的幅度等于它的宽度的倒数。当这个脉冲的宽度愈来愈小时,它的幅度就愈来愈大。当它的宽度按照数学上极限法则趋近于零时,那么它的幅度就趋近于无限大,这样的一个脉冲就是“单位冲激函数”。在实际工程中,像“单位冲激函数”这样的信号是不存在的,至多也就是近似而已。在理论上定义这样一个函数,完全是为了分析研究方便的需要。单位冲激函数又称为狄拉克函数,它具有选择性。 程序 clear all; close all; N=1024; t0=0; f0=10; fs=50;T=1/fs; t=(0:N-1)*T; x=[(t-t0)==0]; subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1);
subplot(3,1,2);plot(k,aw1);grid; aw2=angle(y1);
subplot(3,1,3);plot(k,aw2);grid;
10.5
0510
n
152025
21
0-2510
-1-25
-20-15-10-[1**********]
-20-15-10-[1**********]
图3.1 单位冲激函数时域、频谱
3.2 单位阶跃信号时域波形图、频谱图
⎧1, u (t)=⎨
⎩0,
t >0 (3—2) t
单位阶跃信号是指在t 0的时候,信号量恒为1。它是一种理想化的模型,因为在实际中,信号总是连续的,不可能在0点出现这样的“突变”.但是,建立这样一种模型,可以使我们分析的问题大为简化,抓住了主要因素,忽略了次要因素。同时,建立这样一种简化的模型,有利于我们的学习,由浅入深,刚开始学习的时候不要考虑的太复杂。其中阶跃响应的表示符号为s(t)。
程序: clear all; close all; N=1024; t0=0; f0=10; fs=50;T=1/fs; t=(0:N-1)*T; x=[t>=0]; subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1); subplot(3,1,2);plot(k,aw1);grid; aw2=angle(y1);
subplot(3,1,3);plot(k,aw2);grid;
1.21
0.80.60.4
246n
81012
20001000
0-2510
-1-25
-20-15-10-[1**********]
-20-15-10-[1**********]
图3.2 单位阶跃信号时域、频谱图
3.3 实指数信号时域波形图、频谱图
y ke at (3—3)
正弦信号是频率成分最为单一的一种信号,因这种信号的波形是数学上的正弦曲线而得名。任何复杂信号——例如音乐信号,都可以通过傅里叶变换分解为许多频率不同、幅度不等的正弦信号的迭加。 程序: clear all; close all;
T=0.1;N=100; D=2*pi/(N*T); n=0:N-1; x=exp(-0.1*n*T); subplot(3,1,1); plot(n,x);
Xa=T*fftshift(fft(x));
k=floor(-(N-1)/2:(N-1)/2); Xa(1),subplot(3,1,2); plot(k*D,abs(Xa)); subplot(3,1,3); plot(k*D,angle(Xa));
10.5
0105
0-4020
-2-40
[***********]0100
-30-20-[1**********]
-30-20-[1**********]
图3.3 实指数信号时域、频谱
3.4 正弦信号时域波形图、频谱图
y =k sin(ωt +θ) (3—4)
正弦信号是频率成分最为单一的一种信号,因这种信号的波形是数学上的正弦曲线而得名。任何复杂信号——例如音乐信号,都可以通过傅里叶变换分解为许多频率不同、幅度不等的正弦信号的迭加。 程序: clear all; close all;
N=512; f0=10; fs=50;T=1/fs; t=linspace(-1,1,N); x=sin(2*pi*f0*t); subplot(3,1,1);
plot(t,x);xlabel('n');grid on; k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(x));
aw1=abs(y1); subplot(3,1,2);stem(k,aw1);grid; subplot(3,1,3);plot(k,angle(y1));
10
-1-1
50-5-25
-0.8-0.6-0.4-0.2
0n
0.20.40.60.81
-20-15-10-[1**********]
图3.4 正弦信号时域、频谱
3.5 非周期矩形脉冲信号时域波形图、频谱图
⎧1, y =⎨
⎩0,
程序: close all; close all; t=0:0.001:4; T=1;
1≤t ≤3 (3—5) 其他
产生一个周期为2,以t=2为对称轴的矩形波
y=rectpuls(t-2*T,2*T); subplot(3,1,1); plot(t,y,'b'); axis([-6,6,0,1.5]); hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*t'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
plot(w,abs(F),'linewidth',1.5) subplot(3,1,3); plot(w,angle(F));
1.51
0.50-621
0-2050
-5-20
-4
-2
2
4
6
-15-10-505101520
-15-10-505101520
图3.5 非周期矩形脉冲信号时域、频谱
3.6 非周期三角波脉冲信号时域波形、频谱图
⎛t +2⎫⎛-t +2⎫ (3—6)
f (t)= ε(t+2) -t ε(t)+ε(t-2) ⎪ ⎪
22⎝⎭⎝⎭
产生以t=0,周期为4的三角波 程序: T=4; s=100000; x=-6:1/s:6; d=4;
y=tripuls(x,d,0.5); subplot(3,1,1); plot(x,y,'b'); axis([-4,4,0,1.5]);
hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*x'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
plot(w,abs(F),'linewidth',1.5) subplot(3,1,3); plot(w,angle(F));
1.51
0.50-4200100
0-2050
-5-20
-3
-2
-1
1
2
3
4
-15-10-505101520
-15-10-505101520
图3.6 非周期三角波脉冲信号时域、频谱
3.7 周期方波信号时域波形、频谱图
已知周期为T=2π,幅值为±1的周期性的方波信号,频率为10,占空比50%。
程序: clear all; close all; N=1024; f0=10; fs=30;
t=linspace(-1,1,N);
y=square(2*pi*10*t,50); %由函数生成锯齿波 axis([0 7*pi -1.5 1.5]); %规定尺度距离 subplot(3,1,1);
plot(t,y); %画出横轴为t 纵轴为y 的锯齿函数 xlabel(' t'); % 为x 轴添加标签 ylabel('幅度y'); % 为y 轴添加标签 axis([-0.5 0.5 0 2]); k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(y)); y2=y1*2/N;
aw1=abs(y2); subplot(3,1,2); stem(k,aw1); aw2=angle(y2); subplot(3,1,3); stem(k,aw2); grid;
2
幅度y
1
0-0.5-15
-0.4-0.3-0.2-0.1
0 t
0.10.20.30.40.5
-10-5051015
图 3.7 周期方波信号时域、频谱
3.8 周期锯齿波信号时域波形、频谱图
产生周期为0.2的三角波 width取值1 程序: clear all; close all; N=1024; f0=10; fs=50;
t=linspace(-3,3,N)
y= sawtooth(2*pi*5*t,1); %由函数生成锯齿波 axis([0 7*pi -1.5 1.5]); %规定尺度距离 subplot(3,1,1);
plot(t,y); %画出横轴为t 纵轴为y 的锯齿函数 xlabel(' t'); % 为x 轴添加标签
ylabel('幅度y'); % 为y 轴添加标签 axis([-1 1 0 2]); k=(-N/2:N/2-1)*fs/N; y1=fftshift(fft(y)); y2=y1*2/N;
aw1=abs(y2); subplot(3,1,2); stem(k,aw1); aw2=angle(y2); subplot(3,1,3); stem(k,aw2); grid;
2
幅度y
1
0-1-0.8-0.6-0.4-0.2
0 t
0.20.40.60.81
-25
-20-15-10-[1**********]
图 3.8 周期锯齿波信号时域、频谱
3.9 周期三角波信号时域波形、频谱图
产生一个宽度为4,周期为4的三角波
程序: T=4;
x=-50:0.002:50; d=-20:T:20;
y=pulstran(x,d,'tripuls',4); subplot(3,1,1); plot(x,y,'b'); axis([-6,6,0,1.5]); title('三角波信号') hold on wf=20; Nf=40;
w1=linspace(0,wf,Nf);dw=wf/(Nf-1); F1=y*exp(-j*x'*w1)*0.001; w=[-fliplr(w1),w1(2:Nf)]; F=[fliplr(F1),F1(2:Nf)]; % figure(2) subplot(3,1,2);
stem(w,abs(F),'linewidth',1.5) subplot(3,1,3);
stem(w,angle(F),'linewidth',1.5) title('频谱图')
三角波信号
1.5
1
0.5
0-6
-20-4-20246频谱图-15-10-505101520
图3.9 周期三角波信号时域、频谱
通过这次课设,给我一个方向。Matlab 语言,初看起来不那么顺眼,但是一个小小的plot 就能画出那么形象生动的sinx 波形,这时我才明白,课本上的那些复杂的波形都可以通过matlab 画出,刚开始写程序的确很痛苦,因为matlab 的界面不是那么友好,字体,标记不如其它编译软件那么顺手,后来更改了字体和编辑工具,感觉对matlab 的兴趣有如对Fpga 一般。初学都是很痛苦的,需要很大的耐性和良好的身体素质,在电脑面前一呆好几个小时那是很正常的。但是呆的越久,写的越多,领悟也就越多。特别是那些在课本上晦涩难懂的傅里叶变换,那些当初怎么想也想不到的图形就这么在电脑前出现了。对那些变换性质有个更直观的理解,我想在学习信号与系统时,就应该好好同步学matlab 。Matlab 有很多应用的地方,数学,信号,我想现在我找到了学matlab 的方向,将重心集中在信号与系统方面,促进专业的学习。
课程设计暂告收尾,这也意味着我在大三这学期的结束。回首既往,自己一生最宝贵的时光能于这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。在这三年的时间里,我在学习上和思想上都受益非浅。这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。 论文的写作是枯燥艰辛而又富有挑战的。信号处理是业界一直探讨的热门话题,老师的谆谆诱导、同学的出谋划策及家长的支持鼓励,是我坚持完成论文的动力源泉。在此,我特别要感谢我的导师老师。从课程设计的选题、文献的采集、框架的设计、结构的布局到最终的课程设计定稿,从内容到格式,从标题到标点,她都费尽心血。没有老师的辛勤栽培、孜孜教诲,就没有我课程设计的顺利完成。 通过这一阶段的努力,我的课程设计终于完成了,自己学会了很多,不仅对matlab 有了更深一步的了解,而且学到了团队合作所应该有的品质,为将来的毕业论文做下了铺垫。
参考文献
1、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。
2、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
3、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。
4、精通MATLAB6.5版,张志涌编,北京航空航天大学出版社,2003.03(第一版)
5、MATLAB M语言高级编程,陈永春编,清华大学出版社,2004.01(第一版)
6、MATLAB 程序设计,阮沈勇、王永利等编,电子工业出版社,2004.01(第一版)
7、《信号与线性系统分析(第4版)》,吴大正等著,高等教育出版社,2008。
8、《数字信号处理教程——MATLAB 释义与实现(第2版)》,陈怀琛著,电子工业出版社,2008。
9、《MATLAB 及在电子信息课程中的应用(第4版)》,陈怀琛等著,电子工业出版社,2013。