Как синхронизировать данные датчика с разными частотами дискретизации в октаве?

#signal-processing #octave #android-sensors #kalman-filter

#обработка сигнала #октава #android-датчики #kalman-filter

Вопрос:

Я хочу реализовать слияние датчиков kalman на основе акселерометра, вектора вращения и WLAN. Я загружаю данные датчика из файла CSV для каждого датчика Android (акселерометр, вектор вращения и WLAN) с помощью dlmread. Каждый датчик имеет разные частоты дискретизации от 2 мс до 200 мс. Моя проблема в том, что я не знаю, как получить доступ к данным для реализации слияния датчиков, потому что значения не синхронизированы.

 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) выполняется со скоростью 2 мс, в то время как i-й элемент в rot1 имеет скорость 20 мс. Таким образом, каждый массив датчиков из CSV имеет разные размеры, но все они выполняются за один и тот же интервал времени.

На показанном рисунке это правильно, но я не знаю, как перебирать данные в одном цикле, соответствующем разным частотам дискретизации?

Примечание: Значения зависят друг от друга (подсчет мертвого пешехода на основе вектора поворота и определение шага на основе акселерометра).

Комментарии:

1. Вы смотрели на resample функцию из signal пакета?

2. ДА. Я видел, что такая функция существует. Но документация действительно минималистична. Нет информации о коэффициенте p/q . Есть только 2 ссылки, и это немного серьезное чтение.

3. Взгляните на документацию для соответствующей функции MATLAB, она намного более полная: uk.mathworks.com/help/signal/ref/resample.html