数字信号处理实验报告 基于MATLAB.docx
《数字信号处理实验报告 基于MATLAB.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验报告 基于MATLAB.docx(59页珍藏版)》请在冰豆网上搜索。
![数字信号处理实验报告 基于MATLAB.docx](https://file1.bdocx.com/fileroot1/2023-6/5/721b018a-a08b-4801-9389-4b1aa134fe07/721b018a-a08b-4801-9389-4b1aa134fe071.gif)
数字信号处理实验报告基于MATLAB
课程名称:
数字信号处理实验
实验地点:
综合楼C407
专业班级:
2014级生物医学工程
姓名:
leifeng
学号:
指导老师:
第一次实验
第一章离散时间信号的时域分析
Q1.1运行程序P1.1,以产生单位样本序列u[n]并显示它
clf;
n=-10:
20;
u=[zeros(1,10)1zeros(1,20)];
stem(n,u);
xlabel('时间序号');ylabel('振幅');
title('单位样本序列');
axis([-102001.2]);
Q1.2命令clf,axis,title,xlabel和ylabel的作用是什么
clf:
清除图形窗口内容;
axis:
规定横纵坐标的范围;
title:
使图像面板上方显示相应的题目名称;
xlable:
定义横坐标的名字;
ylable:
定义纵坐标的名字。
Q1.3修改程序P1.1以产生带有延时11个样本的延迟单位样本序列ud[n],运行修改的程序并且显示产生的序列。
clf;
n=0:
30;
u=[zeros(1,11)1zeros(1,19)];
stem(n,u);
xlabel('时间序号');ylabel('振幅');
title('单位样本序列');
axis([03001.2]);
Q1.5修改程序P1.1,以产生带有超前7个样本的延时单位阶跃序列sd[n]。
运行修改后的程序并显示产生的序列。
clf;
n=-10:
20;
sd=[zeros(1,3)1ones(1,27)];
stem(n,sd);
xlabel('时间序号');ylabel('振幅');
title('单位样本序列');
axis([-102001.2]);
Q1.6运行程序P1.2,以产生复数值的指数序列。
clf;
c=-(1/12)+(pi/6)*i;
K=2;
n=0:
40;
x=K*exp(c*n);
subplot(2,1,1);
stem(n,real(x));
xlabel('时间序号n');ylabel('振幅');
title('实部');
subplot(2,1,2);
stem(n,imag(x));
xlabel('时间序号n');ylabel('振幅');
title('虚部');
Q1.7哪个参数控制该序列的增长或衰减率?
哪个参数控制该序列的振幅?
参数C控制序列增长或衰减率参数K控制序列的振幅
参数C控制该序列的增长或衰减率;参数K控制该序列的振幅。
Q1.8若参数C更改为(1/12)+(pi/6)*i,将会发生什么情况?
Q1.9运算符real和imag的作用是什么?
运算符real和imag的作用分别是提取运算数值x实部和虚部。
Q1.10命令subplot的作用是什么?
subplot(a,b,c),其中a代表图像分a行显示,b代表图像分b列显示,c代表第a行的第b列图像。
Q1.11运行程序P1.3以产生实数值的指数序列
clf;
n=0:
35;a=1.2;K=0.2;
x=K*a.^n;
stem(n,x);
xlabel('时间序号n');ylabel('振幅');
Q1.12哪个参数控制该序列的增长或衰减率?
哪个参数控制该序列的振幅?
参数a控制该序列的增长或者衰减率,参数k控制该序列的振幅。
Q1.13算术运算符^和.^之间的区别是什么?
运算符“^”表示a的指数是n这个序列;运算符”.^”表示a的指数分别是n这个序列中的每一个数字,即对应的每一个元素。
Q1.14若参数a小于1,会发生什么情况?
将参数a更改为0.9,将参数k更改成20,再次运行程序P1.3。
clf;
n=0:
35;a=0.9;K=20;
x=K*a.^n;
stem(n,x);
xlabel('时间序号n');ylabel('振幅');
Q1.16
Q1.15该序列的长度是多少?
怎样才能改变它?
该序列的长度是35;通过改变“n=0:
35”中的“35”这个数字可以改变序列的长度。
Q1.16使用MATLAB命令sum(s.*s)可计算用向量s表示的实数序列s[n]的能量。
试求在习题Q1.11和习题Q1.14中产生的实数值指数序列x[n]的能量。
clf;
n=0:
35;a=0.9;K=20;
x=K*a.^n;
stem(n,x);
sum(s.*s)
xlabel('时间序号n');ylabel('振幅');
结果:
ans=2.3106e+004
clf;
n=0:
35;a=1.2;K=0.2;
x=K*a.^n;
s=stem(n,x);
sum(s.*s)
xlabel('时间序号n');ylabel('振幅');
结果:
ans=2.3719e+004
Q1.17运行程序P1.4,以产生正弦序列并显示它。
n=0:
40;
f=0.1;
phase=0;
A=1.5;
arg=2*pi*f*n-phase;
x=A*cos(arg);
clf;
stem(n,x);
axis([040-22]);
grid;
title('正弦序列');
xlabel('时间序号n');
ylabel('振幅');
axis;
Q1.18该序列的频率是多少?
怎样可以改变它?
哪个参数控制该序列的相位?
哪个参数控制该序列的振幅?
该序列的周期是多少?
该序列的频率是0.1Hz;通过改变f的值可以此正弦序列的频率;参数phase控制该序列的初相位;参数A控制该序列的振幅;该序列的周期是10s。
Q1.19该序列的长度是多少?
怎样可以改变它?
该序列的长度是41个时间单位,通过改变n的参数可以改变该序列的长度。
Q1.21axis的作用axis和grid命令的作用是什么
是规定像显图示的横纵坐标的范围;grid的作用是显示图像上面的“网格”。
Q1.22修改程序P1.4,以产生一个频率为0.9的正弦序列并显示它。
把此序列和习题Q1.17中产生的序列相比较。
修改程序P1.4,以产生一个频率为1.1的正弦序列并显示它。
把此序列与Q1.17中产生的序列相比较,评价你的结果。
该图像与f=0.1时的图像一样,因为该正弦序列的最小周期是2pi的,而当f=0.9与f=1.1时正好是f=0.1的整数倍。
Q1.23修改上述程序,以产生长度为50,频率为0.08,振幅为2.5,相移为90度的一个正弦序列并显示它。
该序列的周期是多少?
n=0:
50;
f=0.08;
phase=pi/2;
A=2.5;
arg=2*pi*f*n-phase;
x=A*cos(arg);
clf;
stem(n,x);
axis([040-33]);
grid;
title('正弦序列');
xlabel('时间序号n');
ylabel('振幅');
axis;
周期为12.5s
Q1.24在程序P1.4中用plot命令代替stem命令,运行新程序。
新图形与Q1.7中产生的图形有什么区别?
原图像是离散的,新图像是连续的,说明plot命令是用平滑的线将各点连接起来产生连续波,而stem命令则是用各点来产生离散波。
Q1.25在程序P1.4中用stairs命令代替stem命令,运行新程序。
新图形与Q1.17和Q1.24中产生的图形有什么区别?
stairs函数是用直线将相应的点连接起来,类似于阶梯状。
Q1.26编写一个MATLAB程序,以产生并显示一个长度为100的随机信号,该信号在区间[-2,2]中均匀分布。
clf;
x=4*rand(1,100)-2;
stem(x);
Q1.27编写一个MATLAB程序,以产生并显示一个长度为75的高斯随机信号,该信号正太分布且均值为0,方差为3
clf;
x=3*randn(1,75);
stem(x);
Q1.36运行程序P1.7以产生扫频正弦序列x[n]
n=0:
100;
a=pi/2/100;
b=0;
arg=a*n.*n+b*n;
x=cos(arg);
clf;
stem(n,x);
axis([0,100,-1.5,1.5]);
title('扫频正弦信号');
xlabel('时间序号n');
ylabel('振幅');
grid;axis;
第二次实验
第二章离散时间系统的时域分析
Q2.1对M=2,生成输入x[n]=s1[n]+s2[n]的输出信号,输入x[n]的那个分量被改离散时间系统抑制?
答:
x[n]被该离散时间系统抑制的分量为信号#2的高频分量
Q2.2.线性时不变系统变为y[n]=0.5(x[n]–x[n–1])后,对输入x[n]=s1[n]+s2[n]的影响是什么?
答:
对于输入的影响是-该系统现在是一个高通滤波器。
它通过高频率的输入分量信号#2,而不是低频分量信号#1.
Q2.3s1[n]和s2[n]频率取其他值结果。
M=4f1=0.1f2=0.9
M=10f1=0.1f2=0.9
Q2.4修改程序P2.1,用一个长度为101、最低频率为0、最高频率为0.5的扫频正弦信号作为输入信号,计算其输出信号。
你能用该系统对扫频信号的响应来解释Q2.1和Q2.2的结果吗?
Q2.7运行程序P2.3,对由加权输入得到的y[n]与在相同权系数下输出y1[n]和y2[n]相加得到的yt[n]进行比较,这两个序列是否相等?
该系统是线性系统吗?
答:
可以看出这加权输入与输出的图像几乎是相差无几的,观察差信号的图像,纵坐标已达到10^(-15),可以看出是相差无几的,所以该系统是线性系统。
Q2.8用三组不同的权系数a和b的值以及三组不同的输入频率重做Q2.7
答:
改动后a和b值及输入频率和相应的运行结果均在下图:
根据图进行分析,加权输入与输出的图像几乎是相差无几的,观察差信号的图像,纵坐标都达到10^(-15)或10^(-14),可以看出是相差无几的。
所以系统为线性系统。
1.
2.
3.
Q2.9初始条件非零时图像:
答:
观察上图,看差信号,振幅达到3,可见加权输入与输出的图像相差较大,不是线性系统。
Q2.11假另一个系统为y[n]=x[n]x[n-1]修改程序P2.3,计算这个系统的输出序列y1[n],y2[n]和y[n]。
比较y[n]和yt[n]。
这两个序列是否相等?
该系统是线性系统吗?
clf;
n=0:
200;
a=2;b=-3;
s1=cos(2*pi*0.1*n);
s2=cos(2*pi*0.4*n);
x=a*s1+b*s2;
x1=[0s10];
x2=[00s1];
x3=[0s20];
x4=[00s2];
x5=[0x0];
x6=[00x];
y1=x1.*x2;
y1=y1(2:
202);
y2=x3.*x4;
y2=y2(2:
202);
y=x5.*x6;
y=y(2:
202);
yt=a*y1-b*y2;
d=y-yt;
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('加权输入:
a\cdotx_{1}[n]+b\cdotx_{2}[n]的输出');
subplot(3,1,2)
plot(n,yt);
ylabel('振幅');
title('加权输入:
a\cdoty_{1}[n]+b\cdoty_{2}[n]');
subplot(3,1,3)
plot(n,d);
xlabel('时间序号n')
ylabel('振幅');
title('差信号');
答:
观察上图,看差信号,可见加权输入与输出的图像相差较大,不是线性系统。
Q2.12运行程序P2.4并比较输出序列y[n]和yd[n-10]。
这两个序列之间有什么关系?
该系统是时不变系统吗?
clf;
n=0:
40;D=10;a=3.0;b=-2;
x=a*cos(2*pi*0.1*n)+b*cos(2*pi*0.4*n);
xd=[zeros(1,D)x];
num=[2.24032.49082.2403];
den=[1-0.40.75];
ic=[00];
y=filter(num,den,x,ic);
yd=filter(num,den,xd,ic);
d=y-yd(1+D:
41+D);
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('输出y[n]');grid;
subplot(3,1,2)
stem(n,yd(1:
41));
ylabel('振幅');
title(['由于延时输入x[n',num2str(D),']的输出']);grid;
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
答:
系统为线性时不变系统,yd为y时移10后的序列。
Q2.17考虑另一个系统:
y[n]=nx[n]+x[n-1]修改程序P2.4,以仿真上面的系统并确定该系统是否为时不变系统。
clf;
n=0:
40;D=10;a=3.0;b=-2;
x=a*cos(2*pi*0.1*n)+b*cos(2*pi*0.4*n);
xd=[zeros(1,D)x];
num=[n1];
den=[10];
y=filter(num,den,x);
yd=filter(num,den,xd);
d=y-yd(1+D:
41+D);
subplot(3,1,1)
stem(n,y);
ylabel('振幅');
title('输出y[n]');grid;
subplot(3,1,2)
stem(n,yd(1:
41));
ylabel('振幅');
title(['由于延时输入x[n',num2str(D),']的输出']);grid;
subplot(3,1,3)
stem(n,d);
xlabel('时间序号n');ylabel('振幅');
title('差值信号');grid;
答:
差值为零系统为线性时不变系统。
第三次实验
Q2.19运行程序P2.5,生成式(2.15)所给离散时间系统的冲激响应。
运行程序:
Q2.20修改程序P2.5,产生以下因果线性时不变系统的冲激响应的前45个样本:
y[n]+0.71y[n-1]-0.46y[n-2]-0.62y[n-3]=0.9x[n]-0.45x[n-1]+0.35[n-2]+0.002x[n-3]
修改程序P2.5,产生如下因果线性时不变系统的冲击响应的前45个样本:
Q2.21利用filter命令编写一个MATLAB程序,生成式(2.17)给出的因果线性时不变系统的冲激响应,计算并画出前40个样本。
把你的结果和Q2.20中得到的结果相比较。
冲击响应前40个样本。
Q2.22编写一个MATLAB程序,生成并画出式(2.11)给出的因果线性时不变系统的阶跃响应。
用该程序计算并画出式(2.15)给出的线性时不变系统的阶跃响应的前40个样本。
阶跃响应前40个样本。
Q2.23运行程序P2.6,计算输出序列y[n]和y2[n]以及差值信号d[n],y[n]和y2[n]相等吗?
答:
可以看出这加权输入与输出的图像几乎是相差无几的,观察差信号的图像,纵坐标已达到10^(-14),可以看出是相差无几的,所以两信号相等。
Q2.25用任意的非零初始向量ic,ic1和ic2来重做Q2.23
ic=[11]
y1=filter(num1,den1,x,ic);
y2=filter(num2,den2,y1,ic);
ic1=[26]
ic2=[74]
不相等
Q2.26修改程序P2.6,将两个二阶系统顺序颠倒并在零初始条件下重复此过程。
两个输出之间有差别吗?
Q2.28运行程序P2.7,对序列h[n]和x[n]求卷积,生成y[n],并用FIR滤波器h[n]对输入x[n]滤波,求得y1[n]。
y[n]和y1[n]有差别吗?
为什么要使用对x[n]补零后得到的x1[n]作为输入来产生y1[n]?
答:
y[n]与y1[n]没有差别。
序列h[n]和x[n]卷积得到的y[n]的长度h[n]和x[n]的长度之和再减去1,即9+7-1=15,而用FIR滤波器h[n]对输入信号x[n]滤波得到的y1[n]长度与x[n]相同,故要对x[n]补零后得到的x1[n](长度扩展为15),滤波后所得输出与y1[n]与y2[n]相同。
Q2.30程序中为什么要使用命令for和end?
For后常为循环语句需执行的的循环次数,end表示循环语句执行完毕
在累加的过程中若|h(k)|的值小于10^(-6)S(K)已经收敛,所以不必再检查之后的值,所以用for,end来进行判断
Q2.32程序P2.8确定的冲激响应所对应的离散时间系统是什么?
运行程序P2.8,生成该冲激响应。
该系统稳定吗?
若|h[K]|不小于10^(-6)且图形显示了一个衰减的冲激响应,用一个较大的N值再次运行程序P2.8。
答:
该系统稳定。
Q2.33考虑用差分方程y[n]=x[n]-4x[n-1]+3x[n-2]+1.7y[n-1]-y[n-2]描述的离散时间系统。
修改程序P2.8,计算并画出上述系统的冲激响应。
该系统稳定吗?
答:
该系统不稳定。
第四次实验
第三章离散时间信号的频域分析
Q3.1在程序P3.1中,计算离散时间傅里叶变换的原始系列是什么?
MATLAB命令pause的作用是什么?
答;原始序列H(jw)=(2+e^(-jw))/(1-0.6e^(-jw))
pause的作用是暂时停止直到用户按任何键。
Q3.2运行程序P3.1,求离散时间傅里叶变换的实部,虚部以及幅度和相位谱。
离散时间福利叶变换是w的周期函数吗?
若是,周期是多少?
描述这四个图形表示的对称性。
答;离散时间傅里叶变换是ω的周期函数,周期为2π。
Q3.3修改程序p3.1,在范围0≤w≤∏内计算如下序列的离散时间傅里叶变换;
并重做习题Q3.2。
讨论你的结果。
你能解释相位谱中的跳变吗?
MATLAB命令unwrap可以移除跳变。
试求移除后的相位谱。
答;因为离散时间傅里叶变换是ω的周期函数,周期为2π,当计算的相位在频率范围[-π,π]之外时,,就会自动加2π发生相位谱跳变。
Q3.6通过加入合适的注释语句和程序语句,修改程序P3.2,对程序生成的图形中的两个轴加标记。
哪个参数控制时移量?
答:
D控制时移量
Q3.7运行修改后的程序并讨论你的结果。
答:
通过观察知道当D增大时,序列的幅度谱不变;相位谱变密,周期缩短。
Q3.8选取不同的时移值重做Q3.7
D=5
D=50
Q3.10通过加入合适的注释语句和程序语句,修改程序P3.2,对程序生成的图形中的两个轴加标记。
哪个参数控制频移量?
答:
w0控制频移量
Q3.11运行修改后的程序并讨论你的结果
答:
在参数w0的控制下,离散时间傅里叶变换的幅度谱和相位谱都随着控制参数左移。
Q3.12选取不同的频移值,重做Q3.11
W0=0.2pi
W0=pi
Q3.14通过加入合适的注释语句和程序语句,修改程序P3.4,对程序生成的图形中的两个轴加标记。
Q3.15运行修改后的程序并讨论你的结果。
答:
时域信号的卷积等于时域信号在频域上的乘积,时域信号的乘积等于时域信号在频域上的卷积。
第五次实验
Q3.23编写一个MATLAB程序,计算并画出长度为N的L点离散傅里叶变换X[k]的值,其中
,然后计算并画出L点离散傅里叶逆变换X[k]。
对不同长度N和不同的离散傅里叶变换长度L,运行程序。
讨论你的结果。
序列;x[n]=[0123456789000000];
序列:
x[n]=[1/31/31/3]
Q3.26在函数circshift中,命令rem的作用是什么?
答:
rem(x,y)是用y对x求余数函数。
Q3.27解释函数circshift怎样实现圆周移位运算。
答:
在输入序列x由M的位置开始被循环移位。
如果M>0,则circshift删除从矢量x最左边开始的M个元素和它们附加在右侧的剩余元素,以获得循环移位序列。
如果如果M<0,则circshift首先通过x的长度来弥补M,即序列x最右边的长度的M样品从x中删除和所附在其余的M个样本的右侧,以获得循环移位序列。
Q3.28在函数circshift中,运算符~=的作用是什么?
答:
~=是不等于的意思。
Q3.29解释函数circonv怎样实现圆周卷积运算。
答:
输入是两个长度都为L的向量x1和x2,它是非常有用的定期延长X2的函数。
让x2p成为x2延长无限长的周期的序列。
从概念上讲,在定点时间上通过时序交换后的x2p的长度L交换x2p序列和x2tr等于1的元素。
然后元素1至L的输出向量y是通过取x1和获得的长度为L的sh矢量之间的内积得到通过循环右移的时间反转向量x2tr。
对于输出样本Y[n]的1≤N≤L时,右循环移位的量为n-1个位置上。
Q3.31运行修改后的程序并验证圆周时移运算
Q3.32通过加入合适的注释语句和程序语句,修改程序P3.8,对程序生成的图形中的两个轴加标记。
时移量是多少?
答:
时移量为5
Q3.33运行修改后的程序并验证离散傅里叶变换的圆周时移性质。
Q3.36运行程序P3.9并验证离散傅里叶变换的圆周卷积性质。
圆周卷积的结果=
12281401614
离散傅立叶变换乘积的傅立叶逆变换的结果=
12281401614
Q3.38运行程序P3.10并验证线性卷积可通过圆周卷积得到。
圆周卷积的结果=
2610152115795
直接线性卷积=
2610152115795
第六次实验
Q3.47编写一个MATLAB程序,计算并显示零点和极点,计算并显示其因式形式,并产生以
的两个多项式之比的形式表示的z变换的极零点图。
使用该程序,分析式(3.32)的z变换G(z)。
z=
-1.0000+1.4142i
-1.0000-1.4142i
-0.2500+0.6614i
-0.2500-0.6614i
p=
-8.9576
-0.2718
0.1147+0.2627i
0.1147-0.2627i
k=
0.4000
sos=
0.40000.80001.20001.00009.22932.4344
1.00000.50000.50001.0000-0.22930.0822
Q3.49
num=
3.9000-9.3600-0.6630-1.01400.5850
den=
1.0000-0.95000.17500.6625-0.3187
有理Z变换为;
H(Z)=(3.9-9.36Z-1-