如何根据测得的加速度数据计算位移?

信息处理 matlab 一体化
2022-02-17 18:33:42

我有一个从车辆收集的加速度数据。我也有位移测量。

我想根据测量的加速度数据计算位移矢量,但还没有成功。

这是数据(之前的链接不起作用我更新了链接): https ://ufile.io/zyw3r

测得的加速度数据

实测位移数据 我尝试什么:

filename = ('acc_time.csv'); 
accdata = csvread('acc_time.csv');

[mydata, myheader] = xlsread(filename); 
for i = 1:length(myheader)
      % compose a command to assign each column to a variable with the same 
      % name as the header
      commandExec = [myheader{i}, ' = ', 'mydata(:,', num2str(i) , ');'];
      % execute the composed command to actually create the variable
      evalin('base', commandExec ); 
end

vel_vector = cumtrapz(time,acc); 
disp_vector= cumtrapz(time,vel_vector);
plot(time, disp_vector)

我得到: 阴谋

但位移矢量应该是波浪形的,而不是线性增量。

我哪里错了?

2个回答

通常,当测量数据中存在偏移和/或线性漂移时,就会出现观察到的效果。然后双重积分导致在数据中观察到的二次(或更高阶)效应。

正如@Stanley Pawlukiewicz 在他的回答中所说,这可能是由于加速度计记录了重力(并非所有加速度计都能够记录恒定的加速度场),但也由于温度波动、(电磁)干扰、加速度计底部的应变等。有时,可以“屏蔽”您的传感器以防止这些影响,但这也可能极具挑战性或成本高昂。在后一种情况下,预处理您的数据也是一种选择,也可以从您的数据中提取有意义的结果。

消除双积分加速度信号中的二次漂移的最直接方法是在积分之前对数据进行去趋势处理。如果您在积分加速度和速度信号之前减去平均值,您应该合理地“接近”所需的结果(有关其他选项,请参见 matlab 的 detrend 函数)。

请注意,您测量的加速度信号中似乎还存在其他噪声和/或内容;即,您可能会“接近”想要的结果,但不会得到完全相同的位置信号。如果这很关键,您可以使用更复杂的信号处理方法,或者如果可能(并且最好)使用更好的传感器(例如位置传感器)。

嗨,我有一个类似的问题,但我通过过滤 RAW 加速度数据来去除噪音来修复,我使用了五阶巴特沃斯滤波器,大部分问题都解决了。