- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息工程概论-窗口傅里叶变换
第 PAGE \* MERGEFORMAT 12 页 共 NUMPAGES \* MERGEFORMAT 12 页
信息工程概论作业
——窗口傅里叶变换
姓名:白子轩 学号:2130602008 班级:信计31
传统的傅里叶变换
我们都知道,信号分析中最重要的两个参数是时间和频率,而我们一般所得到的信号表示形式都是的形式,而我们可以通过传统的傅里叶变换,可以把信号变为频域表示。
但是,传统的傅里叶变换只对平稳的信号有用。对于非平稳的信号需要用时间和品率的联合函数来表示信号。因此,我们需要短时傅里叶变换,也就是窗口傅里叶变换。
窗口傅里叶变换
对于信号的频率是随时间变化的信号。为了获得它的随时间变化的频谱,最采用的处理办法是加窗技术对信号截取,然后对截取的局部信号作Fourier变换。然后不断地移动窗口函数中心的位置,就可以得到信号的局部区域的瞬时频率,
因此,对于连续的信号,它的窗口傅里叶变换为:
窗口傅里叶逆变换为:
而对于离散的信号,它的窗口傅里叶变换为:
窗口傅里叶逆变换为:
窗口函数
要进行窗口傅里叶变换,首先要要选择窗口函数,窗口函数有很多,例如高斯窗、hamming窗和Hanning窗等等。其中高斯窗函数被设计为了分析瞬态信号,Hamming和Hann窗函数被设计为了分析窄带信号,Kaiser-Bessel窗函数可用于更好地分离两个频率成分非常接近但振幅完全不同的信号。
在matlab中我们也可以直接调用一些窗口函数,调用的方法如下:
实验
实验1:
题目:
在这里我先做了一下书上的例子,对线性调频信号进行频谱分析。
题目分析:
这个例子有两种做法,第一种方法是直接调用matlab中的spectrogram函数,第二种方法是按照定义选取窗口函数,然后对每一小段的做快速傅里叶变换就可以了。
方法一:
源程序:
clear
t=0:0.001:10;
t1=t;
f1=sin(2*pi*2*power(t,2));
subplot(2,2,1);
plot(t,f1);
subplot(2,2,2);
g=1/6*exp(-0.5*power(t,2)).*(t=-3 t=3)+0.*(t3 | t-3);
t=-4:0.01:4;
g1=1/6*exp(-0.5*power(t,2)).*(t=-3 t=3)+0.*(t3 | t-3);
plot(t,g1);
subplot(2,2,3);
[S,F,T,P] = spectrogram(f1,gausswin(600),580,600,1E3);
surf(T,F,10*log10(abs(P)),edgecolor,none);
axis([0 10 0 50])
view(0,90);
xlabel(Time (Seconds));
ylabel(Hz);
subplot(2,2,4);
surf(T,F,10*log10(abs(P))+80,edgecolor,none);
axis([0 10 0 50 0 200])
%axis tight
xlabel(Time (Seconds));
ylabel(Hz);
zlabel(enargy)
得到结果:
结果分析:
我们用的是高斯窗口,得到了一个很好的结果,无论是2D图还是3D图,都与书上的图十分相似。但有一个十分大的缺陷,就是无法重构原来的信号,因为我们是直接调用的spectrogram函数,并不太知道里面的具体程序是什么样的,所以无法还原原信号,也无法计算误差。
因此我们就需要第二种方法。
方法二:
源程序:
clear
t=0:0.001:10;
t1=t;
f1=sin(2*pi*2*power(t,2));
subplot(3,2,1);
plot(t,f1);
subplot(3,2,2);
g=1/6*exp(-0.5*power(t,2)).*(t=-3 t=3)+0.*(t3 | t-3);
t=-4:0.01:4;
g1=1/6*exp(-0.5*power(t,2)).*(t=-3 t=3)+0.*(t3 | t-3);
plot(t,g1);
N=length(f1);
Nw=20; %窗函数长 window length
L=19; %窗函数每次移动的样点数,重叠宽度
Ts=round((N-Nw)/L)+1; %计算把数据x共分成多少段
nfft=2^ceil(log2(Nw)) ; %FFT的长度
TF=zeros(Ts,nfft); %将存放三维谱图,先清零
%for i=1:Ts
i=0;
f
文档评论(0)