matlab绘制加速度曲线,加速度积分得到速度和位移的问题小结

在振动信号采集分析中,我们常常使用加速度传感器,是因为加速度传感器具有可靠性高,可测频带宽,结构小巧,抗干扰能力强等优点。但是有些时候,必需要得到速度和位移信号,这个时候就出现了如何通过对加速度积分得到速度和位移的基础问题,这个问题难倒了不少相关人员。在国内的各种教科书上也很少提及,也不知道是为什么。

不管是线性系统还是非线性系统,所产生的信号,在时域满足如下微分方程

其解可以写成

其中v0是积分常数,积分下限t=0表示采样起始时刻,是人为指定的时间轴原点。如果振动没有交流分量,则加速度是常数,可以得到v(t)=v0+at 。对速度积分得到位移的处理类似,所以有

其中d0是积分常数,由于v0和d0通常是未知的,加速度积分得到速度和位移,就存在积分常数问题。

积分常数问题是非常麻烦的问题。首先可以看到,对于任意δv,得到

都对应同样的加速度a(t),也就是说v0和d0取任意值都对应于同一个测量的加速度和测量的速度,所以要想仅仅凭目前的信息通过积分获取速度和位移,是不可能的,不管是数值积分还是模拟电路积分都不行。本文主要讨论数值积分的问题,关于模拟电路积分存在的问题,推荐大家阅读《压电加速度计和振动前置放大电器》一书,结论就是在高频,放大器增益会下降,不是理想放大器;在甚低频,会受到时间常数或者回路电容限制,也不够精确。这个回复大家可能不满意,坊间不是有各种FFT,各种去趋势项,各种滤波的操作嘛?有人发表在《力学学报》上的论文不也是用模拟积分电路积分了么?我的建议是,谨慎看待那些论文中的说法,你应该有自己的思考和判断。

实际工作中,在无穷多个v0的选择中,可以选择一个最靠谱的数值凑合用一下,因为在这些选项中,可确定最靠谱的那个值一定在某个有限幅值的区间[va,vb]以内。所以,需要增加对被测试物体的状态进行判断,基于这种判断,做出假设,基于这种假设列出约束条件,根据约束条件找到一个方程,然后求出那个看起来好像最靠谱的积分常数。如果假设成立,就得到了一个很Nice的估计;如果假设不成立,误差很大,那就是自娱自乐,你高兴就好。

从可观测性角度看这个问题

下面的讨论限于线性系统,是最近关注某个问题的时候顺便做的笔记。

设振动方程为

则,对应的状态空间模型为

可以得到离散以后的状态方程

可观性的定义:假定A,B,C和D已知,从已经观测的加速度和载荷向量,能否计算得到位移和速度?从式的迭代解可以知道,只需要设法测试得到x(1)即可知道所有后续的状态x(k),k=2,3,4,…。

现在,考虑如下序列

写为矩阵形式

注意到对SDOF模型,上面的矩阵方程始终是一个p×(p+2)矩阵,属于欠估计问题,不可能通过测试加速度同时将载荷和初始状态x(1)求出来。现将该矩阵分割为

其中Op就是可观测矩阵,可以求得

也就是说要联合测试加速度响应,知道可观测矩阵Op、系统矩阵E和载荷才能识别得到所有状态变量,而且可观测矩阵不能奇异,必需是满秩的。2015年Computers &Structures上的一篇关于载荷识别的论文,就是依据对式(8)的简化,假定初始状态x(1)=0,得到

这种零初始条件的假定,在实际问题的应用中,是一厢情愿的。在数据采集器采样了一个数据块处理以后,不能再假定这个数据块采集终了时候的状态变量还是零,所以,至少在后续的计算中,需要考虑 “过去的激励引起的未来的响应的问题”或者x(1)不为0的问题。

同样的道理,实际情况下,我们并没有测试激励力ḟ,还没有做实验获取系统参数,更不能保证传感器布置点所对应的观测矩阵是Regular的,所以单独想要用加速度响应,就完全构造出速度和位移是不可能实现的。就算你得到了,误差可能在80%左右,正确的是量纲。

现在的问题是,我们得到了加速度数据,到底应该考虑哪些实际问题,有没有办法得到一个不是很坏的结果?答案是肯定的,只是这些要求太高了或者假设成立的可能性微乎其乎,所以得到的数据的误差通常较大。

可能的假设

J.S Bendat和A.G. Piersol对信号划分为确定性的和随机的,一个信号是否是确定性的还是随机的,可能存在争议,短时间可能是确定性的,而长时间就变得随机了,或者长时间以后就出现其他“开关条件”触发了不可预测的因素。对确定的信号和随机信号,又分为了如下几种:

在确定性信号中,周期信号是稀有的;在随机信号分类中,各态历经的平稳信号是稀有的。最常见的信号是非周期信号和非平稳信号,是实际中遇到的高概率事件。

所以,下面讨论一些“低概率”出现的假设和“高概率误操作”。

3.1 假设1:位移是零均值的信号

被测试结构没有发生明显的位移现象,所以假定是零均值的。然而,我们知道,有限时间采样以后,得到的是离散数据,这些离散数据的均值并不能严格等于采样区间连续信号的真实均值。而且采样区间真实的均值,极有可能是非零均值的,只是均值很小而已。对速度信号,进行数值积分获取零均值位移信号的方法,同下面的对加速度数值积分获取速度的方法。

3.2 假设2:速度是零均值的信号

设当加速度不为常数时,采样间隔时间dt足够小,一种离散的数值积分为梯形公式

v0任意假定。零均值的获取就是去掉趋势项,得到

上面的式(10)是一种程序语言,代表将有偏估计的速度信号(组成的矩阵),每个元素去除整体上的已知均值,这样修正得到的v就是零均值的。去掉趋势项的操作,可能存在各种优雅的处理,比如Matlab里面的detrend命令等等,这里不再涉及。

值得一提的是,如果去趋势项的运算是含有非线性因素,那么可能就存在频率混叠的困难,因为采样频率是一定的,这些非线性运算,比如带入平方,开平方根,矩阵求逆,或者取符号运算等等非线性的操作,会引入带宽以上的频率分量,而这可能不是希望的结果,需要后续修正,最好的处理是先保证足够的带宽,最后做无相移的低通滤波。K. Worden教授对去趋势项的研究结论认为,那些“优雅的”去趋势项操作引入的误差很难处理。有趣的是,他早年在MSSP上发表的论文认为,数值积分方案是很Nice的选择;几年以后在他自己的书里对这个问题又做了更细致的论证和分析,他认为数值微分方案才是更好的。

3.3 假设3:速度是周期信号

这种情况,对加速度FFT,在频域积分,再IFFT回来就可以了。

但是我们要知道两点潜在的问题:加速度信号,从时域图上看,一定要是周期的或者Almost周期的,所以分辨率一定要选择得合理才能做到整周期采样;如果频率分辨率选择不合理,可能存在很严重的泄露,加窗号称可以减小泄露,但是,加窗通常对积分以后的速度信号是毁灭性的,加窗的效应保留在时域速度信号里面,无法修正回来;如果有本事做到不加窗,对数据的分辨率选择就提出了很高的要求。如果不是周期信号,怎么选择分辨率都没用啊。

图1 非周期信号+加窗的FFT积分再IFFT结果,以及和精确解(蓝色)对比

3.4 假设4:速度为零时,加速度最大

这个假设,是本人偶然想到的,是在研究某算法时,看到某非线性微分方程强迫响应,然后突然想到,假定速度为零时,对应于动能最小,然后惯性力最大,产生的加速度也是最大的,就这样得到一个结果,在那个例子中,需要在众多的加速度峰值中选择一个,然后确定积分常数,确实产生了较好的效果,但是这个实在太巧合了,再次按照这个方法选择其他峰值做一遍,失效了,现实中是没有这么理想的假设的。

图2 速度(红色)和加速度(蓝色)时域曲线对比

当时的做法是,在某一个明显的加速度峰值附近,选取几个离散加速度点;用多项式进行拟合,得到加速度关于时间的表达式,这一步可以表达为

其中下标k=1,2,3...s只是代表选择的邻近的有限个数据点。

假定系统的阻尼很小,在最大惯性力和最大弹性恢复力平衡时粘性阻尼力为零,这个假设在某些时候是成立的,那么加速度最大的时候,速度可以为零。令上面的表达式为零,选择离散数据中加速度最大的时刻tmax,解方程找到加速度真正的峰值时刻tp,tp非常靠近tmax,即

对加速度的表达式积分得到速度的表达式,积分常数v0待求

tp时刻的速度为零,从而解出积分常数v0

在这个区间的速度表达式就已知了,回到tmax时刻,可以直接得到这个时刻下的速度,应该是一个非常小的量

这样,我们终于找到了“估计的速度小量”,可以根据上面的离散公式,继续完成剩下的时间积分。

因为这个方法并不总是成立,失效以后的某个结果如下所示。

图3 梯形数值积分结果和参考结果(红色)对比,存在一个整体偏移量δv

一个数值积分案例

在网上荡到了一个96年Steven D. Glaser等人在(Preliminary Processing of the Lotung LSST Data报告中,对一个测试到的加速度数据进行数值积分的案例,附录中有源代码,这个数据是地震加速度信号,频率特别低,把源代码贴在这里,给感兴趣的人:

function[a,v,d]=vd(f,Lcut,dT,pre,name)

% function[a,v,d]=vd(f,Lcut,dT,pre,name)

% detrends andfilters the input acc and integrates twice to give velo and disp

% f is the inputacc vector

% Lcut is thelow-end cutoff frequence in Hz

% dT is the timestep

% n is the orderof the Butterworth filter

% pre is thepre-event segment length to be zeroed

zip=zeros(size(zip));

[b,c]=butter(n,Lcut*dT*2,'high');

a=filtfilt(b,c,f);

a=dtrend(a(:,1),1,pre);%%mxl:这个函数已经过时了.

a=detrend(a);

a=a-a(pre+1);

a(1:pre)=zip;

v=dtrend(v(1,:)',1,pre);%%mxl:这个函数已经过时了

v=v-v(pre+1);%整体平移量

v(1:pre)=zip;%前pre个数值设置为0

d=inttrap(v,dT);%%mxl:这个是数值积分,这个函数过时了

[b,c]=butter(n,Lcut*dT*2,'high');

d=filtfilt(b,c,d);

d=dtrend(d(:,1),1,pre);

d=detrend(d); %去趋势项

d=d-d(pre+1); %整体平移量

d(1:pre)=zip; %前pre个数值设置为0

可以看到,他们首先使用了低通滤波,做了去趋势项,然后整体平移了一个量,再将前pre个数值人为置为零。

终极建议

如果同时测试了加速度和位移,那么就特别好办了。所以,如果有条件,尽可能测试加速度和位移。

设在某个区间 [t1,t2] 里面,加速度和位移都可以拟合一个表达式(expression)

在两次积分的情况下可以得到时间常数的表达式,从而解出未知系数

可见速度也同时得到了。

测试位移+测试加速度,可以通过数值微分+低通滤波得到速度;当然也可以直接通过Kalman滤波得到速度,方便、快捷、高效又稳健;或者带有微分算法的低通滤波得到速度,等等。方法总是有很多种。但并不建议测试位移,两次数值微分得到加速度,因为数值微分算法是高通滤波器,会引入高频噪声,采样频率越高,高频噪声问题越严重,两次数值微分得到的加速度误差较大,但也并不是完全不能使用,加上低通滤波可以降低这个误差,总比从加速度积分得到位移要靠谱得多。使用低通滤波算法要注意不要引入相移,平滑处理(Smooth)也是一种低通滤波,效果还行。下面是把不同点数差分算法看成是高通滤波器,然后计算其频率响应得到的曲线,注意是对采样频率fs做了归一化以后的结果。结论是:用5点差分算法是可行的,向前差分或者Matlab的diff函数,最糟糕。

图4 不同差分格式的频响特性

5.1 部分数值实验结果

下面贴出一个位移传感器在低频范围内振动,并做了相对位移和相对加速度采集的结果,从而依据这些测试结果进行数据后处理。

图5 diff会引入高频噪声;加低通滤波能消除这个噪声;smooth是移动平均,也能消除这个噪声

图6 最小二乘法可能计算不准初速度(m/s),微小的差别最终导致位移无法复现,如图7所示

图7 两种方法计算得到速度再梯形积分得到的位移(mm)对比,红色为测试位移结果黑色和红色几乎完美重合,蓝色为上面least+低通滤波的结果

图8 filter函数会引入相移,而filtfilt函数可以消除相移

图9 最小二乘法初始速度计算不为零,造成了位移恢复结果累积误差较大,产生overshoot现象,精度不及diff+滤波结果

图10 恢复位移和测试结果比较,黑色为diff恢复结果,蓝色为最小二乘加低通滤波结果,最小二乘法可能产生underestimate现象

图11用速度恢复位移和测试结果比较,黑色为diff+fir低通滤波结果,蓝色为diff+移动平均结果,说明diff+移动平均结果也不错

图12 最小二乘法与diff法得到的加速度对比,低通截止0.05

图13 最小二乘法与diff法得到的加速度对比,低通截止0.5

提高低通截止,最小二乘法得到的加速度结果明显优于diff,说明这个时候差分的噪声很难消除。

上面的实验部分实验结果,主要集中在低频,大多数位移测试的也是在低频,少部分如激光测振才能达到较高频率。

有人可能说会有更好的方案,所以,可以求解一些线性或者非线性ODE,得到精确的位移、速度和加速度数据,可以试试对这些加速度进行积分,你可以试试数值积分或者模拟电路积分,并和标准速度和标准位移对比一下,考验一下你的算法的精度。

作者简介

牟小龙,北京理工大学机械与车辆学院博士研究生,擅长线性有限元分析和系统阻抗匹配。

觉得不错,请点赞!

扩展阅读

Matlab绘制汽车加速度——速度曲线 燃油车车速与加速度曲线 阅读详情

相关推荐

MATLAB实现控制系统的时域分析

目的 用 MATLAB 对控制系统进行时域分析,包括典型响应、判断系统稳 定性分析系统的动态特性。 理论 二、典型响应及其性能分析 1、单位阶跃响应 单位阶跃响应调用格式为: (1) step(num,den) (2) step(num,den,t) (3) step(G) (4) step(G,t) 该函...

weixin_33888907的博客 6053

matlab加速度积分速度位移

采用频域积分,得到所需要的位移速度数据。

一组加速度数据通过积分变成速度数据位移数据

要将一组加速度数据通过积分变成速度数据位移数据,可以使用 MATLAB 中的cumtrapz函数。cumtrapz进行的是累积梯形积分,适合处理离散数据。以下是一个完整的示例代码,展示了如何导入数据、进行积分绘制速度位移曲线

DX_LI的博客 4673

【信息科学与工程学】信息科学领域——第一百三十三篇 半导体器件物理与电子封装12

输入目标速率(如 HBM3 6.4Gbps 、HBM4 6.4Gbps/pin、SerDes 16-32Gbps)堆叠层数(2-5 层,或 HBM 12-16 层 High )节距与键合方式(D2W 2µm / W2W 500nm-200nm)G-S 或 GSSG 等 pad 配置介质材料(SiO₂/SiON/SiCN,需权衡 k 值与铜扩散阻隔 )工艺参数(表面粗糙度 <0.5nm RMS、Cu pad CD、套刻精度 <40nm )输出。

weixin_49199313的博客 269

matlab加速度积分计算速度位移

1、内容简介 略 2、内容说明 略 3、仿真分析clc close all clear load('data.txt') % 起始时间:2017年10月22日16:55:21 % 时间(s) x轴加速度 y轴加速度 z轴加速度 温度 t=data(:,1); acc_x=data(:,2); figure plot(t,acc_x) xlabel 时间/s ylabel 加速度 f = 100; % t_new = t(1):t_step:t(end); % acc_x_ne...

qingfengxd1的博客 1万+

使用信号处理算法过滤加速度数据并将其转换为速度位移研究(Matlab代码实现)

使用信号处理算法过滤加速度数据并将其转换为速度位移的方法,可以帮助研究人员更加准确地描述物体的运动状态运动规律。例如,在运动学中,可以使用这种方法研究人体运动的规律特点;在航空航天中,可以使用这种方法研究飞行器的运动状态控制方法。在这个方法中,首先需要采集物体的加速度数据,并将其加载到计算机中。接着,将滤波后的加速度数据转换为速度位移。可以使用积分计算的方法,将加速度数据转换为速度,再将速度数据转换为位移。在物理学、工程学、运动学等领域,这种方法被广泛应用于研究物体的运动状态运动规律。

weixin_61181717的博客 1286

【JY】基于Matlab的(单)多自由度动力学代码分享

写在前文多自由度分析是现代工程科学研究中不可或缺的一部分。它涉及到对复杂系统的动力学行为进行精确描述预测。分享下多自由度的源代码,仅供学习。该程序适用于单自由度或多自由度计算分析~相关阅读:【JY】代码|极简反应谱分析【JY】基于Matlab的双线性滞回代码编写教程【JY】动力学利器 —— JYdyn函数包分享与体验代码详解步骤一:构建质量矩阵以及刚度矩阵步骤二:构建 阻尼矩阵如果为单自由度计...

Gavinson的博客 1869

数值积分

摘要:本次主要介绍利用MATLAB加速度信号进行两次数值积分位移的算法。 1. 假如加速度信号是一个正弦信号。 A = 1; f = 40; w = 2*pi*f; t = 0:0.001:0.4; fs = 1000; acc = A*sin(w*t); 2. 对加速度信号进行两次积分。 spd = cumtrapz(t,acc); spd = spd * 1000; pos = cumtrapz(t,spd); pos = pos * 1000; 3. 画出加速度速度位移与时间的曲

benjamin_2020的博客 1491

MATLAB中如何将离散加速度积分求得速度

方法一: E=load('C:\Users\Administrator\Desktop\in.txt'); D=E-sum(E(:,1))/length(E); figure(1) plot(D)  title('滤波前加速度') %%%%%%%%%%%%%%%%%%%%%%%%%%% % 积分%%%%%%%%%%%% dt=0.1; Sx=0; for i=1:1:l

dushulin111的博客 2万+

matlab对离散曲线积分,利用DPLOTSeismoSignal对加速度时程曲线进行积分得到速度位移时程曲线的方法...

有时候需要对加速度时程曲线(地震波或加速度传感器测得到信号)进行积分得到速度位移,若直接积分,会有漂移,位移漂移更严重。因此,需要通过基线校正来解决。常用的曲线处理软件DPLOT可以很容易做到,更专业的软件可以用SeismoSignal,这里介绍一下。一、用DPLOT对加速度时程曲线进行积分得到速度位移时程曲线1、用DPLOT打开加速度时程曲线,如图1;2、点Generate->Inte...

weixin_39672680的博客 3174

加速度积分位移MATLAB代码

加速度计位移MATLAB

GitHub:https://github.com/Shaoyc 2万+

利用三轴加速度求解位移的算法——来自飞思卡尔方案

在要求精度不高的情况,可以使用三轴加速度积分得到位移,飞思卡尔给出了官方方法,下文来自翻译说明 http://cache.freescale.com/files/sensors/doc/app_note/AN3397.pdf?fsrch=1&sr=2 摘要 此文档描述并使用MMA7260QT三轴加速计低功耗的9S08QG8八位单片机实现求解位置的算法。 在今天先进的电子市场,有不少增加了许多特性智能的多功能的产品。定位游戏只是得益于获取到的位置信息的一部分市场。一个获...

qingfengxd1的博客 3万+

基于MATLAB速度加速度数值计算

因此,diff(v)将返回一个n-1维向量,其中n是速度数据的长度。同样,diff(t)将返回一个n-1维向量,其中n是时间数据的长度。同样,diff(t)将返回一个n-1维向量,其中n是时间数据的长度。需要注意的是,由于diff函数会减少向量的长度,因此最终的速度加速度向量都比位移向量的长度小1。需要注意的是,由于diff函数会减少向量的长度,因此最终的加速度向量将比速度向量的长度小1。需要注意的是,由于diff函数会减少向量的长度,因此最终的速度向量将比位移向量的长度小1。x = sin(t);

学习使你进步。 3159

matlab加速度转化为位移,关于matlab实现加速度位移问题

用了那本书上的程序,不过这里的单位变换系数是怎么设定的哎?是N/2么,求解答求指导%频域积分%%%%%%%%%%%%%%%%%%%%%%%%%%clear; clc; close all hidden%%%%%%%%%%%%%%%%%%fni=input('频域积分-输入数据文件名:','s');fid=fopen(fni,'r');sf=fscanf(fid,'%f',1);%采样频率fmin=...

weixin_39875805的博客 1732

MATLAB控制系统仿真5.1:时域响应分析

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。

FUXI_Willard 8200

matlab 绘制系统的单位阶跃响应曲线 并编写程序求峰值时间 超调量 [李园7舍_404]

1 内容 已知典型二阶系统的传递函数为                               其中 wn=2,阻尼比 分别为0.2,0.4,0.6,0.8,1,2时系统的单位阶跃响应曲线(绘制在同一张图上),并求出 =2,阻尼比 =0.4时系统的峰值时间超调量。   2 求解   2.1 将所有的单位阶跃响应绘制在一起 matlab 版本: 7.9.0(R2009b)

记一忘三二 12万+
上一篇: matlab线性预测函数,线性预测及其Matlab实现
下一篇: 如何让matlab的plot函数不运行,这个程序应该怎么定义函数?直接执行程序不出现plot图像...
洛小易
博客等级 码龄8年 35粉丝 84原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值