声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1801|回复: 13

[其他] STFT得到的是什么?

[复制链接]
发表于 2008-11-14 15:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我用对一个数组进行STFT变换,这个数组的前一段是1和2交替出现,后一段是11和12交替出现,就是比前一段多个直流10,我觉得两段数据的差异只在直流,反应到频谱图上也就是在频率为零的位置有差别,但结果不是这样的,后一段各个频率值对应的能量都比前一段高,请高手分析!

STFT谱图

STFT谱图
回复
分享到:

使用道具 举报

发表于 2008-11-14 22:52 | 显示全部楼层
建议上传数据档及程序, 让有兴趣者试试
 楼主| 发表于 2008-11-15 10:32 | 显示全部楼层
sbp=[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11];
%STFT变换
h=window(@hamming,5);
tfrstft(sbp',1:length(sbp),60,h);
发表于 2008-11-15 11:56 | 显示全部楼层
主要是窗函数取得太短:
h=window(@hamming,5);
就是只有5个点,虽然FFT时进行了补0,但有效数只有5个数据。如果把窗函数取得长一些,直流也主要反映在0的位置了。
我的设置为:
h=window(@hamming,5);
tfrstft(sbp',1:length(sbp),256,h);
得图如下。
luy11b.jpg
 楼主| 发表于 2008-11-15 14:05 | 显示全部楼层
楼上说的对,窗函数取长了会把直流分量控制在频率为零附近,数据的前一部分和后一部分差别也只有直流部分,其它频率成分的能量应该是相同的,为什么前一部分什么都没有了呢?另外请问下,窗口长度的选择有什么标准吗?Matlab中默认的是1/4数据长度。
发表于 2008-11-15 19:50 | 显示全部楼层
h=window(@hamming,5), 笔误了吧! 应该为31!?
资料不是仅有184, N为何取256? 为何不取128?

还有specgram(sbp)的图又是一个不同样子? 为什麽?
发表于 2008-11-15 20:09 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-13 13:54 编辑
原帖由 ChaChing 于 2008-11-15 19:50 发表
h=window(@hamming,5), 笔误了吧! 应该为31!?
资料不是仅有184, N为何取256? 为何不取128?

还有specgram(sbp)的图又是一个不同样子? 为什麽?

谢谢,是给错了,应该h=window(@hamming,31)。
N为何取256或取128都可以的,实际上每一次数据是31个,而进行128或256点(31个数据后补0)的FFT,它和数据长度(184个样点)没有关系。

specgram函数是在MATLAB6.5或以前的版本中才有,在MATLAB7的版本中已不带有了。它的调用方法和tfrstft不同,而且在数据安排上也与tfrstft不同,所以结果也不同。
发表于 2008-11-15 20:16 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-13 13:54 编辑
原帖由 luyysea 于 2008-11-15 14:05 发表
楼上说的对,窗函数取长了会把直流分量控制在频率为零附近,数据的前一部分和后一部分差别也只有直流部分,其它频率成分的能量应该是相同的,为什么前一部分什么都没有了呢?另外请问下,窗口长度的选择有什么标准吗 ...

数据的前一部分的频谱实际上也主要在直流部分,但它与后面的直流部分相比,只有后面的十分之一,所以作的图上看不出前一部分的直流分量。
窗口长度的选择没有严格的标准,一般至少要主要信号周期的3-4倍,同时与分析后的分辨率有关系,因此是一个折中的选择。

评分

1

查看全部评分

发表于 2008-11-15 20:38 | 显示全部楼层
谢谢! 配合宋老师解释再看看help说明! 更清楚如何使用
 楼主| 发表于 2008-11-16 10:18 | 显示全部楼层
谢谢各位的帮助,不过有一点我还是不明白,就是前一段数据的除零之外的其它频率成分不应该一点也观察不出来吧?前后两段数据的交流部分是相同的,直流大不影响其它频率成分的观察吧,应该在频谱上有所反应吧
发表于 2008-11-16 15:01 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-13 13:54 编辑
原帖由 luyysea 于 2008-11-16 10:18 发表
谢谢各位的帮助,不过有一点我还是不明白,就是前一段数据的除零之外的其它频率成分不应该一点也观察不出来吧?前后两段数据的交流部分是相同的,直流大不影响其它频率成分的观察吧,应该在频谱上有所反应吧

对于其它频率成分,就如同上帖所指出的那样,与后面的直流部分相比幅值太小了,所以在谱图中显示不出来。但如果把程序稍修改一下:
h=window(@hamming,31);
[B,T,F]=tfrstft(sbp2',1:length(sbp2),256,h);
imagesc(T,F(1:128),20*log10(abs(B(1:128,:))));                                    
axis('xy');
得到下图,可看出前面部分的直流分量,及两段数据中的交流分量部分。
luy12b.jpg
 楼主| 发表于 2008-11-16 16:29 | 显示全部楼层
宋老师真是博学!谢谢宋老师!谢谢各位!
发表于 2008-11-25 11:11 | 显示全部楼层
我想问一下,在这里横坐标的是什么频率?我看到好多例子都在0-0.5Hz之间
还有时间轴如何从0-100改为0-1,在图形显示的时候时间轴为什么只能显示从0到数据长度范围?
发表于 2008-11-25 14:28 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-13 13:54 编辑
原帖由 kangtj 于 2008-11-25 11:11 发表
我想问一下,在这里横坐标的是什么频率?我看到好多例子都在0-0.5Hz之间
还有时间轴如何从0-100改为0-1,在图形显示的时候时间轴为什么只能显示从0到数据长度范围?

在以上的图中,纵坐标表示频率,范围在0-0.5Hz之间;而横坐标表示的是时间(样点数)。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 02:41 , Processed in 0.067361 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表