实验五报告.docx
《实验五报告.docx》由会员分享,可在线阅读,更多相关《实验五报告.docx(16页珍藏版)》请在冰豆网上搜索。
实验五报告
实验五离散时间系统的输出
有限长信号
,
,分别通过单位冲激响应为
的FIR系统。
1、如
,计算系统的输出信号,画出输入信号和输出信号的波形。
采用的方式如下:
(1)差分方程递推(根据FIR的差分方程表示)
(2)调用conv函数计算
(3)调用filter函数计算
(4)利用DFT计算(用DFT子函数实现IDFT运算)
(利用循环卷积计算线性卷积,则循环卷积的长度必须满足有关条件)
(1)差分方程递推(根据FIR的差分方程表示)
编程原理、思路和公式
LSI系统的差分方程为
(5.1.1)
FIR系统满足
1
2 是非递归系统
由此可以得出
(5.1.2)
所以
(5.1.3)
所以差分方程变为
(5.1.4)
程序的编写为两层for循环求和,内层对m循环,外层对n循环。
两层循环实现的是卷积的过程。
编写过程中应注意到卷积后得到的序列y的长度为N1+N2-1。
程序脚本,并注释
clc;
clear
N1=128;%x(n)的长度
nx1=0;nx2=N1-1;nx=nx1:
nx2;%nx的取值
N2=16;%h(n)的长度
nh1=0;nh2=N2-1;nh=nh1:
nh2;%nh的取值
x1=cos(nx*pi/16);%定义函数x1
x2=cos(nx*pi/16)+cos(nx*pi/2);%定义函数x2
h=0.5*(1-cos(2*pi*nh/(N2-1)));%定义函数h
ny1=nx1+nh1;ny2=nx2+nh2;
ny=ny1:
ny2;%卷积得到的函数y的长度
for(n=1:
length(ny))%外层循环对n循环,将ny与y一一对应
y1(n)=0;%y1赋初值
y2(n)=0;%y2赋初值
for(m=1:
N2)%内层循环对m循环,即对任一n卷积的过程
k=n-m+1;%中间变量k为x翻转移位后的横轴
ifk>0&k<=N1%x翻转移位后与h能对应相乘的部分
y1(n)=y1(n)+h(m)*x1(k);%卷积求和
y2(n)=y2(n)+h(m)*x2(k);%卷积求和
end
end
end
%%画图
subplot(2,1,1);
stem(ny,y1,'.'),gridon;
xlabel('n');ylabel('y1');
title('y1=cos(n\pi/16)R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
subplot(2,1,2);
stem(ny,y2,'.'),gridon;
xlabel('n');ylabel('y2');
title('y2=[cos(n\pi/16)+cos(n\pi/2)]R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
仿真结果、图形
图5.1.1由差分方程递推得到的实验图
(2)调用conv函数计算
编程原理、思路和公式
直接调用conv函数,注意新的函数的长度
程序脚本,并注释
clc;
clear
N1=128;%x(n)的长度
nx1=0;nx2=N1-1;nx=nx1:
nx2;%nx的取值
N2=16;%h(n)的长度
nh1=0;nh2=N2-1;nh=nh1:
nh2;%nh的取值
x1=cos(nx*pi/16);%定义函数x1
x2=cos(nx*pi/16)+cos(nx*pi/2);%定义函数x2
h=0.5*(1-cos(2*pi*nh/(N2-1)));%定义函数h
ny1=nx1+nh1;ny2=nx2+nh2;
ny=ny1:
ny2;%卷积得到的函数y的长度
y1=conv(x1,h);%调用conv函数求y1
y2=conv(x2,h);%调用conv函数求y2
%%画图
subplot(2,1,1);
stem(ny,y1,'.'),gridon;
xlabel('n');ylabel('y1');
title('y1=cos(n\pi/16)R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
subplot(2,1,2);
stem(ny,y2,'.'),gridon;
xlabel('n');ylabel('y2');
title('y2=[cos(n\pi/16)+cos(n\pi/2)]R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
仿真结果、图形
图5.1.2由conv函数得到的实验图形
(3)调用filter函数计算
编程原理、思路和公式
现将序列进行补零运算,使得新的序列满足长度,然后直接调用filter函数进行运算
(5.1.5)
在本次实验中
(5.1.6)
所以,b=h(n),a=1.
程序脚本,并注释
clc;
clear
N1=128;%x(n)的长度
nx1=0;nx2=N1-1;nx=nx1:
nx2;%nx的取值
N2=16;%h(n)的长度
nh1=0;nh2=N2-1;nh=nh1:
nh2;%nh的取值
x1=cos(nx*pi/16);%定义函数x1
x2=cos(nx*pi/16)+cos(nx*pi/2);%定义函数x2
h=0.5*(1-cos(2*pi*nh/(N2-1)));%定义函数h
ny1=nx1+nh1;ny2=nx2+nh2;
ny=ny1:
ny2;%卷积得到的函数y的长度
x11=[zeros(1,abs(ny1-nx1))x1zeros(1,abs(ny2-nx2))];%补零
x22=[zeros(1,abs(ny1-nx1))x2zeros(1,abs(ny2-nx2))];%补零
a=[1];%y的系数
b=[h];%x的系数
y1=filter(b,a,x11);%调用filter函数求y1
y2=filter(b,a,x22);%调用filter函数求y2
%%画图
subplot(2,1,1);
stem(ny,y1,'.'),gridon;
xlabel('n');ylabel('y1');
title('y1=cos(n\pi/16)R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
subplot(2,1,2);
stem(ny,y2,'.'),gridon;
xlabel('n');ylabel('y2');
title('y2=[cos(n\pi/16)+cos(n\pi/2)]R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
仿真结果、图形
图5.1.3由filter函数求得的实验图形
(4)利用DFT计算(用DFT子函数实现IDFT运算)
编程原理、思路和公式
由DFT计算线性卷积的流程图为
X(k)
x(n)
H(k))))
Y(k)
y(n))
h(n)
其中N为线性卷积的长度,在此实验中为N1+N2-1。
图5.1.4由DFT计算线性卷积框图
所以编写子程序计算N(N=N1+N2-1)点DFT,IDFT,然后按框图进行编程即可。
程序脚本,并注释
计算DFT
function[X,k]=dft1(x,N)%定义函数
for(q=1:
N)%外层循环,对k的循环,循环N次
k(q)=q-1;%循环计算不同的k值
sum=0;%求和定初值
for(m=1:
N)%内层循环对n的求和过程,循环的次数为n的长度
sum=sum+x(m)*exp(-i*2*pi*k(q)*(m-1)/N);%求和
X(q)=sum;%把得到的和的值赋给,进行对下一个k的求和过程
end%内循环结束
end%外循环结束
计算IDFT
function[y,n]=idft1(Y,N)%定义函数
for(p=1:
N)%外层循环,对k的循环,循环N次
n(p)=p-1;%循环计算不同的n值
sum=0;%求和定初值
for(l=1:
N)%内层循环对k的求和过程,循环的次数为k的长度
sum=sum+Y(l)*exp(j*2*pi*n(p)*(l-1)/N);%求和
y(p)=sum/N;%把得到的和的值赋给y,进行对下一个k的求和过程
end%内循环结束
end%外循环结束
主程序
clc;
clear
N1=128;%x(n)的长度
nx1=0;nx2=N1-1;nx=nx1:
nx2;%nx的取值
N2=16;%h(n)的长度
nh1=0;nh2=N2-1;nh=nh1:
nh2;%nh的取值
N=N1+N2-1;
x1=cos(nx*pi/16);%定义函数x1
x2=cos(nx*pi/16)+cos(nx*pi/2);%定义函数x2
h=0.5*(1-cos(2*pi*nh/(N2-1)));%定义函数h
ny1=nx1+nh1;ny2=nx2+nh2;
ny=ny1:
ny2;%卷积得到的函数y的长度
x11=[zeros(1,abs(ny1-nx1))x1zeros(1,abs(ny2-nx2))];%补零
x22=[zeros(1,abs(ny1-nx1))x2zeros(1,abs(ny2-nx2))];%补零
hh=[zeros(1,abs(ny1-nh1))hzeros(1,abs(ny2-nh2))];;%补零
[X1,k]=dft1(x11,N);%调用dft1计算X1(k)
[X2,k]=dft1(x22,N);%调用dft1计算X2(k)
[H,k]=dft1(hh,N);%调用dft1计算H(k)
fork=1:
N%求解Y(k)=X(k)H(K),将k与Y一一对应
Y1(k)=X1(k)*H(k);
Y2(k)=X2(k)*H(k);
end
[y1,n]=idft1(Y1,N);%调用idft1计算y1(n)
[y2,n]=idft1(Y2,N);%调用idft1计算y2(n)
%%画图
subplot(2,1,1);
stem(ny,y1,'.'),gridon;
xlabel('n');ylabel('y1');
title('y1=cos(n\pi/16)R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
subplot(2,1,2);
stem(ny,y2,'.'),gridon;
xlabel('n');ylabel('y2');
title('y2=[cos(n\pi/16)+cos(n\pi/2)]R_1_2_8(n)*0.5(1-cos(2n\pi/(N2-1))R_1_6(n)');
仿真结果、图形
图5.1.5由DFT进行线性卷积得到的实验图形
2、观察以上方法计算的结果,是否一致,如果不一致,是什么原因?
如果使得四种方式计算出的系统的输出完全相同,如何选择有关参数?
结果分析和结论
以上实验计算的结果是一致的。
使得四种方式计算出的系统的输出完全相同,在计算DFT和IDFT时应先对序列补零,新序列长>=输入信号序列长+系统单位冲击响应序列长-1.
3、观察输入信号和输出信号,从幅度和相位角度解释输出信号相对于输入信号的变化?
为什么两输入信号输入到系统中的输出信号类似?
(画出此FIR系统的幅频特性,从系统对不同频率分量的响应方面分析。
)
仿真结果、图形
图5.3.1系统函数的频谱特性
由图可知这是一个升余弦低通滤波器
图5.3.2x1的输入输出幅度及相位比较
结果分析和结论
(一)输入信号经过该系统后发生了相位的移动和幅值的增加。
以x1为例分析:
输入
。
w=
由图5.3.2可以看出
1.幅度变化:
从系统函数幅值图H(z)中找到w=
处对应的点纵坐标为6.32.即理论上x1经过该系统幅值变为原来的6.32倍。
观察x1与y1的信号图,可看出输出信号序列起始和末尾的7个点都失真。
2.相位变化:
对系统函数相位图:
对应
处phase(H)的相位为-1.5487,化为角度数约为88.77度。
即理论上x1经过该系统产生88.77度相移。
观察x1与y1的信号图,可看出实际相移约为90度。
(2)输出信号类似
由图5.3.1可以看出系统函数H(z)是升余弦低通滤波器
(5.3.1)
(5.3.2)
理论上讲,经过低通滤波器
,所以经过低通滤波器后
(5.3.3)
所以使得两者的输出相似。
遇到的问题、解决方法及收获
1、在调用conv、filter函数时,忽略了新的序列的长度问题,错误提示下改正。
2、初步了解FIR系统,明白其非递归性
3、学会了正确使用conv、filter函数,conv函数记得新生成的序列的长度需要重新定义,filter函数在调用前对原来的序列补零。
4、学会了用圆周卷积计算线性卷积,进一步加深DFT和IDFT的计算使用
5、直观的感受了信号经过低通滤波器后的变化,加深了对低通滤波器的了解和学习。