基于MATLAB的数字信号处理的模拟与仿真.doc
文本预览下载声明
基于MATLAB 的数字信号处理的模拟与仿真
王靖斌
山东农业大学信息科学与工程学院,山东泰安(371018)
摘 要:本文介绍了数字信号处理中各种算法基本原理,包括Z 变换、DFT 变换及其快速
算法FFT 等信号变换算法和包括IIR 与FIR 数字滤波器的设计与实现,详细论述了利用
MATLAB 软件对信号变换和设计数字滤波器的原理﹑ 步骤和实现方法,并给出了基于
MATLAB 的模拟与仿真。文章最后给出了实验结果,并就其结果做了进一步的解释和说明。
关键词:Z 变换,离散傅立叶变换DFT,数字滤波器,系统结构仿真
1.引言
数字信号处理(Digital Signal Processing,DSP)是一门交叉性的学科,它的理论基础涉
及信息、通信、雷达、航空航天及生物医药等众多学科领域,其成果又为这些学科的发展起
着重要的促进作用。
MATLAB 是数字信号处理技术实现的重要手段。MATLAB 提供了信号处理工具箱,
MATLAB 信号处理工具箱随着信号处理理论与方法的发展而发展,同时又为信号处理理论
与方法的实现与工程应用提供了有效的帮助。本文基于MATLAB 实现了数字信号处理的信
号变换模拟与滤波器设计仿真。
2.信号变换的各种算法
2.1 Z 变换的算法原理及MATLAB 实现
若序列为x(n),则z 变换为
这种变换将离散系统的差分方程转化为简单的代数方程。以一个简单的差分方程为例,
用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)
byplus=conv(b,bxplus)+conv(xic,axplus)
[R,P,K]=residuez(byplus,ayplus)
Mp=abs(P)
Ap=angle(P)*180/pi
N=100;
n=0:N-1;
xn=ones(1,N);
yn=filter(b,a,xn,xic);
plot(n,yn)
运行结果如下:
xic =
-16 16 -7
ayplus =
1 -3 5 -3
byplus =
-12 27 -17 0
R =
-5.5000 - 1.0607i
-5.5000 + 1.0607i
-1.0000
P =
1.0000 + 1.4142i
1.0000 - 1.4142i
1.0000
K =
0
Mp =
1.7321
1.7321
1.0000
Ap =
54.7356
-54.7356
0
输出相应曲线如下图所示
图1.差分方程的输出结果
2.2 离散傅立叶变换(DFT)
2.2.1 DFT 的算法原理及MATLAB 实现
对N 点有限长序列x(n),其正变换为
其逆变换为
下面用MATLAB 实现傅立叶变换及其逆变换:
离散傅立叶变换的MATLAB 实现
function[Xk]=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 实现:
Function[xn]=idft(Xk,N)
xn=在0=k=N-1 间的N 点有限长度序列
Xk=在0=k=N-1 间的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;
figu
显示全部