У меня есть данные теста акселерометра, и мне нужно использовать Matlab, чтобы найти скорость и положение.Мне нужны фактические данные для скорости и положения, а не только кумулятивная область под кривой.У меня есть образцы данных, которые я использую, и я смог сделать это с помощью довольно длинного и специфического кодирования векторизации, но мне нужно найти более общий метод.Я не могу просто использовать кривую, а затем оценить площадь, потому что у меня есть дискретные данные и я не могу допустить ошибки.Этот метод по существу расчета площади каждого прямоугольника является наиболее точным способом.Ниже приведены мои попытки:
%Variables
clear
DeltaTime=0.2; %10 Hz sampling rate
Acceleration=[0, 1, 2, 4, 3, 1, 2]; %Sample random data set
TTime=(0.2:DeltaTime:1.4);
VelocityL=zeros(size(Acceleration));
VelocityLL=zeros(size(Acceleration));
%Velocity
DeltaVelocityVect=Acceleration*DeltaTime;
VelocityV=[sum(DeltaVelocityVect(1)),sum(DeltaVelocityVect(1:2)),...
sum(DeltaVelocityVect(1:3)), sum(DeltaVelocityVect(1:4)), sum(DeltaVelocityVect(1:5))...
sum(DeltaVelocityVect(1:6)), sum(DeltaVelocityVect(1:7))];
%Position
DeltaPositionVect=VelocityV*DeltaTime;
PositionV=[sum(DeltaPositionVect(1)),sum(DeltaPositionVect(1:2)),...
sum(DeltaPositionVect(1:3)), sum(DeltaPositionVect(1:4)), sum(DeltaPositionVect(1:5))...
sum(DeltaPositionVect(1:6)), sum(DeltaPositionVect(1:7))];
Я решил все это вручную и написал это на бумаге и на Matlab, и все вышеперечисленные работы.Длина наборов данных будет варьироваться, поэтому она не будет работать в долгосрочной перспективе.Я попытался использовать зацикливание, чтобы решить эту проблему, поскольку индекс можно легко изменить, чтобы он соответствовал любой длине вектора при сохранении частоты дискретизации, но я не смог получить его для вывода фактических значений данных.Мне нужна общая форма вышесказанного.
for index=1:length(Acceleration);
DeltaVelocityLoop(index)= DeltaTime*Acceleration(index);
end
for index2=1:7
VelocityL(index2)= sum(DeltaVelocityLoop(index2));
VelocityLL=VelocityLL+DeltaVelocityLoop(index2);
end
Это моя 10-я попытка, поэтому она включает повторение.VelocityL возвращает тот же вектор, что и DeltaVelocityLoop (без суммирования предыдущих областей, что является целью).VelocityLL просто возвращает общую площадь под кривой, написанную для длины вектора ускорения.Пожалуйста, дайте мне знать, если у вас есть идеи о том, как я могу обойти этот контрольно-пропускной пункт.