I m codifica qualcosa nel momento in cui mi sto prendendo un po 'di valori nel tempo da una bussola hardware Questa bussola è molto preciso e aggiornamenti molto spesso, con il risultato che se jiggles un po', io alla fine con il valore dispari che s selvaggiamente in contrasto con i suoi vicini voglio appianare quei valori out. Having fatto qualche lettura in giro, sembra che quello che voglio è un filtro passa-alto, un filtro passa-basso o di una media mobile media mobile posso scendere con, appena mantenere una cronologia degli ultimi 5 valori o qualsiasi altra cosa, e utilizzare la media di quei valori a valle nel mio codice dove sono stato una volta solo utilizzando il value. That più recente dovrebbe, credo, appianare quei jiggles bene, ma mi colpisce il fatto che s probabilmente abbastanza inefficiente, e questo è probabilmente uno di quei problemi noti per programmatori proprio a cui ci Sa veramente pulito intelligente Math solution. I del mattino, però, uno di quei programmatori autodidatti terribili senza uno straccio di educazione formale nel nulla anche vagamente correlate a CompSci o la matematica per la lettura un po 'intorno suggerisce che questo potrebbe essere un filtro alto o passa-basso, ma posso t trovare qualche cosa che spiega in termini comprensibili ad un hack come me ciò che l'effetto di questi algoritmi sarebbe su una serie di I valori, per non parlare di come funziona la matematica la risposta data qui, per esempio, tecnicamente non rispondere alla mia domanda, ma solo in termini comprensibili a coloro che probabilmente già sanno come risolvere il problem. It sarebbe una persona molto bella e intelligente che in effetti potrebbe spiegare il tipo di problema si tratta, e come le soluzioni di lavoro, in termini comprensibili a un Arts graduate. asked 21 settembre 10 alla 13 01.If vostra media mobile deve essere lungo al fine di ottenere il livellamento necessario, e don t veramente bisogno di alcuna particolare forma di kernel, poi si ri meglio se si utilizza un diminuisce in modo esponenziale in movimento average. where si sceglie piccolo per essere un appropriato esempio costante se si sceglie piccolo 1- 1 N, avrà la stessa quantità di media come una finestra di dimensioni N, ma distribuita in modo diverso negli anziani points. Anyway, dal momento che il prossimo valore della media mobile dipende solo dalla precedente e i dati, è don t devono mantenere una coda o nulla e si può pensare a questo come fare qualcosa di simile, Beh, io ve ha ottenuto un nuovo punto, ma I don t veramente fiducia, così ho intenzione di mantenere il 80 del mio vecchio stima della misura, e la fiducia solo questo nuovo punto di dati 20 s che praticamente la come dire, Beh, mi fido solo questo nuovo punto 20, e io ll utilizzare 4 altri punti di cui mi fido lo stesso importo, solo che invece di prendere esplicitamente le altre 4 punti, si ri partendo dal presupposto che la si media di fatto l'ultima volta era ragionevole in modo da poter utilizzare il work. answered precedente 21 settembre 10 a 14 27.Hey, so che questo è di 5 anni di ritardo, ma grazie per una risposta impressionante i m lavorando su un gioco in cui il suono cambia, sulla base della velocità, ma a causa di eseguire il gioco su un computer lento-ass, la velocità sarebbe fluttuare selvaggiamente, che andava bene per la guida, ma super fastidioso in termini di suono Questa è stata una soluzione molto semplice e poco costoso per qualcosa che ho pensato che sarebbe stato un problema davvero complesso Adam mar Filtro passa basso 16 15 a 20 20.If si sta tentando di rimuovere il valore dispari occasionale, un filtro passa-basso è il migliore dei tre opzioni che si hanno identificato consentono di modificare a bassa velocità, come quelli causati dalla rotazione di un bussola a mano, pur respingendo le modifiche ad alta velocità, come ad esempio quelli causati da urti sulla strada, per example. A media mobile probabilmente non sarà sufficiente, dal momento che gli effetti di una singola blip nei dati influenzeranno diversi valori successivi, a seconda delle dimensioni del vostro media mobile window. If i valori dispari vengono facilmente individuati, si può anche essere meglio con un algoritmo di problema tecnico-rimozione che ignora completamente them. Here è un grafico guick per illustrate. The primo grafico rappresenta il segnale di ingresso, con un problema tecnico sgradevole il secondo grafico mostra l'effetto di una media mobile a 10-campione il grafico finale è una combinazione della media 10-campione e il semplice algoritmo di rilevamento problema tecnico sopra indicato Quando viene rilevato il glitch, viene utilizzata la media di 10 campioni invece della media attuale value. Moving posso scendere con, ma mi colpisce che s probabilmente abbastanza inefficient. There davvero alcun motivo per una media mobile dovrebbe essere inefficiente di mantenere il numero di punti di dati che si desidera in qualche tampone come una circolare coda su ogni nuovo punto di dati, si pop il valore più vecchio e sottrarre da una somma, e spingere il più nuovo e aggiungerlo alla somma così ogni nuovo dato punto veramente comporta solo una spinta pop, una addizione ed una sottrazione tua media mobile è sempre questa somma spostamento diviso per il numero di valori nel vostro buffer. It diventa un po 'più complicato se si ri ricevere dati contemporaneamente da più thread, ma dal momento che i dati proviene da un dispositivo hardware che sembra assai dubbio per me. Oh e anche terribile programmatori autodidatti unite. The media mobile sembrava inefficiente perché si deve memorizzare un buffer di valori - meglio fare solo alcuni Clever matematica con il valore di ingresso e il valore di lavoro corrente Penso che s come funziona esponenziale media mobile Un'ottimizzazione I ho visto per questo tipo di media mobile comporta l'uso di una lunghezza fissa coda l'indicazione di dove ci si trova in quella coda, e solo avvolgendo il puntatore con o se Voila No costoso spinta power pop ai dilettanti, fratello Henry Cooke 22 settembre 10 a 0 54. Henry Per una media straight-up in movimento si ha bisogno semplicemente il buffer in modo da sapere quale valore viene spuntato quando il valore successivo ottiene spinto detto questo, la coda di lunghezza fissa un puntatore che si sta descrivendo è esattamente quello che ho intende con coda circolare Ecco il motivo per cui dicevo che isn t inefficiente Cosa hai pensato che volevo dire E se la vostra risposta è un array che sposta i suoi valori di nuovo su ogni rimozione indicizzata come std vettore in C bene, allora, mi sto così mi sono fatto male don t anche voglia di parlare con te più di Dan Tao 22 settembre 10 a 1 58. Henry non so su AS3, ma un programmatore Java s ottenuto collezioni come CircularQueue alla sua sua disposizione io non sono uno sviluppatore Java così sono sicuro che ci sono esempi migliori là fuori che s proprio quello che mi trovato da una rapida ricerca di Google, che implementa appunto la funzionalità che stiamo parlando di I m abbastanza fiducioso la maggior parte dei linguaggi di medio e basso livello con le librerie standard di avere qualcosa di simile ad esempio a non s coda T Comunque, ero filosofia me, quindi tutto è perdonato Dan Tao 22 settembre 10 a 12 44.An diminuisce in modo esponenziale media mobile può essere calcolato a mano, con la sola tendenza se si utilizzano i valori corretti vedere per un'idea su come fare questo rapidamente con carta e penna, se siete alla ricerca di media mobile esponenziale lisciato con 10 lisciatura Ma dal momento che si dispone di un computer, è probabilmente vuole fare spostamento binario rispetto a decimale modo shifting. This, tutto ciò che serve è una variabile per il vostro valore corrente e uno per la media la media successiva possono quindi essere calcolati dal that. answered 21 settembre 10 alla 14 39.there tecnica sa chiamato un cancello gamma che funziona bene con i campioni spuri basso occorrenza assumendo l'uso di uno del filtro le tecniche di cui sopra media mobile, esponenziale, una volta che hai la storia sufficiente una costante di tempo è possibile testare il nuovo campione di dati in entrata per ragionevolezza, prima di essere aggiunto alla conoscenza computation. some del massimo ragionevole tasso di variazione del segnale è richiesto il campione grezzo viene confrontato con il più recente valore livellato, e se il valore assoluto di questa differenza è maggiore del range consentito, il campione viene buttato o sostituito con qualche euristica, ad esempio una previsione basata sul differenziale pendenza o la tendenza valore di previsione da doppia esponenziale smoothing. answered 30 16 apr alle 6 56. il scienziato e ingegnere s Guide to Digital Signal Processing di Steven W Smith, Ph D. Chapter 15 Moving Filters. Relatives media della media mobile Filter. In un mondo perfetto , filtra i progettisti avrebbe solo a che fare con dominio del tempo o informazioni di dominio codificata della frequenza, ma mai una miscela dei due nello stesso segnale Purtroppo, ci sono alcune applicazioni in cui entrambi i domini sono allo stesso tempo importante, per esempio, segnali televisivi cadere in questa brutta categoria informazioni video è codificato nel dominio del tempo, che è la forma d'onda corrisponde ai modelli di luminosità dell'immagine Tuttavia, durante la trasmissione del segnale video viene trattato secondo la sua composizione frequenza, come la sua larghezza di banda totale, come il vettore vengono aggiunti onde per colore del suono, il restauro eliminazione della componente continua, ecc Come altro esempio, l'interferenza elettromagnetica si comprende meglio nel dominio della frequenza, informazioni anche if. the segnale s è codificato nel dominio del tempo, per esempio, il controllo della temperatura in un esperimento scientifico potrebbe essere contaminato da 60 hertz dalle linee di alimentazione, 30 kHz da un alimentatore switching, o 1320 kHz da un locale AM stazione radio parenti del filtro media mobile avere prestazioni migliori nel dominio della frequenza, e può essere utile in questi applications. Multiple pass-misto dominio movimento filtri medi coinvolgono passare il segnale di ingresso attraverso un filtro media mobile di due o più volte Figura 15-3a mostra il kernel di filtrazione complessiva risultante da un, due e quattro passaggi due passaggi sono equivalenti a utilizzando un filtro di forma triangolare kernel kernel filtro rettangolare convoluta con sé Dopo quattro o più passaggi, il kernel filtro equivalente sembra una gaussiana richiamare il teorema di limite centrale come mostrato in b, più passaggi producono una risposta al gradino ad s, rispetto alla retta della singola passare le risposte in frequenza in C e d sono date da Eq 15-2 moltiplicato per se stesso per ogni passaggio Cioè, ogni volta che i risultati del dominio convoluzione in una moltiplicazione del spectra. Figure frequenza di 15-4 mostra la risposta in frequenza di altri due parenti di il filtro a media mobile Quando una gaussiana puro viene usato come kernel filtro, la risposta in frequenza è anche una gaussiana, come discusso nel Capitolo 11 il gaussiano è importante perché è la risposta all'impulso di molti sistemi naturali e artificiali per esempio, un breve impulso di luce che entra una linea di trasmissione ottica fibra lunga uscirà come un impulso gaussiano, a causa delle differenti percorsi dei fotoni all'interno della fibra il kernel filtro gaussiano è ampiamente utilizzato anche in elaborazione delle immagini perché ha proprietà uniche che permettono veloce bidimensionali circonvoluzioni vedi Capitolo 24 la seconda risposta in frequenza in Fig 15-4 corrisponde all'utilizzo di una finestra Blackman come filtro kernel la finestra termine non ha alcun significato qui è semplicemente parte del nome accettato di questa curva è dato la forma esatta della finestra Blackman nel Capitolo 16 Eq 16-2, 16-2 Fig tuttavia, sembra molto simile a un Gaussian. How sono questi parenti del movimento del filtro media migliore rispetto al filtro media mobile sé Tre modi primo, e più importante, questi filtri hanno una migliore stopband attenuazione rispetto al movimento di seconda media filtro, i noccioli filtro rastremano ad un'ampiezza minore vicino alle estremità Ricordiamo che ogni punto nel segnale di uscita è una somma pesata di un gruppo di campioni dall'ingresso Se i coni kernel filtro, campioni del segnale di ingresso che sono più distanti sono dato meno peso rispetto a quelli nelle vicinanze in terzo luogo, le risposte a gradino sono curve morbide, piuttosto che la linea retta brusco della media mobile Questi ultimi due sono di solito di beneficio limitato, anche se si potrebbe trovare applicazioni in cui essi sono veri e propri vantaggi. il muovendo filtro a media e dei suoi parenti sono tutte uguali a ridurre il rumore casuale, pur mantenendo una risposta a gradino tagliente l'ambiguità sta nel modo in cui il tempo di salita della risposta al gradino è misurata Se il tempo di salita viene misurata da 0 a 100 del passo, la lo spostamento del filtro media è il meglio che si può fare, come precedentemente illustrato in confronto, misurando il tempo di salita da 10 a 90 rende la finestra di Blackman migliore rispetto al filtro media mobile il punto è, questo è solo litigi teorica considerare questi filtri uguali in questo parametro. la differenza più grande in questi filtri è la velocità di esecuzione Utilizzando un algoritmo ricorsivo descritto di seguito, il filtro media mobile funzionerà come un fulmine nel vostro computer, infatti, è il più veloce del filtro digitale disponibili passaggi multipli della media mobile sarà di conseguenza più lenta, ma ancora molto veloce in confronto, i filtri gaussiana e Blackman sono estremamente lento, perché devono usare circonvoluzione Pensate un fattore pari a dieci volte il numero di punti nel kernel del filtro basato sulla moltiplicazione è di circa 10 volte più lento di oltre Ad esempio, si aspettano un punto 100 gaussiana di essere 1000 volte più lento di una media mobile utilizzando recursion. As altri hanno 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 FIR filtri sono implementati come circonvoluzioni espliciti e IIR filtri 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 il filtro di dialogo che si sta utilizzando con più usi di un filtro scatola che ho incontrato sono il risultato di qualcuno non prestare 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 sapere sono rumore, un filtro passa basso unipolare è meglio il modo migliore per attuare una 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 viene 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 FF 1, è 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 16 e moltiplicare per FF pertanto uno shift verso destra di 4 bit Altrimenti questo filtro necessita solo uno sottrarre ed una lista, anche se i numeri di solito devono essere più largo il valore di ingresso più precisione numerica in una sezione separata below. I richiede solitamente letture aD significativamente più veloce di quanto non sono necessari e si applicano due di questi filtri in cascata Questo è l'equivalente digitale di due filtri RC in serie, e attenua di 12 dB ottava al di sopra della frequenza di rolloff Tuttavia, per le letture aD esso s 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 la raccolta di FF e decidere quanti di loro di cascata, io uso il mio programma FILTBITS si specifica il numero 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, che rende un file CSV, quindi traccia il file CSV, ad esempio, qui è il risultato di PLOTFILT 4 4. due parametri per PLOTFILT significa che ci saranno due filtri in cascata del tipo descritto sopra dei valori del 4 indicano il numero di bit di spostamento a realizzare il moltiplicare per FF I due valori FF sono quindi 1 16 in questo case. The traccia rossa è la risposta al gradino unità, ed è la cosa più importante da guardare ad esempio, questo indica che se l'ingresso cambia istantaneamente, l'uscita il filtro combinato si depositerà a 90 del nuovo valore in 60 iterazioni se vi interessa circa 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 vi mostra l'output da un unico completo picco di ampiezza questo vi dà un'idea della soppressione del rumore casuale 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 è una prova rigorosa 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 che è. PLOTFILT, forse FILTBITS, e un sacco di altra roba utile, in particolare per lo sviluppo del firmware PIC è disponibile nella versione software Strumenti di sviluppo PIC al download di software page. Added circa precision. I numerici vedere dai commenti e ora una nuova risposta che non c'è interesse a discutere il numero di bit necessari per implementare questo filtro nota che il moltiplicare per FF creerà Log 2 FF nuovi bit di sotto del punto binario su piccoli sistemi, FF è generalmente scelto come 1 2 N in modo che questo si moltiplicano sia effettivamente realizzato da un spostamento a destra di N bits. FILT è quindi di solito un punto fisso 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 bit AD e N 4 FF 1 16, allora avete bisogno di 4 bit di frazione sotto le letture intero aD 10 bit One maggior parte dei processori, si d stia facendo 16 operazioni po interi a causa delle letture aD 10 bit in questo caso, si può ancora fare esattamente le stesse 16 opertions po interi, ma di partenza con le letture aD lasciati spostati di 4 bit il processore doesn t conosce 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 virgola fissa. in generale, è necessario aggiungere N bit ciascuno dei poli filtro se don t vuole aggiungere il rumore a causa della 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 una macchina 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 filtro. di solito 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 NUOVO nella macro subroutine, che aggiorna FILT, ma carica anche che nello stesso stato zero NUOVO era in questo modo è facile da applicare poli multipli in quanto la FILT aggiornata di un polo è il NUOVO del successivo Quando una subroutine, s utile di avere un punto puntatore FILT sul modo in, che viene aggiornata 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 una macro simile per PIC 24 o dsPIC 30 o 33.Both questi esempi sono implementati come macro usando il mio PIC assembler preprocessore che è più capace di una delle 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 beneficio di questo.
No comments:
Post a Comment