2013-06-21 13 views
6

Sto sviluppando un sistema di gestione della flotta e uno dei compiti è quello di mostrare un grafico che rappresenta il consumo di carburante del veicolo (basato su un dato proveniente dal CANBUS).Algoritmo di livellamento del grafico carburante

Se un valore di dati è compreso tra 0 e 100, implica una percentuale. Quindi, se ottengo un numero intero di 45, significa che il carburante nel serbatoio è del 45%.

Tuttavia, se il veicolo è in movimento, potrebbero esserci dati incoerenti a causa della fisica della nave. Ad esempio, una serie di dati può essere:

76,76,75,74,73,73,71,70 < - questo è un buon modello perché mostra come il carburante sta andando giù.

76,70,75,77,76,74,74,73,72,69,72,73,73,72,71 < - questo non è un buon andamento dovuto al fatto che salta il carburante in il serbatoio non è coerente e i dati che ricevo non sono appropriati per la visualizzazione all'utente.

Desidero attenuare i valori, ma in base a quanti valori scelgo di calcolare alla volta, il risultato è diverso.

Il problema chiave è che a volte ci sono momenti di drenaggio e di rifornimento che DEVO mostrare nella tabella e che non devono smussare.

Che tipo di algoritmo posso utilizzare per analizzare e rappresentare il mio grafico in modo convincente per l'utente?

+0

Avete altri input, ad esempio dati GPS, per rilevare se il veicolo è in movimento o meno? –

+0

sì, ho lo stato del motore e l'ora –

+1

bene .. gli utenti si lamentano? probabilmente inizierei a mostrare i dati grezzi, quindi spiegherei che il sensore ha una variabilità di + -10% – Randy

risposta

2

Ci sono modi per determinare quando si verificano il rifornimento/il drenaggio? Se è così, allora potresti cambiare il tuo algoritmo in quei momenti in modo dinamico.

In caso contrario, si consiglia di utilizzare livellamento esponenziale.

Sia d (0 < = d < 1) essere il fattore di peso per il numero precedente. Così visualizzato_numero = prev_data * d + nuovo_data * (1-d)

Con un fattore di peso adeguato, sembrerebbe che l'"irregolarità" verrebbe rimossa, ma allo stesso tempo il risultato rifletterebbe gli eventi di carburante.

Questa non è l'unica opzione, più di un algoritmo di esempio, ma spero che lo trovi utile.

Piccola modifica: non mi ero reso conto che il livellamento esponenziale avesse un nome proprio. Avevo semplicemente usato la tecnica quando mostravo i frame rate nei giochi che creavo. Quindi, grazie Kemper.

+1

L'unico modo per determinare _draining_ è la combustione del carburante che presumerei, che è ciò che in teoria sembra che stia cercando di visualizzare/misurare. –

+0

Sì. Concordo. Penso che la mia risposta ora possa essere ulteriormente migliorata dato che ora so che lo stato del motore è noto. Ad esempio, il rifornimento di carburante potrebbe non verificarsi durante determinati stati del motore. A quel punto, "d" potrebbe essere ridotto per compensare. Pensieri? Voglio riflettere prima di apportare modifiche potenziali alla luce di queste informazioni. –

+0

alcune volte il rifornimento avviene quando il motore è acceso. –

1

Come ho capito, vuoi che le piccole variazioni spariscano mantenendo i grandi salti senza appianare. Probabilmente il moving median è quello che stai cercando, preserva i grandi salti senza appianare (proprietà edge preserving).

Non sono sicuro che sia il metodo migliore per te, dovrei vedere i tuoi dati.

Problemi correlati