数字信号处理实验报告
《数字信号处理》
—实验指导
数字信号处理课程组
电子与信息工程学院
班级:
姓名:
学号:
综合评定:
成绩:
指导教师签字:
实验一 典型离散信号及其MATLAB 实现
一、实验目的
1. 掌握MATLAB 语言的基本操作,学习基本的编程功能。 2. 掌握MATLAB 产生常用离散时间信号的编程方法。 3. 掌握MATLAB 计算卷积的方法。
二、实验原理
(一)MATLAB 常用离散时间信号
1. 单位抽样序列:?
??=01)(n δ 00
≠=n n
在MATLAB 中可以利用zeros()函数实现。
;
1)1();,1(==x N zeros x
如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即:?
??=-01)(k n δ 0≠=n k
n
2.单位阶跃序列:???0
1
)(n u
<≥n n 在MATLAB 中可以利用ones()函数实现。);,1(N ones x =
3.正弦序列:)/2sin()(?π+=Fs fn A n x
在MATLAB 中:
)
/***2sin(*1
:0fai Fs n f pi A x N n +=-=
4.复正弦序列:n j e n x ?=)(
在MATLAB 中:
)
**ex p(1
:0n w j x N n =-=
5.指数序列:n
a n x =)(
在MATLAB 中:
n
a x N n .^1
:0=-=
6.y=fliplr(x)——信号的翻转; y=square(x)——产生方波信号
y=sawtooth(x)——产生锯齿波信号; y=sinc(x)——产生sinc 函数信号。 (二)离散时间信号的卷积
由于系统的零状态响应是激励与系统的单位取样响应的卷积,因此卷积运算在离散时间信号处理领域被广泛应用。离散时间信号的卷积定义为
∑∞
-∞
=-=
=m m n h m x n h n x n y )()()(*)()(
可见,离散时间信号的卷积运算是求和运算,因而常称为“卷积和”。
MATLAB 求离散时间信号卷积和的命令为conv ,其语句格式为
y=conv(x,h)
其中,x 与h 表示离散时间信号值的向量;y 为卷积结果。用MA TLAB 进行卷积和运算时,无法实现无限的累加,只能计算时限信号的卷积。
三、实验内容
(一) 离散信号的产生
离散信号的图形显示使用stem 指令。 编写MATLAB 程序,产生下列典型脉冲序列。
(1) 单位脉冲序列:起点n0,终点nf ,在ns 处有一单位脉冲。
(2) 单位阶跃序列:起点n0,终点nf ,在ns 前为0,在ns 处及以后均为
1(n0<=ns<=nf)。 n0=0;nf=10;ns=3;
n2=n0:nf;x2=[(n2-ns)>=0]; %单位阶跃序列
(3) 实指数序列:n
x )75.0(3= (4) 复指数序列:n j e x )7.02.0(4+-=
参考答案: n0=0;nf=10;ns=3;
n1=n0:nf;x1=[(n1-ns)==0]; %单位脉冲序列
n3=n0:nf;x3=(0.75).^n3; %实指数序列
n4=n0:nf;x4=exp((-0.2+0.7j)*n4); %复指数序列
subplot(2,2,1),stem(n1,x1);
subplot(2,2,2),stem(n2,x2);
subplot(2,2,3),stem(n3,x3);
figure
subplot(2,2,1),stem(n4,real(x4));
subplot(2,2,2),stem(n4,imag(x4));
subplot(2,2,3),stem(n4,abs(x4));
subplot(2,2,4),stem(n4,angle(x4));
(二)离散时间信号的卷积
用MATLAB编写卷积运算函数。
function [y,ny]=conv_improve(x,nx,h,nh)
%[x,nx]为第一个信号
%[h,nh]为第二个信号
%conv(x,h)可以实现两个有限长度序列的卷积
ny1=nx(1)+nh(1);
ny2=nx(length(x))+nh(length(h));
ny=[ny1:ny2];
y=conv(x,h);
在命令窗口调用卷积函数。x=[3 4 0 -2 2 3 5]; nx=[-3:3]; h=[1 4 5 6 0 1]; nh=[N:N+5];
N是你的学号最后两位,带入后求结果。
结果为:
四、实验分析
观察实验结果,掌握、分析典型的离散时间信号,分析卷积运算。
五、实验总结
总结实验认识、过程、效果、问题、收获、体会、意见和建议。
实验二离散时间信号和系统以及z变换和z逆变换分析
一、实验目的
1.掌握计算线性时不变系统的冲激响应的方法。
2.理解时域采样的概念及方法。
3.掌握离散时间信号的z变换和z逆变换分析
4.了解离散时间傅里叶变换(DTFT)
二、实验原理
(一)信号采样
采样就是利用周期性抽样脉冲序列p T(t),从连续信号x a(t)中抽取一系列的离散值,得到抽样信号(或称抽样数据信号)即离散时间信号。
(二)线性时不变离散时间系统
线性系统:满足线性叠加原理的系统。若y1(n)和y2(n)分别是输入序列x1(n)和x2(n)的响应,则输入x(n)=ax1(n)+bx2(n)的输出响应为y(n)=ay1(n)+by2(n)。
时不变系统:即系统参数不随时间变化的系统,亦即系统对于输入信号的响应与信号加于系统的时间无关。即满足:若y(n)是x(n)的响应,则y(n-m)是输入x(n-m)的响应,其中m是任意整数。
数字滤波器对单位样本序列()n
δ的响应称为冲激响应,用h(n)表示。线性时不变离散
系统对输入信号x(n)的响应y(n)可用h(n)来表示:∑∞
-∞
=-
=
k
k
n
x
k
h
n
y)
(
)
(
)
(。(三)z变换和逆z变换
序列()n x的z变换定义为:
()()
∑∞
-∞
=-
=
n
n
z n
x
z
X
其中,z是复变量。相应地,单边z变换定义为:
()()
∑∞
=-
=
n
n
z n
x
z
X
MATLAB提供了计算离散时间信号单边z变换的函数ztrans和z反变换函数iztrans:Z=ztrans(x),x=iztrans(z)。上式中的x和Z分别为时域表达式和z域表达式的符号表示,可
通过sym 函数来定义。
如果信号的z 域表示式)(z X 是有理函数,进行z 反变换的另一个方法是对)(z X 进行部分分式展开,然后求各简单分式的z 反变换。设)(z X 的有理分式表示为
)()
(1)(221122110z A z B z a z a z a z b z b z b b z X n
n m m =
++++++++=------ (4-3) MATLAB 信号处理工具箱提供了一个对)(z X 进行部分分式展开的函数residuez ,其语句格式为
[R,P,K]=residuez(B,A)
其中,B ,A 分别表示X(z)的分子与分母多项式的系数向量;R 为部分分式的系数向量;P 为极点向量;K 为多项式的系数。若X(z)为有理真分式,则K 为零。
三、实验内容
(一)线性时不变系统的冲激响应的计算
设系统为y(n)-0.5y(n-1)+0.75y(n-2)=2.5x(n)+2.5x(n-1)+2x(n-2),计算上述系统的冲激响应。
N=40;
num=[2.5 2.5 2]; den=[1 -0.5 0.75]; y=impz(num,den,N); %画出冲激响应 stem(y);
xlabel('时间序号n'); ylabel('振幅'); title('冲激响应'); grid;
(二)时域采样
对连续正弦时间信号x(t)=cos(2πft)进行采样,其中f=13。 t=0:0.0005:1; f=13;
xa=cos(2*pi*f*t);
subplot(2,1,1) plot(t,xa);grid
xlabel('时间,msec'); ylabel('振幅'); title('连续时间信号'); axis([0 1 -1.2 1.2]) subplot(2,1,2); T=0.1; n=0:T:1;
xs=cos(2*pi*f*n); k=0:length(n)-1; stem(k,xs);grid
xlabel('时间序号n'); ylabel('振幅'); title('离散时间信号'); axis([0 length(n)-1 -1.2 1.2])
(三)z 变换和z 反变换
1.用ztrans 函数求函数)()cos()(n u n a n x n
π=的z 变换。 Sym a ,z;
x=sym('a^n*cos(pi*n)'); Z1=ztrans(x); Z=simplify(Z1);
2.用iztrans 函数求函数3
2)
2)(1()
12112()(--+-=z z z z z z X 的z 反变换。 Sym z;
Z=sym('z*(2*z^2-11*z+12)/(z-1)/(z-2)^3'); x=iztrans(Z); simplify(x)
1.观察实验结果,分析系统的线性、时不变性,求出系统的冲激响应。
2.对正弦信号进行采样。
3.求出程序(三)中的(三)z 变换和z 反变换表达式。
4.观察程序(四)离散时间信号的傅里叶变换的结果并分析。
五、实验总结
总结实验认识、过程、效果、问题、收获、体会、意见和建议。
实验三 离散傅里叶变换(DFT )及其快速算法(FFT)
一、实验目的
1.理解DFT 算法,并能用MATLAB 实现DFT 。 2. 加深对FFT 的理解,体会DFT 和FFT 之间的关系。 3.熟悉应用FFT 实现两个序列的线性卷积的方法。
二、实验原理
N 点序列x(n) 的DFT 和IDFT 定义:
若将DFT 变换的定义写成矩阵形式,则得到 X=A ﹒x ,其中DFT 变换矩阵A 为
???
?
??
?
???
???
?=---2)1(111...1.........
(11)
...
11
N N N N N N N W W W W A
可以用函数U=fft(u,N)和u=ifft(U,N)计算N 点序列的DFT 正、反变换。
(一)离散傅里叶变换(DFT )
1.用MATLAB 求N=16的有限序列)4/sin()8/sin()(ππn n n x +=的DFT 结果,并画出结果图。
参考程序如下: N=16;
n=0:1:N-1; %时域采样 xn=sin(n*pi/8)+sin(n*pi/4); k=0:1:N-1; %频域采样 WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^nk; Xk=xn*WNnk; subplot(2,1,1) stem(n,xn); subplot(2,1,2) stem(k,abs(Xk));
2.矩形序列x(n)=R 5(n),求N 分别取8,32时的DFT ,最后绘出结果图形。 function[Xk]=dft(xn,N)
n=[0:1:N-1]; %n 的行向量 k=[0:1:N-1]; %k 的行向量 WN=exp(-j*2*pi/N); %旋转因子
nk=n'*k; %产生一个含nk 值的N 乘N 维矩阵 WNnk=WN.^nk; %DFT 矩阵 Xk=xn*WNnk; %DFT 系数的行向量 调用上面函数解题。
N=8;x=[ones(1,5),zeros(1,N-5)]; n=0:N-1;
X=dft(x,N); %N =8点离散傅立叶变换
magX=abs(X);phaX=angle(X)*180/pi;
k=(0:length(magX)'-1)*N/length(magX);
subplot(2,2,1);stem(n,x);ylabel('x(n)');
subplot(2,2,2);stem(k,magX);axis([0,10,0,5]);ylabel('|X(k)|');
N=32;x=[ones(1,5),zeros(1,N-5)];
n=0:N-1;
X=dft(x,N); %N=32点离散傅立叶变换
magX=abs(X);phaX=angle(X)*180/pi;
k=(0:length(magX)'-1)*N/length(magX);
subplot(2,2,3);stem(n,x);ylabel('x(n)');
subplot(2,2,4);stem(k,magX);axis([0,32,0,5]);ylabel('|x(k)|');
(二)快速傅里叶变换(FFT)
1.已知一个8点的时域非周期离散阶跃信号,n1=0,n2=7,在n0=4前为0,n0以后为1。用N=32点进行FFT变换,作其时域信号图及信号频谱图。
参考程序如下:
n1=0;n0=4;n2=7;N=32;
n=n1:n2;
w=[(n-n0)>=0]; %建立时间信号
subplot(2,1,1);stem(n,w);
i=0:N-1; %频率采样点从0开始
y=fft(w,N); %用快速算法计算DFT
aw=abs(y); %求幅度值
subplot(2,1,2);stem(i,aw);
2.利用FFT计算线性卷积。设x(n)=[2 3 1 4 5];h(n)=[2 1 7 4 5 7 2 3]。计算二者的线性卷积。
参考程序如下:
x=[2 3 1 4 5];
h=[2 1 7 4 5 7 2 3];
Lenx=length(x); %求序列x的长度
Lenh=length(h); %求序列h的长度
N=Lenx+Lenh-1;
Xk=fft(x,N); %计算x序列的DFT
Hk=fft(h,N); %计算h序列的DFT
Yk=Xk.*Hk;
y=ifft(Yk) %求IDFT
stem(y);
xlabel('n');
ylabel('y(n)');
title('x(n)*h(n)');
grid
四.实验分析
认真观察实验结果,记录结果,并画出结果图形,分析实验产生的现象的原因。
五.实验总结
总结实验认识、过程、效果及体会、意见建议。
实验四 IIR 数字滤波器的设计
一、实验目的
1. 熟悉Butterworth 滤波器、Chebyshev 滤波器的频率特性。
2. 掌握双线性变换法及冲激响应不变法设计IIR 数字滤波器的具体设计方法及其原
理,熟悉用双线性变换法及冲激响应不变法设计低通、高通和带通IIR 数字滤波器的计算机编程。
3. 观察双线性变换及冲激响应不变法设计的滤波器的频域特性,了解双线性变换法及
冲激响应不变法的特点。
二、实验原理
(1) 冲激响应不变法
用数字滤波器的单位冲激响应序列h(n)模仿模拟滤波器的冲激响应ha(t),让h(n)正好等于ha(t)的采样值,即
h(n)= ha(nT)
其中T 为采样间隔,如果以Ha(S)及H(z)分别表示ha(t)的拉式变换及h(n)的Z 变换,则
∑∞-∞==+=m a e z m T j s H T Z H sT )
2(1|)(π
(2) 双线性变换法
S 平面与z 平面之间满足以下映射关系:
ωσj re z j s Ts Ts
z z z T s =Ω+=-
+
=
+-=--;,2
121,1121
1
s 平面的虚轴单值地映射于z 平面的单位圆上,s 平面的左半平面完全映射到z 平面的单位圆内。双线性变换不存在混叠问题。 双线性变换时一种非线性变换 )2
)2((T
tg Ω=
ω
,这种非线性引起的幅频特性畸变可通过预畸而得到校正。
三、实验内容
1. 设采样频率fs =4000+sn*100Hz,sn 为学号后两位。用脉冲响应不变法和双线性变换法设计一个三阶巴特沃兹滤波器,其3dB 边界频率为fc =1kHz 。
用MATLAB程序实现如下:
sn=20; %学号后两位
[B,A]=butter(3,2*pi*1000,'s'); %巴特沃思滤波器
%[b,a] = butter(n,Wn,‘s’),n为滤波器的阶数,Wn
%为边界频率,按s的降幂排列
fs =4000+sn*100;
[num1,den1]=impinvar(B,A,fs);%脉冲响应不变法, 4000为采样频率
[h1,w]=freqz(num1,den1); %计算系统频率特性
[B,A]=butter(3,2/0.00025,'s'); %2/0.00025预畸变模拟滤波器边界频率
[num2,den2]=bilinear(B,A,fs);%双线性法
[h2,w]=freqz(num2,den2);
f=w/pi*2000;
plot(f,abs(h1),'-.',f,abs(h2),'-');
grid;xlabel('频率/Hz');ylabel('幅值/dB');
运行该程序,并绘出运行结果。
2.设计一数字高通滤波器,它的通带为400~500Hz,通带内容许有0.5dB的波动,阻带内衰减在小于317Hz的频带内至少为19dB,采样频率为1,000Hz。
MATLAB参考程序如下:
wc=2*1000*tan(2*pi*400/(2*1000));
wt=2*1000*tan(2*pi*317/(2*1000));
[N,wn]=cheb1ord(wc,wt,0.5,19,'s');
[B,A]=cheby1(N,0.5,wn,'high','s');
[num,den]=bilinear(B,A,1000);
[h,w]=freqz(num,den);
f=w/pi*500;
plot(f,20*log10(abs(h)));
axis([0,500,-80,10]);
grid;
xlabel('频率/Hz')
ylabel('幅度/dB')
四、实验分析
分析Butterworth滤波器、Chebyshev滤波器的特性。
五、实验总结
总结实验认识、效果、收获及体会、意见、建议。