È possibile implementare una media mobile in C senza la necessità di una finestra di campioni Ive pensa che si può ottimizzare un po ', scegliendo una dimensione della finestra thats di una potenza di due per consentire spostamento di bit invece di dividere, ma non necessitano un buffer sarebbe bello. C'è un modo per esprimere un nuovo risultato media mobile solo in funzione del vecchio risultato e il nuovo campione Definire un esempio media mobile, attraverso una finestra di 4 campioni essere: Aggiungere nuovo campione e: Una media mobile può essere implementato ricorsivamente , ma per un calcolo esatto della media mobile si deve ricordare il campione di ingresso più antico nella somma (cioè l'una nel tuo esempio). Per una media mobile lunghezza N si calcola: dove yn è il segnale di uscita e xn è il segnale di ingresso. Eq. (1) può essere scritta in modo ricorsivo come Quindi è sempre necessario ricordare il campione xn-N per calcolare (2). Come sottolineato da Corrado Turner, è possibile utilizzare un (infinitamente lungo) Finestra esponenziale, invece, che permette di calcolare l'uscita solo dall'uscita passato e l'ingresso corrente: ma questo non è uno standard (non ponderata) media mobile, ma un modo esponenziale ponderata media mobile, in cui i campioni ulteriormente in passato ottenere un peso minore, ma (almeno in teoria) non si scorda mai nulla (i pesi appena diventano più piccoli e più piccolo per i campioni di gran lunga in passato). Ho implementato una media mobile senza memoria singolo elemento di un programma di monitoraggio GPS che ho scritto. Comincio con 1 campione e dividere per 1 per ottenere la media corrente. Ho quindi aggiungere anothe campione e dividere per 2 il AVG corrente. Questo continua fino a ottenere la lunghezza della media. Ogni volta poi, aggiungo nel nuovo campione, ottenere la media e tolga la media del totale. Io non sono un matematico, ma questo sembrava un buon modo per farlo. Ho pensato che sarebbe girare lo stomaco di un vero e proprio ragazzo matematica, ma, si scopre che è uno dei modi accettati di farlo. E funziona bene. Basta ricordare che maggiore è la lunghezza più lento che sta seguendo ciò che si desidera seguire. Che non può importa la maggior parte del tempo, ma quando dopo i satelliti, se lento, il percorso potrebbe essere lontano dalla posizione attuale e sarà in cattiva luce. Si potrebbe avere un divario tra la SAT e i punti finali. Ho scelto una lunghezza di 15 aggiornato 6 volte al minuto per ottenere un'adeguata lisciatura e non troppo lontano dalla reale posizione con i puntini sentiero levigate sat. risposto 16 novembre 16 a 23:03 inizializzare totale 0, count0 (ogni volta che vede un nuovo valore Poi un ingresso (scanf), si aggiunge totalnewValue, un incremento (conteggio), una media divide (totalCount) Questa sarebbe una media mobile su tutti gli ingressi per calcolare la media nel corso solo gli ultimi 4 ingressi, richiederebbe 4 inputvariables, forse la copia di ogni ingresso a un vecchio inputvariable, quindi il calcolo della nuova media mobile. come somma dei 4 inputvariables, diviso per 4 (spostamento a destra 2 sarebbe bene se tutti gli ingressi sono stati positivi per fare il calcolo della media risposto 3 febbraio 15 a 4:06 che effettivamente calcolare la media totale e non la media mobile. Come conteggio diventa più grande l'impatto di ogni campione di ingresso nuovo diventa irrisorio ndash Hilmar febbraio 3 15 alle 13:53 la vostra risposta 2017 Stack Exchange, IncIt può variare da una semplice media di n valori di un filtro di media esponenziale a un filtro più sofisticato che funziona sulle frequenze. versioni più sofisticate di filtri passa-basso possono essere create mediante la conversione elettronica filtri passa-basso usati nella elaborazione del segnale digitale (come filtro Butterworth, ecc) ho trovato questo sito per contenere un sacco di risorse su Digital Signal Processing, (The Scientist e guida Engineer039s di Digital Signal Processing). Primo esempio è un filtro a media mobile, successivo è un filtro ricorsivo seguita da un esempio di come creare un filtro passa basso con frequenza di taglio, data una frequenza di campionamento e una costante filtro RC, motivata dal comportamento passa basso o circuito RC . Basta ricordare: Tempo dominio media volontà pasticciare con la rappresentazione nel dominio della frequenza, e nel dominio della frequenza di filtraggio volontà pasticciare con la rappresentazione nel dominio del tempo. Quindi, un filtro che funziona secondo dominio del tempo provocherà alcuna risposta in frequenza più utilizzabile poiché le filter039s possiedono 039signal039 è stato convoluto con il segnale effettivo. D'altra parte, se si rimuove il rumore ad alta frequenza nel dominio della frequenza, non si aspettano di vedere un segnale liscia nel dominio del tempo. PS: Non fare entrambe le cose. Mai e poi mai fare di taglio della frequenza seguita da una media nel dominio del tempo (o viceversa) a meno. non vi è alcuna altra opzione (che di solito non c'è) 14.6k Visualizzazioni middot View upvotes middot non per ReproductionI sanno è realizzabile con boost secondo: Ma mi piacerebbe davvero evitare l'uso di spinta. Googled e non trovato alcun esempio adatto o leggibili. Fondamentalmente voglio monitorare la media mobile di un flusso continuo di un flusso di numeri in virgola che utilizzano le più recenti 1000 numeri come un campione di dati galleggiante. Qual è il modo più semplice per raggiungere questo obiettivo ho sperimentato con l'utilizzo di un array circolare, media mobile esponenziale e una più semplice media mobile e ha scoperto che i risultati dalla matrice circolare adatta alle mie esigenze. chiesto 12 giugno 12 a 4:38 Se le vostre esigenze sono semplici, si potrebbe anche provare a utilizzare una media mobile esponenziale. In parole povere, si effettua una variabile di accumulatori, e come il codice sia in ogni campione, il codice aggiorna l'accumulatore con il nuovo valore. Si sceglie un alpha costante che è compreso tra 0 e 1, e calcolare questo: Hai solo bisogno di trovare un valore di alfa in cui l'effetto di un determinato campione dura solo per circa 1000 campioni. Hmm, Im non realmente sicuro che questo è adatto per voi, ora che Ive ha messo qui. Il problema è che 1000 è un piuttosto lunga finestra per una media mobile esponenziale Im non sicuro che ci sia un alfa che diffondere la media degli ultimi 1000 numeri, senza underflow nel calcolo in virgola mobile. Ma se si voleva una media più piccolo, come 30 numeri o giù di lì, questo è un modo molto semplice e veloce per farlo. risposto 12 giugno 12 alle 04:44 1 sul tuo post. La media mobile esponenziale può permettere l'alfa di essere variabile. Quindi, questo permette di essere utilizzato per calcolare le medie base dei tempi (ad esempio byte al secondo). Se il tempo dall'ultimo aggiornamento accumulatore è più di 1 secondo, si lascia alfa essere 1.0. In caso contrario, si può lasciare alfa essere (usecs dall'ultima update1000000). ndash JXH 12 giugno 12 alle 06:21 Fondamentalmente voglio monitorare la media mobile di un flusso continuo di un flusso di numeri in virgola che utilizzano le più recenti 1000 numeri come un campione di dati galleggiante. Si noti che il sotto aggiorna totale come elementi come addedreplaced, evitando i costi di O (N) attraversamento per calcolare la somma - necessario per la media - su richiesta. Total è fatto un parametro diverso da T a sostenere ad esempio con un lungo lungo quando per un totale di 1000 s lunga, un int per char s, o un doppio al totale galleggiante s. Questo è un po 'viziata in quel numsamples potrebbe andare oltre INTMAX - se vi interessa si potrebbe usare un unsigned long long. o utilizzare un membro di dati in più bool a registrare quando il contenitore viene prima riempita mentre numsamples ciclabili intorno l'array (migliore poi rinominato qualcosa di innocuo come pos). risposto 12 giugno 12 a 5:19 si parte dal presupposto che l'operatore quotvoid (campione T) quot è in realtà operatorltlt quotvoid (campione T) quot. ndash oPless 8 Giugno 14 a 11:52 oPless ahhh. ben individuato. in realtà volevo dire per essere operatore void) (campione T) (ma naturalmente si potrebbe usare qualsiasi notazione ti è piaciuto. Sarà risolvere, grazie. ndash Tony D 8 giugno 14 a 14: 27Welcome a LinuxQuestions. org. una comunità accogliente e attiva Linux. Stai visualizzando LQ come ospite. Unendo la nostra comunità si avrà la possibilità di pubblicare argomenti, ricevere la nostra newsletter, utilizzare la ricerca avanzata, iscriviti a discussioni e accedere a molte altre funzioni speciali. La registrazione è veloce, semplice e assolutamente gratuita. Unisciti alla nostra comunità oggi noti che i membri registrati vedono un minor numero di annunci, e ContentLink è completamente disattivato una volta che si accede. In caso di problemi con il processo di registrazione o il tuo account di accesso, non esitate a contattarci. Se è necessario reimpostare la password, clicca qui. Avere un problema login Visita questa pagina per cancellare tutti i cookie LQ-related. Introduzione a Linux - un mani su guida Questa guida è stata realizzata come una panoramica del sistema operativo Linux, orientata verso i nuovi utenti come un giro di esplorazione e Guida introduttiva, con esercizi alla fine di ogni capitolo. Per gli allievi più avanzati può essere un punto di riferimento del desktop, e una collezione delle conoscenze di base necessarie per procedere con il sistema e l'amministrazione della rete. Questo libro contiene molti esempi di vita reale derivati dalla autori esperienza come un sistema Linux e amministratore di rete, formatore e consulente. Sperano questi esempi vi aiuterà a ottenere una migliore comprensione del sistema Linux e che si sente incoraggiato a provare le cose da soli. Clicca qui per ricevere questa guida completa assolutamente gratuito.
No comments:
Post a Comment