PDA

View Full Version : Analisi di traiettorie in Matlab


Rannock
09-10-2012, 10:29
Spero di aver scritto nella sezione giusta..
Vi espongo il mio problema:
Ho fatto l'acquisizione della traiettoria nello spazio di un marker. Mi trovo ad avere un file .txt in cui ho una serie di coordinate 3d.
Questa è una porzione del file (sono coordinate in mm)

-9.72742 -141.224 401.578
-9.51058 -142.775 401.518
-9.45633 -143.178 401.485
-6.35867 -143.593 400.581
-4.83707 -143.675 400.053
-5.00037 -144.15 398.159

Quello che vorrei fare è analizzare la velocità della traiettoria lungo gli assi x,y,z.
per ricavare la velocità dovrei fare le derivate lungo le tre direzioni. Ho dunque messo la prima colonna in un vettore x e ho applicato semplicemente la formula di derivazione numerica df = [f(x+h)-f(x)]/h
con h = intervallo che uso per campionare (nel mio caso 0.02 sec).
In Matlab:
dx = diff(x); %dx contiene differenze tra un punto e il successivo
vx = dx./0.02;
plot(vx);
seguendo questo procedimento viene fuori un grafico molto irregolare.
c'è un metodo migliore per ricavare la velocità da una serie di coordinate?
grazie

Cait Sith
10-10-2012, 21:23
non ho capito come hai creato il file e cosa intendi per marker, comunque il metodo mi sembra giusto
se ti viene un grafico irregolare forse l'acquisizione non è molto precisa

la formula che hai usato approssima bene la derivata nel punto x+h/2
se hai campionato a passo h, la formula migliore da usare (a meno che si vogliano usare più di due campioni) è:
df/dx = (f(x+h)-f(x-h))/(2h)
in questo modo la derivata è centrata sul campione in coordinata x

volendo però potresti allargare i campioni presi in esame
df/dx = (f(x+5h)-f(x-5h))/(10h)
in questo modo se un singolo intervallo è poco affidabile l'errore verrebbe assorbito dai valori degli intervalli adiacenti (il prezzo da pagare è una risoluzione spaziale minore della velocità calcolata)
facendo i conti puoi verificare che quella formula corrisponde alla media delle derivate calcolate su un passo h nei punti adiacenti (in pratica è come filtrare la funzione derivata che ti sei calcolato)

Rannock
17-10-2012, 13:47
ho utilizzato un kinect per acquisire alcuni movimenti della mano, il kinect "vedeva" un cartoncino colorato di forma rettangolare e prendeva lecoordinate del baricentro del cartoncino.
grazie della risposta, proverò a fare come dici!