基于 MATLAB 的数字信号处理的模拟与仿真.doc
《基于 MATLAB 的数字信号处理的模拟与仿真.doc》由会员分享,可在线阅读,更多相关《基于 MATLAB 的数字信号处理的模拟与仿真.doc(16页珍藏版)》请在三一办公上搜索。
1、基于 MATLAB 的数字信号处理的模拟与仿真王靖斌山东农业大学信息科学与工程学院,山东泰安(371018)摘要:本文介绍了数字信号处理中各种算法基本原理,包括 Z 变换、DFT 变换及其快速 算法 FFT 等信号变换算法和包括 IIR 与 FIR 数字滤波器的设计与实现,详细论述了利用- 16 -MATLAB软件对信号变换和设计数字滤波器的原理 步骤和实现方法,并给出了基于MATLAB 的模拟与仿真。文章最后给出了实验结果,并就其结果做了进一步的解释和说明。 关键词:Z 变换,离散傅立叶变换 DFT,数字滤波器,系统结构仿真1引言数字信号处理(Digital Signal Processin
2、g,DSP)是一门交叉性的学科,它的理论基础涉 及信息、通信、雷达、航空航天及生物医药等众多学科领域,其成果又为这些学科的发展起 着重要的促进作用。MATLAB 是数字信号处理技术实现的重要手段。MATLAB 提供了信号处理工具箱, MATLAB 信号处理工具箱随着信号处理理论与方法的发展而发展,同时又为信号处理理论 与方法的实现与工程应用提供了有效的帮助。本文基于 MATLAB 实现了数字信号处理的信 号变换模拟与滤波器设计仿真。2信号变换的各种算法2.1 Z 变换的算法原理及 MATLAB 实现若序列为 x(n),则 z 变换为X ( z) = (x n)z nn=这种变换将离散系统的差分
3、方程转化为简单的代数方程。以一个简单的差分方程为例,用 MATLAB 实现 z 变换: 系统的差分方程为:y(n)-2y(n-1)+3y(n-2)=4u(n)-5u(n-1)+6u(n-2)-7u(n-3)其初始条件为 x(-1)=1,x(-2)=-1,y(-1)=-1,y(-2)=1,求系统的输出 y(n).MATLAB 程序如下所示:clear all; close all; clc;b=4,-5,6,-7; a=1 -2 3; x0=1 -1; y0=-1 1;xic=filtic(b,a,y0,x0)bxplus=1; axplus=1 -1; ayplus=conv(a,axplus
4、)byplus=conv(b,bxplus)+conv(xic,axplus)R,P,K=residuez(byplus,ayplus) Mp=abs(P)Ap=angle(P)*180/piN=100; n=0:N-1; xn=ones(1,N); yn=filter(b,a,xn,xic); plot(n,yn)运行结果如下:xic =-1616-7ayplus =1-35-3byplus =-1227-170R =-5.5000 - 1.0607i-5.5000 + 1.0607i-1.0000P =1.0000 + 1.4142i1.0000 - 1.4142i1.0000K =0Mp
5、 =1.73211.73211.0000Ap =54.7356-54.73560输出相应曲线如下图所示图 1.差分方程的输出结果2.2 离散傅立叶变换(DFT)2.2.1 DFT 的算法原理及 MATLAB 实现 对 N 点有限长序列 x(n),其正变换为N 1 j 2 nkN 1NDFT x(n) = X (k ) =其逆变换为n=0x(n)eN=n= 0x(n)W nk , k = 0,1N 11 N 1j 2 nk1 N 1NIDFT X (k ) = x(n) =N n =0X (k )e N=N n=0X (k )W nk , n = 0,1N 1下面用 MATLAB 实现傅立叶变换
6、及其逆变换:离散傅立叶变换的 MATLAB 实现functionXk=dft(xn,N)Xk=在 0=k=N-1 间的 DFT 系数数组xn=N 点有限长度序列N=DFT 的长度n=0:1:N-1;%n 的行向量 k=0:1:N-1;%k 的行向量 WN=exp(-j*2*pi/N);%Wn 因子nk=n*k;%产生一个含 nk 值的 N 乘 N 维矩阵WNnk=WN.nk;%DFT 矩阵Xk=xn*WNnk;%DFT 系数的行向量 离散傅立叶逆变换的 MATLAB 实现:Functionxn=idft(Xk,N)xn=在 0=k=N-1 间的 N 点有限长度序列 Xk=在 0=k=N-1 间
7、的 DFT 系数数组 N=DFT 的长度n=0:1:N-1;k=0:1:N-1;WN=exp(-j*2*pi/N);nk=n*k; WNnk=WN.(-nk);xn=(Xk*WNnk)/N;以一个有限序列为例,计算它的傅立叶变换:若 x(n)=sin(n/4)是一个 N=32 的有限序列,实现它的傅立叶变换的 MATLAB 程序如下:clear all; close all; clc; N=32; n=0:N-1;xn=cos(pi*n/6);k=0:N-1;WN=exp(-j*2*pi/N); nk=n*k; WNnk=WN.nk; Xk=xn*WNnk; figure(1);stem(n,
8、xn) figure(2); stem(k,abs(Xk);得到的结果若下图图 2.有限长序列图 3.DFT 运行结果2.2.2 直接计算 DFT 存在的问题及改进方法 有限长序列的重要特点是其频域也可离散化成有限长序列,即可进行离散傅立叶变换。DFT 的计算在数字信号处理中非常有用,但是由于 DFT 的计算量太大,即使使用计算机也很难对问题进行实时处理,所以在很长的时间里并没有得到广泛应用。快速傅立叶变换(FFT)的提出使 DFT 的计算大大简化,从而使 DFT 的运算在实际中真正得到了广泛的应 用。现有的 FFT 可以分为两大类:时间抽取法(DIT-FFT)和频率抽取(DIP-FFT),其
9、算法 思想基本一致,只是划分方式略有差异。现以按时间抽取(DIT)的基-2FFT 算法为例介绍 FFT 的基本原理并给出相应的 MATLAB实现方法。先设序列点数为 N=2L,L 为整数。如果不满足这个条件,可以认为的加上若干零值, 使之达到这一要求。将 N=2L 的序列 x(n)(n=0,1,,N-1)先按 n 的奇偶分成两组:x(2r)=x1(r)x(2r+1)=x2(r)r=0,1,N/2-1则其 DFT 可化为两个部分:nkNN1 12 rkN 1 22X (k ) =n=0x(n)WN =r = 0x(2r)WN+( 2 r +1) kr = 0x(2r + 1)WNN 1N 122
10、= x1 (r )WN+ WN x2 (r )WNrkkrkr = 02r = 02k= X1 (k ) + WN X 2 (k ), k = 0,1N 1这里 X1(k)和 X2(k)都是 N/2 点的 DFT,而 X(k)却有 N 个点,所以求 X(k)可分为前 N/2 和后N/2 点:k前一部分 X ( k ) =X1 ( k ) + WN X2 ( k )后一部 N N( N +k ) N分X 2 +k =X1 2 +k + WN 2X2 2 +k k= X1 (k ) WN X 2 (k )只要求出 k=0,1,2,N/2-1 区间内各点的 X1(k)和 X2(k),即可求出 k=0
11、,1,2,N-1 区间全部 X(k)值,这样就大大节省了计算量。Matlab 提供一个称为ff t 函数来计算x(n) 的DFT ,ff t 函数是用机器语言,而不是以 Matlab 指令写成的,因此,它的计算速度非常快.如果N 是2 的整数幂,就采用基22FF T 算法, 如果N 不是2 的某个幂,就采用较慢的分裂基算法,如果N 是某个素数,那么ff t 函数就蜕化 为原始的DF T 算法.对于刚才的例子,用FFT实现如下:clear all; close all; clc; N=32; n=0:N-1;xn=cos(pi*n/6); y=fft(xn,N); figure(1); stem
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 的数字信号处理的模拟与仿真 数字信号 处理 模拟 仿真
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5192538.html