数字信号处理实验报告
学院:
班级: 姓名: 学号:
西安交通大学实验报告
课程 数字信号处理 实验日期 年 月 日
专业班号 交报告日期 年 月 日 姓名 学号 共 21 页 第 1 页 实验1 常见离散信号的MATLAB 产生和图形显示 一、实验内容
1.编制程序产生上诉5种信号(长度可自行输入确定),并绘出其图形。 2.讨论复指数序列的性质。
二、实验结果及源代码
1.单位抽样序列
(n)
10n0 n0 在MATLAB中可以利用ZEROS()函数实现。
xzeros(1,N);
x(1)1;
如果(n)在时间轴上延迟了K个单位,得到(nk)即:
1nk (nk)
0n0
(1)单位抽样序列
源程序: n1=-10; n2=10;
k=0; %延时k个单位 n=n1:n2;
N=length(n);%N为序列长度 nk=abs(k-n1)+1; x=zeros(1,N); x(nk)=1;
stem(n,x,'fill');
axis([n1,n2,0,1.1*max(x)]); title('单位脉冲序列'); xlabel('时间'); ylabel('幅度');
1
实验结果:
(2)延时后的单位脉冲序列 源程序:
n1=-10; n2=10;
k=input('k='); %延时k个单位 n=n1:n2;
N=length(n);%N为序列长度 nk=abs(k-n1)+1; x=zeros(1,N); x(nk)=1;
stem(n,x,'fill');
axis([n1,n2,0,1.1*max(x)]); title('单位脉冲序列'); xlabel('时间'); ylabel('幅度');
实验结果(延时k=5):
2
2.单位阶跃序列
n01u(n)
0n0在MATLAB中可以利用ones()函数实现。 源代码:
n=-10:15;
u=[zeros(1,10) ones(1,16)];%产生单位阶跃序列
stem(n,u,'fill'); xlabel('时间'); ylabel('幅度'); title('单位阶跃序列'); axis([-10 15 0 1.2]); 实验结果:
xones(1,N);
3
3.正弦序列
x(n)Asin(2fn/Fs)
在MATLAB中
n0:N1
xA*sin(2*pi*f*n/Fsfai) 源程序:
N=41; %序列点数 A=1; %各项附初值 Fs=3;
f=0.1; fai=pi/3; n=0:N-1;
x=A*sin(2*pi*f*n/Fs + fai); stem(n,x);
axis([0 N -1.5*A 1.5*A]); grid on;
title('正弦信号'); xlabel('时间'); ylabel('幅度');
实验结果:
4.复正弦序列
x(n)ejn
在MATLAB中
4
n0:N1xexp(j*w*n)
源程序:
N=36; %序列点数 w=pi/6; a=1;
n=0:N-1; %产生复正弦序列 x=a*exp(w*1i*n); subplot(2,1,1);
stem(n,real(x),'fill'); xlabel('时间'); ylabel('幅度');
title('复正弦序列实部'); subplot(2,1,2);
stem(n,imag(x),'fill'); xlabel('时间'); ylabel('幅度');
title('复正弦序列虚部');
实验结果:
5.指数序列
x(n)an
在MATLAB中
n0:N1
xa.^n 源程序:
5
n=0:35; a=input('a='); K=1; x=K*a.^n;
stem(n,x,'fill'); xlabel('时间'); ylabel('幅度'); title('指数序列');
实验结果(a=1.1):
6.讨论复指数序列的性质。 复指数序列的公式为: x(n)e(j0)n
x(n)ej
jn eneo en(cos0njsin0n)
所以由复指数序列的公式可得到以下性质:
1.当σ=0时,它的实部和虚部都是正弦序列。
2.当|σ|>1时,它的实部和虚部都是指数增长的正弦序列。 3.当|σ|﹤1时,它的实部和虚部都是指数衰减的正弦序列。
6
实验2 离散系统的差分方程、冲激响应和卷积分析 一、实验目的
加深对离散系统的差分方程、冲激响应和卷积分析方法的理解。
二、实验原理
离散系统
x[n]y[n]Discrete-time system
其输入、输出关系可用以下差分方程描述:
dk0Nky[nk]pkx[nk]
k0M输入信号分解为单位脉冲序列,x[n]mx[m][nm]。记系统单位脉冲响应
[n]h[n],则系统响应为如下的卷积计算式:
y[n]x[n]h[n]mx[m]h[nm]
当dk0,k1,2,...N时,h[n]是有限长度的(n:[0,M]),称系统为FIR系统;反之, 称系统为IIR系统。
在MATLAB中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数 y=Conv(x,h)计算卷积。
三、实验内容
编制程序求解下列两个系统的单位冲激响应和阶跃响应,并绘出其图形。 y[n]0.6y[n1]0.09y[n2]x[n]x[n1]
y[n]0.5{x[n1]x[n2]x[n3]x[n4]x[n5]} 实验要求:给出理论计算结果和程序计算结果并讨论。
四、实验源程序及实验结果
1.y[n]0.6y[n1]0.09y[n2]x[n]x[n1] 源代码:
a=[1,0.6,0.09];%差分方程系数
7
b=[1,-1,0];
N=input('N=');%输入点数N n=0:N-1;
x1=[n==0];%生成单位脉冲序列
y1=filter(b,a,x1);%利用filter函数求解差分方程 subplot(2,1,1); stem(n,y1);
title('系统单位冲击响应'); x2=[n>=0];%生成单位阶跃序列并绘图 y2=filter(b,a,x2); subplot(2,1,2); stem(n,y2);
title('系统单位阶跃响应'); 实验结果(N=16):
2.y[n]0.5{x[n1]x[n2]x[n3]x[n4]x[n5]} 源代码:
a=[1,0,0,0,0,0,0];
b=[0,0.5,0.5,0.5,0.5,0.5,0.5]; N=input('N=');%输入点数N n=0:N-1;
x1=[n==0];%生成单位脉冲序列
y1=filter(b,a,x1);%利用filter函数求解差分方程 subplot(2,1,1); stem(n,y1);
title('系统单位冲击响应'); x2=[n>=0];%生成单位阶跃序列并绘图 y2=filter(b,a,x2); subplot(2,1,2);
8
stem(n,y2);
title('系统单位阶跃响应'); 实验结果(N=16):
9
实验3 离散系统的频率响应分析和零、极点分布 一、实验目的
加深对离散系统的频率响应分析和零、极点分布的概念理解。
二、实验原理
离散系统的时域方程为
NM
dk0ky(nk)pkx(nk)
k0 其变换域分析方法如下: 频域 y[n]x[n]h[n]mx[m]h[nm]Y(e)X(e)H(e)
jjjjjjMp(e)ppe...pe1M 系统的频率响应为 H(e) 0jjjND(e)d0d1e...dNej Z域 y[n]x[n]h[n]mx[m]h[nm]Y(z)X(z)H(z)
1Mp(z)ppz...pz1M 系统的转移函数为 H(z)0D(z)d0d1z1...dNzN 分解因式
H(z)i0NpkzdkzMiiK1(1iz) ,其中和称为零、极点。 i1ii1(1iz)i1NMi0 在MATLAB中,可以用函数[z,p,K]=tf2zp(num,den)求得有理分式形式的系 统转移函数的零、极点,用函数zplane(z,p)绘出零、极点分布图;也可以用函 数zplane(num,den)直接绘出有理分式形式的系统转移函数的零、极点分布图。
另外,在MATLAB中,可以用函数 [r,p,k]=residuez(num,den)完成部分分 式展开计算;可以用函数sos=zp2sos(z,p,K)完成将高阶系统分解为2阶系统的 串联。
三、实验内容
求系统
0.05280.797z10.1295z20.1295z30.797z40.0528z5
H(z)11.8007z12.4947z21.8821z30.9537z40.2336z5
的零、极点和幅度频率响应。
实验要求:编程实现系统参数输入,绘出幅度频率响应曲线和零、极点分布图。
四、实验源程序及实验结果
源代码:
b=[1,-1.8007,2.4947,-1.8821,0.9537,-0.2336];%系统参数 a=[0.0528,0.797,0.1295,0.1295,0.797,0.0528];
10
[H,w]=freqz(b,a,200,'whole');%求离散系统频响特性 magH=abs(H); %计算幅度 phaH=angle(H); %计算相角 subplot(3,1,1);
plot(w/pi,magH);%幅频响应
grid on;xlabel('Frequency:pi'); ylabel('Magnitude'); title('幅频响应'); subplot(3,1,2);
plot(w/pi,phaH/pi);%相频响应
grid on;xlabel('Frequency:pi');ylabel('Phase:pi'); title('相频响应'); subplot(3,1,3); zplane(b,a);%零极点图 axis([-5 5 -1.5 1.5]); grid on;
title('零—极点分布图');
实验结果:
11
实验4 离散信号的DTFT和DFT
一、实验目的
加深对离散信号的DTFT和DFT的及其相互关系的理解。
二、实验原理
序列x[n] 的DTFT定义:
X(ejω)x[n]ejnω
n N点序列x[n] 的DFT定义:
X[k]X(eN1n0j2kN)x[n]en0N1j2knN
knx[n]WN 在MATLAB中,对形式为
p(ej)p0p1ej...pMejM的DTDFT可以
X(e)D(ej)d0d1ej...dNejNj 用函数H=Freqz(num,den,w)计算;可以用函数U=fft(u,N)和u=ifft(U,N)
计算N点序列的DFT正、反变换。
三、实验内容
分别计算16点序列 x(n)cos5绘出幅度谱图形, n,0n15的16点和32点DFT,
16 并绘出该序列的DTFT图形。
实验要求:讨论DTFT和DFT之间的相互关系。说明实验产生的现象的原因。
四、实验源程序及实验结果
源程序:
n=0:15;%生成16点序列 x=cos(5/16*pi*n); %绘制16点序列
subplot(2,2,1); stem(n,x);
title('16点序列x(n)'); %绘制x(n)的16点DFT subplot(2,2,2); DFT16=fft(x,16); stem(n,abs(DFT16));
xlabel('频率');ylabel('幅度');title('16点DFT图'); %绘制想x(n)的32点DFT subplot(2,2,3);
12
DFT32=fft(x,32); L=0:31;
stem(L,abs(DFT32));
xlabel('频率');ylabel('幅度');title('32点DFT图'); %绘制x(n)的DTFT subplot(2,2,4); dtft=fft(x,2000); L=0:1999;
plot(L*2*pi/2000,abs(dtft));
xlabel('频率');ylabel('幅度');title('DTFT图');
实验结果:
DTFT与DFT的关系:
DTFT是对任意序列的离散时间傅里叶变换,它的频谱是一个连续函数;而DFT是把有
限长序列作为周期序列的一个周期,对有限长序列的傅里叶分析,DFT的特点是无论在时域还是频域都是有限长序列。并且DFT可看作是DTFT在区间[0,2π]上的N点等间隔采样,其采样间隔为w=2*π/N。
13
实验5 FFT算法的应用
一、实验目的
加深对离散信号的DFT的理解及其FFT算法的运用。
二、实验原理
N点序列的DFT和IDFT变换定义式如下:
N1n0X[k]x[n]W 利用旋转因子WknNknN1N1kn, x[n]X[k]WN
Nk0ej2nkN具有周期性,可以得到快速算法(FFT)。
在MATLAB中,可以用函数X=fft(x,N)和x=ifft(X,N)计算N点序列的DFT 正、
反变换。
三、实验内容
(1)2N点实数序列
212cos(7n)cos(19n),n0,1,2,...,2N1 x(n)N2N0,其它n N=。用一个点的复数FFT程序,一次算出X(k)DFT[x(n)]2N,并绘出X(k)。 (2)已知某序列x(n)在单位圆上的N=等分样点的Z变换为 X(zk)X(k)1,k0,1,2,...,63 j2k/N10.6e_ 用N点IFFT程序计算x(n)IDFT[X(k)],绘出x(n)。
实验要求:利用MATLAB编程完成计算,绘出相应图形。并与理论计算相比较,说明实 验结果的原因。
_四、实验源程序及实验结果
(1)源代码: N=;
for n=1:2*N %生成2N点序列
x(n)=cos(2*pi*7*(n-1)/N)+1/2*cos(2*pi*19*(n-1)/N); end
for r=1:N %将序列按奇偶分组 x1(r)=x(2*r-1); x2(r)=x(2*r); end
x1_fft=fft(x1,N);%计算子序列的DFT x2_fft=fft(x2,N);
14
for k=1:N %利用迭代公式计算DFT
X(k)=x1_fft(k)+x2_fft(k)*exp(-1i*pi*(k-1)/N); X(k+N)=x1_fft(k)-x2_fft(k)*exp(-1i*pi*(k-1)/N); end M=0:2*N-1; stem(M,X);
xlabel('k');ylabel('|X(k)|');title('|X(k)|');
实验结果:
(2)源代码: N=;
for k=1:N %生成X(k)序列
X(k)=1/(1-0.6*exp(-1j*2*pi*(k-1)/N)); end
x=ifft(X,N); %计算x(n)=IDFT[X(k)]; n=0:N-1; stem(n,x);
xlabel('n');ylabel('x(n)');title('x(n)');
实验结果:
15
16
实验6 基于MATLAB的数字滤波器设计
一、实验目的
加深对数字滤波器的常用指标和设计过程的理解。
二、实验原理
低通滤波器的常用指标:
1PG(e)1P,forPG(e)S,forSjj
1PG(ej)1P
SPsPS通带边缘频率:P,阻带边缘频率:S ,通带起伏:
P,通带峰值起伏:
PassbandStopbandTransition bandp20log10(1p)[dB],阻带起伏:s,
最小阻带衰减:S20log10(s)[dB]。
Fig 7.1 Typical magnitudespecification for a digital LPF 数字滤波器有IIR和FIR两种类型,它们的特点和设计方法不同。
在MATLAB中,可以用[b,a]=butter(N,Wn)等函数辅助设计IIR数字滤波器, 也可以用b=fir1(N,Wn,’ftype’) 等函数辅助设计FIR数字滤波器。
三、实验内容
利用MATLAB编程设计一个数字带通滤波器,指标要求如下:
通带边缘频率:P10.4,P20.7,通带峰值起伏:p1[dB]。 阻带边缘频率:S10.3,S20.8,最小阻带衰减:S40[dB]。
分别用IIR和FIR两种数字滤波器类型进行设计。
实验要求:给出IIR数字滤波器参数和FIR数字滤波器的冲激响应,绘出它们的幅度和 相位频响曲线,讨论它们各自的实现形式和特点。
四、实验源程序及实验结果
1、IIR数字滤波器类型进行设计
幅度和相位频响曲线源代码:
wp1=0.4*pi;wp2=0.6*pi;%通带边缘频率 ws1=0.3*pi;ws2=0.7*pi;%阻带边缘频率
[N,wn]=buttord([wp1/pi,wp2/pi],[ws1/pi,ws2/pi],1,40);%归一化处理 [b,a]=butter(N,wn);
[H,w]=freqz(b,a,200,'whole'); magH=abs(H(1:101)); phaH=angle(H(1:101));
17
w=w(1:101); subplot(2,1,1);
plot(w/pi,magH);grid on;
xlabel('频率');ylabel('幅度');title('幅频特性图'); subplot(2,1,2);
plot(w/pi,phaH/pi);grid on;
xlabel('频率');ylabel('相位');title('相位特性图'); 程序运行结果:
求冲激响应程序源代码为:
wp1=0.4*pi;wp2=0.6*pi; ws1=0.3*pi;ws2=0.7*pi;
[N,wn]=buttord([wp1/pi,wp2/pi],[ws1/pi,ws2/pi],1,40); [b,a]=butter(N,wn);
hn=impz(b,a,41) ;%求冲激响应 n=0:40; stem(n,hn);
title('IIR数字滤波器冲激响应'); 程序运行结果:
18
2、FIR数字滤波器类型进行设计 幅度和相位频响曲线源代码:
wp=[0.4,0.6];ws=[0.3,0.7]; dw=wp(1)-ws(1);
N=ceil(pi*2/dw);%计算滤波器阶数 wn=(wp+ws)/2;%计算滤波器截止频率 b=fir1(N,wn,hann(N+1)); [H,W]=freqz(b,1,100); subplot(2,1,1); plot(W/pi,abs(H));
xlabel('频率');ylabel('幅度');title('幅频特性'); subplot(2,1,2);
plot(W/pi,angle(H)/pi);
xlabel('频率');ylabel('相位');title('相位特性图');
程序运行结果:
19
求冲激响应程序源代码为:
wp=[0.4,0.6];ws=[0.3,0.7]; dw=wp(1)-ws(1);
N=ceil(pi*2/dw);%计算滤波器阶数 wn=(wp+ws)/2;%计算滤波器截止频率 b=fir1(N,wn,hann(N+1)); hn=impz(b,1,71) ;%求冲激响应 n=0:70; stem(n,hn);
title('FIR数字滤波器冲激响应');
程序运行结果:
滤波器设计总结:
FIR和IIR数字滤波器的比较总结
FIR滤波器 严格的线性相位结构 h(n)有限长 极点固定在原点 滤波器阶次较高 一般采用非递归结构 可设计各种幅频特性和相频特性,常借助于计算机进行设计,并可用FFT计算
IIR滤波器 非线性相位 h(n)无限长 极点位于z平面任意位置 滤波器阶次较低 递归结构 用模拟滤波器设计,用于设计规格化的选频滤波器(如低通、高通、带通、带阻),不能用FFT进行计算 20
实验总结
通过本次实验加深对常用离散信号的理解,掌握了使用MATLAB产生常用离散信号的方法;加深对离散系统的差分方程、单位脉冲响应和卷积分析方法的理解,掌握应用MATLAB中函数y=Filter(p,d,x) 求解差分方程的方法;加深对离散系统的频率响应分析和零、极点分布的概念理解,掌握了使用MATLAB中函数zplane(z,p)绘出零、极点分布图和函数zplane(num,den)直接绘出有理分式形式的系统转移函数的零、极点分布图;加深对离散信号的DTFT和DFT的及其相互关系的理解,掌握了使用MATLAB中函数H=Freqz(num,den,w)计算序列的DTFT和函数U=fft(u,N)和u=ifft(U,N)计算N点序列的DFT正、反变换;加深对离散信号的DFT的理解及其FFT算法的运用,掌握了使用MATLAB函数X=fft(x,N)和x=ifft(X,N)计算N点序列的DFT正、反变换的方法;加深对数字滤波器的常用指标和设计过程的理解,掌握了使用MATLAB中用[b,a]=butter(N,Wn)等函数辅助设计IIR数字滤波器和用b=fir1(N,Wn,’ftype’) 等函数辅助设计FIR数字滤波器的方法。
21
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务