实验五利用DFT分析模拟信号频谱.docx
《实验五利用DFT分析模拟信号频谱.docx》由会员分享,可在线阅读,更多相关《实验五利用DFT分析模拟信号频谱.docx(15页珍藏版)》请在冰点文库上搜索。
实验五利用DFT分析模拟信号频谱
实验报告
实验课程:
数字信号处理实验开课时间:
2020—2021学年秋季学期实验名称:
利用DFT分析模拟信号频谱实验时间:
2020年9月27日星期日
学院:
物理与电子信息学院年级:
大三班级:
182学号:
184********34姓名:
武建璋
实验目的要求
应用离散傅里叶变换DFT分析模拟信号x(t)的频谱,深刻理解利用DFT分析模拟信号频谱的原理、分析过程中出现的现象及解决方法。
实验仪器用具
装有Matlab的计算机一台
实
验
原
理
连续周期信号相对于离散周期信号,连续非周期信号相对于离散非周期信号,都可以通过时域抽样定理建立相互关系。
因此,在离散信号的DFT分析方法基础上,增加时域抽样的步骤,就可以实现连续信号的DFT分析。
利用DFT计算连续周期信号的频谱
分析步骤为:
(1)确定周期信号的基本周期T0;
(2)计算一个周期内的抽样点数N。
若周期信号的最高次谐频为p次谐波pw0,则频谱中有2p+1根谱线;若周期信号的频谱无限宽,则认为集中信号90%以上(或根据工程允许而定)能量的前(p+1)次谐波为近似的频谱范围,其余谐波忽略不计。
取N>=2p+1;
(3)对连续周期信号以抽样间隔T=T0/N进行抽样,得到x[k];
(4)利用FFT函数对x[k]作N点FFT运算,得到X[m];
(5)最后求得连续周期信号的频谱为X(nw0)=X[m]/N。
利用DFT计算连续非周期信号x(t)的频谱
分析步骤为:
(1)根据时域抽样定理,确定时域抽样间隔T,得到离散序列x[k];
(2)确定信号截短的长度M及窗函数的类型,得到有限长M点
离散序列xM[k]=x[k]w[k];
(3)确定频域抽样点数N,要求N>=M;
(4)利用FFT函数进行N点FFT计算得到N点的X[m];
(5)由X[m]可得连续信号频谱X(jw)样点的近似值。
一、实验预习
实验
方法
、
步骤
、
注意事项
实验方法步骤:
(1)打开MATLAB软件
(2)根据题目要求编写程序
(3)运行程序
(4)分析实验结果
(5)关闭计算机
注意事项:
(1)在使用MATLAB时应注意中英输入法的切换,在中文输入法输入程序时得到的程序是错误的;
(2)MATLAB中两个信号相乘表示为x.*u,中间有个‘.’,同样两个信号相除也是如此;
(3)使用MATLAB编写程序时,应新建一个m文件,而不是直接在Comandante窗口下编写程序;
在使用MATLAB编程时,应该养成良好的编写习惯。
注意事项:
(4)对于实验电脑要爱惜,遵守实验的规则。
(5)程序运行前要检查程序是否正确。
在使用matlab编程时,应该养成良好的编写习惯,新建一个flies编写。
一些快捷键的使用,能提高编程效率。
Help能查询到不懂使用的函数使用方法,比如这个用到的fft和fftshift等函数。
实验现象
及
实验数据记录
【例1.5.1】
已知周期信号x(t)=cos(10*pi*t)+2sin(18*pi*t),计算其频谱。
解:
信号基频
0=2*pirad/s,周期T=1;最高次谐频为9*
0=18*pirad/s,所以N≥(2*9+1=19),程序如下:
%example1_5_1……
clc,clear,closeall
T0=1;
N=19;
T=T0/N;
t=0:
T:
T0;
x=cos(2*pi*5*t)+2*sin(2*pi*9*t);
Xm=fft(x,N);
f=(-(N-1)/2:
(N-1)/2)/N/T;
stem(f,abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('f(Magnitube)');
title('幅度谱');
【例1.5.2】
利用DFT近似分析连续信号x(t)=exp(-t)*u(t)的幅度谱并理论值比较。
fsam=50;
Tp=6;
N=512;
T=1/fsam;
t=0:
T:
Tp;
x=exp(-1*t);
X=T*fft(x,N);
subplot(2,1,1);
plot(t,x);
xlabel('t');
title('时域波形');
w=(-N/2:
N/2-1)*(2*pi/N)*fsam;
y=1./(j*w+1);
subplot(2,1,2);
plot(w,abs(fftshift(X)),w,abs(y),'r-.');
title('幅度谱');
xlabel('w');
legend('理论值','计算值',0);
axis([-10,10,0,1.4])
实验内容
1.利用FFT分析信号
的频谱。
(1)确定DFT计算的各参数(抽样间隔,截短长度,频谱分辨率等);
(2)比较理论值与计算值,分析误差原因,提出改善误差的措施。
%5_1_1……
clc,clear,closeall
T0=1;
N=19;
T=T0/N;
t=0:
T:
T0;
x=exp(-2*t)
Xm=fft(x,N);
f=(-(N-1)/2:
(N-1)/2)/N/T;
stem(f,abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('f(Magnitube)');
title('幅度谱');
%5_1_2……
clc,clear,closeall
fsam=50;
Tp=6;
N=512;
T=1/fsam;
t=0:
T:
Tp;
x=exp(-2*t);
X=T*fft(x,N);
subplot(2,1,1);
plot(t,x);
xlabel('t');
title('时域波形');
w=(-N/2:
N/2-1)*(2*pi/N)*fsam;
y=1./(j*w+1);
subplot(2,1,2);
plot(w,abs(fftshift(X)),w,abs(y),'r-.');
title('幅度谱');
xlabel('W');
legend('理论值','计算值',0);
axis([-10,10,0,1.4]);
2.分析周期信号
频谱时,如果分析长度不为整周期,利用fft函数计算并绘出其频谱,总结对周期信号进行频谱分析时,如何选取信号的分析长度。
%5_2……
clc,clear,closeall
T0=1.5;%周期不为整数时,如1.5时分析
N=19;
T=T0/N;
t=0:
T:
T0;
x=cos(2*pi*5*t)+2*sin(2*pi*9*t);
Xm=fft(x,N);
f=(-(N-1)/2:
(N-1)/2)/N/T;
stem(f,abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('f(Magnitube)');
title('幅度谱');
3.假设一实际测得的一段信号的长度为0.4s,其表达式为x(t)=cos(2pf1t)+0.75cos(2pf2t)其中f1=100Hz,f2=110Hz。
当利用FFT近似分析该信号的频谱时,需要对信号进行时域抽样。
试确定一合适抽样频率fsam,利用DFT分析信号x(t)的频谱。
若在信号截短时使用Hamming窗,由实验确定能够分辨最小谱峰间隔Df和信号长度Tp的关系。
若采用不同参数的Kaiser窗,重新确定能够分辨最小谱峰间隔Df和信号长度Tp的关系。
%5_3……
clc,clear,closeall
fsam=440;
Tp=0.4;
N=55;
T=1/fsam;
t=0:
T:
Tp;
f1=100;f2=110;
x=cos(2*pi*f1*t)+sin(2*pi*f2*t);
Xm=fft(x,N)/N;
f=(-(N-1)/2:
(N-1)/2)/N/T;
subplot(2,1,1);
stem(f,abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('magnitude');
title('幅度谱N=440');
fsam=440;
Tp=0.4;
N=55;
T=1/fsam;
t=0:
T:
Tp;
N=Tp/T+1;
f1=100;f2=110;
y=cos(2*pi*f1*t)+0.75*sin(2*pi*f2*t);
w=0.54-0.46*cos(2*pi*t/(N-1));
x=y.*w;
Xm=fft(x,N)/N;
f=(-(N-1)/2:
(N-1)/2)/N/T;
subplot(2,1,2);
stem(f,abs(fftshift(Xm)));
xlabel('f(Hz)');
ylabel('magnitude');
二、实验内容
实验数据处理及实验
结果分析总结
通过本次实验,我学会应用离散傅里叶变换(DFT),分析连续信号x[k]的频谱。
深刻理解利用DFT分析模拟信号频谱的原理、分析过程中出现的现象及解决方法。
经验:
学习使用matlab快捷键很重要,能大大提高编程效率。
比如方向键的上键能快速输入上次的内容;ctrl+r键全部注释,ctrl+t键取消全部注释(选中的部分);另外,每次编写之前都写一句:
clc,clear,closeall,清除工作空间及面板,这样不会受上一次的操作影响等,使用matlab的help能查找到不熟悉的函数使用方法。
另外,截图时采用Figure中的Edit->CopyFigure以减少图片所占容量,便于编辑。
还可以通过File->SaveAs…保存不同格式的figure图片,便于其他地方其他格式时使用。
通过利用DFT分析模拟信号频谱更加熟悉了matlab的关于傅里叶变换的一些函数及功能作用。
问题
讨论
(1)既然可以直接由DTFT定义计算序列DTFT,为何利用DFT分析序列的频谱?
答:
DFT对于分析有限的频谱更为方便。
(2)若序列持续时间无限长,且无解析表达式,如何利用DFT分析其频谱?
答:
利用其窗函数分析其频谱。
(3)利用DFT分析离散信号频谱时会出现哪些误差?
如何克服或改善?
答:
频率分不出,应该多抽取些。
(4)在利用DFT分析离散信号的频谱时,如何选择窗函数?
答:
根据每个窗函数不同的特性,去选择窗函数
(5)序列补零和增加序列长度都可以提高频率分辨率么?
两者有何本质区别?
答:
可以,序列补零可以使序列的频谱变得更为细致,但不能提高序列的频率分辨率,只有采集更多的有效数据,才能得到序列的高分辨率频谱。
实验成绩评定
指导老师签名:
年月日