Monday 14 August 2017

Semplice Mobile Media Matlab


29 settembre 2013 media di convoluzione cosa si sta muovendo media e ciò che Moving è un bene per come si sta muovendo la media fatta utilizzando convoluzione media mobile è una semplice operazione usata di solito per sopprimere il rumore di un segnale: abbiamo impostato il valore di ciascun punto al media dei valori nel suo vicinato. Con formula: Qui x è l'ingresso ed y è il segnale di uscita, mentre la dimensione della finestra è w, dovrebbe essere dispari. La formula sopra descrive un'operazione simmetrica: i campioni vengono prelevati da entrambi i lati del punto reale. Di seguito è riportato un esempio di vita reale. Il punto in cui la finestra è definito in realtà è rosso. I valori al di fuori x dovrebbero essere zeri: Per giocare e vedere gli effetti di media mobile, dare un'occhiata a questa dimostrazione interattiva. Come fare per circonvoluzione Come avrete riconosciuto, calcolando la media mobile semplice è simile alla convoluzione: in entrambi i casi una finestra viene fatto scorrere lungo il segnale e gli elementi della finestra sono riassunti. Quindi, fare un tentativo per fare la stessa cosa utilizzando convoluzione. Utilizzare i seguenti parametri: l'output desiderato è: Come primo approccio, cerchiamo ciò che si ottiene convolvendo segnale x dal seguente kernel k: L'uscita è esattamente tre volte più grande del previsto. Esso può essere anche visto che i valori di uscita sono la sintesi dei tre elementi nella finestra. E 'perché durante convoluzione la finestra viene fatto scorrere lungo, tutti gli elementi in esso sono moltiplicati per uno e poi riassunti: YK 1 cdot x 1 x 1 cdot cdot x Per ottenere i valori desiderati di y. l'uscita deve essere diviso per 3: da una formula tra cui la divisione: Ma non sarebbe ottimale per fare la divisione durante la circonvoluzione Ecco che arriva l'idea riorganizzando l'equazione: Così useremo i seguenti kernel k: In questo modo ci sarà ottenere il risultato desiderato: In generale: se vogliamo fare media mobile da convoluzione avere una dimensione della finestra di w. Si usa il seguente kernel k: una semplice funzione facendo la media mobile è: Un esempio d'uso è: con Matlab, come posso trovare la media mobile di 3 giorni di una determinata colonna di una matrice e aggiungere la media mobile a quella matrice sto cercando di calcolare la media mobile di 3 giorni dal basso verso l'alto della matrice. Ho fornito il mio codice: Dato il seguente matrice A e la maschera: ho provato l'attuazione del comando di conv ma sto ricevendo un errore. Ecco il comando conv ho cercato di utilizzare al 2 ° colonna della matrice A: L'uscita che desidero è riportata nella seguente tabella: Se avete suggerimenti, sarei molto grato. Grazie per colonna 2 della matrice A, sto calcolando la media mobile di 3 giorni come segue e ponendo il risultato nella colonna 4 della matrice A (ho rinominato matrice A come 39desiredOutput39 solo per l'illustrazione). La media di 3 giorni del 17, 14, 11 è 14, la media di 3 giorni del 14, 11, 8 è 11 alla media di 3 giorni di 11, 8, 5 è 8 e la media di 3 giorni di 8, 5, 2 è 5. ci sono alcun valore nel fondo 2 righe per la colonna 4 perché il calcolo ai 3 giorni in movimento iniziale media sul fondo. Il 39valid39 uscita non verrà mostrato almeno fino al 17, 14, e 11. Speriamo che questo ha un senso ndash Aaron 12 Giugno 13 a 01:28 In generale, sarebbe utile se si desidera mostrare l'errore. In questo caso si sta facendo due cose sbagliate: in primo luogo il tuo convoluzione deve essere diviso per tre (o la lunghezza della media mobile) In secondo luogo, nota la dimensione del c. Non si può semplicemente inserire c in una. Il modo tipico di ottenere una media mobile sarebbe quella di utilizzare lo stesso: ma quello non assomigliare a ciò che si desidera. Invece si è costretti ad usare un paio di righe: ho bisogno di calcolare una media mobile su una serie di dati, all'interno di un ciclo for. Devo ottenere la media mobile più giorni N9. La matrice Im computing è 4 serie di 365 valori (M), che a sua volta sono valori medi di un altro insieme di dati. Voglio tracciare i valori medi dei miei dati con la media mobile in una trama. Ho cercato su google un po 'di medie e il comando conv movimento e trovato qualcosa che ho cercato di esecuzione nel mio codice .: Quindi, fondamentalmente, computo mia media e tracciare con una (sbagliata) media mobile. Ho scelto il valore di WTS destra fuori del sito MathWorks, in modo che non è corretto. (Fonte: mathworks. nlhelpeconmoving-media-trend-estimation. html) Il mio problema, però, è che non capisco che cosa questo WTS. Qualcuno potrebbe spiegare se ha qualcosa a che fare con i pesi dei valori: che non è valido in questo caso. Tutti i valori sono ponderati lo stesso. E se sto facendo questo tutto sbagliato, potrei avere un aiuto con esso miei più sinceri ringraziamenti. chiesto 23 settembre 14 alle 19:05 Utilizzando conv è un ottimo modo per implementare una media mobile. Nel codice che si sta utilizzando, wts è quanto si sta pesando ogni valore (come avete indovinato). la somma di tale vettore deve essere sempre uguale a uno. Se si desidera peso ogni valore in modo uniforme e fare una dimensione N del filtro in movimento, allora si vorrebbe fare Utilizzando l'argomento valido in conv porterà ad avere un minor numero di valori in Ms di quello che hai in M. Usa stesso se non vi dispiace gli effetti della zero padding. Se hai la casella degli strumenti di elaborazione del segnale è possibile utilizzare cconv se si vuole provare una media circolare in movimento. Qualcosa di simile si dovrebbe leggere la documentazione conv e cconv Per ulteriori informazioni, se si havent già. È possibile utilizzare il filtro per trovare una media in esecuzione senza utilizzare un ciclo for. Questo esempio trova il media corrente di un vettore di 16 elementi, con una dimensione della finestra di 5. 2) liscia come parte del Curve Fitting Toolbox (che è disponibile nella maggior parte dei casi) YY liscio (y) leviga i dati nel vettore colonna y utilizzando un filtro a media mobile. I risultati sono restituiti nella aa vettore colonna. La durata predefinita per la media mobile è 5.Download movAv. m (vedi anche movAv2 - una versione aggiornata che consente ponderazione) Descrizione Matlab include funzioni chiamate movavg e tsmovavg (serie temporale media mobile) nella casella degli strumenti finanziari, movAv è stato progettato per replicare la funzionalità di base di questi. Il codice qui fornisce un bell'esempio di gestione di indici all'interno di cicli, che possono essere fonte di confusione per cominciare. Ive ha deliberatamente mantenuto il codice breve e semplice per mantenere questo processo chiaro. movAv esegue una media mobile semplice che può essere utilizzato per recuperare i dati rumorosi in alcune situazioni. Esso funziona prendendo una media dell'ingresso (y) su una finestra temporale scorrevole, la cui dimensione è specificato da n. La grande n è, maggiore è la quantità di arrotondamento l'effetto di n è relativo alla lunghezza del vettore d'ingresso y. ed efficace (beh, quasi) crea un filtro passa-basso frequenza - vedere la sezione esempi e considerazioni. Poiché la quantità di smoothing fornite da ciascun valore di n è relativo alla lunghezza del vettore di ingresso, le sue sempre valore collaudo valori diversi per vedere cosa appropriata. Ricordate, inoltre, che n punti si perdono su ogni media se n è 100, i primi 99 punti del vettore di input dont contenere dati sufficienti per una media 100 pt. Ciò può essere evitato un po 'per medie impilamento, per esempio, il codice e grafico seguente confronta diverse medie finestra lunghezza. Si noti come liscia 1010pt viene confrontato con un singolo media 20pt. In entrambi i casi 20 punti di dati vengono persi in totale. Creare Xaxis x1: 0,01: 5 Generare noiseReps rumore 4 repmat rumore (randn (1, ceil (Numel (x) noiseReps)), noiseReps, 1) rimodellare rumore (rumore, 1, la lunghezza (rumore) noiseReps) Genera YData yexp rumore ( x) 10noise (1: lunghezza (x)) perfrom medie: y2 movAv (y, 10) 10 pt Y3 movAv (Y2, 10) 1010 pt Y4 movAv (y, 20) 20 pt Y5 movAv (y, 40) 40 pt y6 movAv (y, 100) 100 pt figura trama trama (x, y, y2, y3, Y4, Y5, a6) leggenda (dati grezzi, 10pt media mobile, 1010pt, 20pt, 40pt, 100 pt) xlabel (x) ylabel ( y) titolo (Confronto di medie mobili) codice movAv. m funzione di uscita run-through movAv (y, n) La prima riga definisce le funzioni di nome, ingressi e uscite. L'ingresso x deve essere un vettore di dati per eseguire la media on, n dovrebbe essere il numero di punti per eseguire la media su uscita conterrà i dati medi restituiti dalla funzione. Uscita Preallocare outputNaN (1, Numel (y)) Trovare il punto medio di n punto medio rotondo (n2) Il principale lavoro della funzione avviene nel ciclo for, ma prima di iniziare due cose sono preparati. In primo luogo l'uscita viene pre-ripartito come NaNs, questo è servito due scopi. Innanzitutto preallocazione è generalmente buona pratica in quanto riduce il giocoleria memoria Matlab ha a che fare, in secondo luogo, lo rende molto facile disporre i dati medi in un output della stessa dimensione del vettore di ingresso. Questo significa che le stesse xaxis possono essere usati successivamente per entrambi, che è conveniente per la stampa, in alternativa i NaNs possono essere rimossi successivamente in una linea di codice (Uscita (La variabile punto medio viene utilizzato per allineare i dati del vettore di uscita. Se n 10, 10 punti saranno persi perché, per i primi 9 punti del vettore di input, c'è neanche dati sufficienti per prendere una media di 10 punti. Come l'uscita sarà più breve l'ingresso, ha bisogno di essere allineato correttamente. punto medio sarà essere usato così una pari quantità di dati viene perso all'inizio e alla fine, e l'ingresso è mantenuto allineato con l'uscita dai buffer NaN create quando preallocare uscita di 1:. lunghezza (y) - n Trova intervallo di indice di prendere media sopra (a: b) vietare Calcolare significa uscita (amidPoint) media (y (a: b)) fine nel ciclo for in sé, è preso un medio su ogni segmento consecutivo dell'ingresso il ciclo verrà eseguito per una che è.. definita come 1 fino alla lunghezza dell'ingresso (y), meno i dati che verranno persi (n). Se l'ingresso è lungo 100 punti ed n è 10, il ciclo viene eseguito da (a) da 1 a 90. Questa intende un fornisce il primo indice del segmento da mediare. Il secondo indice (b) è semplicemente un-1. Così alla prima iterazione, a1. n10. così b Ottobre 11-01. La prima media viene determinata per y (a: b). o x (1,10). La media di questo segmento, che è un singolo valore, viene memorizzato in uscita all'indice amidPoint. o 156. Nella seconda iterazione, a2. b 210-1 11. quindi la media è ripreso x (2,11) e conservato in uscita (7). L'ultima iterazione del ciclo per un ingresso di lunghezza 100, A91. b 9010-1 100 quindi la media è ripreso x (91: 100) e memorizzato in uscita (95). Questo lascia uscita con un totale di n (10) i valori NaN all'indice (1: 5) e (96: 100). Esempi e considerazioni medie mobili sono utili in alcune situazioni, ma theyre non sempre la scelta migliore. Ecco due esempi in cui non stanno necessariamente ottimali. calibrazione microfono Questo insieme di dati rappresenta i livelli di ogni frequenza prodotta da un altoparlante e registrato da un microfono con una risposta lineare noto. L'uscita del diffusore varia con la frequenza, ma può correggere questa variazione con i dati di calibrazione - l'uscita può essere regolata in livello per tener conto delle fluttuazioni calibrazione. Si noti che i dati grezzi è rumoroso - questo significa che una piccola variazione di frequenza sembra richiedere una grande, irregolare, cambiamento nel livello di spiegare. E 'realistico O è un prodotto dell'ambiente di registrazione sua ragionevole in questo caso ad applicare una media mobile che leviga la curva levelfrequency di fornire una curva di calibrazione che è leggermente meno irregolare. Ma perché isnt questo ottimale in questo esempio più dati sarebbero meglio - più calibrazioni piste media insieme avrebbe distrutto il rumore del sistema (fino a quando il suo caso) e di fornire una curva con meno sottile dettagli persi. La media mobile può approssimare solo questo, e potrà cancellare alcuni avvallamenti più alta frequenza e picchi dalla curva che realmente esistono. onde sinusoidali Uso di una media mobile su onde sinusoidali evidenzia due punti: la questione generale della scelta di un numero ragionevole di punti per eseguire la media. La sua semplice, ma ci sono metodi più efficaci di analisi dei segnali di media dei segnali oscillanti nel dominio del tempo. In questo grafico, l'onda sinusoidale originale è tracciata in blu. Il rumore è aggiunto e tracciata come la curva arancione. Una media mobile viene eseguita a diversi numeri di punti per vedere se l'onda originale può essere recuperato. 5 e 10 punti di risultati ragionevoli, ma non lo togliere il disturbo del tutto, dove, come un maggior numero di punti cominciano a perdere i dettagli di ampiezza come media si estende su diverse fasi (ricordate le oscilates onda intorno allo zero, e dire (-1 1) 0).Un approccio alternativo sarebbe quello di realizzare un filtro passa-basso che può essere applicato al segnale nel dominio della frequenza. Im non andando a entrare nei dettagli in quanto va oltre la portata di questo articolo, ma come il rumore è di frequenza notevolmente superiore alla onde frequenza fondamentale, sarebbe abbastanza facile, in questo caso per la costruzione di un filtro passa-basso che rimuoverà l'alta frequenza rumore.

No comments:

Post a Comment