DFT实现频谱分析与线性卷积实验四.docx
《DFT实现频谱分析与线性卷积实验四.docx》由会员分享,可在线阅读,更多相关《DFT实现频谱分析与线性卷积实验四.docx(11页珍藏版)》请在冰点文库上搜索。
![DFT实现频谱分析与线性卷积实验四.docx](https://file1.bingdoc.com/fileroot1/2023-6/25/0caaaf6f-4d40-4c1d-b302-0eb9de3a58b0/0caaaf6f-4d40-4c1d-b302-0eb9de3a58b01.gif)
百度文库-让每个人平等地提升自我
实验报告
实验名称DFT实现频谱分析与线性卷积
课程名称数字信号处理实验
11
院系部:
电气学院
学生姓名:
庞思颜
指导教师:
范杰清
实验日期:
2017-11-15
专业班级:
电网1501
学号:
1151600115
成绩:
华北电力大学
DSP4:
DFT实现频谱分析与线性卷积
一、实验目的
1.应用离散傅里叶变换(DFT),分析离散信号x(n)的频谱。
2.深刻理解DFT分析离散信号频谱的原理,掌握改善分析过程中产生的误差的方法。
3.应用离散傅里叶变换(DFT),实现离散信号与系统的线性卷积,并理解实现条件。
二、实验原理—DFT实现频谱分析
根据信号傅里叶变换建立的时域与频域之间的对应关系,可以得到有限长序列的离散傅里叶变换(DFT)与四种确定信号傅里叶变换的之间的关系,实现由DFT分析其频谱。
四种信号的频谱函数
连续非周期信号x(t)
连续周期信号
离散非周期信号x(n)
离散周期信号
四种信号的频谱函数之间的相互关系
信号的傅里叶变换建立了信号的时域与频域之间的一一对应关系,如果信号在时域存在某种联系,则在其频谱函数之间必然存在联系。
若离散非周期信号x(n)是连续非周期信号x(t)的等间隔抽样序列,则信号x(n)的频谱函数是信号x(t)的频谱函数的周期化;若离散周期信号是离散非周期信号x(n)的周期化,则信号的频谱函数是信号的频谱函数的离散化。
信号在时域的离散化导致其频谱函数的周期化
信号在时域的周期化导致其频谱函数的离散化
通过离散周期序列的频谱可以近似分析连续非周期信号的频谱
利用DFT可以直接计算离散周期信号的频谱
DFT:
IDFT:
Matlab中提供了fft函数,FFT是DFT的快速算法
X=fft(x):
用于计算序列x的离散傅里叶变换(DFT)
X=fft(x,n):
对序列x补零或截短至n点的离散傅里叶变换。
当x的长度小于n时,在x的尾部补零使x的长度达到n点;
当x的长度大于n时,将x截短使x的长度成n点;
x=ifft(X)和x=ifft(X,n)是相应的离散傅里叶反变换。
fftshift(x)将fft计算输出的零频移到输出的中心位置。
利用DFT计算离散周期信号的频谱
分析步骤为:
(1)确定离散周期序列的基本周期N;
(2)利用fft函数求其一个周期的DFT,得到X(k);
(3)X(k)为的一个周期。
已知一个周期序列,利用FFT计算其频谱并与理论分析相比较。
N=16;
n=0:
N-1;
x=cos(n.*pi./8+pi/3)+0.5*cos(0.875*pi.*n);
X=fftshift(fft(x));
subplot(2,1,1);
stem(n-N/2,abs(X));
title('幅频特性');
subplot(2,1,2);
stem(n-N/2,angle(X));
title('相频特性');
利用DFT计算离散非周期信号x(n)的频谱
分析步骤为:
(1)确定序列的长度M当序列为无限长时,需要根据能量分布,利用窗函数进行截短。
(2)确定作FFT的点数N;根据频域取样定理,为使时域波形不产生混叠,必须取。
(3)使用fft函数作N点FFT计算X(k)。
利用DFT分析序列x(n)=的频谱。
k=0:
30;
x=0.8.^k;
subplot(2,1,1);
stem(k,x);%画出序列的时域波形
subplot(2,1,2);
w=k-15;
plot(w,abs(fftshift(fft(x))));%画出序列频谱的幅度谱
二、实验原理—DFT实现线性卷积
当x(n)与h(n)的圆周卷积长度N≥N1+N2-1时,N点圆周卷积能代表二者的线性卷积。
这就是利用DFT计算线性卷积的方法和要求,即选择长度大于等于的两序列线性卷积长度的DFT运算计算线性卷积。
利用DFT计算线性卷积:
用圆周卷积代替,要求圆周卷积的点数L>=N1+N2-1
三、实验内容
1.利用FFT分析信号的频谱;
(1)确定DFT计算的参数;
(2)进行理论值与计算值比较,讨论信号频谱分析过程中误差原因及改善方法。
N=16;
n=0:
N-1;
x=0.5.^n.*[ones(1,N)];
X=fftshift(fft(x,N));
subplot(2,1,1);
plot(n-N/2,abs(X),'--');holdon
stem(n-N/2,abs(X));
title('幅频特性');
subplot(2,1,2);
stem(n-N/2,angle(X));holdon
plot(n-N/2,angle(X),'--');
title('相频特性');
2.某周期序列由3个频率组成:
,利用FFT分析其频谱。
如何选取FFT的点数N?
此3个频率分别对应FFT计算结果X(k)中的哪些点?
若选取的N不合适,FFT计算出的频谱X(k)会出现什么情况?
N=32;%应为32的整数倍,否则会出现频谱泄漏
k=0:
N-1;
x=cos(7*pi.*k./16)+cos(9*pi.*k./16)+cos(pi.*k./2);
X=fftshift(fft(x,N));
subplot(2,1,1);
stem(k-N/2,abs(X));
title('幅频特性');
subplot(2,1,2);
stem(k-N/2,angle(X));
title('相频特性');
3.某离散序列,利用FFT分析其频谱。
(1)对x(n)做64点FFT,绘出信号频谱,能分辨出其中的两个频率吗?
(2)对x(n)补零到256点后计算FFT,能分辨出其中的两个频率吗?
(3)选用非矩形窗计算FFT,能够分辨出其中的两个频率吗?
(4)若不能够很好地分辨出其中的两个频谱,应采取哪些措施?
N=64;%周期约为195
k=0:
N-1;
x=cos(2*pi.*k./15)+0.75*cos(2.3*pi.*k./15);
X=fftshift(fft(x,N));
subplot(2,2,1);
stem(k-N/2,abs(X));title('幅频特性');
subplot(2,2,2);
stem(k-N/2,angle(X));title('相频特性');
X=fftshift(fft(x,4*N));
subplot(2,2,3);
stem(abs(X));title('幅频特性');
subplot(2,2,4);
stem(angle(X));title('相频特性');
4.用FFT实现序列和的线性卷积,并将该结果与直接求解线性卷积的结果进行对比。
N=17;
n=0:
11;
x=0.8.^n.*ones(1,12);
h=ones(1,6);
X=fftshift(fft(x,N));
H=fftshift(fft(h,N));
Y=X.*H;
y1=ifft(Y,N);
subplot(2,1,1);
stem(abs(y1));
subplot(2,1,2);
y2=conv(x,h);
stem(y2);
5.设x1(n)和x2(n)是如下给出的两个4点序列:
①求它们的线性卷积x3(n)。
②计算圆周卷积x4(n)使它等于x3(n)。
N=7
x1=[1,2,2,1];x2=[1,-1,-1,1];
x3=conv(x1,x2);
X1=fft(x1,N);X2=fft(x2,N);X4=X1.*X2;
x4=ifft(X4)
subplot(2,1,1);stem(x3);
subplot(2,1,2);stem(x4);
6.已知序列
利用FFT分析下列信号的幅频特性,频率范围为,N=500点。
(1)
(2)若将上述x(n)乘以cos(pn/2),重做
(1)
N=500
n=-50:
50;
x1=exp(-0.005*n.^2);
y1=exp(-0.02*n.^2);
y2=exp(-0.02*n.^2).*cos(n.*pi);
Y1=fftshift(fft(y1,N));
Y2=fftshift(fft(y2,N));
subplot(2,2,1);stem(y1);title('信号波形');
subplot(2,2,3);stem(abs(Y1));
subplot(2,2,2);stem(y2);title('信号波形');
subplot(2,2,4);stem(abs(Y2));
实验思考题
1.既然可直接由DTFT定义计算序列DTFT,为何利用DFT分析序列的频谱?
DFT用于分析有限长序列更方便。
DFT本身是一个序列,适合计算机计算。
2.若序列持续时间无限长,且无解析表达式,如何利用DFT分析其频谱?
利用窗函数截短。
3.在利用DFT分析离散信号频谱时,会出现哪些误差?
如何克服或改善?
频谱混叠,频率泄露,使频率无法分辨,应该增加抽样点数N,选择合适的窗函数。
4.在利用DFT分析离散信号频谱时,如何选择窗函数?
尽量宽,不要突变。
5.序列补零和增加序列长度都可以提高频谱分辨率吗?
两者有何本质区别?
①不能,②能。
信号长度N决定分辨率高低。
N一定时无论补零多少,分辨率不变。
补零是DFT中常用的方法,只能使序列的频谱变得细致,但不能提高序列的频率分辨率。
只有从序列中增加有效长度,才能得到序列的高分辨率频谱。