声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4195|回复: 17

[综合] 关于tftb工具箱,请大侠们帮忙

[复制链接]
发表于 2008-5-1 22:39 | 显示全部楼层 |阅读模式

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

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

x
我用其中的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 编辑 ]

tts.mat

2.81 KB, 下载次数: 9

时间

Xrs.mat

14.15 KB, 下载次数: 7

信号

回复
分享到:

使用道具 举报

发表于 2008-5-2 09:16 | 显示全部楼层
在函数
[TFR,T,F]=TFRSP(X,T,N,H,TRACE)
中的T,不是实际的时间,它的解释是
T     : time instant(s)          (default : 1:length(X)).
所以在楼主调用中用了实际的时间序列,所以出了错。可用1:2001。
 楼主| 发表于 2008-5-2 09:56 | 显示全部楼层
谢谢了,我试一试

这里的time instant(s)是什么意思?
 楼主| 发表于 2008-5-2 22:40 | 显示全部楼层
太好,至少现在我看到结果了

非常感谢2楼的,谢谢了。
 楼主| 发表于 2008-5-2 22:48 | 显示全部楼层
不过现在我还是有疑问

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

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

如果我的采样频率是32hz,那么程序得到的频率要乘以32才是真实的频率?
发表于 2008-5-3 08:37 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-10 14:39 编辑
原帖由 2365215 于 2008-5-2 22:48 发表
不过现在我还是有疑问

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

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

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

对的,TFRSP给出的是归一化的频率,在实际作图时,要把函数给出的频率f乘以你的采样频率。
 楼主| 发表于 2008-5-3 17:53 | 显示全部楼层
输出频率是f,还是那个tfr啊?

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

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


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

[ 本帖最后由 2365215 于 2008-5-3 18:17 编辑 ]
发表于 2008-5-3 20:01 | 显示全部楼层
输出频率是f,不是那个tfr,tfr是时间t和频率f的函数,是一个复数值。它是每一行为一个频率点对应的幅值,每一列为相对时间对应的幅值。把f乘以fs就是实际频率值。
 楼主| 发表于 2008-5-3 20:43 | 显示全部楼层
tfr每一行对应的频率是怎么来的呢?

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

我是这么算的、:

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

结果的图看起来也不对啊。
untitled.jpg
发表于 2008-5-4 07:45 | 显示全部楼层
原帖由 2365215 于 2008-5-3 20:43 发表
tfr每一行对应的频率是怎么来的呢?
我看计算出的tfr都是正实数啊,里面没有复数。
我是这么算的、:
[tfr,t,f]=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);
[tfr,t,f]=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 编辑 ]
es31b.jpg
 楼主| 发表于 2008-5-4 08:47 | 显示全部楼层
非常感谢,我研究研究。

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

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

[ 本帖最后由 2365215 于 2008-5-4 08:58 编辑 ]
 楼主| 发表于 2008-5-5 13:49 | 显示全部楼层
tfrsp 函数能不能求信号的相位?

或者说能不能求两个信号的相位差?
发表于 2008-5-5 18:02 | 显示全部楼层
tfrsp 函数不能求信号的相位,因为求出的tfr是STFT的模平方。楼主如果要求相位的话,可用STFT分析。
 楼主| 发表于 2008-5-5 22:32 | 显示全部楼层
谢谢了

非常感谢songzy41对我这么多问题的耐心解答。
 楼主| 发表于 2008-5-11 22:12 | 显示全部楼层
变换的结果tfr中的值是一个什么量?

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

如果在某一列中某个值最大,代表着这个值对应的频率在这个时刻所占的比重最大,也就是说这个对应的频率是信号的主要成分?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-6 03:14 , Processed in 0.075255 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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