Bir ivme ölçerden ham hızlanma verileri alıyorum ve pozisyon almak için onu ikiye katlamaya çalışıyorum.MATLAB Hızlanmadan sürate, pozisyona entegre edildiğinde çok yüksek değerler elde ediyorum.
Verileri azaltmak için kullanılan android telefon, sürüklenmeyi azaltmak için 3 saniye boyunca düz bir yüzeye ayarlandı. Başlangıçtan sıfıra düşmek için dinlenme periyodunda ivme ortalaması alırım. Bu iyi çalıştı, ancak hız ve pozisyona (cumtrapz kullanarak) entegre olduğumuzda, gerçek olmayan yüksek değerler alıyoruz (hız için metre/sn ve konum için metre.)
Ham veriler, telefonun belirli bir şekilde tempo.
Konumun neden bu kadar yüksek değerler aldığına dair bir fikri var mı? Aşağıda, neyi tarif ettiğimi ve kodumu gösteren grafikler verilmiştir.
Düzenleme: Telefonlar döndürüldüğünde bile, değerler gerçekçi değildir ve telefonun nasıl taşındığına dair bir gösterge değildir. Ekli resimlerde telefon, dönüşü olmayan düz bir yüzey üzerinde bir kutu şeklinde hareket ettirildi. X yönünde
hız ve konum X yönünde
%VarName2 = accelerometer values in X direction
%VarName3 = accelerometer values in Y direction
%VarName4 = accelerometer values in Z direction
%elapsedArray = time values for each sample of accelerometer data
ddx = VarName2 - mean(VarName2(1:limit));
ddx = ddx(1:length(ddx)-200);
elapsedArray = elapsedArray(1:length(elapsedArray)-200);
ddy = VarName3 - mean(VarName3(1:limit));
ddy = ddy(1:length(ddy)-200);
ddz = VarName4 - mean(VarName4(1:limit));
ddz = ddz(1:length(ddz)-200);
velX = cumtrapz(ddx .* elapsedArray);
velY = cumtrapz(ddy .* elapsedArray);
velZ = cumtrapz(ddz .* elapsedArray);
dx = velX - mean(velX(1:limit));
dy = velY - mean(velY(1:limit));
dz = velZ - mean(velZ(1:limit));
posX = cumtrapz(dx .* elapsedArray);
posY = cumtrapz(dy .* elapsedArray);
posZ = cumtrapz(dz .* elapsedArray);
x = posX - mean(posX(1:limit));
y = posY - mean(posY(1:limit));
z = posZ - mean(posZ(1:limit));
figure;
plot(ddx);
title('Acceleration in X')
xlabel('Time (sec)')
ylabel('Acc (meters squared');
figure;
plot(dx);
title('Velocity in X')
xlabel('Time (sec)')
ylabel('Velocity (meters)');
figure;
plot(x);
title('Position X')
xlabel('Time (sec)')
ylabel('Position (meters)');
figure;
plot(y);
title('Position Y')
xlabel('Time (sec)')
ylabel('Position (meters)');
figure;
plot(z);
title('Position Z')
xlabel('Time (sec)')
ylabel('Position (meters)');
Hızlanma
Başlangıçtaki arsa olduğundan emin misin * aslında * ivme? Ayrıca ivme ölçerinizin örnekleme süresi nedir? X ekseninizin yanlış olduğunu varsayarak düşünüyorum (yani telefonu doğrudan 13 dakika boyunca çalmıyordunuz). Eğer olsaydın, telefonu ne sıklıkta sallıyordun? (zamanla çok az örneklemiş olabilirsiniz) – Suever
Evet, ilk arsa doğrudan ivme ölçerden aldığı için hızlanır. Örnekleme periyodu, saniyenin yaklaşık her 100'ünde bir, x ekseni ise zaman dizisinin dizinleridir, böylece saniyenin her birinin 1/100'üne karşılık gelir. X ekseni etiketi hala önceki bir testten saniyeler gösteriyor - özür dileriz. –
Telefonu sallarken döndürmediğinizden emin misiniz?İvmeölçer sabit bir eksen boyunca ölçülür ve telefonu döndürürseniz, bu koordinat çerçevesindeki x ekseni örnekleme pencerenizde sabit değildir (toprakla sabitlenmiş çerçeveye göre). – mikkola