MATLAB论文
——小议MATLAB在信号与系统中的应用
第一次接触MATLAB程序是在上学期的《数值分析》这门课上,当时对这个程序不是很了解。本学期学校专门为我们开设的这门课,并且我在《信号与系统》中也看到了,MATLAB程序的应用。所以在这我主要讨论下MATLAB在信号与系统中的应用。如有不足请老师手下留情。
首先,简单介绍下MATLAB。它由MathWorks公司于1984年推出的数学软体。名称是由“矩阵实验﹙MATrix LABoratory)”所合成。 MATLAB为各种动态系统模拟、数位讯号处理、科学计算、科学目视等领域的标准程式语言。 MATLAB 的许多的核心计算技术是源自于 LINPACK 及 EISPACK 。
下面是我详细讨论下MATLAB在信号与系统中的应用。 我们知道,信号分为两类及:连续时间信号:时间变化连续。如y=x(t);和离散时间信号(序列):时间离散,如x(nT)=x(t). 下表为MATLAB中的信号产生函数:
函数名 sawtooth square sinc chirp gauspuls 功能 产生锯齿波或三角波信号 产生方波信号 产生sinc函数波形 产生调频余弦信号 产生高斯正弦脉冲信号 函数名 pulstran rectpule tripuls diric gmonopuls 产生冲激串 产生非周期的方波信号 产生非周期的三角波信号 产生Dirichlet或周期sinc函数 产生高斯单脉冲信号 功能
MATLAB论文
1. 离散时间信号的表示
比如:做出“x(-1)=-1, x(0)=1, x(1)=2, x(2)=1, x(3)=0, x(4)=-1”这个离散信号。
MATLAB程序为: 图: n=-3:5; x=[0,0,-1,1,2,1,-1,0,0]; stem(n,x); grid; line([-3,5],[0,0]); xlabel('n'); ylabel('x[n]')
2. 常见信号函数的MATLAB程序 a. 单位脉冲序列
nn01 ( n n 0 ) 程序:x=zeros(1,N); x(1,n0)=1;
nn00
b. 单位阶跃序列
nn01u(nn0) 0 n n 0 程序:n=[ns:nf]; x=[(n-n0)>=0];
c. 实指数序列
n 程序:n=[ns:nf]; x=a.^n;
x(n)a
MATLAB论文
d. 复指数序列
程序:n=[ns:nf]; x=exp((sigema+jw)*n); e. 正(余)弦序列
x ( n ) n ) 程序:n=[ns:nf]; x=cos(w*n+sita); cos(
关于信号的相加与相乘 、序列翻转与序列累加、序列移位与周期延时,就不列举了。很简单的程序。(如翻转:y(n)=x(-n)——y=fliplr(x))。
两序列的卷积运算为: y ( n ) x 1( n ) x 2 ( n ) ( m ) x 2 ( n m ) x1程序:y=xcorr(x1,x2)
有了这些,我们就可以完成很多信号与系统的图像和系统函数了。
3. 下面分享下,我总结的“信号与系统”中TTL系统的响应求法。 a.连续LTI系统的响应
mx(n)e(j)ny(t)Tx(t)x(t)*h(t)b.离散LTI系统的响应
x()h(t)d用MATLAB中的卷积函数conv( )来实现。
y(n)x(n)h(n)x(m)h(nm)m
MATLAB论文
用MATLAB中的卷积函数conv( )来实现。 c. 对任意输入的连续LTI系统响应函数lsim( ) 用 [y,x]=lsim(a,b,c,d,u,t)
d. 对任意输入的离散LTI系统响应函数dlsim( ) 用 [y,x]=dlsim(a,b,c,d,u)
e. 求连续LTI系统的单位冲激响应函数impulse( ) 用 [Y,T] = impulse(sys) 或impulse(sys) f. 求离散系统的单位冲激响应函数dimpulse( ) 用 [y,x]=dimpulse(num,den)
g. 求连续LTI系统的零输入响应函数initial( ) 用 [y,t,x]=initial(a,b,c,d,x0)
h. 求离散系统的零输入响应函数dinitial( ) 用 [y,x,n]=dinitial(a,b,c,d,x0)
i. 求连续系统的单位阶跃响应函数step( ) 用 [Y,T] = step(sys)
j. 求离散系统的单位阶跃响应函数dstep( ) 用 [y,x]= dstep (num,den)
4. 下面用几道《信号与系统》书上的题,给大家演示下。 a. 已知某模拟滤波器的系统函数 H (s)a
1s42.6131s33.4142s22.6131s1
MATLAB论文
求该模拟滤波器的频率响应。
MATLAB程序如下
B=1;A=[1 2.6131 3.4142 2.6131 1]; W=0:0.1:2*pi*5; freqs(B,A,W)
b. 已知某滤波器的系统函数为 H ( z ) 1 z 8 求该滤波器的频率响应。
MATLAB程序为: B=[1 0 0 0 0 0 0 0 –1]; A=1; freqz(B,A)
以上两道连续信号题,我们清楚的看到了系统的幅频特性和相频特性,这样大家就不会被抽象的数学式子所困扰了。下面举例一道离散信号的题。
MATLAB论文
c. 设系统方程为 y ( n ) 0 . 8 y ( n 1 ) x ( n ) ;
x(n)0.8nR32(n)求该系统对信号的应。
MATLAB程序为: B=1; A=[1,-0.8]; N=0:31; x=0.8.^n; y=filter(B,A,x); subplot(2,1,1);stem(x) subplot(2,1,2);stem(y)
傅里叶变换是我们学信号与系统时最头疼的一部分了。 d. 用傅里叶变换的性质计算下面两个序列的卷积。
nx4 n ) ( n ) sin( 0 . R N ( n ) ; h (n)0.9RM(n)
线性卷积
xn= sin(0.4*[1:15]); hn= 0.9.^(1:20); yn=conv(xn,hn);
圆周卷积
L=pow2(nextpow2(M+N-1)); Xk=fft(xn,L); Hk=fft(hn,L);
Yk=Xk.*Hk; yn=ifft(Yk,L);
5. 最后设计一个滤波器,信号课本P316 有一个设计低通FIR数字滤波器的例子。它使用了MATLAB中信号处理工具箱函数firrcos. 调用形式为b=firrcos(n,F0,df,FS),其中n为滤波器的阶数,F0为截止频率,
MATLAB论文
df过渡带频宽,FS取样频率。
在这,我用另一种方法来设计低通FIR数字滤波器。
使用MATLAB信号处理工具箱中的频率抽样法专用函数命fir2;调用形式为B=fir2(N,F,A)。其频率响应由向量F和A指定,滤波器的系数(单位冲激响应)返回在向量B中,长度为N+1。向量F和A分别指定滤波器的采样点的频率及其幅值,F中的频率必须在0.0到1.0之间,1.0对应于采样频率的一半。它们必须按递增的顺序从0.0开始到1.0为结束。
设计一个FIR低通滤波器,该滤波器的截止频率为0.5Hz,频率抽样点数为33。
MATLAB源程序为: N=32;
F=[0:1/32:1];
A=[ones(1,16),zeros(1,N-15)]; B=fir2(N,F,A); freqz(B);
figure(2);stem(B,'.');
line([0,35],[0,0]);xlabel('n');ylabel('h(n)');
MATLAB论文
以上就是我在信号与系统学习中,运用到的MATLAB知识,如有错误、不足,请老师指出。
最后谈谈我学习MATLAB的感想。经过一学期的学习,我对MATLAB有了较为系统的了解,它的应用领域相当广泛:微积分、矩阵代数、应用数学、物理、力学、信号与系统、电子线路、电机学、机械振动、自动控制和通信技术等。它只需几笔简单的程序,就可以完成繁琐的计算。它的扩展性强,在学好其基础部分之后,还有几十种工具箱可以用于各类科研需要,这可以缩短学习和实践工作的距离。 21世纪人类的知识正以指数规律飞速增长,我们已经借助计算机辅助设计和制造,设计业和制造业已经大大的提高了效率,创造了空前的财富。但在教和学的过程中,我们还在做繁琐重复的计算这种低级劳动,如何从其中解放出来?就成了提高学习效率的关键环节。现在我们虽然在大学中学习计算机课程,也只是为了以后的就业需要,很少对学生在学校学习有直接帮助。目前我们还处在“计算器水平”。正因为这样,我们没有足够时间用于概念的思考,知识的扩充和思维的创新。
就像学习信号与系统一样,傅里叶变换,拉普拉斯变换等,都是很复杂的计算,而且做出的答案只是一个单纯的函数式。根本不知道有什么用,而有了MATLAB,我们既可以很快做出答案,并且可以得到它的图像,一举两得,既形象又具体。使枯燥无味的计算变得生动有趣,而且便于理解。
在以后的学习中,我还会继续使用、学习MATLAB,它使计算机真
MATLAB论文
正成为教学有力的工具。
因篇幅问题不能全部显示,请点此查看更多更全内容