La Guida scienziato e ingegneri per Digital Signal Processing di Steven W. Smith, Ph. D. Un enorme vantaggio del filtro media mobile è che può essere implementato con un algoritmo che è molto veloce. Per capire questo algoritmo, immaginare passando un segnale di ingresso, x, attraverso un sette punti movimento filtro a media per formare un segnale di uscita, y. Ora guardiamo a come due punti di uscita adiacenti, y 50 y 51, sono calcolati: Questi sono quasi gli stessi punti di calcolo x 48 x 53 attraverso deve essere aggiunto per y 50, e di nuovo per y 51. Se y 50 è già stato calcolato , il modo più efficiente per calcolare y 51 è: Una volta y 51 è stato trovato utilizzando y 50, allora y 52 può essere calcolato dal campione y 51, e così via. Dopo il primo punto è calcolato in y, tutti gli altri punti possono essere trovati con un solo addizione e sottrazione per punto. Questo può essere espressa dalla formula: Si noti che questa equazione utilizzare due fonti di dati per calcolare ciascun punto nell'output: punti dall'ingresso e punti precedentemente calcolati dall'output. Questo è chiamato un equazione ricorsiva, il che significa che il risultato di un calcolo viene utilizzato nei calcoli futuri. (Il termine ricorsiva ha anche altri significati, soprattutto in informatica). Capitolo 19 illustra una varietà di filtri ricorsivi in maggior dettaglio. Essere consapevoli del fatto che il filtro ricorsivo media mobile è molto diverso dai filtri tipici ricorsivi. In particolare, la maggior parte dei filtri ricorsivi hanno una risposta infinitamente lunga di impulso (IIR), composto da sinusoidi ed esponenziali. La risposta all'impulso della media mobile è un impulso rettangolare (risposta all'impulso finita, o FIR). Questo algoritmo è più veloce di altri filtri digitali per diversi motivi. Innanzitutto, ci sono solo due calcoli per punto, indipendentemente dalla durata del kernel filtro. In secondo luogo, l'aggiunta e la sottrazione sono le uniche operazioni matematiche necessarie, mentre la maggior parte dei filtri digitali richiedono tempo moltiplicazione. In terzo luogo, il sistema di indicizzazione è molto semplice. Ogni indice in Eq. 15-3 è trovato aggiungendo o sottraendo costanti intere che possono essere calcolati prima dell'inizio di filtraggio (cioè P e Q). Quarto, l'intero algoritmo può essere effettuata con rappresentazione intera. A seconda dell'hardware utilizzato, interi possono essere più di un ordine di grandezza più veloce di virgola mobile. Sorprendentemente, rappresentazione intera funziona meglio di virgola mobile con questo algoritmo, oltre ad essere più veloce. L'errore di arrotondamento da aritmetica in virgola mobile può produrre risultati imprevisti se non si sta attenti. Ad esempio, immaginare un segnale di 10.000 campione che viene filtrato con questo metodo. L'ultimo campione del segnale filtrato contiene l'errore accumulato di 10.000 addizioni e sottrazioni 10.000. Ciò appare nel segnale di uscita come un offset deriva. I numeri interi non hanno questo problema, perché non vi è alcun errore di arrotondamento in aritmetica. Se è necessario utilizzare in virgola mobile con questo algoritmo, il programma in Tabella 15-2 mostra come usare un doppio accumulatore di precisione per eliminare questa statistica drift. In una media mobile semplice è un algoritmo che calcola la media ponderata degli ultimi n campioni. Il parametro n è spesso chiamato dimensione della finestra, poiché l'algoritmo può essere pensato come una finestra che scorre sopra i punti di dati. Utilizzando una formulazione ricorsiva dell'algoritmo, il numero di operazioni necessarie per campione è ridotto ad uno più, uno sottrazione e una divisione. Poiché la formulazione è indipendente dalla dimensione della finestra n. la complessità runtime è O (1). cioè costante. La formula ricorsiva della media mobile non ponderata, dove avg è la media mobile e x rappresenta un punto di dati. Così, ogni volta che le diapositive finestra a destra, un punto di dati, la coda, cade e un punto di dati, la testa, si muove in. Attuazione Un'implementazione della media mobile semplice è di prendere in considerazione quanto segue inizializzazione algoritmo Finché la finestra non è completamente popolato con valori, la formula ricorsiva fallisce. una conservazione accesso all'elemento coda, che a seconda della implementazione richiede una memoria di n elementi. My attuazione utilizza la formula presentata quando la finestra è completamente popolato con valori, e altrimenti passa alla formula, che aggiorna la media ricalcolando la somma degli elementi precedenti. Si noti che questo può portare a instabilità numeriche causa di aritmetica in virgola mobile. Per quanto riguarda il consumo di memoria è interessato, l'applicazione utilizza iteratori per tenere traccia di elementi testa e di coda. Questo porta ad una implementazione con requisiti di memoria costanti indipendenti dalla dimensione della finestra. Ecco la procedura di aggiornamento che scorre la finestra a destra. Nella maggior parte delle collezioni invalidare loro enumeratori quando la raccolta sottostante viene modificato. L'implementazione, invece, si basa su enumeratori validi. Soprattutto in streaming di applicazioni basate le esigenze di raccolta sottostanti modificati quando un nuovo elemento arriva. Un modo per affrontare questo è quello di creare una semplice raccolta circolare dimensione fissa di dimensioni n1 che non invalida i suoi iteratori e alternativamente aggiungere un elemento e la chiamata Shift. Vorrei poter capire come implementare in realtà questo, come la funzione di test è molto confusa per me8230 Ho bisogno di convertire i dati in array, quindi eseguire SMA nuova SMA (20, array) per un periodo di 20 SMA Come faccio a gestire funzione di spostamento () E 'necessario attuare costruttori. (Mi dispiace per la confusione). Non si don8217t bisogno di convertire i dati in un array a patto che i dati implementa IEnumerable1 e il tipo enumerato è doppio. Per quanto riguarda la messaggistica privata è interessato è necessario convertire il DataRow a qualcosa che è enumerabile di valori doppi. Il tuo approccio funziona. Shift, scivola la finestra di una posizione a sinistra. Per un set di dati di dire 40 valori e un 20 periodo di SMA si dispone di 21 posizioni la finestra si adatta (40 8211 20 1). Ogni volta che si chiama Shift () la finestra viene spostato a sinistra di una posizione e media () restituisce il SMA per la posizione della finestra corrente. Cioè, la media ponderata di tutti i valori all'interno della finestra. Inoltre la mia applicazione permette di calcolare la SMA, anche se la finestra non è completamente riempita all'inizio. Quindi, in sostanza Spero che questo aiuti. Ulteriori domande COPYRIGHT Christoph Heindl e cheind. wordpress, 2009-2012. Autorizzato la duplicazione uso Andor di questo materiale senza espressa autorizzazione scritta e da questo blog proprietario autore Andor è severamente proibito. Estratti e link possono essere utilizzati a condizione che la piena e chiara credito viene data alla Christoph Heindl e cheind. wordpress con direzione appropriata e specifica per il contenuto originale. Recenti PostsA media mobile media filtranti una serie di campioni di ingresso e produrre un campione singola uscita. Questa azione media elimina le componenti ad alta frequenza presenti nel segnale. Spostamento di filtri medi sono normalmente utilizzati come filtri passa-basso. In algoritmo di filtraggio ricorsivo, campioni di uscita precedenti anche sono presi per la media. Un movimento di filtro media media un numero di campioni di ingresso e di produrre un campione di uscita singola. Questa azione media elimina le componenti ad alta frequenza presenti nel segnale. Spostamento di filtri medi sono normalmente utilizzati come filtri passa-basso. In algoritmo di filtraggio ricorsivo, campioni di uscita precedenti anche sono presi per la media. Questa è la ragione per cui la sua risposta all'impulso estende all'infinito. Come utilizzare il programma di esempio Il file. zip contiene sia il codice sorgente ed eseguibile. Per compilare ed eseguire il codice sorgente è necessario disporre di Visual Basic 6.0 installato nel computer. Per eseguire il file eseguibile, è necessario scaricare e installare i file 6.0 runtime di Visual Basic. Eseguire movavgfilt. exe e vedrete la finestra principale. Nella finestra principale. la maggior parte superiore è il generatore di funzione. che produce diverse forme d'onda per testare il filtro. interattivamente Possiamo cambiare l'ampiezza, la frequenza e la forma del segnale generato. Per testare il programma dobbiamo prima di generare una forma d'onda appropriata. Qui si genera una forma d'onda complessa che consiste di due frequenze differenti. Lasciare tutto in impostazioni predefinite e fare clic sul pulsante quotgeneratequot. Ora è possibile vedere un segnale a 10 Hz nel grafico accanto al generatore di segnale. La figura sotto mostra la forma d'onda. Ora cambiare la frequenza di 100 Hz e cliccare quotgeneratequot di nuovo il pulsante. La forma d'onda appena generato è aggiunta alla forma d'onda esistente e risultante forma d'onda appare come un'onda 10Hz sin con 100 Hz rumore. Vedere la forma d'onda di seguito. Questa forma d'onda è più adatto per testare il filtro poiché contiene due frequenze differenti. È possibile eseguire il filtro facendo clic sul pulsante quotFilterquot. Tra le opzioni disponibili a sinistra al pulsante quotFilterquot. è possibile scegliere ricorsivo, il filtraggio non ricorsivo o nessun filtraggio a tutti. La figura seguente mostra l'uscita del filtro. Scarica Moving Average codice sorgente di Filter
No comments:
Post a Comment