2010-02-16 11 views

risposta

16

Un filtro IIR semplice, unipolare, passa-basso, ricorsivo è rapido e facile da implementare, ad es.

xf = k * xf + (1.0 - k) * x; 
yf = k * yf + (1.0 - k) * y; 

dove x, y sono grezzo (non filtrato) X/segnali accelerometrici Y, xf, yf sono i segnali di uscita filtrati, e k determina la costante di tempo dei filtri (tipicamente un valore compreso tra 0,9 e 0.9999. .., dove un k più grande significa una costante di tempo più lunga).

È possibile determinare k empiricamente, o se si conosce la frequenza richiesta cut-off, Fc, quindi è possibile utilizzare la formula:

k = 1 - exp(-2.0 * PI * Fc/Fs) 

dove Fs è la frequenza di campionamento.

Si noti che xf, yf sono i valori precedenti del segnale di uscita sull'RHS e i nuovi valori di uscita sull'LHS dell'espressione sopra.

Si noti inoltre che stiamo assumendo qui che si campioneranno i segnali dell'accelerometro a intervalli di tempo regolari, ad es. ogni 10 ms. La costante di tempo sarà una funzione sia di k che di questo intervallo di campionamento.

+0

così xey sono l'accelerometro.x e l'accelerometro.y, io sono confuso, non so cosa sia il 'segnale di ingresso grezzo'. :/ – DotSlashSlash

+1

No, y è il segnale filtrato, x è ciò che l'accelerometro ha dato. Sarebbe più chiaro scrivere che 'xf = k * xf + (1.0 -k) * x' dove xf è la versione filtrata di x, e un'equazione simile per l'asse y. –

+0

@Andrew - grazie per il suggerimento - ora modificato per maggiore chiarezza (spero!). –