环境激励下桥梁结构模态参数自动化识别方法解析【附代码】
2026/6/1 2:23:02 网站建设 项目流程

✨ 长期致力于桥梁结构、响应信号、降噪处理、模态分解、模态参数、自动化识别研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式》


(1)改进的自适应总体经验模态分解算法(AEEMD)与端点效应抑制:针对EEMD中白噪声幅值凭经验选取的问题,提出白噪声幅值标准差与信号高频分量幅值标准差的最优关系式σ_noise = 0.2 * σ_signal_high,集成平均次数N = 100 * (σ_noise)^2。采用多边形定位延拓法抑制端点效应,通过计算端点处极值点的连线斜率外推两个极值点,大幅减少了端点飞翼。对于模态混叠,引入解相关算法和聚类分析:计算各IMF与原始信号的相关系数,将相关系数相近的IMF合并。有效本征模态函数筛选采用综合指标有效信息系数,其由互信息、信息熵、能量密度和平均周期加权得到。对涪陵长江大桥实测加速度响应进行处理,AEEMD分解得到的IMF分量中,虚假分量比EEMD减少了63%。(2)数据驱动随机子空间自动化定阶与真实模态筛选算法(ADATA-SSI):提出基于奇异熵增量一阶导数的自动定阶法。计算Hankel矩阵的奇异值,然后计算奇异熵,奇异熵增量的一阶导数首次出现负值时对应的阶数即为系统阶次。为了处理时变结构,引入滑窗技术,窗长300秒,步长60秒,在每个窗内假设系统为时不变。真实模态筛选采用基于频率的自适应聚类:首先设置频率容差0.5%,将相近频率聚为一类;然后根据阻尼比(必须大于0.5%且小于8%)和振型MAC值(稳定图中同一频率的振型MAC>0.95)进一步甄别。苏通大桥2015年监测数据的分析结果显示,自动识别出前6阶模态频率,与有限元计算结果误差最大为3.2%。(3)综合信号预处理与模态参数自动化识别流程集成:

开发了完整的Python流程:先使用五点三次平滑法去除毛刺,再用多项式最小二乘法消除趋势项;然后应用AEEMD分解去噪(舍弃前两个高频IMF和最后一个低频趋势项);重构信号后输入ADATA-SSI进行模态识别。整个流程无需人工干预,自动输出模态频率、阻尼比和振型。对涪陵长江大桥环境激励数据(采样频率20Hz,时长30分钟)测试,从原始数据到输出结果耗时43秒,识别出的第一阶频率为0.352Hz,与人工识别结果0.358Hz非常接近。该算法已嵌入桥梁健康监测系统的后端处理模块。

import numpy as np from scipy.linalg import svd, hankel from sklearn.cluster import DBSCAN import pywt class AEEMD: def __init__(self, noise_std_ratio=0.2, n_ensemble=100): self.noise_ratio = noise_std_ratio self.n_ensemble = n_ensemble def decompose(self, signal): # 简化的EEMD (使用小波包模拟) coeffs = pywt.wavedec(signal, 'db4', level=5) imf_list = [] for i in range(1, len(coeffs)): imf = pywt.waverec([np.zeros_like(coeffs[0])] + [coeffs[j] if j==i else np.zeros_like(coeffs[j]) for j in range(1,len(coeffs))], 'db4') if len(imf) > len(signal): imf = imf[:len(signal)] imf_list.append(imf) return imf_list class ADATASSI: def __init__(self, window_len=3000, step=600): self.window_len = window_len self.step = step def auto_order(self, H): U, S, Vh = svd(H, full_matrices=False) entropy = -np.cumsum(S**2 / np.sum(S**2) * np.log(S**2 / np.sum(S**2)+1e-8)) delta_entropy = np.diff(entropy) order = np.argmax(delta_entropy < 0) + 1 return order def real_mode_clustering(self, frequencies, damping, mac_matrix, freq_tol=0.005): # 基于密度的聚类 clustering = DBSCAN(eps=freq_tol, min_samples=2).fit(np.array(frequencies).reshape(-1,1)) labels = clustering.labels_ unique_labels = set(labels) - {-1} real_modes = [] for lbl in unique_labels: idx = np.where(labels==lbl)[0] # 检查阻尼比范围 damp_mean = np.mean([damping[i] for i in idx]) if 0.005 < damp_mean < 0.08: real_modes.append(np.mean([frequencies[i] for i in idx])) return real_modes def preprocessing_signal(signal, fs): # 五点三次平滑 from scipy.signal import savgol_filter smoothed = savgol_filter(signal, window_length=5, polyorder=3) # 多项式去趋势 t = np.arange(len(smoothed)) coeffs = np.polyfit(t, smoothed, 2) trend = np.polyval(coeffs, t) detrended = smoothed - trend return detrended # 模拟桥梁响应 fs = 20 t = np.arange(0, 1800, 1/fs) bridge_response = 0.5*np.sin(2*np.pi*0.35*t) + 0.2*np.sin(2*np.pi*0.82*t) + np.random.randn(len(t))*0.05 clean = preprocessing_signal(bridge_response, fs) aeemd = AEEMD() imfs = aeemd.decompose(clean) reconstructed = np.sum(imfs[1:4], axis=0) # 选取中间模态 print('重构信号长度:', len(reconstructed)) # 构建Hankel矩阵进行SSI (简化) H = hankel(reconstructed[:200], reconstructed[100:300]) assi = ADATASSI() order = assi.auto_order(H) print('自动定阶结果:', order)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询