通过桥梁振动信号自动识别车辆(MATLAB)

news2025/1/11 21:46:44

只是简单参数建模,还没有实际场景应用。

Generation of the bridge response to multiple vehicles Initialisation

clearvars;close all;clc
clf;close all;


Nyy = 446; % Number of nodes to discretize the bridge structure. We need a spatial resolution of 1 m in our case.
Nmodes = 6; % number of modes for each degree of freedoms, i.e. a total of 3x6 =18 nodes
[Bridge] = LysefjordBridge(Nyy); % bridge structural properties


[wn,phi] = eigenBridge(Bridge,Nmodes); % get the eigen frequencies and mode shapes [2,3]
fn=wn/(2*pi); % get the frequencies in Hz
zetaStruct = 5e-3*ones(3,Nmodes); % modal damping ratios




% Define the structure bridge
Bridge.zetaStruct = zetaStruct;
Bridge.wn = 2*pi*fn;
Bridge.phi = phi;

Sampling parameters

fs = 15; % sampling frequency
M = 15; %  M must be a power of 2
[t,f] = getSamplingPara(M,fs);
N=numel(t);

Wind turbulence

% No wind in this example
tmax = t(end);
Wind.u = zeros(Nyy,N);
Wind.w = zeros(Nyy,N);
Wind.t = t;

Computation of the vehicle-induced response at midspan (target data)

yTarget = Bridge.L/2; % midspan
[~,indY]=min(abs(Bridge.x.*Bridge.L-yTarget)); % get indice where the midspan is located 
Nvehicle = 4; % Number of vehicle selected
tic
%Create the structure variable vehicle_Target that contains the aprameters
%of each vehicle
rng(1) % To ensure reproducibility of this example
clear vehicleTarget
for ii=1:Nvehicle
    vehicleTarget(ii).mass = randi([1e3 50e3],1); % mass of the vehicle (kg)
    vehicleTarget(ii).speed = randi([30 80],1)/3.6; % speed of the vehicle (m/s)
    vehicleTarget(ii).direction = 1; % All the vehicle have the same direction. If "-1", the vehicle is moving in the opposite direction
    vehicleTarget(ii).tStart = 55+ii.*400; % arrival time (sec). t = 0s is the initial time of the simulation.  
end


% Compute the wind and vehicle-induced bridge response
% Newmark-beta algorithm is used for the solver
[Do1,Ao1] = dynaResp_vehicle_TD(Bridge,Wind,'vehicle',vehicleTarget); 
% Get the vertical bridge displacement response at midspan
rz = squeeze(Do1(2,indY,:));
% Some white noise is added to challenge the identification algorithm
rz = rz + 0.03*std(rz).*randn(size(rz));
toc

Visualization of the vehicle-induced response at midspan

gcf;close all;
figure
plot(t,rz,'r')
xlabel('Time (s)')
ylabel('r_z (m)')
set(gcf,'color','w')
axis tight

Outlier-detection algorithm and clustering algorithm

tSim = t;
minNp = 30; % minimum number of cluster points
CO = 30*fs; % cutoff value for the clusters, constructed using a hierarchical cluster tree (cf Matlab function "cluster")
fMin = 0.04; % cut-off frequency (high pass filter) -> must be above the lower frequency correctly measured by the accelerometer
fMax = 0.15; % cut-off frequency (low pass filter) -> must be lower than the first eigen frequency. here the lowest vertical eigenfrequency is 0.21 Hz
[rz_filtered,t_filtered,tImpact_guess,tCluster,rzCluster] = findVehicleID(rz,t,...
    'minNp',minNp,'CuttOff',CO,'deltaTmax',inf,'fcLow',fMin,'fcUp',fMax);
% tImpact_guess is the Initial guess estimate based on the cluster analysis
% rz_filtered,t_filtered, tCluster and rzCluster are used only for visualization purpose!


Ncluster = numel(tCluster);


clf;close all;
figure
COLOR = {'r','b','g','m','c','y'};
if Ncluster>numel(COLOR), COLOR = repmat(COLOR,1,Ncluster); end
for ii=1:Ncluster
    subplot(Ncluster,1,ii)
    plot(t_filtered,rz_filtered,'k')
    hold on
    box on
    plot(tCluster{ii},rzCluster{ii},'o','color',COLOR{ii},'markersize',2)
    xlabel('time (s)')
    ylabel('r_z (m)')
    axis tight
end
set(gcf,'color','w')

Identification of the vehicles' arrival time and speed

gradS = 0.3; % termination tolerance for the speed estimate, i.e. the speed is identified at +/- gradS (in m/s)
gradT = 0.5; % termination tolerance for the arrival time estimate, i.e. it is identified at +/- gradT (in s)
newN = 150; % number of data point for the time-domain simulation: less points means faster algorithm but also less accurate one
posAcc = yTarget./Bridge.L; % relative position of the accelerometer
tic
[vehicleSpeed,tImpact] = findSpeed(Bridge,t,rz,posAcc,tImpact_guess,...
    'gradS',gradS,'gradS',gradT,'newN',newN,'fcLow',fMin,'fcUp',fMax);
toc
fprintf('Target speed (km/h): \n')
fprintf([repmat('%2.1f \t',1,Nvehicle),' \n'],[vehicleTarget(:).speed]*3.6)
fprintf('identified speed (km/h): \n')
fprintf([repmat('%2.1f \t',1,Nvehicle),' \n'],[vehicleSpeed]*3.6)


fprintf('Target arrival time (s): \n')
fprintf([repmat('%2.1f \t',1,Nvehicle),' \n'],[vehicleTarget(:).tStart])
fprintf('identified arrival time (s): \n')
fprintf([repmat('%2.1f \t',1,Nvehicle),' \n'],[tImpact])

Identification of the vehicles' mass

[vehicleMass] = findMass(Bridge,t,rz,posAcc,tImpact,vehicleSpeed,'fcLow',fMin,'fcUp',fMax);
fprintf('Target mass (kg): \n')
fprintf([repmat('%4.0f \t',1,Nvehicle),' \n'],[vehicleTarget(:).mass])
fprintf('identified mass (kg): \n')
fprintf([repmat('%4.0f \t',1,Nvehicle),' \n'],[vehicleMass])

Comparison between the target and simulated bridge response histories

% Create a structure vehicle with the identified parameters of the vehicles.
clear vehicle
Nvehicle = numel(vehicleSpeed);
for ii=1:Nvehicle
    vehicle(ii).mass = abs(vehicleMass(ii));
    vehicle(ii).speed = vehicleSpeed(ii);
    vehicle(ii).direction = 1;
    vehicle(ii).tStart = tImpact(ii);
    vehicle(ii).wn = 0;
end


% COmpute the relative erros on the identified mas, speed and arrival time
errSpeed = nanmean(100.*([vehicle(:).speed]./[vehicleTarget(:).speed]-1));
errMass = nanmean(100.*([vehicle(:).mass]./[vehicleTarget(:).mass]-1));
errTime = nanmean(100.*([vehicle(:).tStart]./[vehicleTarget(:).tStart]-1));
fprintf(['Relative average error on speed: ',num2str(errSpeed,2),' percent \n'])
fprintf(['Relative average error on speed: ',num2str(errMass,2),' percent \n'])
fprintf(['Relative average error on speed: ',num2str(errTime,2),' percent \n'])


% Compute the bridge response with the identified vehicle parameters
[Do2] = dynaResp_vehicle_TD(Bridge,Wind,'vehicle',vehicle); % both wind and traffic
rzFit = squeeze(Do2(2,indY,:));


clf;close all;
figure
plot(t,rz,'k',t,rzFit,'r');
legend('target','fitted')
axis tight
xlabel('Time (s)')
ylabel('r_z (m)')
set(gcf,'color','w')
axis tight


% PSD calculation
[S1,f1] = pmtm(rz,7,numel(rz),fs);
[S2,f2] = pmtm(rzFit,7,numel(rz),fs);
figure
loglog(f1,S1,'k',f2,S2,'r');
legend('target','fitted')
axis tight
ylim([1e-15,1])
xlabel('Frequencies (Hz)')
ylabel('PSD vertical displacement response (m^2/Hz)')
set(gcf,'color','w')

知乎学术咨询:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漫步5G-A City,一份独属于上海的浪漫

作家亨利詹姆斯曾写道,“城市漫步,让我接触到了这个世界上最好的东西”。 用漫无目的地行走,来体验和观察一座城市,上海凭借丰富多元的文化特质,成为citywalk这种浪漫生活方式的流行地。 无论你是漫步在美术馆、画廊林…

CesiumJS【Basic】- #051 绘制纯色填充多边形(Entity方式)

文章目录 绘制纯色填充多边形(Entity方式)1 目标2 代码2.1 main.ts绘制纯色填充多边形(Entity方式) 1 目标 使用Entity方式绘制绘制纯色填充多边形 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

昇思25天学习打卡营第十五天|基于MobileNetv2的垃圾分类

基于MobileNetv2的垃圾分类 MobileNetv2模型原理介绍 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络,相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolut…

六西格玛绿带培训ROI:你的投资究竟值不值?

近年来,企业对于员工培训的投入日益增加,六西格玛绿带培训更是作为提升企业运营效率和质量管理的利器,更是备受关注。然而,面对高昂的培训成本,企业如何评估六西格玛绿带培训的投资回报率(ROI)呢…

被⽹络罪犯利⽤的5⼤ChatGPT越狱提⽰

⾃ChatGPT发布的近18个月以来,⽹络罪犯们已经能够利⽤⽣成式AI进⾏攻击。OpenAI在其内容政策中制定了限制措施,以阻⽌⽣成恶意内容。作为回应,攻击者们创建了⾃⼰的⽣成式AI平台,如 WormGPT和FraudGPT,并且他们还分享了…

难道 Java 已经过时了?

当一门技术已经存在许多年了,它可能会失去竞争力,而后黯然退场,默默地离开,这对大部分的人来说就已经算是过时了。 Java 于 1995 年正式上线,至今已经走过了 27 个年头,在众多编程技术里算是年龄比较大的语…

大数据基础知识【大数据导论】

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 大数据基础知识前 必看 【大数据导论】—大数据序言…

安卓模拟器如何修改ip地址

最近很多老铁玩游戏的,想多开模拟器一个窗口一个IP,若模拟器窗口开多了,IP一样会受到限制,那么怎么更换自己电脑手机模拟器IP地址呢,今天就教大家一个修改模拟器IP地址的方法!废话不多说,直接上…

【Python】已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’ 一、分析问题背景 在Python编程中,有时我们会遇到“AttributeError: mo…

Modbus转ProfibusDP主站网关连接温控表通讯技术

Modbus转ProfibusDP主站网关(XD-MDPBM20)是实现不同通讯协议设备之间联系的重要组件。在工业自动化领域中,温控表是常见且必要的设备,它可以用于监控和调节温度,保障生产过程的稳定性。本文将详细探讨如何利用Modbus转…

【热门会议|见刊快】2024年管理创新与教育国际会议 (ICMIE 2024)

2024年管理创新与教育国际会议 (ICMIE 2024) 2024 International Conference on Management Innovation and Education 【重要信息】 大会地点:洛阳 大会官网:http://www.icicmie.com 投稿邮箱:icicpsssub-conf.com 【注意:稿将稿…

springboot评选投票系统-计算机毕业设计源码15837

摘 要 本文介绍的是基于Spring Boot开发的评选投票系统小程序。该系统旨在为用户提供一个便捷、高效的平台,以实现评选活动的投票功能。随着社交媒体和互联网的普及,评选活动已成为各行业中常见的形式,如最佳歌曲、最佳演员等。然而&#xf…

干货:js解析url参数的作用、场景、方法和安全策略。

涉及到Web3D开发,Three.js和Babylon.js是两个备受推崇的引擎。它们都是基于WebGL的开源3D引擎,用于创建交互式的3D图形应用程序,但要细论起来,three.js普及度远超Babylon .js. 一、二者的介绍 Three.js: Three.js 是…

PLC_博图系列☞TP:生成脉冲

PLC_博图系列☞TP:生成脉冲 文章目录 PLC_博图系列☞TP:生成脉冲背景介绍TP: 生成脉冲说明参数脉冲时序图示例 关键字: PLC、 西门子、 博图、 Siemens 、 TP 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门…

网安小贴士(4)哈希函数

一、前言 哈希函数是密码学中的基础工具,哈希函数在密码学中扮演着至关重要的角色,广泛应用于确保数据的安全性和完整性。随着技术的发展,新的哈希算法和应用场景也在不断出现。 二、定义 哈希函数是一种数学函数,它接受一个输…

学生蓝牙耳机买什么牌子好?四款平价蓝牙耳机品牌推荐

在当今快节奏的生活中,蓝牙耳机已经成为人们日常生活中不可或缺的配件之一。尤其对于学生党来说,寻找一款性价比高、价格平价的蓝牙耳机是非常重要的。在市面上琳琅满目的选择中,学生蓝牙耳机买什么牌子好?成为了许多学生党的困扰…

双指针+贪心,CF 1849D - Array Painting

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1849D - Array Painting 二、解题报告 1、思路分析 首先注意到一点,对于非0连续段,我们只需要1的花费就能把整段染红 如果段内无2,我们可以额外染红段左或段右的某个0值…

记录一个关于IntelliJ IDEA查找接口的小小问题

idea中可以通过双击shift输入接口url路径直接找到在controller中对应的方法。。部分项目出现无法查找的问题,如上图所示,观察发现正常的项目里面,RequestMapping旁边会出现一个小地球的图标(注意是较新版本的IDEA才会有&#xff0…

Oracle 11.2.0.1升级到11.2.0.4并做rman备份异机恢复

下载好数据库升级包,想去Oracle官网下载的,提示没有授权 只能在csdn找付费的了,9块1个,下载了前2个。 注意,总共有7个包,如果Oracle是安装在linux服务器,且无图形界面管理的 只需要第一&#xf…

昇思MindSpore学习笔记3-02热门LLM及其他AI应用--K近邻算法实现红酒聚类

摘要: 介绍了K近邻算法,记录了MindSporeAI框架使用部分wine数据集进行KNN实验的步聚和方法。包括环境准备、下载红酒数据集、加载数据和预处理、搭建模型、进行预测等。 一、KNN概念 1. K近邻算法K-Nearest-Neighbor(KNN) 用于分类和回归的非参数统计…