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)矩阵,属

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在matlab中,ode45函数可以用来解决常微分方程的数值解法,包括振动系统的响应。振动系统的数学模型可以用一个二阶齐次常微分方程来描述: m*y''(t) + b*y'(t) + k*y(t) = 0 其中,m是质量,b是阻尼系数,k是弹性系数,y(t)是系统的位移。为了求解以上方程,我们需要知道初始条件,即y(0)和y'(0)。在matlab中,我们可以通过定义一个函数来表示方程: function dydt = odefunc(t, y) dydt = [y(2); -(b/m)*y(2) - (k/m)*y(1)]; 其中,t是时间,y是位移速度的向量。在函数中,我们将方程转化为两个一阶微分方程的形式。然后,我们可以使用ode45函数来求解该方程: [t, y] = ode45(@odefunc, [0, T], [y0, v0]); 其中,[0, T]是时间范围,[y0, v0]是初始条件。运行这个函数后,ode45会返回时间向量t和位移速度的向量y。我们可以使用plot函数来绘制振动系统的响应曲线: plot(t, y(:, 1)); % 位移 xlabel('时间'); ylabel('位移'); plot(t, y(:, 2)); % 速度 xlabel('时间'); ylabel('速度'); 这样,我们就可以通过matlab的ode45函数求解振动系统的响应,并绘制位移速度随时间变化的曲线图。 ### 回答2: 在MATLAB中,可以使用ode45函数来求解振动系统的响应。其中,ode45是一种常用的数值求解常微分方程的方法,适用于描述由一阶或二阶微分方程描述的动力系统。 首先,需要定义微分方程。对于振动系统来说,其微分方程通常可以表示为: m * x'' + c * x' + k * x = F(t) 其中,m表示振动系统的质量,x表示振动系统的位移,t表示时间,c表示阻尼系数,k表示弹性系数,F(t)表示外力。可以根据具体系统的特点来确定这些参数的值。 接下来,在MATLAB中定义一个函数,该函数输入一个时间t和位移向量x,输出加速度向量x': function xdot = myODE(t, x) % 输入系统的参数值 m = ; c = ; k = ; F = ; % 计算加速度 xdot = zeros(2, 1); xdot(1) = x(2); xdot(2) = (F - c * x(2) - k * x(1)) / m; 然后,在主程序中调用ode45函数来求解微分方程: [t, x] = ode45(@myODE, [t0, tf], [x0, v0]); 其中,@myODE表示传入的微分方程函数,[t0, tf]表示求解的时间范围,[x0, v0]表示振动系统的初始位移和初始速度。 最后,可以绘制系统的振动响应图像: plot(t, x(:, 1)); xlabel('时间'); ylabel('位移'); title('振动系统的响应'); 通过这样的步骤,可以使用MATLAB的ode45函数来求解振动系统的响应,并得到一个时间-位移图像。 ### 回答3: 在MATLAB中,ode45是一个常用的求解常微分方程(ODE)的函数。它使用经典的第四阶5步Runge-Kutta方法来计算ODE的数值解,并且可以用于解决振动响应问题。 振动响应问题可以描述为一个二阶线性ODE。例如,考虑一个简谐振动系统,其运动方程可以表示为mx''(t) + bx'(t) + kx(t) = F(t),其中m是质量,b是阻尼系数,k是弹性系数,F(t)是外力。为了求解这个振动问题,我们可以将它拆分为两个一阶ODE,即: x'(t) = v(t),v'(t) = (F(t) - bv(t) - kx(t))/m 首先,我们需要定义一个函数,该函数返回输出向量值,包括速度加速度: function dxdt = ode_func(t, x, m, b, k, F) dxdt = zeros(2, 1); dxdt(1) = x(2); dxdt(2) = (F(t) - b*x(2) - k*x(1))/m; end 然后,我们可以使用ode45函数来解决上述一阶ODE,其中x0是初始条件向量,[tstart, tend]是求解的时间范围: tstart = 0; tend = 10; x0 = [0; 0]; % 初始位移和初始速度 m = 1; % 质量 b = 0.5; % 阻尼系数 k = 2; % 弹性系数 [t, x] = ode45(@(t, x) ode_func(t, x, m, b, k, @(t) sin(t)), [tstart, tend], x0); 最后,我们可以绘制振动系统的位移速度随时间的变化图: figure; subplot(2, 1, 1); plot(t, x(:, 1)); xlabel('时间'); ylabel('位移'); subplot(2, 1, 2); plot(t, x(:, 2)); xlabel('时间'); ylabel('速度'); 通过以上步骤,我们可以使用ode45函数在MATLAB中求解振动系统的振动响应,并绘制位移速度随时间的变化图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值