实验二离散时间信号的时域分析

更新时间:2024-01-19 01:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二离散时间信号的时域分析

陈一凡20112121006

一、实验目的:

学习使用MATLAB命令产生滑动平均滤波器;

学习使用MATLAB命令产生一个简单的非线性离散时间系统; 学习使用MATLAB命令产生线性与非线性系统;

学习使用MATLAB命令产生时不变系统和时变系统; 学习使用MATLAB命令产生线性时不变系统的冲激响应; 学习使用MATLAB命令产生线性时不变系统的级联;

学习使用MATLAB命令产生有限冲击响应系统的输出序列;

学习使用MATLAB命令产生线性时不变系统的冲击响应的绝对值之和; 学习使用MATLAB命令产生两个离散时间系统; 二、实验原理简述:

运用运算符和特殊符号,基本矩阵和矩阵控制,基本函数,数据分析,二维图形,通用图形函数,信号处理工具箱等命令,产生离散时间系统等。 三、 实验内容与实验结果

1、产生并绘制一个滑动平均滤波器 运行程序 clf;

n=0:100;

s1=cos(2*pi*0.05*n); s2=cos(2*pi*0.47*n); x=s1+s2;

M=input('滤波器所需的长度='); num=ones(1,M);

y=filter(num,1,x)/M; subplot(2,2,1); plot(n,s1);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('信号#1'); subplot(2,2,2); plot(n,s2);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('信号#2'); subplot(2,2,3); plot(n,x);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('输入信号'); subplot(2,2,4);

plot(n,y);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('输出信号'); axis;

滤波器所需的长度=2 实验结果如图1所示 ans =

0 100 -2 2

信号#12121信号#2振幅0-1-2振幅050时间序号n输入信号1000-1-2050时间序号n输出信号1002121振幅0-1-2050时间序号n100振幅0-1-2050时间序号n100

图1

2、生成一个简单的非线性离散时间系统: 运行程序: clf;

n=0:200;

x=sin(2*pi*0.05*n)+1; x1=[x 0 0]; x2=[0 x 0]; x3=[0 0 x];

y=x2.*x2-x1.*x3; y=y(2:202); subplot(2,1,1) plot(n,x)

xlabel('时间序号n');ylabel('振幅'); title('输入信号') subplot(2,1,2) plot(n,y)

xlabel('时间序号n');ylabel('振幅'); title('输出信号'); 实验结果如图2所示

输入信号21.5振幅10.50020406080100120时间序号n输出信号14016018020010.5振幅0-0.5020406080100120时间序号n140160180200

图2

3.生成一个产生线性与非线性系统: 运行程序: clf; n=0:40; a=2;b=-3;

x1=cos(2*pi*0.1*n); x2=cos(2*pi*0.4*n); x=a*x1+b*x2;

num=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; ic=[0 0];

y1=filter(num,den,x1,ic); y2=filter(num,den,x2,ic); y=filter(num,den,x,ic); yt=a*y1+b*y2; d=y-yt;

subplot(3,1,1) stem(n,y);

ylabel('振幅');

title('加权输入:a\\cdot x_{1}[n]+b\\cdot x_{2}[n]的输出'); subplot(3,1,2) stem(n,y);

ylabel('振幅');

title('加权输出t:a\\cdot y_{1}[n]+b\\cdot y_{2}[n]'); subplot(3,1,3) stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差信号'); 实验结果如图3所示

加权输入:a? x1[n]+b? x2[n]的输出200-20-400510152025303540振幅加权输出t:a? y1[n]+b? y2[n]50振幅0-500x 10-155101520差信号253035405振幅0-50510152025时间序号n303540

图3

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=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; ic=[0,0];

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; 实验结果如图4所示

输出y[n]200-20-40500510152025303540振幅由于延时输入x[n10]的输出振幅0-50105101520差值信号25303540振幅0-10510152025时间序号n303540图4

5、产生线性时不变系统的冲激响应: 运行程序: clf; N=40;

num=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; y=impz(num,den,N); stem(y);

xlabel('时间序号n');ylabel('振幅'); title('冲激响应');grid; 实验结果如图5所示:

冲激响应4321振幅0-1-2-30510152025时间序号n303540

图5

6、编写程序得到线性时不变系统的级联: 运行程序: clf;

x=[1 zeros(1,40)]; n=0:40;

den=[1 1.6 2.28 1.325 0.68];

num=[0.06 -0.19 0.27 -0.26 0.12]; y=filter(num,den,x);

num1=[0.3 -0.2 0.4];den1=[1 0.9 0.8]; num2=[0.2 -0.5 0.3];den2=[1 0.7 0.85]; y1=filter(num1,den1,x); y2=filter(num2,den2,y1); d=y-y2;

subplot(3,1,1); stem(n,y);

ylabel('振幅');

title('四阶实现的输出');grid subplot(3,1,2); stem(n,y2);

ylabel('振幅');

title('级联实现的输出');grid subplot(3,1,3); stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差值信号');grid; 实验结果如图6所示:

四阶实现的输出1振幅0-110510152025303540级联实现的输出振幅0-10x 10-145101520差值信号253035400.5振幅0-0.50510152025时间序号n303540

图6

7、产生一个振幅调制信号: 运行程序: clf;

h=[3 2 1 -2 1 0 -4 0 3]; x=[1 -2 3 -4 3 2 1]; y=conv(h,x); n=0:14;

subplot(2,1,1); stem(n,y);

xlabel('时间序号n');ylabel('振幅'); title('用卷积得到的输出');grid; x1=[x zeros(1,8)]; y1=filter(h,1,x1); subplot(2,1,2); stem(n,y1);

xlabel('时间序号n');ylabel('振幅');title('由滤波生成的输出');grid;

实验结果如图7所示:

用卷积得到的输出2010振幅0-10-2002468时间序号n由滤波生成的输出1012142010振幅0-10-2002468时间序号n101214

图7

8、产生线性时不变系统的冲击响应的绝对值之和:

运行程序: clf;

num=[1 -0.8];den=[1 1.5 0.9]; N=200;

h=impz(num,den,N+1); parsum=0; for k=1:N+1;

parsum=parsum+abs(h(k));

if abs(h(k))<10^(-6),break,end end n=0:N; stem(n,h)

xlabel('时间序号n');ylabel('振幅'); disp('值=');disp(abs(h(k))); 结果得 值=

1.6761e-005

实验结果如图8所示:

321振幅0-1-2-3020406080100120时间序号n140160180200图8

9、产生两个离散时间系统:

运行程序: clf;

n=0:299;

x1=cos(2*pi*10*n/256); x2=cos(2*pi*100*n/256); x=x1+x2;

num1=[0.5 0.27 0.77]; y1=filter(num1,1,x); den2=[1 -0.53 0.46]; num2=[0.45 0.5 0.45]; y2=filter(num2,den2,x); subplot(2,1,1);

plot(n,y1);axis([0 300 -2 2]); ylabel('振幅');

title('系统#1的输出'); grid;

subplot(2,1,2);

plot(n,y2);axis([0 300 -2 2]);

xlabel('时间序号n');ylabel('振幅'); title('系统#2的输出'); grid;

实验结果如图9所示:

系统#1的输出21振幅0-1-205010015020025030021振幅0-1-2050100150时间序号n200250300

图9

四、实验分析:

针对实验1 产生滑动平均滤波器;

s1=cos(2*pi*0.05*n);即产生一个低频正弦信号; s2=cos(2*pi*0.47*n);即产生一个高频正弦信号; x=s1+s2;即滑动平均滤波器的实现;

M=input('滤波器所需的长度=');即定义输入; num=ones(1,M);

y=filter(num,1,x)/M;即定义滑动平均滤波器;

此程序是通过从若干个正弦信号之和所组成的信号中滤出高频分量,来实现滑动平均滤波器。

针对实验2 产生一个简单的非线性离散时间系统; x=sin(2*pi*0.05*n)+1;即产生一个正弦输入信号; x1=[x 0 0];即x1[n]=x[n+1]; x2=[0 x 0];即x2[n]=x[n]; x3=[0 0 x];即x3[n]=x[n-1];

y=x2.*x2-x1.*x3;即对输出信号的计算

此程序中输入信号是由两个正弦序列的和组成的,通过三点平滑滤波器的因果表达式得出线性时不变系统,产生输出信号。

针对实验3产生线性与非线性系统;

clf; n=0:40; a=2;b=-3;

x1=cos(2*pi*0.1*n); x2=cos(2*pi*0.4*n);

x=a*x1+b*x2;即三个输入序列;

num=[2.2403 2.4908 2.2403];即对filter函数计算系统输出的num赋值; den=[1 -0.4 0.75];即对filter函数计算系统输出的den赋值; ic=[0 0];即设置零初始条件

y1=filter(num,den,x1,ic);即计算输出y1[n]; y2=filter(num,den,x2,ic);即计算输出y2[n]; y=filter(num,den,x,ic);即计算输出y3[n]; yt=a*y1+b*y2;

d=y-yt;即计算差值输出d[n]; subplot(3,1,1) stem(n,y);

ylabel('振幅');

title('加权输入:a\\cdot x_{1}[n]+b\\cdot x_{2}[n]的输出'); subplot(3,1,2) stem(n,y);

ylabel('振幅');

title('加权输出t:a\\cdot y_{1}[n]+b\\cdot y_{2}[n]'); subplot(3,1,3) stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差信号');

此程序是在因果系统的线性特性的基础上,输入三个不同的输入序列,计算相应的输出响应。

针对实验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=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75];

ic=[0,0];即设置初始条件;

y=filter(num,den,x,ic);计算输出y[n]; yd=filter(num,den,xd,ic);计算输出yd[n]; d=y-yd(1+D:41+D);计算差值输出d[n]; 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;

此程序通过描述因果系统的线性特征,输入两个不同的输入序列,计算并画出相应的输出序列。

针对实验5产生线性时不变系统的冲激响应 clf; N=40;

num=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; y=impz(num,den,N); stem(y);

xlabel('时间序号n');ylabel('振幅'); title('冲激响应');grid;

此程序用命令impz计算因果线性时不变离散时间系统的冲激相应的前N个样本。

针对实验6产生线性时不变系统的级联; clf;

x=[1 zeros(1,40)];即生成输入; n=0:40;

den=[1 1.6 2.28 1.325 0.68];即四阶系统的系数; num=[0.06 -0.19 0.27 -0.26 0.12];

y=filter(num,den,x);即计算四阶系统的输出;

num1=[0.3 -0.2 0.4];den1=[1 0.9 0.8];即两个二阶系统的系数; num2=[0.2 -0.5 0.3];den2=[1 0.7 0.85];

y1=filter(num1,den1,x);即级联第一级的输出y1[n]; y2=filter(num2,den2,y1);即级联第二级的输出y2[n]; d=y-y2;即y1[n]和y2[n]之间的差; subplot(3,1,1); stem(n,y);

ylabel('振幅');

title('四阶实现的输出');grid subplot(3,1,2); stem(n,y2);

ylabel('振幅');

title('级联实现的输出');grid subplot(3,1,3); stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差值信号');grid; 此程序在实际应用中,由于高阶因果线性时不变离散时间系统可以用低阶因果线性时不变离散时间系统级联得到。四阶离散时间系统可用二阶离散时间系统的级联实现。先产生了序列x[n],把它作为四阶系统的输入,生成输出y[n];然后用同样的输入x[n]应用到第一级得到输出序列y1[n]。接下来,用y1[n]作为第二级的输入得到他的输出y2[n]。最后求出y[n]和y2[n]之间的差,并画出所有的输出信号和差值信号。

针对实验7产生有限冲击响应系统的输出序列 clf;

h=[3 2 1 -2 1 0 -4 0 3]; x=[1 -2 3 -4 3 2 1];

y=conv(h,x);即实现卷积; n=0:14;

subplot(2,1,1); stem(n,y);

xlabel('时间序号n');ylabel('振幅'); title('用卷积得到的输出');grid; x1=[x zeros(1,8)]; y1=filter(h,1,x1); subplot(2,1,2); stem(n,y1);

xlabel('时间序号n');ylabel('振幅');title('由滤波生成的输出');grid; 在此程序中假设待卷积的两个序列都为有限长序列,通过卷积运算符可得到有限冲激响应系统的输出序列。

针对实验8产生线性时不变系统的冲击响应的绝对值之和; clf;

num=[1 -0.8];den=[1 1.5 0.9]; N=200;

h=impz(num,den,N+1); parsum=0; for k=1:N+1;

parsum=parsum+abs(h(k));

if abs(h(k))<10^(-6),break,end end n=0:N; stem(n,h)

xlabel('时间序号n');ylabel('振幅'); disp('值=');disp(abs(h(k)));

由于一个线性时不变系统的冲激响应是绝对可和的,则该程序就是BIBO稳定的。此程序就是计算因果iir线性是不变系统的冲激响应的绝对值之和。 针对实验9产生两个离散时间系统

clf;

n=0:299;

x1=cos(2*pi*10*n/256);即产生输入序列; x2=cos(2*pi*100*n/256); x=x1+x2;

num1=[0.5 0.27 0.77];即计算输出序列; y1=filter(num1,1,x);即系统#1的输出; den2=[1 -0.53 0.46]; num2=[0.45 0.5 0.45];

y2=filter(num2,den2,x);即系统#2的输出; subplot(2,1,1);即画出输出序列; plot(n,y1);axis([0 300 -2 2]); ylabel('振幅');

title('系统#1的输出');grid; subplot(2,1,2);

plot(n,y2);axis([0 300 -2 2]);

xlabel('时间序号n');ylabel('振幅'); title('系统#2的输出');grid;

此程序用差分方程描述了两个离散时间系统。

五、实验总结

在此次实验中,我学会了用MATLAB程序绘制图形,并且掌握了线性离散时间系统和线性时不变系统,离散时不变系统,有界输入有界输出系统,单位阶跃响应,卷积,级联,因果系统有了详细深入的认识。 习题求解:

Q2.4修改程序P2.1,用一个长度为101、最低频率为0、最高频率为0.5的扫描正弦信号作为输入信号,计算其输出信号。程序如下,结果如图10所示: clf;

n=0:100;

s1=cos(2*pi*0.0*n); s2=cos(2*pi*0.5*n); x=s1+s2;

M=input('滤波器所需的长度='); num=ones(1,M); y=filter(num,1,x)/M; subplot(2,2,1); plot(n,s1);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('信号#1'); subplot(2,2,2); plot(n,s2);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅');

title('信号#2'); subplot(2,2,3); plot(n,x);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('输入信号'); subplot(2,2,4); plot(n,y);

axis([0,100,-2,2]);

xlabel('时间序号n');ylabel('振幅'); title('输出信号'); Axis;

输入滤波器所需的长度=2 得到结果: ans =

0 100 -2 2

信号#12121信号#2振幅0-1-2振幅050时间序号n输入信号1000-1-2050时间序号n输出信号1002121振幅0-1-2050时间序号n100振幅0-1-2050时间序号n100

图10

Q2.6用形如x[n]=sin(w0n)+K的正弦信号作为输入信号,求出系统的输出信号。程序如下,结果如图11所示: clf;

n=0:200;

K=1; f=0.05; w=2*pi*f; x=cos(w*n)+K; x1=[x 0 0]; x2=[0 x 0]; x3=[0 0 x];

y=x2.*x2-x1.*x3; y=y(2:202); subplot(2,1,1) plot(n,x)

xlabel('时间序号n');ylabel('振幅'); title('输入信号') subplot(2,1,2) plot(n,y)

xlabel('时间序号n');ylabel('振幅'); title('输出信号')

输入信号21.5振幅10.50020406080100120时间序号n输出信号14016018020042振幅0-2020406080100120时间序号n140160180200图11

Q2.11假定另一个系统为y[n]=x[n]x[n-1],修改程序P2.3,计算这个系统的输出序列y1[n],y2[n],和y[n].比较y[n]和yt[n]。运行程序如下,结果如图12; clf; n=0:40;

x1=cos(2*pi*0.1*n); x2=cos(2*pi*0.4*n);

y=x1.*x2;

num=[2.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; ic=[0 0];

y1=filter(num,den,x1,ic); y2=filter(num,den,x2,ic); y3=filter(num,den,y,ic); yt=y1+y2; d=y3-yt;

subplot(3,1,1) stem(n,y); ylabel('振幅');

title('加权输入:a\\cdot x_{1}[n]+b\\cdot x_{2}[n]的输出'); subplot(3,1,2) stem(n,y); ylabel('振幅');

title('加权输出t:a\\cdot y_{1}[n]+b\\cdot y_{2}[n]'); subplot(3,1,3) stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差信号');

加权输入:a? x1[n]+b? x2[n]的输出1振幅0-10510152025303540加权输出t:a? y1[n]+b? y2[n]1振幅0-11005101520差信号25303540振幅0-100510152025时间序号n303540

图12

Q2.17考虑另一个系统,y[n]=nx[n]+x[n-1],修改程序P2.4。运行程序如下,结果如图13; 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.2403 2.4908 2.2403]; den=[1 -0.4 0.75]; ic=[0,0];

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;

输出y[n]200-20-40500510152025303540振幅由于延时输入x[n10]的输出振幅0-50105101520差值信号25303540振幅0-10510152025时间序号n303540

图13

Q2.20修改程序P2.,5产生如下因果线性时不变系统的冲激响应的前45个样本:y[n]+0.71- y[n-1]-0.46y[n-2]-0.62y[n-3]=0.9x[n]-0.45x[n-1]+0.35x[n-2]+0.002x[n-3]。运行程序如下,结果如

图14; clf; N=45;

num=[1 0.71-0.46 -0.62]; den=[0.9 -0.45 0.35 0.002]; y=impz(num,den,N); stem(y);

xlabel('时间序号n');ylabel('振幅'); title('冲激响应');grid;

冲激响应1.210.80.60.4振幅0.20-0.2-0.4-0.6-0.80510152025时间序号n30354045

图14

Q2.26修改程序P2.6,将两个二阶系统顺序颠倒并在零初始条件下重复此过程。运行程序如下,结果如图15; clf;

x=[1 zeros(1,40)]; n=0:40;

den=[1 1.6 2.28 1.325 0.68];

num=[0.06 -0.19 0.27 -0.26 0.12]; y=filter(num,den,x);

num1=[0.2 -0.5 0.3];den1=[1 0.7 0.85]; num2=[0.3 -0.2 0.4];den2=[1 0.9 0.8]; y1=filter(num1,den1,x); y2=filter(num2,den2,y1); d=y-y2;

subplot(3,1,1);

stem(n,y);

ylabel('振幅');

title('四阶实现的输出');grid subplot(3,1,2); stem(n,y2);

ylabel('振幅');

title('级联实现的输出');grid subplot(3,1,3); stem(n,d);

xlabel('时间序号n');ylabel('振幅'); title('差值信号');grid

四阶实现的输出1振幅0-110510152025303540级联实现的输出振幅0-10x 10-155101520差值信号253035405振幅0-50510152025时间序号n303540

图15

Q2.28修改程序P2.7,用FIR滤波器h[n]对输入x[n]滤波,求得y1[n]。运行程序如下,结果如图16; clf;

h=[3 2 1 -2 1 0 -4 0 3]; x=[1 -2 3 -4 3 2 1]; y=conv(h,x); n=0:14;

subplot(2,1,1); stem(n,y);

xlabel('时间序号n');ylabel('振幅'); title('用卷积得到的输出');grid;

x2=conv(h,x); y1=filter(h,1,x2); subplot(2,1,2); stem(n,y1);

xlabel('时间序号n');ylabel('振幅');title('由滤波生成的输出');grid;

用卷积得到的输出2010振幅0-10-2002468时间序号n由滤波生成的输出101214200100振幅0-10002468时间序号n101214

图16

Q2.33考虑差分方程y[n]=x[n]-4x[n-1]+3x[n-2]+1.7y[n-1]-y[n-2],,描述的离散时间系统。修改程序P2.8,计算并画出上述系统的冲激响应。运行程序如下,结果如图17; clf;

num=[1 -4 3];den=[1 -1.7 1]; N=200;

h=impz(num,den,N+1); parsum=0; for k=1:N+1;

parsum=parsum+abs(h(k)); if abs(h(k))<10^(-5),break,end end n=0:N; stem(n,h)

xlabel('时间序号n');ylabel('振幅'); disp('值=');disp(abs(h(k))); 计算结果: 值=

2.0321

2.521.510.5振幅0-0.5-1-1.5-2-2.5020406080100120时间序号n140160180200图17

Q2.3修改程序P2.9,将输入序列改变成扫频正弦序列(长度为301、最低频率为0、最高频率为0.5)。运行程序如下,结果如图18; clf;

n=0:300;

x1=cos(2*pi*0.0*n); x2=cos(2*pi*0.5*n); x=x1+x2;

num1=[0.5 0.27 0.77]; y1=filter(num1,1,x); den2=[1 -0.53 0.46]; num2=[0.45 0.5 0.45]; y2=filter(num2,den2,x); subplot(2,1,1);

plot(n,y1);axis([0 50 0 2]); ylabel('振幅');

title('系统#1的输出');grid; subplot(2,1,2);

plot(n,y2);axis([0 50 0 2]);

xlabel('时间序号n');ylabel('振幅'); title('系统#2的输出');grid;

系统#1的输出21.5振幅10.5005101520253035404550系统#2的输出21.5振幅10.50051015202530时间序号n35404550图18

本文来源:https://www.bwwdw.com/article/tjxo.html

Top