Sto codificando qualcosa nel momento in cui sto prendendo un sacco di valori nel tempo da una bussola hardware. Questa bussola è molto accurata e si aggiorna molto spesso, con il risultato che se si muove leggermente, finisco con il valore dispari che è selvaggiamente incoerente con i suoi vicini. Voglio smussare quei valori.Livelli di arrotondamento nel tempo: media mobile o qualcosa di meglio?
Avendo letto un po ', sembrerebbe che quello che voglio sia un filtro passa-alto, un filtro passa-basso o una media mobile. La media mobile con cui posso scendere, basta tenere una cronologia degli ultimi 5 valori o qualsiasi altra cosa, e usare la media di quei valori a valle nel mio codice in cui una volta usavo solo il valore più recente.
Questo dovrebbe, penso, appianare bene quei jiggles, ma mi sembra che sia probabilmente abbastanza inefficiente, e questo è probabilmente uno di quei problemi noti ai programmatori corretti a cui c'è una soluzione di Clever Math davvero pulita.
Io sono, tuttavia, uno di quegli orribili programmatori autodidatti senza un briciolo di educazione formale in qualcosa anche solo vagamente collegato a CompSci o Math. Leggere un po 'suggerisce che questo possa essere un filtro passa alto o basso, ma non riesco a trovare nulla che spieghi in termini comprensibili a un hack come me, quale sarebbe l'effetto di questi algoritmi su una serie di valori, per non parlare di come la matematica funziona. La risposta data here, ad esempio, risponde tecnicamente alla mia domanda, ma solo in termini comprensibili a quelli che probabilmente saprebbero già come risolvere il problema.
Sarebbe davvero una persona molto gentile e intelligente che potrebbe spiegare il tipo di problema e come funzionano le soluzioni, in termini comprensibili per un laureato in lettere.
Buona spiegazione, grazie Rex. Avrei ragione nel pensare che un altro modo di esprimere la stessa cosa sarebbe: workingAverage = (newValue * smoothingFactor) + (workingAverage * (1.0 - smoothingFactor))? –
@Henry - Giusto, questo è il modo per farlo senza utilizzare alcuna memoria aggiuntiva. –
Ehi, so che sono in ritardo di 5 anni, ma grazie per una risposta fantastica. Sto lavorando a un gioco in cui il suono cambia in base alla velocità, ma a causa dell'esecuzione del gioco su un computer lento, la velocità fluttuerebbe selvaggiamente, il che andava bene per lo sterzo, ma super fastidioso in termini di suono. Questa era una soluzione davvero semplice ed economica per qualcosa che pensavo sarebbe stato un problema davvero complesso. – Adam