声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2602|回复: 2

[FFT] 关于TFRSTFT的问题

[复制链接]
发表于 2009-8-15 19:44 | 显示全部楼层 |阅读模式

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

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

x
clear;
clc;
t=0:0.001:1.024-0.001;
N=1024;
y1=chirp(t,0,1,350);
ym=y1';
ym=hilbert(ym);
%s=spectrogram(y1,128,120,512,1e3);
[tfr,t,f]=tfrstft(ym,1:1024,256,hamming(127));
如图,为什么返回的f是一个2倍FFT采样率的矩阵?还有为什么返回的T是和信号长度一样长的矩阵,我认为按照短时傅立叶比变换的理论的话,用加窗的方式然后窗口移动一个点做一次傅立叶变换的话,假设窗长为length_window,每次移动一个点的话,返回的应该是一个(N-overlap)/(length_window-overlap)其中overlap为每次窗口移动后和前一次叠加的点数,在这里为length_window-1.我看了下STFT.m文件没看明白。谢谢解答
STFT11.jpg

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2009-8-16 11:40 | 显示全部楼层
呵呵  没人来回答啊  我自己来回答吧  我摸索了一个上午,看了下matlab的源程序,已经搞明白了。为什么返回的f是一个2倍FFT采样率的矩阵?那是程序考虑了步长精度的问题,可以把tfrstft.m后面的返回f的部分改成这样,if (nargout<=1),
tfrqview(abs(tfr).^2,x,t,'tfrstft',h);
elseif (nargout==3),
if rem(N,2)==0,
  f=[0:N/2-1 -N/2:-1]'/N;
else
  f=[0:(N-1)/2 -(N-1)/2:-1]'/N;  
end;
end;
哪么得到的f*fs就是原来信号的频率了,
为什么返回的T是和信号长度一样长的矩阵,我认为按照短时傅立叶比变换的理论的话,用加窗的方式然后窗口移动一个点做一次傅立叶变换的话,假设窗长为length_window,每次移动一个点的话,返回的应该是一个(N- overlap)/(length_window-overlap)其中overlap为每次窗口移动后和前一次叠加的点数,在这里为 length_window-1.
以为这个窗口滑动的时候是从窗口中心开始滑动,也就是窗口中点对应的信号的第一个位置,也就是窗口的中心位置左边最开始时没和信号进行叠乘的,在移到最后的时候,窗口会移出信号范围,也就是在最后的时候窗口的中心对应着信号最后一个数据点,也就是窗口的右边部分已经移出了信号范围,所以得到的是一个和信号长度一样的时间返回值T。
我回答下方便以后遇到类似问题的同学。还是谢谢大家

评分

1

查看全部评分

发表于 2011-11-17 09:05 | 显示全部楼层
这个句子:
f=[0:(N-1)/2 -(N-1)/2:-1]'/N;
好像里面的步长是0 啊?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-16 04:21 , Processed in 0.064371 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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