subplot(2,1,1),stem(n,y1,'.');xlabel('n');ylabel('y1(n)');%绘制棒状图
axis([-6,21,-0.2,1.2])%设置坐标轴的取值范围
title('矩形序列N=10');
subplot(2,1,2),stem(n,y2,'.');xlabel('n');ylabel('y2(n)');%绘制棒状图
axis([-6,21,-0.2,1.2])%设置坐标轴的取值范围
title('矩形序列N=15');
分析:
通过设置N的大小,可控制门函数的宽度。
(5)抽样序列
程序代码:
n=-8:
8;%定位时间变量
y=sin(20*n)./(20*n);%计算变量所对应的函数值
stem(n,y);xlabel('n');ylabel('y(n)');%绘制棒状图
title('抽样序列');
当ω=π时当ω=20时
分析:
在ω取不同的值时,序列的性质并没有本质上的区别,都是非周期序列。
(6)正弦序列
(分别取不同的
值)
程序代码:
n=-10:
10;%定位时间变量
y=sin(n*pi/6);%计算变量所对应的函数值
stem(n,y);xlabel('n');
ylabel('y(n)');%绘制棒状图
title('正弦函数');
当=π/6时
当ω=5*π/3时当ω=20时
分析:
不同ω取值会使正弦序列具有不同的性质,当2π/ω为有理数时,序列为周期序列;当2π/ω为无理数时,序列为非周期序列。
如本实验中,前两者为周期序列,周期分别为12、6,后者为非周期序列。
实验二总结:
本实验中要求绘制离散时间信号图,可以应用matlab中的stem函数来实现。
用matlab表示一离散序列x[n]时,可用两个向量来表示。
其中一个向量表示自变量n的取值范围,另一个向量表示序列x[n]的值。
之后可用stem(n,f)画出序列波形。
当序列是从n=0开始时,可以只用一个向量x来表示序列。
由于计算机内寸的限制,matlab无法表示一个无穷长的序列。
对于典型的离散时间信号,可用逻辑表达式来实现不同自变量时的取值。
虽然离散时间序列的图像时一系列的点,可是却也可以大致看出对应连续函数的轮廓,可见离散序列是连续函数在整数值处的抽样取值。
实验三系统的时域求解
(1)设
,求
,并画出
、
、
波形。
程序代码:
Nx=10;Nh=20;%定义Nx,Nh;
nh=0:
Nh-1;%定义时间变量
h=(0.9).^nh;%对序列h(n)赋值
x=ones(1,Nx);%对序列x(n)赋值
y=conv(x,h);%计算序列x(n),h(n)的卷积
subplot(2,2,1),stem(x);ylabel('x(n)');%绘制x(n)棒状图
subplot(2,2,2),stem(nh,h);ylabel('h(n)');%绘制h(n)棒状图
subplot(2,1,2),stem(y);ylabel('y(n)');%绘制y(n)棒状图
分析:
离散卷积是数字信号处理中的一个基本运算,MTLAB提供的计算两个离散序列卷积的函数是conv,其调用方式为y=conv(x,h)。
其中调用参数x,h为卷积运算所需的两个序列,返回值y是卷积结果。
两序列的卷积所得到的新序列的长度为原来两序列的长度之和减1。
该实验中使用的两个函数长度分别为10、20,其卷积结果长度为29。
(2)求因果线性移不变系统
的单位抽样响应
,并绘出
的幅频及相频特性曲线。
程序代码:
num=[10-1];%传递函数的分子系数
den=[10-0.81];%传递函数的分母系数
n=0:
20;%定义时间变量
x=(n==0);%定义x(n)为单位样值序列
h=filter(num,den,x);%计算系统的单位抽样响应
figure
(1)
clf%清除图像
stem(h,'.');xlabel('n');ylabel('h(n)');%绘制系统单位抽样响应的棒状图
title('系统的单位抽样响应y(n)');
Fs=1024;
figure
(2)
freqz(num,den,21,Fs);%绘制幅频相频特性曲线
分析:
本实验中采用了fliter(num,den,x)函数求系统对函数x(n)的响应,该函数可以用来求任何函数对不同系统的响应,该实验中也可以调用专门的函数来求系统的单位样值响应。
调用freqz()函数也可以直接绘制系统的频率特性。
实验三总结:
本实验主要是计算卷积和系统的单位样值响应。
前者调用了conv()函数,后者调用了filter()函数和freqz()函数。
通过这次试验,我熟悉了相应函数的使用,加深了对matlab强大功能体系的认识。
在调用freqz()函数时,我遇到了一定的问题。
我知道的freqz()有两种功能,一种是计算数字滤波器的频率响应,然后通过abs()和angle()分别求幅频、相频特性;另一种是直接用来绘制幅频和相频特性曲线。
本实验中我直接使用它绘制了频率特性曲线。
实验四信号的DFT分析
(1)计算余弦序列
的DFT。
分别对N=10、16、22时计算DFT,绘出
幅频特性曲线,分析是否有差别及产生差别的原因。
程序代码:
N=22;%定义序列长度N
n=0:
N-1;%定义时间变量
x=cos(pi/8*n);%对序列x(n)赋值
X=fft(x,N);%计算序列向量x(n)的N点DFT变换
figure
(1)
stem(X);xlabel('k');ylabel('X(k)');%绘制x(n)的DFT变换后的图像
title('x(n)的DFT变换');
w=2*pi*n/N;%定义采样点
Xf=abs(X);%计算幅频特性
figure
(2)
stem(w,Xf);xlabel('w');ylabel('Xf');%绘制系统的幅频特性曲线
title('幅频特性');
当N=10时,
当N=16时
当N=22时
分析:
从上图可以看出,当N=10和N=22时,原函数的离散傅里叶变换和幅频特性没有多大的区别,只是由于22点比10点取值点多,更容易看清序列点的大致走向。
而当取N=16点时的图像与另外两个取值时的图像有较大的区别。
再观察原函数,可见16为8的倍数,当N取16时,原函数x的取值呈现了较大的对称性,此时旋转因子也呈现了较大的对称性,这样当旋转因子矩阵和原函数向量点乘时,出现了相互抵消现象,导致了图中出现的情况。
实验四总结:
该实验中采用了fft()函数,用来实现函数的DFT变换。
刚开始的时候,由于没有认真审题,我把该题中的图像也绘成了连续曲线,后来才仔细审题发现了问题,并对源程序进行了修正,从而绘出了上面的图像。
由此可以看出干什么事情都还是需要仔细的。
由于本实验中使用了fft()函数,加深了我对快速傅里叶变换的理解,对于自学有很大的帮助。
观察图像时,要抓住关键点,不能只是注意图中点的疏密变化。
实验五系统时域解的快速卷积求法
(1)用快卷积法计算系统响应
,已知:
,
。
要求取不同的L点数,并画出
、
、
波形,分析是否有差别及产生差别的原因。
程序代码:
nx=0:
15;%定位时间变量,既x(n)序列的时间序列
xn=sin(0.4*nx);%对序列x(n)赋值
nh=0:
20;%定位时间变量,既h(n)序列的时间序列
hn=(0.9).^nh;%对序列h(n)赋值
tic,%卷积计时开始
yn=conv(xn,hn);%直接调用函数conv计算卷积
toc,%卷积计时结束
M=length(xn);N=length(hn);%求序列x(n),h(n)的长度
L=pow2(nextpow2(M+N-1));%取L为大于等于且最接近(M+N-1)的2的正次幂,即L=64
tic,%快速卷积计时开始
Xk=fft(xn,L);%L点FFT[x(n)]
Hk=fft(hn,L);%L点FFT[h(n)]
Yk=Xk.*Hk;%频域相乘得Y(k)
yn=ifft(Yk,L);%L点IFFT得到卷积结果y(n)
toc,%快速卷积计时结束
subplot(2,2,1),stem(nx,xn,'.');ylabel('x(n)');%绘制x(n)的棒状图
subplot(2,2,2),stem(nh,hn,'.');ylabel('x(n)');%绘制h(n)的棒状图
subplot(2,1,2);ny=1:
L;stem(ny,real(yn),'.');ylabel('y(n)');%绘制y(n)的棒状图
取L=64取L=32
取L=36
计时结果:
Elapsedtimeis0.000163seconds.
Elapsedtimeis0.000058seconds.
分析:
该实验中通过对L点设置不同的值,绘出了上面两幅图像,由图像可以看出,当L大于原来两序列之和减1时,多出来的部分的值都为0;当L小于原来两序列之和减1时,则由于重叠会使一部分点不能显示出来;当L恰好等于原来两个序列之和减1时,则序列卷积结果恰好可以完整的表示卷积结果。
通过计时也可以看出应用快速傅里叶变换可以在很大程度上上节约计算时间,对于大型的运算使用起来具有很明显的优势。
实验五总结:
通过这次实验,我学会了用快速卷积法计算离散时间系统的响应,并通过对取不同长度值时的结果进行分析,加深了对快速卷积法应用条件的理解。
同时,通过对普通方式计算卷积和应用快速卷积计算过程的计时,感受到了快速卷积计算速度之快。