资源描述
武 汉 学 院
实 验 报 告
实 验课名称: 数字信号处理
学 生 姓 名: 王要山
专 业 班 级: 信息1302
学 号: 13071089
开 课 时 间: 2016.3.4
教务处 制
《数字信号处理》实验报告
实验序号:02 实验项目名称:离散时间信号与系统
学 号
13071089
姓 名
王要山
专业、班级
软件工程(电子信息工程)1302
实验地点
计—201
指导教师
李承
时 间
2016.4.1
一、实验目的及要求
通过本次实验,熟练掌握运用Matlab进行离散时间信号的表示,加深对常用离散信号的理解;并且能够独立运行,完整的完成实验内容。
二、实验设备(环境)及要求
CPU :P4 3.30GHZ
内存:3.40G
操作系统:WINDOWS XP 版本2002 SP3
软件:MATLAB R2009b
三、 实验原理
1. 单位抽样序列
在MATLAB中可以利用zeros()函数实现。
或
如果在时间轴上延迟了k个单位,得到即:
2. 单位阶跃序列
在MATLAB中可以利用ones()函数实现。
3. 正弦序列
在MATLAB中
4. 复正弦序列
在MATLAB中
5. 实指数序列
在MATLAB中
四、实验步骤
1. 产生64点的单位抽样序列δ(n)、64点并移位20位的单位抽样序列δ(n-20)
程序:
N=64;
x=zeros(1,N);
x(1)=1;
n=0:N-1;
stem(n,x)
figure(1);
stem(n,x);xlabel('单位抽样序列')
axis([-1 65 0 1.1])
N=64;
k=20;
x=zeros(1,N);
x(k+1)=1;
n=0:N-1;
figure(2);
stem(n,x);xlabel('移位20位的单位抽样序列')
axis([-1 65 0 1.1])
实验结果:
2. 产生任意序列f(n)=8.0δ(n)+3.4δ(n-1)+1.8δ(n-2) +5.6δ(n-3)+ 2.9δ(n-4)+0.7δ(n-5)。
程序:
N=8;
x=zeros(1,N);
x(1)=8.0;
x(2)=3.4;
x(3)=1.8;
x(4)=5.6;
x(5)=2.9;
x(6)=0.7;
n=0:N-1;
stem(n,x);xlabel('任意序列f(n)')
axis([-1 8 0 8.2])
实验结果:
3. 产生N=32点的单位阶跃序列及斜率为3,n0=4,点数为32点的斜坡序列g(n)=B(n-n0)
程序:
N=32;
x=ones(1,N);
n=0:N-1;
stem(n,x);xlabel('单位阶跃序列')
axis([-1 32 0 1.1])
clear all;
N=32;
k=4;
B=3;
t0=1;
x=[zeros(1,k) ones(1,N-k)];
for i=1:N
x(i)=B*x(i)*(i-k);
end
n=0:N-1;
stem(n,x);xlabel('斜坡序列')
axis([-1 32 0 90])
4. 产生幅度A=3,频率f=100,初始相位=1.2,点数为32点的正弦序列。
程序:
clear all;
N=32;
A=3;
f=100;
fai=1.2;
n=0:N-1;
x=A*sin(2*pi*f*(n/N)+fai);
stem(n,x);xlabel('正弦序列')
axis([-1 32 -3.2 3.2])
实验结果:
5. 产生幅度A=3,a=0.7,点数为32点的实指数序列。
程序:
clear all;
N=32;
A=3;
a=0.7;
n=0:N-1;
x=A*a.^n;
stem(n,x);xlabel('实指数序列')
axis([-1 32 0 3.2])
实验结果:
五、实验要求
(1)熟悉MATLAB软件,预先阅读前面章节中有关预备知识。
(2)根据实验内容,编写实验程序,上机运行;并进行结果验证,如有不同,查找原因,解决问题。
六、实验报告要求
(1)说明实验步骤;
(2)给出原程序;
(3)给出运行结果;
(4)说明实验上机体会。
教师评语:
签名: 日期:
成绩
40 / 40
《数字信号处理》实验报告
实验序号:04 实验项目名称:相关的MATLAB命令及应用
学 号
13071089
姓 名
王要山
专业、班级
电子信息工程方向
实验地点
计—302
指导教师
李承
时 间
2016.4.15
一、 实验目的
1. 学会运用MATLAB求离散时间信号的z变换和z反变换;
2. 掌握z变换与z反变换的的MATLAB实现;
二、实验内容
编制程序完成相关z变换与z反变换。
三、实验原理
1.利用MATLAB实现z域的部分分式展开式
MATLAB的信号处理工具箱提供了一个对进行部分分式展开的函数residuez(),其调用形式为:
[r,p,k]=residuez(num,den)
式中,num和den分别为的分子多项式和分母多项式的系数向量,为部分分式的系数向量,p为极点向量,k为多项式的系数向量。
2.Z变换和Z反变换
MATLAB的符号数学工具箱提供了计算Z变换的函数ztrans()和Z反变换的函数iztrans(),其调用形式为
上面两式中,右端的和分别为时域表示式和域表示式的符号表示,可应用函数sym来实现,其调用格式为
式中,A为待分析的表示式的字符串,S为符号化的数字或变量。
例1 求指数序列的Z变换;
解:(1)Z变换的MATLAB程序
% Z变换的程序实现
f=sym('a^n');
F=ztrans(f)
程序运行结果为:
z/a/(z/a-1)
可以用simplify( )化简得到 :
-z/(-z+a)
例2 求的Z反变换。
解 Z反变换的MATLAB程序
% Z反变换实现程序
F=sym('a*z/(z-a)^2');
f=iztrans(F)
程序运行结果为
f =
a^n*n
四、实验步骤
题1、试用ztrans函数求下列函数的z变换。
(1);
MATLAB程序:
x=sym('a^n*cos(pi*n)');
Z=ztrans(x);
simplify(Z)
ans =
z/(a + z)
(2)。
MATLAB程序:
x=sym('2^(n-1)-(-2)^(n-1)');
Z=ztrans(x);
simplify(Z)
ans =
4/(z^2 - 4) + 1
题2、 试用iztrans函数求下列函数的z反变换。
(1)
MATLAB程序:
syms z
F=(8*z-19)/(z^2-5*z+6);
iztrans(F)
ans =
(3*2^n)/2 + (5*3^n)/3 - (19*kroneckerDelta(n, 0))/6
反变换后的函数形式为:
x(n)=[-19/6δ(n)+ (3*2^n)/2 + (5*3^n)/3]u(n)
(2)
MATLAB程序:
Z=sym('z*(2*z^2-11*z+12)/(z-1)/(z-2)^3');
x=iztrans(Z);
simplify(x)
ans =
3*2^n - (2^n*n)/4 - (2^n*n^2)/4 – 3
题3、试用MATLAB命令对函数进行部分分式展开。
MATLAB程序为:
b=[18];
a=[18,3,-4,-1];
[R,P,K]=residuez(b,a)
R =
0.3600
0.2400
0.4000
P =
0.5000
-0.3333
-0.3333
K =
[]
运行结果可知,p2=p3,表示系统有一个二重极点。所以,X(z)的部分展开式为:x(n)=[0.36*0.5^n+0.24*(-0.3333)^n+0.4(n+1)(-0.3333)^n]u(n)
五、实验要求
(1)MATLAB编程(存成m文件形式)完成z变换与z反变换;
(2)运行程序,给出运行结果;
(3)写出z变换或z反变换结果。
六、教师评语:
签名: 日期:
成绩
《 数字信号处理 》实验报告
实验序号:08 实验项目名称:线性卷积与圆周(循环)卷积的计算
学 号
13071089
姓 名
王要山
专业、班级
信息1302
实验地点
计算机-201
指导教师
李承
时 间
2016-5-13
一、 实验目的及要求
(1) 进一步加深对线性卷积的理解和分析能力;
(2) 通过编程,上机调试程序,进一步增强使用计算机解决问题的能力;
(3) 掌握线性卷积与圆周卷积软件实现的方法,并验证二者之间的关系。
二、 实验设备(环境)及要求
三、 了解MATLAB软件基本操作,熟悉基本计算和绘图功能。
2配有windows XP及上机操作系统,安装MATLAB软件的完整版
四、 环境要求
使用电脑硬件设备,在MATLAB工作环境。
五、 实验内容与步骤
对于无限长序列不能用MATLAB直接计算线性卷积,在MATLAB内部只提供了一个conv函数计算两个有限长序列的线性卷积。对于循环卷积MATLAB内部没有提供现成的函数,我们可以按照定义式直接编程计算。
题:已知两序列:
编程序求它们的线性卷积yl(n)=h(n)*x(n)和N点的循环卷积yc=[h(n)* x(n)]N,(做圆周卷积时分别取N=8,11,16;),绘出计算结果图,并研究两者之间的关系。
程序代码:
>> clear;
clc;
figure(1);
n1=0:11;
x=0.8.^n1;
n2=0:5;
h=ones(1,6);
y=conv(x,h);
ny=[0:1:length(y)-1];
subplot(311);stem(n1,x,'.');axis([0 10 0 1]);title('序列x(n)');grid;
subplot(312);stem(n2,h,'.');axis([0 10 0 1]);title('序列h(n)');grid;
subplot(313);stem(ny,y,'.');axis([0 10 0 5]);title('线性卷积后的序列');grid;
figure(2);
N=8;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);
z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
subplot(311);stem((0:N-1),y2,'.');axis([0 12 0 7]);title('N=8圆周卷积');grid;
N=11;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);
z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
subplot(312);stem((0:N-1),y2,'.');axis([0 12 0 7]);title('N=11圆周卷积');grid;
N=16;
x1=[x zeros(1,N-length(x))];
h1=[h zeros(1,N-length(h))];
y1=conv(x1,h1);
z1=[zeros(1,N) y1(1:(N-1))];
z2=[y1((N+1):(2*N-1)) zeros(1,N)];
z=z1(1:(2*N-1))+z2(1:(2*N-1))+y1(1:(2*N-1));
y2=z(1:N);
subplot(313);stem((0:N-1),y2,'.');axis([0 12 0 7]);title('N=16圆周卷积');grid;
运行结果:
1. 当有限长序列x(n)和h(n)的长度分别为N1,N2,取N>=max(N1,N2),当N》=N1+N2-1,则线性卷积与圆周卷积相同。
2. 两个有限长序列做L的圆周卷积,需要将两个序列补零,将其扩成长度为L的序列,得到一个新序列,
五、分析与讨论
通过本次实验,发现在实验过程中有很多的细节性问题。引起我的注意。知道了t与sin(t)之间的乘积需要点乘。还有在text(2.5,1.1,'曲线 y2=cos(2{\pi}x)')中的乘积不需要按照计算机里面的规则用*。
成绩
《 数字信号处理 》实验报告
实验序号:09 实验项目名称:FFT应用与频谱分析
学 号
13071089
姓 名
王要山
专业、班级
电子信息工程方向
实验地点
计—202
指导教师
李承
时 间
2016.5.27
二、 实验目的
(1)学习用FFT对连续信号和时域离散信号进行谱分析的方法;
(2)了解可能出现的分析误差及其原因,以便正确应用FFT;
(3)学习研究信号恢复并进行结果分析。
二、实验内容
(1)对分周期序列进行谱分析。
选择FFT的变换区间N为8和16 两种情况进行频谱分析。分别打印其幅频特性曲线。 并进行对比、分析和讨论。
(2)对周期序列进行谱分析。
选择FFT的变换区间N为8和16 两种情况分别对以上序列进行频谱分析。分别打印其幅频特性曲线。并进行对比、分析和讨论。
(3)对模拟周期信号进行谱分析
选择采样频率,分别选择N=16、32、64 三种情况进行谱分析,打印出其幅频特性,并进行分析和讨论。
(4)连续正弦信号FFT分析
Ø 用Matlab产生正弦波:y=sin20πt;
Ø 采样频率fs=100Hs;
Ø 进行FFT变换(N=128);绘出信号时序图、幅度铺;
Ø 用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图;
Ø 分析采样产生的误差情况。
(5)连续方波信号FFT分析
Ø 用Matlab产生方波:
;
Ø 采样频率fs=10Hs;
Ø 进行FFT变换(点数自定),绘出信号时序图、幅度铺;
Ø 用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图;
Ø 分析采样产生的误差情况。
三、实验原理
用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现的频率分辨率是,因此要求。可以根据此式选择FFT的变换区间N。误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
四、实验步骤
MATLAB程序:
(1)、
x1n=[ones(1,4)];
M=8;
xa=1:(M/2);
xb=(M/2):-1:1;
x2n=[xa,xb];
x3n=[xb,xa];
X1k8=fft(x1n,8);
X2k8=fft(x2n,8);
X3k8=fft(x3n,8);
X1k16=fft(x1n,16);
X2k16=fft(x2n,16);
X3k16=fft(x3n,16);
stem(abs(X1k8),'r');hold on
stem(abs(X2k8),'y');hold on
stem(abs(X3k8),'b');hold off
title('8点DFT');xlabel('ω/π');ylabel('幅度');
legend('8点DFT[x1(n)])','8点DFT[x2(n)]','8点DFT[x3(n)]');
figure
stem(abs(X1k16),'r');hold on
stem(abs(X2k16),'y');hold on
stem(abs(X3k16),'b');hold off
title('16点DFT');xlabel('ω/π');ylabel('幅度');
legend('16点DFT[x1(n)])','16点DFT[x2(n)]','16点DFT[x3(n)]')
(2)、
N=8;n=0:N-1;
x4n=cos(pi*n/4) ;
x5n=cos(pi*n/4)+cos(pi*n/8) ;
X4k8=fft(x4n) ;
X5k8=fft(x5n) ;
N=16;n=0:N -1;
X4k16=fft(x4n) ;
X5k16=fft(x5n) ;
stem(abs(X4k8),'r');hold on
stem(abs(X5k8),'b');hold off
title('8点DFT');xlabel('ω/π');ylabel('幅度');
legend('8点DFT[x4(n)])','8点DFT[x5(n)]');
figure
stem(abs(X4k16),'r');hold on
stem(abs(X5k16),'r');hold off
title('16点DFT');xlabel('ω/π');ylabel('幅度');
legend('16点DFT[x4(n)])','16点DFT[x5(n)]');
(3)、
Fs=64;T=1/Fs;
N=16;n=0:N-1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X6k16=fft(x6nT);
X6k16=fftshift(X6k16);
Tp=N*T ;F=1/Tp;
k= 0:N-1;fk=k*F;
subplot(3,1,1);stem(fk,abs(X6k16),'.');
box on
title('(6a) 16点|DFT[x_6(nT)]|'); xlabel('f(Hz)');
ylabel('幅度');
axis( [0,N*F-1, 0,1.2*max(abs(X6k16))])
N=32 ;n=0:N-1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T) ;
X6k32=fft(x6nT) ;
X6k32=fftshift(X6k32) ;
Tp=N*T;F=1/Tp;
k=0:N-1;fk=k*F;
subplot(3,1,2);stem(fk,abs(X6k32),'.');
title('(6b) 32点|DFT [x_6(nT) ]|');
xlabel('f(Hz)') ;ylabel('幅度');
axis( [0, N*F-1,0, 1.2*max(abs(X6k32))])
N=64;n=0:N -1;
x6nT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T) ;
X6k64=fft(x6nT) ;
X6k64=fftshift(X6k64) ;
Tp=N*T ;F=1/Tp;
k= 0:N-1;fk=k*F;
subplot(3,1,3);stem(fk,abs(X6k64),'.');
title('(6a) 64点|DFT[x_6(nT) ]|');
xlabel('f(Hz)') ;ylabel('幅度');
axis([0,N*F-1,0, 1.2*max(abs(X6k64))])
(4)、
fs=100;%设定采样频率
N=128;
n=0:N-1;
t=n/fs;
f0=10;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f0*t);
figure;
plot(t,x);%作正弦信号的时域波形
xlabel('t');
ylabel('y');
title('正弦信号y=2*pi*10t时域波形');
grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
figure;
plot(f,mag);%做频谱图
axis([0,100,0,80]);
xlabel('频率(Hz)');
ylabel('幅值');
title('正弦信号y=2*pi*10t幅频谱图N=128');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure;
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的正弦信号波形');
grid;
(5)、
fs=10;%设定采样频率
t=-5:0.1:5;
x=rectpuls(t,2);
figure;
plot(t,x);%作矩形波的时域波形
xlabel('t');
ylabel('y');
title('矩形波时域波形')
grid;
%进行FFT变换并做频谱图
y=fft(x);%进行fft变换
mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换
figure;
plot(f,mag);%做频谱图
xlabel('频率(Hz)');
ylabel('幅值');
title('矩形波幅频谱图');
grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure;
plot(ti,magx);
xlabel('t');
ylabel('y');
title('通过IFFT转换的矩形波波形');
grid;
五、实验要求
(1) 完成各个实验任务和要求。
(2) 写出程序和运行结果。
(3) 简要回答思考题。
六、教师评语:
签名: 日期:
成绩
展开阅读全文