使用桥梁振动自动识别车辆(Matlab代码实现)

news2024/11/25 2:56:19

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

本文内容为:悬索桥的车辆振动用于自动识别车辆的质量、速度和到达时间。

以根据悬索桥上收集的振动数据自动识别关键车辆特性。然而,目前的数值实现与 ref [1] 有一些细微的差异。使用连续模型对桥梁进行建模,以降低与车辆识别相关的计算成本[2,3]。车辆被建模为移动质量以降低计算成本。在下文中,仅对主跨度的垂直运动进行建模。该算法适用于交通流量较少的偏远地区的桥梁。

📚2 运行结果

 

 

 

部分代码:

%% Inputparseer
p = inputParser();
p.CaseSensitive = false;
p.addOptional('orderFilt',4);
p.addOptional('fcUp',0.15);
p.addOptional('fcLow',0.04);
p.addOptional('newN',200);
p.addOptional('deltaT',30);
p.addOptional('meanU',0);
p.addOptional('plotData',1);
p.addOptional('RMSE_threshold',0.3);
p.parse(varargin{:});
%%%%%%%%%%%%%%%%%%%%%%%%%%
newN = p.Results.newN ;
orderFilt = p.Results.orderFilt ;
fcUp = p.Results.fcUp;
fcLow = p.Results.fcLow;
deltaT = p.Results.deltaT;
meanU = p.Results.meanU;
plotData = p.Results.plotData;
RMSE_threshold = p.Results.RMSE_threshold;
%% Definition of constants and fundamental parameters
g = 9.81; % accleration of gravity
guess = 3000; % mass speed initial guess

[Nsensors,N]= size(Doz);
if Nsensors>1 && N==1
    Doz = Doz';
    [Nsensors,N]= size(Doz);
else
    error('This version of the code does not include the possibility to include multiple accelerometers');
end

if numel(posAcc) ~=Nsensors, error('numel(posAcc) ~= size(DOz,1)'); end
[~,indY] = min(abs(posAcc-Bridge.x));

%% Fitting algorithm

options=optimset('TolX',1e-6,'TolFun',1e-6,'Display','off'); % increase the fitting precision if Suw = 0
Nvehicle = numel(tImpact);
myMass = zeros(1,Nvehicle);
rmse = zeros(1,Nvehicle);
modelFun = @getVehiclePara;
Direction = nan(1,Nvehicle);

if plotData==1,    figure;end

for ii=1:Nvehicle
    
    [Nsensors,N]= size(Doz);
    t1 = tImpact(ii)-2/3*deltaT; % get lower boundary for simulation start
    t2 = tImpact(ii)+3/2*deltaT; % get upper boundary for simulation stop
    newT = linspace(t1,t2,newN);
    newFs = 1/median(diff(newT));
    rz = interp1(t,Doz,newT);
    rz = filterMyData(rz(:)',newFs,orderFilt,fcUp,fcLow);
    % Check if there exist NaNs
    if any(isnan(rz)), warning('There exist nans values in the rz time series. Consider replacing them by interpolated values'); end
    
    newSpeed = vehicleSpeed(ii);
    % We assume that the turbulent load is negligible for the fitting
    Wind.u = meanU + zeros(Bridge.Nyy,newN); % Include mean wind speed if needed
    Wind.w = zeros(Bridge.Nyy,newN);
    Wind.t = newT;
    speed = newSpeed; % speed of each vehicle
    tStart = tImpact(ii); %
    
    % we initially assume that the vehicle direction is known
    vehicleDirection = 1;
    [myMass(ii)] = lsqcurvefit(@(para,t) modelFun(para,newT(:)),...
        guess,newT(:),rz(:),100,1e5,options);
    
    dummy = modelFun(abs(myMass(ii)),newT);
    myRMSE = RMSE(reshape(rz(:),[],1)./max(abs(rz(:))),dummy(:)./max(abs(dummy)));
    fprintf(['RMSE value is ',num2str(myRMSE,2),'. \n']);
    
    % If the RMSE is larger than the acceptable threshold value, this may be
    % due to the wrong assessement of the vehicle direction
    if myRMSE>RMSE_threshold
        fprintf(['RMSE value is ',num2str(myRMSE,2),'. New attempt is made by changing the vehicle direction \n']);
        vehicleDirection = -1;
        myMass(ii) = nlinfit(newT(:)',rz(:)',modelFun,guess,options);
        dummy = modelFun(abs(myMass(ii)),newT);
        myRMSE = RMSE(rz(:)./max(abs(rz(:))),dummy(:)./max(abs(dummy)));
        fprintf(['new RMSE value is ',num2str(myRMSE,2),'. \n']);
    end
    
    Direction(ii) = vehicleDirection;
    rmse(ii) = RMSE(rz(:),modelFun(myMass(ii),newT));
    
    if plotData==1
        dummy = reshape(modelFun(myMass(ii),newT),[],Nsensors)';
        subplot(Nvehicle,1,ii)
        plot(newT,dummy,'r',newT,rz,'k-.');
        if ii==1
            legend('simulated','measured','location','best');
        end
        set(gcf,'color','w')
        axis tight
    end
end

if nargout==3
    varargout{1} = Direction;
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function [myDo] = getVehiclePara(para,t,varargin)
        p = inputParser();
        p.CaseSensitive = false;
        p.addOptional('rho',1.25);
        p.addOptional('k',1/4);
        p.parse(varargin{:});
        % shorthen the variables name
        rho  = p.Results.rho ;
        k  = p.Results.k ;
        %%
        Ncar = numel(para);
        for pp=1:Ncar
            vehicle(pp).mass = para(pp);
            vehicle(pp).speed = speed(pp,:);
            vehicle(pp).tStart = tStart(pp);
            vehicle(pp).direction = vehicleDirection;
        end
        
        % shortened variable
        D = Bridge.D;
        B = Bridge.B;
        Cd = Bridge.Cd;
        Cl = Bridge.Cl;
        Cm = Bridge.Cm;
        dCd = Bridge.dCd;
        dCl = Bridge.dCl;
        dCm =Bridge.dCm;
        phi = Bridge.phi;
        wn = Bridge.wn;
        zetaStruct = Bridge.zetaStruct;
        u = Wind.u;
        w = Wind.w;
        
        dt = median(diff(t));
        N1 = numel(t);
        
        % Definition of Nyy, and Nmodes:
        [~,Nmodes,Nyy]= size(Bridge.phi);
        
        if max(Bridge.x)== 1
            y = Bridge.x.*Bridge.L;
        else
            warning('Bridge.x is not normalized');
        end
        
        %% MODAL MASS AND STIFNESS CALCULATION
        Mtot = diag([Bridge.m+2*Bridge.mc,Bridge.m+2*Bridge.mc,Bridge.m_theta]);
        phi0 = reshape(phi,[],Nyy);
        phi0_N = bsxfun(@times,phi0,1./max(abs(phi0),[],2));
        Nm = size(phi0,1);
        Mtot = repmat(Mtot,round(Nm/3),round(Nm/3));
        M = zeros(Nm+Ncar);
        K = zeros(Nm+Ncar);
        C = zeros(Nm+Ncar);
        for pp=1:Nm
            for qq=1:Nm/3
                if (pp+3*qq)<=Nm
                    Mtot(pp,pp+3*qq) = 0;
                    Mtot(pp+3*qq,pp) = 0;
                end
            end
            for qq=1:Nm
                M(pp,qq)  = trapz(y,phi0_N(pp,:).*phi0_N(qq,:).*Mtot(pp,qq));
            end
        end
        K(1:Nm,1:Nm) = diag(wn(:)).^2*M(1:Nm,1:Nm);
        C(1:Nm,1:Nm) = 2.*diag(wn(:))*M(1:Nm,1:Nm)*diag(zetaStruct(:));
        
        %% PREALLOCATION
        CoeffAero = @(C,alpha) C(1)+alpha.*C(2); % linear
        C1=[Cd,dCd];
        C2=[Cl,dCl];
        C3=[Cm,dCm];
        %% INITIALISATION
        Do = zeros(3,Nyy,N1);
        Ao = zeros(3,Nyy,N1);
        Aoz_car = zeros(Ncar,N1);
        rt=zeros(Nyy,1);
        dry=zeros(Nyy,1);
        drz=zeros(Nyy,1);
        drt=zeros(Nyy,1);
        
        % Case of no wind
        if mean(nanstd(u,0,2))<0.01 && mean(nanstd(w,0,2))<0.01 && nanmean(nanmean(u,2))<0.1
            noWind=1;
        else
            noWind=0;
        end
        
        for idt=1:N1
            Fmodal_wind = zeros(Nm);
            % get  modal forces
            if noWind==0 % if wind turbulence is acounted for
                [Fmodal_wind(1:Nm,1:Nm)]= getFmodal(CoeffAero,C1,C2,C3,y,...
                    u(:,idt),w(:,idt),dry,drz,drt,D,B,rt,k,rho,Nmodes,phi0_N);
                if Ncar>0
                    Fmodal_wind(Nm+1:end,Nm+1:end)=0; % ensure that there is no wind load on the car
                end
            else
                Fmodal_wind = zeros(Nm+Ncar);
            end
            
            if Ncar>0
                [Fmodal_car] = getVehicleLoad(t,vehicle,Bridge,Nm,y,phi0_N,idt);
                Fmodal = Fmodal_wind+ Fmodal_car; % load on the bridge
            else
                Fmodal = Fmodal_wind;
            end
            
            if idt ==1 % initial acceleration
                DoM = zeros(Nm);
                VoM = zeros(Nm);
                AoM = M(1:Nm,1:Nm)\(Fmodal(1:Nm,1:Nm)-C(1:Nm,1:Nm).*VoM-K(1:Nm,1:Nm).*DoM);
                [DoM,VoM,AoM,Do(:,:,idt),Vo,Ao(:,:,idt),Aoz_car(:,idt),~] =...
                    Newmark(dt,DoM,VoM,AoM,Fmodal(1:Nm,1:Nm),M(1:Nm,1:Nm),K(1:Nm,1:Nm),C(1:Nm,1:Nm),phi0,Ncar,Nyy,Nm);
            else
                [DoM,VoM,AoM,Do(:,:,idt),Vo,Ao(:,:,idt),Aoz_car(:,idt),~] =...
                    Newmark(dt,DoM,VoM,AoM,Fmodal(1:Nm,1:Nm),M(1:Nm,1:Nm),K(1:Nm,1:Nm),C(1:Nm,1:Nm),phi0,Ncar,Nyy,Nm);
            end
            
            rt = Do(3,:,idt)';
            dry = Vo(1,:)';
            drz = Vo(2,:)';
            drt = Vo(3,:)';
        end
        
        dummy0 = detrend(squeeze(Do(2,indY,:)))';
        [myDo] = filterMyData(dummy0(:)',newFs,orderFilt,fcUp,fcLow);
        myDo = myDo(:);
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function [Fmodal]= getFmodal(CoeffAero,C1,C2,C3,y,u,w,dry,drz,drt,...
            D,B,rt,k,rho,Nmodes,phi0_N)
        % [Fmodal]= getFmodal(y,u,w,dry,drz,drt,D,B,rt) computes the modal
        %  forces acting on the main-span of a suspension bridge bridge deck
        %%
        Vrel = (u-dry);
        W = (w-drz-k*B.*drt);
        Vrel = sqrt(Vrel.^2+W.^2); % is [Nyy x 1]
        beta = atan(W./Vrel); % is [Nyy x 1]
        alpha = rt+beta; % is [Nyy x N]
        COEFF = 1/2*rho*B.*Vrel.^2;
        Ftot(:,1)=COEFF.*(D/B.*CoeffAero(C1,alpha).*cos(beta) - CoeffAero(C2,alpha).*sin(beta));
        Ftot(:,2)=COEFF.*(D/B.*CoeffAero(C1,alpha).*sin(beta) +  CoeffAero(C2,alpha).*cos(beta));
        Ftot(:,3)=COEFF.*(B.*CoeffAero(C3,alpha));
        F = repmat(Ftot,1,Nmodes)';
        Fmodal = trapz(y,F.*phi0_N,2);
        Fmodal = diag(Fmodal(:));
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function [x1,dx1,ddx1,Do,Vo,Ao,Aoz_car,Doz_car] =...
            Newmark(dt,x0,dx0,ddx0,F,M,K,C,phi0,Ncar,Nyy,Nm,varargin)
        %% options: default values
        inp = inputParser();
        inp.CaseSensitive = false;
        inp.addOptional('alpha',1/4);
        inp.addOptional('beta',1/2);
        inp.parse(varargin{:});
        % shorthen the variables name
        alphaCoeff = inp.Results.alpha ;
        beta = inp.Results.beta;

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] Cheynet, E., Daniotti, N., Jakobsen, J. B., & Snæbjörnsson, J. (2020). Improved long‐span bridge modeling using data‐driven identification of vehicle‐induced vibrations. Structural Control and Health Monitoring, volume 27, issue 9. https://doi.org/10.1002/stc.2574

[2] E. Cheynet. ECheynet/EigenBridge v3.3. Zenodo, 2020, .

 

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

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

相关文章

Qt在线安装教程(详细图文)

Qt在线安装教程&#xff08;详细图文一、前言二、QT账号的注册三、QT的安装的镜像四、安装的过程一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Qt在线安装。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、QT账号…

js-mark新时代的网页标记容器

js-mark &#x1f58d;️️ ✨ 它提供了一组可交互操作的工具来注释网页内容 ✨&#x1f58d;️ js-mark是一个JavaScript库&#xff0c;用于在浏览器。他是一个可以在任何网页做标记的前端库, 它提供了一组可交互操作的工具来注释网页内容。 支持标记文本和 持久化存储与还原…

LSTM和双向LSTM讲解及实践

目录&#xff1a; RNN的长期依赖问题LSTM原理讲解双向LSTM原理讲解keras实现LSTM和双向LSTM RNN 的长期依赖问题 在上篇文章中介绍的循环神经网络RNN在训练的过程中会有长期依赖的问题&#xff0c;这是由于RNN模型在训练时会遇到梯度消失(大部分情况)或者梯度爆炸(很少&…

网络1323的分类行为

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 用网络分类A和B&#xff0c;让A是&#xff08;0&#xff0c;1&#xff09;&#xff08;1&#xff0c;1&#xff09;&#xff0c;让B是&#xff08;1&#xff0c;0&#xff09;&#xff08;1&#xff0c;1&#xff09;。测试集为&#xf…

[附源码]计算机毕业设计springboot学生在线考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

408 考研《操作系统》第一章第三节:中断和异常、系统调用

文章目录教程1.中断和异常1.1 中断的作用1.2 中断的类型1.2.1 外中断的处理过程1.2.1 内中断的处理过程1.3 中断机制的基本原理1.4 总结2. 系统调用2.1 什么是系统调用&#xff1f;2.2 小例子&#xff1a;为什么系统调用是必须的&#xff1f;2.3 什么功能要用系统调用实现&…

m基于随机接入代价的异构网络速率分配算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 无线接入技术发展迅速&#xff0c;异构网络并存的现象普遍存在&#xff1b;同时&#xff0c;随着终端用户数量的剧增、业务类型的多样化和高服务质量多媒体数据业务需求的增加&#xff0c;通过异…

磨金石教育插画技能干货分享|插画怎么配色才好看?

在绘画界&#xff0c;配色是非常重要的步骤&#xff0c;一幅作品能够展现出什么样的品质&#xff0c;配色起着举足轻重的作用。颜色配的好会给作品晋商添花&#xff0c;配的不好&#xff0c;就会让作品失去水准&#xff0c;缺少神韵。 所以想学好插画&#xff0c;就要在在配色上…

python离线环境下安装第三方模块的方法

一.背景 1.背景&#xff1a; 在实际开发中&#xff0c;我们自己电脑上方便上网可以随时安装自己需要的包文件&#xff0c;但是有的项目现场不能联网或者现场是“内网”不具备联网条件&#xff0c;所以必须解决在“离线电脑上”安装需要的软件包的问题。 2.环境说明以及实现步…

SpringCloud微服务项目实战 - 项目搭建

面对大河我无限惭愧 我年华虚度空有一身疲倦 系列文章目录 项目搭建app登录 一、项目介绍 1. 项目背景 项目概述&#xff1a; 类似于新闻头条&#xff0c;是一个新闻资讯类项目 &#xff08;这里之后放项目APP端的截图&#xff09; 技术架构&#xff1a; 项目术语&…

Ubuntu18.04安装ROS、Gazebo、Mavros、PX4、QGC教程

修改国内源 修改apt sudo cp /etc/apt/source.list /etc/apt/source.list.old sudo gedit /etc/apt/source.list输入如下进行保存 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic m…

转行|什么是游戏建模??小本本记下来

今天来说一下游戏建模…小本本记下来 &#x1f440;3D手绘建模 3D美术设计师根据原画设计师的构思&#xff0c;将二维的东西在3D软件里面制作出来&#xff0c;最终得到的东西是模型( 3Dmax )和贴图&#xff08;软件PS、Bodypaint ) &#xff0c;模型是物体的主要构架&#xff…

Kaggle Feedback Prize 3比赛总结:两种模型设计思路

比赛的目标&#xff1a;本次竞赛的目标是评估8-12年级英语学习者&#xff08;ELLs&#xff09;的语言能力。利用英语学习者所写的论文数据集开发出能更好地支持所有学生的能力模型&#xff0c;帮助ELL学生在语言发展方面得到更准确的反馈&#xff0c;并加快教师的评分周期。 方…

RestTemplate使用InputStreamResource上传文件

背景 1. 我们应用服务是Spring boot项目&#xff0c;预览服务是我们另一个团队提供的用.net写的&#xff0c;最终使用的是office online来实现文件预览的功能。 2. 我们文件在阿里云OSS存储&#xff0c;我们需要预览文件需要将文件上传至预览服务器。 3. 计划使用RestTemplate…

线程池自查注意点

文章目录线程池自查注意点1、线程池的标准创建方式2、线程池的任务调度流程3、避免使用Executors快捷创建线程池3.1、newSingleThreadExecutor()3.2、newCachedThreadPool()3.3、ScheduledThreadPool()4、避免在方法中创建线程池5、不要盲目使用同步队列6、使用线程池&#xff…

MySQL库的操作

文章目录MySQL库的操作创建数据库创建数据库案例字符集和校验规则查看系统默认字符集以及校验规则查看数据库支持的字符集查看数据库支持的字符集校验规则校验规则对数据库的影响操纵数据库查看数据库显示创建语句修改数据库删除数据库备份和恢复数据库的备份和恢复表的备份和恢…

Cracking the Safes之Linux系统下gdb调试

Cracking Safe是什么 挑战是找出四个保险箱中每个保险箱预期的正确的5个输入集。在运行二进制安全程序时,您需要一次输入一个猜测,如下所示: 其实,就是输入5次,程序会对输入内容进行判断,只有符合程序要求才能成功,任务就是逆向找到正确的字符串!!! 解题思路 反汇…

mac pro M1(ARM)安装:centos8.0虚拟机

0.引言 mac发布了m1芯片&#xff0c;其强悍的性能收到很多开发者的追捧&#xff0c;但是也因为其架构的更换&#xff0c;导致很多软件或环境的安装成了问题&#xff0c;之前我们讲解了如何安装centos7。这次我们接着来看如何在mac m1环境下安装centos8 1.下载 1.1 安装VMwar…

Java基于springboot+vue的五金用品销售购物商城系统 前后端分离

五金用品是当前很多家庭和维修人员必备的工具&#xff0c;他们可以让维修变的更加简单&#xff0c;甚至有很多维修必须有配套的专业工具才能够完成&#xff0c;但是很多时候人们在五金店购买这些五金用品的时候不是价格昂贵就是缺少一些想要的工具&#xff0c;这个是通过开发一…