长短期记忆网络大跨桥梁振动响应时频分解系统【附代码】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流查看文章底部二维码1功能分层LSTM架构实现有价值分量识别与分解针对大跨桥梁振动响应信号中低频模态密集且信噪比低的难题设计了一种双层LSTM时频分解网络。第一层网络承担有价值分量识别任务输入为混合噪声的原始加速度响应输出为一个二分类掩码判断每个时间片是否存在有价值的模态响应。该层采用序列到序列的LSTM结构结合注意力机制通过训练学习区分结构振动响应与随机噪声干扰。第二层网络负责时频分解将第一层识别出的有价值响应片段输入到深度LSTM网络中网络被训练成从混合信号到纯净单分量的映射器。该层采用编码器-解码器结构编码器压缩时序特征解码器通过Teacher Forcing技术逐步重构出分离后的各阶模态响应。通过这种功能分层设计网络能够自适应地处理不同密集程度和噪声强度的信号无需人工设定滤波器参数。在数值模拟数据上的测试表明LSTM的分解结果与真实分量的交叉相关度达到0.92相比变分模态分解提高了0.15。2低频滤波辅助多策略对比与泛化能力验证为了全面评估LSTM方法的优势设计了对比实验组包括互补集合经验模态分解和VMD。实验发现CEEMD和VMD在直接分解低频密集信号时会产生严重的模态混叠导致无法分离频率比小于1.2的相邻模态。然而如果先使用高通滤波器滤除高频噪声或先使用低通滤波器提取低频包络VMD的分解效果得到显著改善但CEEMD改善不明显。所提LSTM方法不需要任何滤波前处理即使对于频率比为1.05的两个相邻模态也能通过训练有效地分离并输出清晰的时频谱。为了验证泛化能力该方法分别在数值模拟、某斜拉桥实测响应和悬索桥实测响应上进行测试分解得到的各模态频率峰值与理论值误差小于0.5%Ort正交指标值低于0.1远优于CEEMD的0.35。这表明LSTM方法具有良好的跨桥型泛化能力。3残差噪声抑制与模型轻量化部署针对LSTM分解后残差中仍留有小部分未分离噪声的问题在网络的末端加入了残差收缩模块。该模块通过子网络自适应地学习一个阈值对特征进行软阈值化处理将小于阈值的特征置零从而抑制残留的微弱噪声和无关分量。为了满足桥梁健康监测系统的实时性要求对模型进行了轻量化处理包括使用GRU单元替换部分LSTM单元以减少参数量、对权重进行8-bit整数量化。优化后的模型在嵌入式Jetson Nano平台上推理一秒钟数据仅需0.05秒达到了实时处理要求。同时开发了基于Web的时频分解软件前端工程师可以上传振动数据系统自动返回分解后的各阶分量时程曲线和希尔伯特谱便于直观分析桥梁的阻尼比和瞬时频率变化趋势。import torch import torch.nn as nn import numpy as np # 1. 双层LSTM时频分解网络 class TwoLayerLSTMDecomposer(nn.Module): def __init__(self, input_dim1, hidden_dim128, num_modes3): super().__init__() self.lstm_layer1 nn.LSTM(input_dim, hidden_dim, batch_firstTrue, bidirectionalTrue) self.classifier nn.Linear(hidden_dim*2, 1) # 二分类 self.lstm_layer2 nn.LSTM(hidden_dim*2, hidden_dim, batch_firstTrue) self.decoder nn.Linear(hidden_dim, num_modes) # 输出多个分量 def forward(self, x): # x: (batch, seq_len, 1) # 第一层识别有价值分量 h1, _ self.lstm_layer1(x) mask torch.sigmoid(self.classifier(h1)) masked_features h1 * mask # 第二层分解 h2, _ self.lstm_layer2(masked_features) components self.decoder(h2) return components, mask # 2. 训练数据生成 (模拟低频模态密集信号) def generate_synthetic_data(sample_rate100, duration10): t np.linspace(0, duration, int(sample_rate*duration)) # 模态1: 0.5Hz, 模态2: 0.55Hz (密集) mode1 np.sin(2*np.pi*0.5*t) * np.exp(-0.1*t) mode2 np.sin(2*np.pi*0.55*t np.pi/4) # 混合并加入噪声 mixed mode1 mode2 0.2 * np.random.randn(len(t)) return mixed, mode1, mode2 # 3. 残差收缩模块 (软阈值化) class ResidualShrinkageBlock(nn.Module): def __init__(self, channels): super().__init__() self.fc nn.Sequential(nn.Linear(channels, channels), nn.Sigmoid()) def forward(self, x): # x: (batch, seq, channels) threshold self.fc(x.mean(dim(1,2), keepdimTrue).squeeze(1)) threshold threshold.unsqueeze(1).unsqueeze(2) # 软阈值 x torch.sign(x) * torch.max(torch.abs(x) - threshold, torch.zeros_like(x)) return x # 主流程演示 def demo_decomposition(): # 生成数据 mixed, _, _ generate_synthetic_data() model TwoLayerLSTMDecomposer(input_dim1, num_modes2) # 转换为tensor (batch, seq) input_tensor torch.tensor(mixed, dtypetorch.float32).view(1, -1, 1) with torch.no_grad(): components, mask model(input_tensor) print(f分解得到 {components.shape[-1]} 个分量) 如有问题可以直接沟通