sunrongxiaowei 发表于 2009-8-15 19:44

关于TFRSTFT的问题

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);
=tfrstft(ym,1:1024,256,hamming(127));
如图,为什么返回的f是一个2倍FFT采样率的矩阵?还有为什么返回的T是和信号长度一样长的矩阵,我认为按照短时傅立叶比变换的理论的话,用加窗的方式然后窗口移动一个点做一次傅立叶变换的话,假设窗长为length_window,每次移动一个点的话,返回的应该是一个(N-overlap)/(length_window-overlap)其中overlap为每次窗口移动后和前一次叠加的点数,在这里为length_window-1.我看了下STFT.m文件没看明白。谢谢解答

sunrongxiaowei 发表于 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='/N;
else
f='/N;
end;
end;
哪么得到的f*fs就是原来信号的频率了,
为什么返回的T是和信号长度一样长的矩阵,我认为按照短时傅立叶比变换的理论的话,用加窗的方式然后窗口移动一个点做一次傅立叶变换的话,假设窗长为length_window,每次移动一个点的话,返回的应该是一个(N- overlap)/(length_window-overlap)其中overlap为每次窗口移动后和前一次叠加的点数,在这里为 length_window-1.
以为这个窗口滑动的时候是从窗口中心开始滑动,也就是窗口中点对应的信号的第一个位置,也就是窗口的中心位置左边最开始时没和信号进行叠乘的,在移到最后的时候,窗口会移出信号范围,也就是在最后的时候窗口的中心对应着信号最后一个数据点,也就是窗口的右边部分已经移出了信号范围,所以得到的是一个和信号长度一样的时间返回值T。
我回答下方便以后遇到类似问题的同学。还是谢谢大家

sjh2100 发表于 2011-11-17 09:05

这个句子:
f='/N;
好像里面的步长是0 啊?{:{13}:}
页: [1]
查看完整版本: 关于TFRSTFT的问题