我想基于加速度计,旋转矢量和WLAN实现卡尔曼传感器融合。我使用dlmread从CSV文件为每个Android传感器(加速度计,旋转矢量和WLAN)加载传感器数据。每个传感器具有从2ms到200ms的不同采样率。我的问题是我不知道如何访问数据以实现传感器融合,因为这些值不同步。
accelData = dlmread("1.csv", ",", 1, 0);
accelX = accelData(:, 15);
accelY = accelData(:, 16);
accelZ = accelData(:, 17);
rotVecData = dlmread("11.csv", ",", 1, 0);
rot1 = rotVecData(:, 15);
rot2 = rotVecData(:, 16);
rot3 = rotVecData(:, 17);
rot4 = rotVecData(:, 18);
rot5 = rotVecData(:, 19);
dtA = 0.002;#2ms
samplesA = length(accelX);
tAccel = 0:dtA:(samplesA*dtA - dtA);
dtR = dtA*5;#10ms
samplesR = length(rot1);
tRot = 0:dtR:(samplesR*dtR - dtR);
for i = 1 : samplesR
r = [rot1(i), rot2(i), rot3(i), rot4(i), rot5(i)];
[azimuth] = Orientation(r, 90);
a(end+1) = rad2deg(azimuth);
end
figure
plot(tAccel, accelX, tRot, rot1)
在示例中,我可以按正确的时间间隔绘制2个不同传感器的值。输出如下:
这里的问题是我无法迭代这些值以进行进一步的计算。因为accel(i)值以2ms的速率发生,而rot1中的第i个元素的速率为20ms。因此,来自CSV的每个传感器阵列都有不同的大小,但是所有它们都在相同的时间间隔内发生。
在所示的图中是正确的,但我不知道如何在与不同采样率相对应的一个循环中迭代数据?
注意:这些值相互依赖(基于旋转矢量的行人航位推算和基于加速度计的步检测)。