Saturday 11 November 2017

Moving Media Pic


Come altri hanno già detto, si dovrebbe considerare un infinito filtro di risposta all'impulso IIR piuttosto che il filtro FIR risposta all'impulso finita si sta utilizzando ora c'è di più ad esso, ma a prima vista filtri FIR sono implementati come circonvoluzioni espliciti e filtri IIR con equations. The particolare filtro IIR io uso molto in microcontrollori è un unico polo filtro passa-basso Questo è l'equivalente digitale di un semplice filtro analogico RC Per la maggior parte delle applicazioni, questi avranno caratteristiche migliori rispetto al filtro di dialogo che si sta utilizzando con più usi di un filtro scatola che ho incontrato sono il risultato di qualcuno non prestando attenzione in classe elaborazione del segnale digitale, non come risultato di aver bisogno di loro particolari caratteristiche Se si desidera solo per attenuare le alte frequenze che si sa essere il rumore, un filtro passa basso unipolare è meglio Il modo migliore per implementare un digitalmente in un microcontrollore è usually. FILT - FILT FF nUOVO - FILT. FILT è un pezzo di stato persistente questa è l'unica variabile persistente è necessario calcolare questo filtro NEW è il nuovo valore che il filtro è in corso aggiornato con questa iterazione FF è la frazione filtro che regola la pesantezza del Guardate filtro questo algoritmo e vedere che per FF 0 il filtro è infinitamente pesante dal momento che l'uscita non cambia mai per 1 FF, è davvero nessun filtro del tutto poiché l'uscita solo segue l'ingresso valori utili sono tra su piccoli sistemi si sceglie FF sia 1 2 N in modo che il moltiplicare per FF può essere realizzato come uno spostamento a destra di n bit per esempio, FF potrebbe essere 1 a 16 e il moltiplicare per FF pertanto un diritto spostamento di 4 bit, altrimenti questo filtro necessita di un solo sottrarre e uno aggiuntivo, anche se i numeri di solito bisogno di essere più ampio rispetto al valore di input più precisione numerica in una sezione separata below. I richiede solitamente significativamente letture aD più velocemente di quanto sono necessari e applicare due di questi filtri in cascata Questo è l'equivalente digitale di due filtri RC in serie, e attenua di 12 dB un'ottava sopra della frequenza di rolloff Tuttavia, per le letture aD che di solito è più rilevante per guardare il filtro nel dominio del tempo considerando la sua risposta al gradino Questo ti dice quanto velocemente il sistema vedrà un cambiamento quando la cosa si sta misurando changes. To facilitare la progettazione di questi filtri che significa solo raccogliere FF e decidere come molti di loro a cascata, io uso il mio programma FILTBITS si specifica il numero di di bit di spostamento per ogni FF nella serie cascata di filtri, e calcola la risposta al gradino e di altri valori in realtà io di solito eseguire questo tramite il mio script wrapper PLOTFILT questo viene eseguito FILTBITS, il che rende un file CSV, quindi traccia il file CSV, ad esempio, qui è il risultato di PLOTFILT 4 4. due parametri PLOTFILT significa che ci saranno due filtri in cascata del tipo descritto sopra I valori 4 indicano il numero di bit di spostamento per realizzare il moltiplicare per FF I due valori FF sono quindi 1 16 in questa traccia rossa case. The è la risposta al gradino unità, ed è la cosa principale da guardare ad esempio, questo indica che se l'ingresso cambia istantaneamente, l'uscita del filtro combinato si depositerà a 90 del nuovo valore di 60 iterazioni Se vi preoccupate per il 95 tempo di assestamento, allora si deve attendere circa 73 iterazioni, e per il 50 tempo di assestamento solo il 26 iterations. The traccia verde si mostra l'output da un unico picco di piena ampiezza Questo vi dà un'idea della soppressione del rumore casuale e ' sembra che nessun singolo campione causerà più di un 2 5 cambiamento nel blu traccia output. The è quello di dare una sensazione soggettiva di ciò che questo filtro fa con rumore bianco questo non è un test rigorosi in quanto non vi è alcuna garanzia che cosa esattamente il contenuto era dei numeri casuali scelto come ingresso rumore bianco per questa esecuzione di PLOTFILT e 's solo per dare una sensazione di massima di quanto verrà schiacciata e come liscia si is. PLOTFILT, forse FILTBITS, e un sacco di altra roba utile, soprattutto per lo sviluppo del firmware PIC è disponibile in Strumenti di sviluppo PIC versione del software al download di software page. Added circa precision. I numerici vedere dai commenti e ora una nuova risposta che non vi è interesse a discutere il numero di bit necessari per implementare questo filtro Nota che il moltiplicare per FF creerà Log 2 FF nuovi bit al di sotto del punto di binario su sistemi di piccole dimensioni, FF è di solito scelto per essere 1 2 N in modo che questo si moltiplicano in realtà è realizzato da un spostamento a destra di N bits. FILT è quindi di solito un fissa punto intero si noti che questo doesn t cambiare una delle due conti dal punto di processore s di vista, ad esempio, se si sta filtrando 10 letture AD bit e N 4 FF 1 16, allora avete bisogno di 4 bit di frazione sotto le letture intero AD 10 bit quello più processori, si d essere facendo operazioni di interi a 16 bit a causa delle letture aD 10 bit in questo caso, si può ancora fare esattamente le stesse 16 opertions bit integer, ma iniziare con le letture aD sinistra spostata di 4 bit del processore doesn t conoscere la differenza e doesn t bisogno di fare i calcoli su interi numeri interi a 16 bit funziona se li si considera di essere 12 4 punto fisso o veri e propri 16 numeri interi bit 16 0 point. In generale fissa, è necessario aggiungere N bit ogni polo filtro se don t vuole aggiungere rumore dovuto alla rappresentazione numerica nell'esempio precedente, il secondo filtro di due avrebbe dovuto avere 10 4 4 18 bit per non perdere le informazioni In pratica su un computer a 8 bit che significa che D utilizzare i valori a 24 bit tecnicamente solo il secondo polo di due avrebbe bisogno il valore più ampio, ma per semplicità firmware io di solito uso la stessa rappresentazione, e quindi lo stesso codice, per tutti i poli di un filter. Usually scrivo una subroutine o una macro per eseguire l'operazione palo un filtro , quindi applicare che per ogni polo si tratti di una subroutine o una macro dipende dal fatto che i cicli o memoria di programma sono più importanti in quel particolare progetto in entrambi i casi, io uso uno stato zero per passare NEW nella macro subroutine, che aggiorna FILT, ma carica anche che nello stesso stato scratch NEW era in questo modo è facile da applicare poli multipli poiché la FILT aggiornata di un polo è il NUOVO del successivo Quando una subroutine, esso s utile avere un punto puntatore FILT sul modo in, che viene aggiornato a poco dopo FILT sulla via d'uscita in questo modo la subroutine funziona automaticamente su filtri consecutivi in ​​memoria se chiamato più volte con una macro è don t bisogno di un puntatore da quando si passa l'indirizzo di operare su ogni iteration. Code Examples. Here è un esempio di una macro come descritto sopra per un PIC 18.And ecco un macro simile per un pic 24 o dsPIC 30 o 33.Both questi esempi sono implementate come macro utilizzando il mio PIC assemblatore preprocessore che è più capace di uno dei due built-in strutture macro. clabacchio Un altro problema Avrei detto è l'implementazione del firmware È possibile scrivere un unico polo passa-basso filtro subroutine una volta, poi applicarlo più volte in realtà io di solito scrivere un tale subroutine per prendere un puntatore in memoria allo stato del filtro, poi lo hanno avanzare il puntatore in modo che possa essere chiamato in successione facilmente per realizzare multipolare filtra Olin Lathrop 20 apr 12 in 15 03.1 grazie mille per le vostre risposte - tutti loro ho deciso di utilizzare questo filtro IIR, ma questo filtro non viene utilizzato come un filtro standard LowPass, dal momento che ho bisogno di valori medi del contatore e confrontarli per rilevare i cambiamenti in un certo intervallo poiché questi valori van essere di dimensioni molto diverse a seconda dell'hardware ho voluto prendere una media in modo da essere in grado di reagire a questi Hardware cambiamenti specifici sensslen automaticamente 21 maggio 12 a 12 06.If si può vivere con la restrizione di una potenza di due serie di elementi a media cioè 2,4,8,16,32 ecc quindi il divario può facilmente ed efficacemente essere fatto su una bassa micro prestazioni senza divisione dedicata, perché può essere fatto come un scorrimento di bit ogni turno a destra è una potenza di due eg. The OP pensava di avere due problemi, che divide in un PIC16 e memoria per il suo anello di buffer Questa risposta dimostra che la divisione non è difficile Bisogna ammettere che non affronta il problema di memoria, ma il sistema SE permette risposte parziali, e gli utenti possono prendere qualcosa da ogni risposta per se stessi, o anche modificare e combinare altri s risposte Poiché alcune delle altre risposte richiedono un'operazione di divisione, hanno sono allo stesso modo incompleto in quanto non mostrano come realizzare in modo efficiente questo su un PIC16 Martin 20 aprile 12 al 13 01.There è una risposta per un vero e proprio movimento filtro a media filtro aka carro merci con requisiti di memoria meno, se don t mente downsampling E 's chiamato in cascata filtro integratore d'ape CIC l'idea è che si dispone di un integratore che si prende le differenze di un periodo di tempo, e il dispositivo di memoria di risparmio chiave è che da downsampling, è don t devono memorizzare ogni valore dell'integratore e ' può essere implementato usando la seguente pseudocode. Your efficace in movimento lunghezza media è di decimationFactor statesize ma avete solo bisogno di mantenere intorno campioni statesize Ovviamente è possibile ottenere prestazioni migliori se il statesize e decimationFactor sono potenze di 2, in modo che gli operatori di divisione e resto vengono sostituiti da turni e maschera-ands. Postscript sono d'accordo con Olin che si dovrebbe sempre prendere in considerazione semplici filtri IIR prima di un filtro a media mobile Se don t bisogno le frequenze-null di un filtro vagone, un 1-palo o basso 2 poli filtro passa probabilmente funzionerà fine. On d'altra parte, se si sta filtrando ai fini della decimazione prendendo un ingresso ad alta frequenza di campionamento e una media per l'utilizzo da parte di un processo a basso tasso di allora un filtro CIC può essere solo quello che stai cerca soprattutto se è possibile utilizzare statesize 1 ed evitare il ringbuffer tutto con un solo integratore precedente value. There s alcune analisi approfondita della matematica dietro utilizzando il filtro IIR del primo ordine che Olin Lathrop ha già descritto sopra sulla Digital Signal Processing scambio pila comprende un sacco di belle immagini l'equazione per questo IIR is. This filtro può essere implementato usando solo numeri interi e nessuna divisione utilizzando il seguente codice potrebbe essere necessario un po 'di debugging come stavo scrivendo da memory. This filtro approssima una media mobile delle ultime K campioni impostando il valore di alfa per 1 K fare questo nel codice precedente per definire ing BITS per LOG2 K, cioè per K 16 bit impostati a 4, per K 4 bit impostato su 2, ecc I ll verificare il codice elencato qui non appena ottengo un cambiamento e modificare questa risposta se needed. answered 23 giugno 12 alle 4 del 04.Here sa media unipolare filtro passa-basso in movimento, con CutoffFrequency frequenza di taglio molto semplice, molto veloce, grandi opere, e quasi nessuna memoria overhead. Note Tutte le variabili hanno portata al di là della funzione di filtro, ad eccezione del passato in newInput. Note si tratta di un unico filtro fase fasi multiple possono essere collegati in cascata insieme per aumentare la nitidezza del filtro Se si utilizza più di una fase, è ll essere necessario regolare DecayFactor quanto riguarda la Cutoff frequenza per compensate. And, ovviamente, tutto ciò che serve è quelle due righe posizionati ovunque, don t bisogno la propria funzione Questo filtro non hanno un tempo di ramp-up prima della media mobile rappresenta quella del segnale di ingresso Se è necessario bypassare quel tempo di accelerazione, si può solo inizializzare media mobile per il primo valore di newInput invece di 0, e spero che il primo isn t newInput un outlier. CutoffFrequency SampleRate ha una gamma compresa tra 0 e 0 5 DecayFactor è un valore compreso tra 0 e 1, di solito vicino ai carri 1.Single precisione sono abbastanza buono per la maggior parte delle cose, ho appena preferisco doppie Se avete bisogno di attaccare con numeri interi, è possibile convertire DecayFactor e ampiezza Factor in numeri interi frazionari, in cui il numeratore viene memorizzato come numero intero, ed il denominatore è una potenza intera di 2 in modo da poter bit-shift verso destra come denominatore piuttosto che dover dividere durante l'anello filtrante per esempio, se DecayFactor 0 99, e si desidera utilizzare gli interi, è possibile impostare DecayFactor 0 99 65536 64881 e poi ogni volta che moltiplicare per DecayFactor nel loop filtro, basta spostare il risultato più 16.For informazioni su questo, un ottimo libro che s on-line, il capitolo 19 sulla filters. PS ricorsive per lo spostamento di paradigma media, un approccio diverso per impostazione DecayFactor e AmplitudeFactor che può essere più rilevante per le vostre esigenze, lasciare s dire si desidera che i precedenti, circa 6 articoli in media insieme, facendo in modo discreto , si d aggiungere 6 articoli e dividere per 6, in modo da poter impostare la AmplitudeFactor a 1 6, e DecayFactor a 1 0 - AmplitudeFactor. answered 14 maggio 12 alla 22 55.Everyone altro ha commentato a fondo l'utilità di IIR vs FIR, e sul potere di due figli divisione I d appena piace dare dettagli un po 'implementazione il funziona bene su piccoli microcontrollori senza FPU ci s alcuna moltiplicazione di seguito, e se si mantiene N una potenza di due, tutta la divisione è po' a ciclo unico buffer circolare - shifting. Basic FIR tenere un tampone di corsa degli ultimi valori N, e una somma parziale di tutti i valori nel buffer Ogni volta che un nuovo campione entra, sottrarre il valore più vecchio nel buffer da SUM, sostituirlo con il nuovo campione, aggiungere il nuovo campione di SUM, e l'uscita SUM N. Modified IIR ring buffer mantenere una somma parziale degli ultimi N valori Ogni volta che un nuovo campione entra, SUM - SUM N, aggiungere il nuovo campione, e SUM uscita N. answered 28 agosto 13 al 13 45.If io vi sto leggendo in questo, si ri descrivendo un primo ordine IIR filtrare il valore si ri sottraendo isn t il valore più vecchio che sta cadendo fuori, ma è invece la media dei valori precedenti primo ordine filtri IIR possono certamente essere utili, ma non sono sicuro di cosa si intende quando si suggerisce che l'uscita è la stessa per tutti i segnali di questa in una frequenza di campionamento 10KHz, alimentando un onda quadra a 100Hz in un filtro casella 20-tappa produrre un segnale che aumenta in modo uniforme per 20 campioni, si trova in alto a 30, scende in modo uniforme per 20 campioni, e si siede basso per 30 a supercat filtro IIR del primo ordine 28 agosto 13 al 15 31.will produrre un'onda che inizia forte aumento e gradualmente stabilizza vicino ma non al massimo in ingresso, poi inizia bruscamente cadere e gradualmente livelli fuori vicino ma non al minimo ingresso in diverso comportamento Supercat 28 ago 13 ad 15 32.One problema è che una semplice media mobile può o non può essere utile con un filtro IIR, è possibile ottenere un bel filtro con relativamente pochi Calcoli La FIR si descrive può solo dare un rettangolo nel tempo - un sinc in freq - e si può t gestire i lobi laterali può essere valsa la pena di gettare in un paio di moltiplica interi per rendere un bel FIR sintonizzabile simmetrica se si può risparmiare l'orologio zecche Scott Seidman 29 agosto 13 al 13 50. ScottSeidman Non c'è bisogno di moltiplica se uno ha semplicemente ogni fase della FIR sia uscita la media del ingresso a tale fase e il suo valore memorizzato precedente, e quindi memorizzare l'ingresso se si ha la gamma numerica, si potrebbe utilizzare la somma piuttosto media Sia che s meglio di una scatola filtro dipende dall'applicazione la risposta di un filtro scatola con un ritardo totale di 1 ms, per esempio, avrà una brutta picco d2 dt quando il cambiamento di ingresso, e di nuovo 1ms tardi, ma avrà la minima possibile d dt per un filtro con un totale di 1ms Tempo Supercat 29 ago 13 ad 15 25. come ha detto mikeselectricstuff, se si ha realmente bisogno di ridurre le esigenze di memoria, e don t mente il tuo risposta all'impulso essere un esponenziale, invece di un impulso rettangolare, vorrei andare per un movimento filtro di media esponenziale li uso a lungo con quel tipo di filtro, don t bisogno di alcun tampone È don t devono conservare N passato campioni Solo uno Quindi, i tuoi requisiti di memoria vengono abbattuti da un fattore di N. Also, è don t bisogno di alcuna divisione per che solo moltiplicazioni Se si ha accesso a floating punto di aritmetica, utilizzare moltiplicazioni in virgola mobile in caso contrario, fare moltiplicazioni interi e turni a destra Tuttavia, siamo nel 2012, e vi consiglierei di usare compilatori e MCU che consentono di lavorare con numbers. Besides in virgola mobile essendo più memoria efficiente e più veloce è don t devono aggiornare gli elementi in ogni buffer circolare, direi che è anche più naturale perché una risposta all'impulso esponenziale corrisponde meglio il modo in cui la natura si comporta, nella maggior parte cases. answered 20 apr 12 in 9 59.One questione con il filtro IIR come quasi toccato da Olin e supercat ma apparentemente ignorato da altri è che l'arrotondamento introduce una certa imprecisione e potenzialmente polarizzazione troncamento supponendo che N è una potenza di due, e solo aritmetica intera viene utilizzato, lo spostamento a destra non elimina sistematicamente LSB del nuovo campione Ciò significa che per quanto tempo la serie potrebbe mai essere, la media non potrà mai prendere quelle in account. For esempio, si supponga una serie lentamente diminuendo 8,8,8 8,7,7,7 7,6,6 , e assumere la media è infatti 8 all'inizio il campione pugno 7 porterà la media di 7, qualunque sia la forza del filtro Solo per un campione Stessa storia per 6, ecc Ora pensare il contrario della serie va in su la media rimarrà accesa 7 per sempre, fino a quando il campione è abbastanza grande per farlo change. Of Naturalmente, è possibile correggere la distorsione con l'aggiunta di 1 2 N 2, ma che ha vinto t realmente risolvere il problema di precisione in quel caso la serie decrescente rimarrà per sempre a 8 fino a quando il campione è 08-01 FEBBRAIO N 2 per N 4 per esempio, qualsiasi campione sopra lo zero non mancherà di tenere i unchanged. I media ritengono una soluzione per questo implicherebbe tenere un accumulatore di LSB perduta, ma io didn t rendono abbastanza lontano per avere il codice pronto, e io non sono sicuro che non avrebbe danneggiato il potere IIR in alcuni altri casi di serie, per esempio se 7,9,7,9 sarebbe in media di 8 poi. Olin, il vostro cascata a due stadi anche avrebbe bisogno di qualche spiegazione Vuoi dire che regge due valori medi con il risultato del primo alimentato nella seconda in ogni iterazione Che s il vantaggio di this. Averages semplici average. Averages movimento media mobile semplice Sei incoraggiati a risolvere questo compito secondo la descrizione dell'attività, utilizzando qualsiasi linguaggio si può knowputing la media mobile semplice di una serie di numbers. Create un'istanza di classe funzione di stateful che prende un periodo e restituisce una routine che prende un numero come argomento e restituisce un media mobile dei suoi argomenti così media far. A mobile semplice è un metodo per calcolare una media di un flusso di numeri soltanto la media degli ultimi numeri P dal flusso, dove P è conosciuto come il period. It può essere implementata chiamando una routine sigla P come argomento, IP, che dovrebbe poi tornare una routine che quando ha chiamato con i singoli, i membri successivi di un flusso di numeri, calcola la media di fino a, l'ultimo P di loro, permette di chiamare questo SMA. The parola stateful nella descrizione compito si riferisce alla necessità di SMA a ricordare determinate informazioni tra le chiamate a it. The periodo, P. An ordinato contenitore di almeno gli ultimi numeri P da ciascuno dei suoi singoli calls. Stateful significa anche che le chiamate successive a io, l'inizializzatore, dovrebbe tornare routine separate che non condividono stato salvato in modo che potessero essere utilizzati su due flussi indipendenti di data. Pseudo-codice per un'implementazione di versione SMA is. This utilizza una coda permanente per contenere i valori più recenti p ogni funzione tornati da init-media mobile ha il suo stato in un atomo tiene una coda value. This implementazione utilizza una lista circolare per memorizzare i numeri all'interno della finestra all'inizio di ogni iterazione puntatore si riferisce alla cella lista che contiene il valore appena trasferirsi al di fuori della finestra e di essere sostituito con l'appena aggiunto value. Using una chiusura edit. Currently questa tecnica SMA può t essere nogc perché assegna una chiusura sul mucchio Alcune analisi di fuga potrebbe rimuovere il mucchio allocation. Using una modifica Struct. Questa versione evita l'assegnazione mucchio di chiusura mantenere i dati in stack frame della funzione principale stessa output. To evitare le approssimazioni virgola mobile mantengono accumulando e crescente, il codice può eseguire una somma periodica sulle intere array. This coda circolare attuazione produce due oggetti funzione condividono stato è idiomatica in E separare ingresso dall'uscita leggere dalla scrittura invece di combinare in un'unica struttura object. The è lo stesso come l'attuazione di deviazione standard programma elisir E. The seguito genera una funzione anonima con un punto incorporato p, che viene utilizzato come il periodo della media mobile semplice la funzione corsa legge l'input numerico e lo passa alla funzione anonima appena creato e poi ispeziona il risultato di STDOUT. The uscita viene mostrato sotto, con la media, quindi l'ingresso raggruppati, che costituiscono la base di ogni movimento average. Erlang ha chiusure, ma le variabili immutabili una soluzione quindi è quella di utilizzare i processi e un semplice messaggio di passaggio lingue API. Matrix basati hanno routine per calcolare la avarages di scorrimento per una data sequenza di items. It è meno efficiente ciclo come il seguente commands. Continuously richiede un ingresso I che viene aggiunto alla fine di un elenco L1 L1 può essere trovato premendo 2ND 1 e medio può essere trovato in list OPS. Press ON per terminare l'program. Function che restituisce un elenco contenente i dati medi del argument. Program dotazione che restituisce un valore semplice ad ogni invocation. list è la lista del calcolo della media P è il periodo di 5 ritorna la media list. Example 2 Utilizzando il programma movinav2 I, 5 - Inizializzazione movimento calcolo della media, e definire periodo di 5 movinav2 3, xx - i nuovi dati nel valore lista 3, e il risultato saranno memorizzati sul x variabile, e visualizzato movinav2 4, xx - nuovi dati il ​​valore 4, e il nuovo risultato viene memorizzato su x variabile e visualizzata 4 3 2.Description della funzione movinavg variabile r - è il risultato della lista media che verrà restituito variabile i - è la variabile indice e punti al fine sub-lista l'elenco in fase media variabile z - una funzione di supporto variable. The utilizza variabile i per determinare quali valori della lista saranno considerati nel prossimo calcolo della media ad ogni iterazione, variabile I punti per l'ultimo valore nell'elenco che verrà essere utilizzati nel calcolo della media quindi abbiamo solo bisogno di capire quale sarà il primo valore nella lista di solito abbiamo ll considerare elementi p, in modo che il primo elemento sarà quello indicizzato da ip 1 Tuttavia sulle prime iterazioni che il calcolo in genere è negativo, quindi la seguente equazione eviterà indici negativi max ip 1,1 o organizzare l'equazione, ip max, 0 1 ma il numero di elementi sulle prime iterazioni sarà anche più piccola, il valore corretto sarà index end - iniziare indice 1 o, disponendo l'equazione, i - max ip, 0 1 1, e poi, i-mAX IP, 0 Z variabile detiene il mAX IP valore comune, 0 in modo che il beginIndex sarà z 1 e le NumberOfElements saranno lista iz. mid, z 1, Iz restituirà l'elenco dei valori che saranno in media somma sarà riassumere li riassumono iz ri loro sarà media e memorizzare il risultato nel posto appropriato nel list. fp1 risultato crea una parziale applicazione fissa la a questo caso, la seconda e la terza parameters. It potrebbe essere se si applica un peso che è inversamente proporzionale alla classe size. public finestra AverageCounter int RunningAvg int RunningCount questo sostituisce la lista circolare int windowSize. public AverageCounter int WindowSize WindowSize windowSize. public vuoto AddValue galleggiare NewValue crescere le dimensioni della finestra come più campioni vengono registrati se RunningCount WindowSize RunningCount. ricorsive media mobile media n W - 1 W avg n-1 1 W campione dove W è la dimensione della finestra RunningAvg RunningCount - 1 RunningCount RunningAvg 1 RunningCount NewValue. public galleggiare RunningAvg media ritorno .-- modificata a 13 53 Venerdì 9 novembre 2007.pwasser 8-gen-08 16 25.This formula funziona bene per la stima media mobile a patto che alcuni vincoli sono tenuti in mind. It calcola una stima della media non il reale media mobile si muove sulla base del presupposto importante che i valori dei campioni sono normalmente distribuita sulla mean. I fatto notare in un precedente post. toadth 9-ott-11 15 46.Well che era muto wasn t it.4 anni e potrei avere un suggerimento migliore, piuttosto che usare una lista circolare, l'uso una lista collegata e mantenere manualmente la dimensione massima lista in questo modo è possibile mantenere un totale parziale dell'aggregato - quando si aggiunge alla lista di collegamento, aggiungere l'aggregato, durante il taglio di un nodo, sottrarre quel valore dal aggregata per un contatore media con 5 nodi, forse hai vinto t nota un miglioramento delle prestazioni, tuttavia per molti casi con dire migliaia di nodi che sarebbe matter.1 Nel metodo AddValue, aggiungere un nuovo nodo elenco di link, e aggiungere alla media 2 Dopo aver aggiunto, controllare la dimensione 3 Se la soglia di Sottrai formato da MEDIA e poi tagliare fuori node. For ancora di più l'efficienza, invece di usare lista collegata, è possibile implementare la propria lista circolare sulla base di una matrice dei valori - sottraendo MEDIA quando si sostituisce una matrice value. Marc Clifton 10-ott-11 1 37,4 anni su e potrei avere una migliore suggestion. Indeed, che avrebbe funzionato better. I non sto certainn della soluzione corretta però dato che sommando i media di ogni campione introdurrebbe una discreta quantità di errore di arrotondamento. hmm mi domando se separa la parte frazionaria di tutta la parte aiuterebbe Dividere tutta la parte di ogni numero per il conteggio Mantenere tre somme di esercizio 1 la media delle parti intere, 2 il resto di ogni divisione, e 3 la parte frazionaria di ogni number. Each tempo l'intera parte di un numero viene diviso, l'intero risultato parte viene aggiunto alla somma medio di esecuzione e il rimanente viene aggiunto al resto esecuzione somma Quando la restante esegue somma ottiene un valore maggiore o uguale al conteggio, esso s diviso per il conteggio con l'intero risultato parte aggiunto alla somma media di marcia e il restante aggiunto al resto esecuzione somma Inoltre, ad ogni calcolo, la parte frazionaria viene aggiunta al funzionamento frazionaria sum. When la media è finito, il restante somma parziale viene divisa per il numero e il risultato viene aggiunto alla somma media in esecuzione come un numero floating per example. Now cosa fare con la somma parziale frazionale il pericolo di trabocco è molto meno probabile qui, anche se ancora possibile, in modo uno modo per gestire sarebbe dividere la somma parziale frazionata mediante il conteggio alla fine e aggiungervi alla nostra alternativa result. An sarebbe controlla la somma parziale frazionata a ciascun calcolo per vedere se è maggiore o uguale a contare Quando ciò accade, basta fare la stessa cosa che facciamo con il resto esecuzione somma.

No comments:

Post a Comment