科研训练实验报告1.docx
《科研训练实验报告1.docx》由会员分享,可在线阅读,更多相关《科研训练实验报告1.docx(11页珍藏版)》请在冰点文库上搜索。
![科研训练实验报告1.docx](https://file1.bingdoc.com/fileroot1/2023-5/21/d16d525c-0f90-4e61-b3f5-fc450098ef92/d16d525c-0f90-4e61-b3f5-fc450098ef921.gif)
科研训练实验报告1
科研训练实验报告
——短时傅里叶变换
信息14
李兰鑫
2110502077
摘要
本次实验围绕短时傅里叶变换开展,首先利用MATLAB编程实现短时傅里叶正变换,之后利用短时傅里叶变换分析冲激信号、正弦信号等几种典型的合成信号,并观察得到的时频图,分析窗长变化对时间、频率分辨率的影响,最终得出结论,时窗长度的加宽导致信号的时间分辨率降低,而频率分辨率则会增加。
由此可以看出时间分辨率与频率分辨率成反比关系,不可兼得。
随后,利用短时傅里叶变换分析实测语音信号,观察其时频图,可分析得出与之前相同的结论,但由于语音信号缺乏规律性,相较之前的典型信号时频图。
所得到的时频图分布并不均匀,但通过时频图可以分析得到语音信号的基本频率组成成分,
关键词:
短时傅里叶时频图时间分辨率频率分辨率
一、引言
传统的信号分析与处理的数学工具是傅立叶变换。
应用傅立叶变换可以将信号从时域变换至频域,或从频域变换至时域。
对于频谱不随时间变化的确定性信号以及平稳随机信号,只要取样恰当,随着取样长度的增加,取样信号的傅立叶分析结果会逐步逼近信号的实际频率特性。
然而现实中广泛存在着另一类信号,例如语音信号和通过时变频道传输的信号等,其频谱特性随时间变化而变化,不随取样长度的增加而逐渐收敛,与时间位置有着密切的联系。
这类信号分为确定性时变信号和非平稳随机信号,此时若仍然采用傅立叶变换分析其频谱,会有很大的局限性,因为傅立叶变换是一种信号的整体变换,要么完全在时域,要么完全在频域进行分析处理,无法给出信号的频谱如何随时间的变化规律,则很难对分析结果作出合理的解释。
针对非平稳信号频谱和时间变量之间具有很强的依赖关系,近年来发展了信号的时频联合分析方法,这种方法形成了一个二维域(n,ω),在该二维域中能够表示信号能量随时间变化的规律。
本文讨论短时傅立叶变换(STFT)在数字信号处理中的应用—分析非平稳信号,通过Matlab语言编程来观察短时傅立叶变换对非平稳信号频谱的分析结果。
本次实验主要目的是通过编程实现短时Fourier正变换,并利用短时傅里叶变换分析几种典型的合成信号,观察并分析窗长变化对时间、频率分辨率的影响;以便进一步理解短时傅里叶变换的物理含义;同时,在此基础上尝试利用短时傅里叶正变换分析实测语音信号。
二、实验原理
给定一信号
,其STFT定义为
式中
及
,
并且窗函数
应取对称函数。
STFT的含义可解释如下:
在时域用窗函数
去截
(注:
将
,
的时间变量换成
),对截下来的局部信号作傅立叶变换,即得在
时刻得该段信号得傅立叶变换。
不断地移动
,也即不断地移动窗函数
的中心位置,即可得到不同时刻的傅立叶变换。
这些傅立叶变换的集合,即是
。
显然,
是变量
的二维函数。
三、实验结果
3.1短时傅里叶正变换原代码实现
本段代码是直接利用了MATLAB中的函数specgram,该函数功能为使用短时傅立叶变换得到信号的频谱图。
3.2利用短时傅里叶变换分析信号
(1)δ(t0)
分析:
当信号为冲激函数时,在时域图中为一束冲激,故无论如何加窗,其时间分辨率都为无限大,与之相对应的,在经短时傅里叶变换的频域图中,无法清晰地看到具体频率,即说明其频率分辨度此时为零。
(2)A1sin(2f0πt)
分析:
当信号为正弦信号时,可由时域图看出信号波形在时间上以固定频率周期变化,则其短时傅里叶变换后的频域图为一条平行直线(即上图中的红色部分),则表明该信号在任一时段频率恒定不变。
同时,当所加的高斯窗宽度逐渐变宽时,可观察到由上至下红色区域逐渐变窄,这也说明当时域窗加宽时,信号在时域的分辨率降低,与此相对应的,频域图中的红色线段变细,即频率分辨率提高。
(3)A2sin(2f0πt2)
分析:
当信号变为sin(2f0πt2)之后,可由时域图看到其虽然在周期变化,但波形逐渐密集,即频率逐渐升高,而此时,短时傅里叶变换后的频域图中的红色部分也由之前的平行直线变成了具有一定斜率的直线,表明随着时间的变化,信号的频率在不断增加。
同时,当所加的高斯窗逐渐变宽之后,与上同理,信号在时域的分辨率降低,而在频域图中红线变细,即频率分辨率提高。
(4)合成
(2)与(3)信号
分析:
将2、3中的信号叠加之后进行短时傅里叶变换,可以看到时域图的变化已经不再规律,而经过短时傅里叶变换之后,在频域图中,红色部分也有了明显的变化,由于较窄的高斯窗导致较低的频率分辨率,故上图中32点高斯窗的频域图效果并不是很好,频率区域较为模糊不清,而当高斯窗加宽之后,在128点的高斯窗中的频域图便可以比较明显的看到,有两条红色的线交叉,即2、3的128点高斯窗频域图中的两条红色细线的合成。
同时,也再次证明了时间分辨率与频率分辨率的反比关系。
3.3利用短时傅里叶分析语音信号
当输入一段非常短的语音信号后,可以得到上述频谱图。
由时域图可以看出,有两个比较集中的波形部分,分别对应频域图中红色较深的两部分,从频域图中可以看出,每一个集中波形是由两个不同的频率合成得到的,且随着高斯窗加宽,信号的时间分辨率下降,频率分辨率上升(深红色变细)。
四、结论和讨论
本次实验通过对短时傅里叶变换的学习和研究,使我掌握了新的信号分析的方法。
同时在上课与实践中,对短时傅里叶变换的物理意义有了更好的理解,同时也可以借助频谱图对时间分辨率、频率分辨率进行准确快速的分析。
从实验得到的时频图中可以分析得到,信号的时间分辨率与频率分辨率成反比,二者无法兼得,高的时间分辨率必然导致低的频率分辨率,反之亦然,因此选择合适的时窗宽度,是实验和应用中最为关键的问题。
在上课的过程中,陈老师通过定义的讲解让我初步了解了短时傅里叶,之后又通过不同图像的对比进一步讲解,并通过课堂的互动提问,让我接受知识的效率大大提高,更加集中的听讲,也更加容易的掌握了这一知识和方法。
在课堂基础之上,我翻阅了一些相关的书籍和文献,了解到短时傅里叶变换在图像分析中仍然有很大的作用,同时比我们之前所了解到的傅里叶变换具有更好的实用性。
我也通过查找相关代码和分析文献,最终得到了代码和分析图像结果。
在这一过程中,我也遇到了一些困难。
首先,短时傅里叶变换在MATLAB中有可以直接使用的函数,也可以通过加窗傅里叶的方式变换得到,但是这两种方法所得到的图像却不大相同,specgram函数得到的图像是有不同的颜色划分,与老师上课所展示的图像比较相近,但是感觉效果差了许多,而另一种方式得到的则是变换后的幅度谱,呈现结果不太直观。
在选定了方法之后,我也通过调整采样频率、采样点数、时窗宽度等参数反复进行尝试,得到了认为相对比较理想的结果。
但是在分析语音信号时,由于时窗很窄,所以找到的语音信号也是较短,质量不是非常高,最后的效果也不如之前的直观。
之后我会通过参数的修改尽量让效果变得更加完善。
参考文献
[1]魏松,李琦,赵仁才.基于短时傅立叶变换语言信号分析算法.电子测量技术,2006,29
(1):
16-17.
[2]赵成勇,何明锋.基于特定频带的短时傅里叶分析.电力系统自动化,2004,14:
41-44.
[3]曲丽荣.短时傅立叶变换在数字信号处理中的应用.科技资讯,2007,27:
54-55.
[4]张学敏.基于短时傅立叶变换的敏感语音提取.微型机与应用,2009,24:
46-48.
附:
试验程序
clearall;
clc;
%------------------>BasicParameters<-----------------
f=50;%信号的频率50Hz
fN=1000;%采样频率为1000Hz
n=1000;%采样点数为1000
t=0:
1/fN:
(n-1)/fN;
%------------------>Generatesignals<-----------------
sig1=[1zeros(1,1000)];
sig2=sin(2*pi*f*t);
sig3=sin(2*pi*f*t.*t);
x=sig2+sig3;
%x=wavread('D:
\4.wav');
figure
(1)
plot(x);
%stem(x);
%------------------>windowwidth<-----------------
win1=12.8*fN/100;%12.8ms128点
win2=6.4*fN/100;%6.4ms64点
win3=3.2*fN/100;%3.2ms32点
%------------------>nfftpoints<-----------------
nfft=min(256,length(x));%nfft--做nfft变换的长度,长度为256和信号x长度较小的
%------------------>painting(TimeFrequencyAnalysis)<-----------------
%specgram功能是使用短时傅立叶变换得到信号的频谱图,x--输入信号向量,fN采样频Hz,当使用时无输出参数,会自动绘制频谱图
%----->Gausswindow,differentwindowwidth<-----------
figure
(2)
subplot(311);
specgram(x,nfft,fN,gausswin(round(win3)));%加窗宽为win3高斯窗
xlabel('时间(ms)')
ylabel('频率(Hz)')
title('短时傅里叶时频图,32点高斯窗')
subplot(312);
specgram(x,nfft,fN,gausswin(round(win2)));%加窗宽为win2高斯窗
xlabel('时间(ms)')
ylabel('频率(Hz)')
title('短时傅里叶时频图,64点高斯窗')
subplot(313);
specgram(x,nfft,fN,gausswin(round(win1)));%加窗宽为win1高斯窗
xlabel('时间(ms)')
ylabel('频率(Hz)')
title('短时傅里叶时频图,128点高斯窗')