数字信号处理实验报告

数字信号处理实验报告
数字信号处理实验报告

《数字信号处理》

—实验指导

数字信号处理课程组

电子与信息工程学院

班级:

姓名:

学号:

综合评定:

成绩:

指导教师签字:

实验一 典型离散信号及其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滤波器的特性。

五、实验总结

总结实验认识、效果、收获及体会、意见、建议。

相关主题
相关文档
最新文档