# #总结
SSICOV的函数。M旨在仅利用环境振动自动识别线状结构的固有频率、模态振型和阻尼比。采用协方差驱动的随机子空间识别方法(si - cov)结合聚类算法对稳定图进行自动分析。
该算法的灵感来自Magalhaes等人使用的[1]。应用于吕瑟峡湾大桥[2]的环境振动监测,并与频域分解技术[3]进行了比较。最后,我们发现该算法足够精确地显示出桥的特征频率随温度[4]的变化。
# #内容
提交文件包括:
—数据文件BridgeData.mat
-一个Matlab Live Script Example1。说明了该算法的应用。
-一个Matlab实时脚本Example1_noToolbox。mlx复制Example1,但使用函数SSICOV_noToolbox。
—功能SSICOV,是自动化的SSI-COV算法。
-函数SSICOV_noToolbox,这是自动化的SSI-COV算法,但不使用统计学和机器学习工具箱。将Linkage算法替换为[5]的PHA_Clustering函数,将cluster函数替换为[6]衍生的Cluster2函数。
—函数plotStabDiag。M,绘制稳定图。
欢迎提出任何问题、建议或评论。
# #引用
[1] Magalhaes, F., Cunha, A., & Caetano, E.(2009)。某大跨度拱桥模态参数在线自动识别。机械工程学报,23(2),316-329。
[2] Cheynet E., Jakobsen J. B., & Snæbjörnsson, J.(2016)。复杂地形条件下悬索桥的抖振响应。土木工程学报,2018,474 -487。
[3] Cheynet E., Jakobsen J. B., & Snæbjörnsson, J.(2017)。大型风敏感结构的阻尼估计。工程科学学报,199,2047 -2053。
[4]张晓东,张晓东,张晓东(2017)。温度对悬索桥模态特性的影响。土木结构动力学,第2卷(第87-93页)。施普林格。
[5]立法机构(2021)。快速分层聚类方法- PHA (//www.tatmou.com/matlabcentral/fileexchange/46134-fast-hierarchical-clustering-method-pha), MATLAB中央文件交换。于2021年2月4日取回。
Eric Ogier(2021)。层次聚类(//www.tatmou.com/matlabcentral/fileexchange/56844-hierarchical-clustering), MATLAB中央文件交换。于2021年2月4日取回。
非常酷的东西!谢谢你的分享。
非常感谢
非常感谢。我根本没有注意到。现在这个程序运行得很好。谢谢你的快速回答和真正伟大的程序-它帮助了我很多。
嗨,安娜,
使用可选参数“Ts”可以减少协方差矩阵的最大滞后。如果时间滞后太大,那么第203行中Toeplitz矩阵的构造将会非常耗时。大的时滞也不适合用于识别目的。您可以自定义数字Ts。经验法则是,Ts可以近似等于结构最长特征周期的3倍。假设第一个本征频率为10hz,即本征周期为0.1秒,则Ts = 3x0.1 = 0.3秒,即180个时间步长。如果您选择Ts = 10秒,即6000个时间步,函数将难以计算Toeplitz矩阵,同时为识别算法提供不太好的数据。
谢谢你的回复。我想是的,但我做了一些测试,不幸的是,这段关系对我来说不是那么简单。我的信号的总点数是15631,采样率是600hz(26秒)。对于更长的信号和更低的采样率,以及更大的矩阵,计算非常快。即使在测试示例中,信号采样的个数也比我的大得多。重要的频率在40hz左右。我可以把信号采样到120赫兹,但也许我做错了。
嗨,安娜,
如果您有很长的记录和600hz的采样频率,在函数SSICOV中创建的交叉协方差矩阵将太大,无法在Matlab中处理。如果你研究的结构振动频率较低,例如,大约1hz,你可以大大降低采样频率,例如,10-20 Hz,但仍然使用较长的记录持续时间。如果你的结构的振动频率在50赫兹或100赫兹左右,它可能足够好,有较短的记录持续时间,例如,只有几分钟。
你好,我非常喜欢你的节目,它非常有用。然而,我有一件事有问题。我的数据不是很长,但是当我将采样设置为600Hz时,它需要很长时间来计算,然后我得到了一个与内存相关的错误。你能告诉我怎么解决吗?
因为我是OMA的新手,我想逐行学习这个算法,
在modalID函数中(第335-339行),
从eig (A)确定fn
这些参考是什么?
注:与Itachi的问题是私下讨论解决的。主要结论是:(1)输入必须是动态加速度或位移响应,而不是自由衰减响应(2)沿线状结构的响应必须记录在至少两个不同的位置。
我得到这个错误,我有一个8秒的信号dt= 0.005。请问,我怎样才能摆脱这个问题?
使用SSICOV/blockHankel出错(第196行)
IRF必须是一个三维矩阵,尺寸
SSICOV错误(第95行)
[U, V] = blockHankel (IRF);
ex错误(第59行)
[fn0, zeta0 phi0 paraPlot] = SSICOV (Y, t (1));
伟大的工作!
需要统计和机器学习工具箱中的“链接”和“聚类”。
这是我用过的最好的方法。
有时测量数据被记录为列向量。把这几行放到82行怎么样?
如果是Nyy > N
y = y ';
[Nyy N] =大小(y);
结束
谢谢您的回复,先生,我使用的是matlab 2015版。
你好,马蒂斯著名ullah,
我无法再现你得到的错误。编译运行在Matlab 2018b中没有崩溃。我不知道您使用的是哪个Matlab版本,但一个太旧的版本可能是错误消息的一个可能原因。
我运行了example1。mlx的默认数据和得到以下错误,E. Cheynet先生请帮助我消除这些错误,因为我是新的matlab。
SSICOV错误(第149行)
[fn3, zeta3 phi3] = myClusterFun (fn, zetaS,φ,mac);
Example1中的错误(第34行)
[fn0, zeta0 phi0 paraPlot] = SSICOV (rz, dt, Nmin”2“Nmax”,50岁,Ts, 15);
谢谢你的回答
如果我降低采样频率约100倍(Fs=1e-4),则该代码是工作的。
嗨mmazloumi,
通过设置最大延迟0.1秒,时间步长为1e-6秒,您创建的协方差矩阵为[M x M x 1e5],其中M是传感器的数量。结果块Toeplitz矩阵太大了,无法用Matlab处理。为了避免使Matlab崩溃,您需要一个远低于1e5的数字。
我有一个长度为0.1秒,时间为1e-6的信号。
当我把Ts=0.1秒,然后有一个错误:
“错误使用零
内存不足。为您的选项输入帮助记忆。
SSICOV/blockHankel错误(第205行)
T1 = 0 (M * N1);
SSICOV错误(第97行)
[U, V] = blockHankel (IRF);“
当我输入Ts=1秒或更大,有另一个错误:
“指数超过矩阵维度。
SSICOV/NExT错误(第270行)
IRF (oo, jj:) = h0 (1: M);
SSICOV错误(第95行)
(IRF ~] =下一个(y, dt, p.Results.Ts p.Results.methodCOV);“
问题是什么,我怎样才能得到真正的结果。
问候
我明白了,谢谢你的解释。
本文“卡多佐R,卷曲,巴博萨F。,2015 -自动模态识别的进展SHM”他们尝试类似的非规范化模式之间的距离必须执行哪些操作估计,但现在包括MAC,它扩展与任意常数(Hz)单位,也许你可以看看,寻找灵感。也许,对于普通用户来说,坚持选择一种距离度量是很酷的,但对于高级用户来说,可以在少数甚至更好的度量中进行选择,加载自己的距离函数作为可选参数。类似于MATLAB自己的“pdist”实现。
黑Mihhail,
说得好!我将尝试看看我是否可以更严格地实现pos = fn0(:)+1-MAC0(:)的MAC数;在提交的进一步版本中。
如果不包含MAC号,则根据“eps_cluster”条件选择集群。我不知道在没有使用MAC号作为额外标准的情况下,聚类分析将在哪个点正常工作。到目前为止,我已经能够区分模式只有0.009 Hz的1.3公里长跨度桥梁使用一个低值的eps_cluster。
谢谢你的回答,
另一个问题是,如果在距离上不使用MAC,那么是否有可能检测到间隔很近的模式。我看到,由于它们在频率上的接近,它们将聚集在一起,MAC可能有用,以避免它?
嗨Mihhail,
这是一个非常好的观点!我最初将变量“pos”定义为一个与频率维度相同的量,因为这样使用标准“eps_cluster”更直观。我忘记在以前版本的SSICOV函数中删除“1-MAC0(:)”。这个函数仍然工作得很好,因为在嵌套函数中研究的数据集已经对应了稳定极点,因此1-MAC0几乎为零。
在Magalhaes et al[1]的论文中,变量pos确实是没有维数的。在更新版本中,我使用了Ref.[1]中使用的定义。然而,由于现在使用相对距离进行聚类分析,在更新的函数中,标准“eps_cluster”要大得多。我认为选择pos = fn0(:)仍然是可以接受的,因为MAC数对聚类分析的影响有限。使用"pos = fn0(:)"的另一个参数是避免在标准"eps_cluster"和"eps_MAC"之间引入依赖关系。
您好,非常感谢您的贡献,
我有一个关于第450行SSICOV函数的问题,
当你聚类时,你首先用:
pos = fn0 (:) + 1-MAC0 (:);
纸上的Magalhaes[1]使用相同的距离,但频率是标准化的,所以这是你的实现中的一个错误还是你打算使用这个距离?
无论如何,非常感谢您的工作,它有助于开发结构健康监测工具箱,为我的大学
https://se.mathworks.com/matlabcentral/fileexchange/68988-shmtoolbox
嗨Xinzhe元,
错误可能是由于交叉协方差矩阵没有正确建立而触发的。我将更新这个函数,以提供更健壮的T1定义。然而,它可能不会解决您的问题,而只是触发一个新的错误。我建议您检查用作输入的时间延迟(请参阅可选参数)是否合适。
嗨,我得到一个错误:
未定义函数或变量'T1'。
SSICOV/blockHankel错误(第207行)
如果或(任何(isinf (T1(:))),任何(isnan (T1 (:)))),
如果你能看一下,我将不胜感激。