2365215 发表于 2008-5-1 22:39

关于tftb工具箱,请大侠们帮忙

我用其中的tfrsp函数提取一组信号的频率,我是按着里面给的demo写的

tfrsp(Xrs',tts,256,tftb_window(61,'Hanning'),1);

但是总是出错

??? Subscript indices must either be real positive integers or logicals.
Error in ==> tfrsp at 87
tfr(indices,icol)=x(ti+tau).*conj(h(Lh+1+tau))/norm(h(Lh+1+tau));

我看了一下,里面的indices是从2到31,是正数。

我不明白到底哪里出问题了。


还有就是函数instfreq(Xrs,tts)提取频率时候,提取出来的频率就两个值。无法像例子中能提取出连续的频率。


我用的是在网上下的tftb工具箱里面的函数。

我把数据传上来,大虾们帮我看一看吧。

谢谢了

[ 本帖最后由 2365215 于 2008-5-1 23:12 编辑 ]

songzy41 发表于 2008-5-2 09:16

在函数
=TFRSP(X,T,N,H,TRACE)
中的T,不是实际的时间,它的解释是
T   : time instant(s)          (default : 1:length(X)).
所以在楼主调用中用了实际的时间序列,所以出了错。可用1:2001。

2365215 发表于 2008-5-2 09:56

谢谢了,我试一试

这里的time instant(s)是什么意思?

2365215 发表于 2008-5-2 22:40

太好,至少现在我看到结果了

非常感谢2楼的,谢谢了。

2365215 发表于 2008-5-2 22:48

不过现在我还是有疑问

变换的时候用的t是1:2001,

那变换出来的频率是不是我还要处理一下,也就是说程序默认的数据点是一秒一个

如果我的采样频率是32hz,那么程序得到的频率要乘以32才是真实的频率?

songzy41 发表于 2008-5-3 08:37

本帖最后由 wdhd 于 2016-9-10 14:39 编辑

原帖由 2365215 于 2008-5-2 22:48 发表
不过现在我还是有疑问

变换的时候用的t是1:2001,

那变换出来的频率是不是我还要处理一下,也就是说程序默认的数据点是一秒一个

如果我的采样频率是32hz,那么程序得到的频率要乘以32才是真实的频率?
对的,TFRSP给出的是归一化的频率,在实际作图时,要把函数给出的频率f乘以你的采样频率。

2365215 发表于 2008-5-3 17:53

输出频率是f,还是那个tfr啊?

如果我想得到信号的频率的曲线应该如何处理呢?

这里就先考虑幅值最大的频率最为输出的频率.


我看计算后tfr的结果为120*2001的矩阵。是不是每一行为一个频率点对应的幅值,每一列为相对时间对应的幅值?
如果是这样的话,每一行对应的频率点是多少呢,如何设置?

[ 本帖最后由 2365215 于 2008-5-3 18:17 编辑 ]

songzy41 发表于 2008-5-3 20:01

输出频率是f,不是那个tfr,tfr是时间t和频率f的函数,是一个复数值。它是每一行为一个频率点对应的幅值,每一列为相对时间对应的幅值。把f乘以fs就是实际频率值。

2365215 发表于 2008-5-3 20:43

tfr每一行对应的频率是怎么来的呢?

我看计算出的tfr都是正实数啊,里面没有复数。

我是这么算的、:

=tfrsp(Xrs',1:2001,120,tftb_window(61,'Hanning'),1)
freq1=f'*tfr;
plot (freq1, 'DisplayName', 'freq1', 'YDataSource', 'freq1'); figure(gcf);

结果的图看起来也不对啊。

songzy41 发表于 2008-5-4 07:45

原帖由 2365215 于 2008-5-3 20:43 发表 http://www.chinavib.com/forum/images/common/back.gif
tfr每一行对应的频率是怎么来的呢?
我看计算出的tfr都是正实数啊,里面没有复数。
我是这么算的、:
=tfrsp(Xrs',1:2001,120,tftb_window(61,'Hanning'),1)
freq1=f'*tfr;
plot (freq1, 'DisplayName', 'freq1', 'YDataSource', 'freq1'); figure(gcf);
结果的图看起来也不对啊。

抱歉,我搞错了,tfr是实数,不是复数。在楼主程序中freq1=f'*tfr;代表什么意思,不明白。给楼主一参考程序:
h=hanning(63);
=tfrsp(Xrs,1:2001,120,h);
imagesc(t/fs,f(1:60)*fs, tfr(1:60,:));
axis('xy')
xlabel('Time (Second)'); ylabel('Frequency (Hz)');
title('Time-Frequency Spectrum')
得的图如下。

[ 本帖最后由 eight 于 2008-5-5 15:12 编辑 ]

2365215 发表于 2008-5-4 08:47

非常感谢,我研究研究。

你程序里面的fs是采样频率吧

有不懂之处我再向你讨教。

[ 本帖最后由 2365215 于 2008-5-4 08:58 编辑 ]

2365215 发表于 2008-5-5 13:49

tfrsp 函数能不能求信号的相位?

或者说能不能求两个信号的相位差?

songzy41 发表于 2008-5-5 18:02

tfrsp 函数不能求信号的相位,因为求出的tfr是STFT的模平方。楼主如果要求相位的话,可用STFT分析。

2365215 发表于 2008-5-5 22:32

谢谢了

非常感谢songzy41对我这么多问题的耐心解答。

2365215 发表于 2008-5-11 22:12

变换的结果tfr中的值是一个什么量?

这个幅值的物理意义又是什么?

如果在某一列中某个值最大,代表着这个值对应的频率在这个时刻所占的比重最大,也就是说这个对应的频率是信号的主要成分?
页: [1] 2
查看完整版本: 关于tftb工具箱,请大侠们帮忙