Scarica 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 impilabili, 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 noise. I 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. Lo span di default per la media mobile è filtri 5.FIR, filtri IIR, e la costante coefficiente dell'equazione differenza causale lineare media mobile (FIR) Filtri Weve discussi sistemi in cui ciascun campione dell'uscita è una somma ponderata di (certi della ) i campioni di ingresso. Diamo un sistema somma pesata causale, dove causale significa che un dato campione di uscita dipende solo sul campione corrente di ingresso e altri ingressi precedenti nella sequenza. Né sistemi lineari in sistemi generali, non finite di risposta d'impulso, in particolare, hanno bisogno di essere causale. Tuttavia, la causalità è conveniente per un tipo di analisi che sono state andando a visitare al più presto. Se abbiamo simboleggiato gli ingressi come valori di un vettore x. e le uscite come valori di un vettore y corrispondente. allora tale sistema può essere scritta come dove i valori di aeb sono quotweightsquot applicate ai campioni di ingresso attuali e precedenti per ottenere il campione di uscita corrente. Possiamo pensare l'espressione come un'equazione, con il segno di uguale uguale significato, o come un'istruzione procedurale, con il segno di uguale senso di assegnazione. Consente scrivere l'espressione per ogni campione di uscita come un anello MATLAB di istruzioni di assegnazione, dove x è un N-lunghezza del vettore di campioni di ingresso e b è un M-lunghezza del vettore dei pesi. Al fine di trattare il caso speciale in partenza, ci sarà incorporare x in un xhat vettore più lungo il cui primo M-1 campioni sono pari a zero. Scriveremo la somma ponderata per ogni y (n) come un prodotto interno, e faremo alcune manipolazioni degli ingressi (come inversione b) a tal fine. Questo tipo di sistema è spesso chiamato un filtro a media mobile, per ovvie ragioni. Da nostre precedenti discussioni, dovrebbe essere evidente che tale sistema è lineare e shift-invariante. Naturalmente, sarebbe molto più veloce di utilizzare la funzione di convoluzione MATLAB conv () invece del nostro mafilt (). Invece di considerare il primo M-1 campioni di ingresso pari a zero, potremmo considerare loro di essere la stessa degli ultimi M-1 campioni. Questo è lo stesso come trattare l'ingresso come periodica. Ebbene utilizzare cmafilt () come nome della funzione, una piccola modifica della mafilt precedente funzione (). Nel determinare la risposta all'impulso di un sistema, di solito non c'è differenza tra i due, in quanto tutti i campioni non iniziali di ingresso sono pari a zero: Dato un sistema di questo tipo è lineare e spostare-invariante, sappiamo che il suo effetto sul sinusoide sarà solo in scala e spostarla. Qui è importante che noi usiamo la versione circolare La versione circolare-convoluta è spostato e scalato un po ', mentre la versione con circonvoluzione ordinaria è distorto alla partenza. Vediamo quello che il ridimensionamento e lo spostamento esatto è quello di utilizzare una FFT: Sia ingresso e uscita hanno ampiezza solo a frequenze 1 e -1, che è come dovrebbe essere, dato che l'ingresso era una sinusoide e il sistema è stato lineare. I valori di uscita sono maggiori con un rapporto di 10,62,518 mila 1,3281. Questo è il guadagno del sistema. Che cosa circa la fase Abbiamo solo bisogno di guardare in cui l'ampiezza è diverso da zero: L'ingresso ha una fase di PI2, come avevamo richiesto. La fase di uscita è spostata di un ulteriore 1,0594 (con segno opposto per la frequenza negativa), o circa 16 di un ciclo verso destra, come si può vedere sul grafico. Ora lascia provare una sinusoide con la stessa frequenza (1), ma invece di ampiezza 1 e PI2 di fase, permette di provare l'ampiezza e la fase 1.5 0. Sappiamo che solo la frequenza 1 e -1 avranno diverso da zero ampiezza, così lascia basta guardare a loro: Anche in questo caso il rapporto di ampiezza (15.937712.0000) è 1,3281 - e per quanto riguarda la fase è di nuovo spostato di 1,0594 Se questi esempi sono tipici, siamo in grado di prevedere l'effetto del nostro sistema (risposta impulsiva .1 .2 .3 .4 .5) su qualsiasi sinusoide a frequenza 1 - l'ampiezza sarà aumentato di un fattore di 1,3281 e la frequenza positiva) fase (sarà spostato di 1,0594. Potremmo continuare per calcolare l'effetto di questo sistema sinusoidi di altre frequenze con gli stessi metodi. Ma c'è un modo molto più semplice, e che definisce il punto generale. Poiché convoluzione (circolare) nel dominio del tempo significa moltiplicazione nel dominio della frequenza, da segue che In altre parole, la DFT della risposta all'impulso è il rapporto tra la DFT dell'uscita al DFT dell'ingresso. In questa relazione i coefficienti DFT sono numeri complessi. Poiché abs (C1C2) abs (c1) abs (c2) per tutti i numeri complessi c1, c2, questa equazione ci dice che lo spettro di ampiezza della risposta all'impulso sarà sempre il rapporto dello spettro di ampiezza dell'uscita a quella dell'ingresso . Nel caso dell'angolo spettro di fase, angolo (C1C2) (c1) - angolo (c2) per tutti c1, c2 (con la condizione che le fasi che differiscono di n2pi sono considerati uguali). Pertanto lo spettro di fase della risposta all'impulso sarà sempre la differenza tra gli spettri fase di uscita e l'ingresso (con qualunque correzioni 2pi sono necessari per mantenere il risultato tra - pi e pi). Possiamo vedere gli effetti di fase più chiaramente se scartare la rappresentazione della fase, cioè se si aggiungono vari multipli di 2pi come necessario per minimizzare i salti che sono prodotte dalla natura periodica della funzione dell'angolo (). Sebbene l'ampiezza e la fase sono di solito utilizzati per la presentazione grafica e anche tabulare, poiché sono un modo intuitivo di pensare agli effetti di un sistema sui vari componenti di frequenza del suo ingresso, i coefficienti di Fourier complessi sono più utili algebricamente, in quanto consentono la semplice espressione del rapporto l'approccio generale abbiamo visto possa funzionare con filtri arbitrari del tipo delineato, in cui ogni campione di uscita è una somma pesata di un insieme di campioni di ingresso. Come accennato in precedenza, questi sono spesso chiamati filtri Finite Impulse Response, perché la risposta all'impulso è di dimensione finita, o, talvolta, Moving Average filtri. Possiamo determinare le caratteristiche di risposta in frequenza di un tale filtro dalla FFT della sua risposta all'impulso, e possiamo anche progettare nuovi filtri con caratteristiche desiderate da IFFT da una specificazione della risposta in frequenza. Autoregressive (IIR) Filtri ci sarebbe poco senso avere nomi per filtri FIR a meno che non ci fosse un altro tipo (s) per distinguerli da, e così coloro che hanno studiato pragmatica non sarà sorpreso di sapere che c'è davvero un altro importante tipo di filtro lineare tempo-invariante. Questi filtri sono a volte chiamate ricorsiva perché il valore di output precedente (così come ingressi precedenti) questioni, anche se gli algoritmi sono generalmente scritti usando costrutti iterativi. Essi sono chiamati anche filtri Infinite Impulse Response (IIR), perché in generale la loro risposta ad un impulso va avanti per sempre. Talvolta sono anche chiamati filtri autoregressivi, poiché i coefficienti possono essere considerati come il risultato di fare regressione lineare per esprimere i valori dei segnali in funzione dei valori di segnale precedenti. Il rapporto di filtri FIR e IIR può essere visto chiaramente in un'equazione differenza costante coefficiente lineare, ossia impostando una somma pesata di uscite pari ad una somma pesata di ingressi. Questo è come l'equazione che abbiamo dato in precedenza per il filtro FIR causale, tranne che, oltre alla somma ponderata degli input, abbiamo anche una somma pesata di uscite. Se vogliamo pensare a questo come una procedura per la generazione di campioni di uscita, abbiamo bisogno di riorganizzare l'equazione per ottenere un'espressione per il campione y uscita in corrente (n), adottando la convenzione che un (1) 1 (ad esempio scalando altro come e BS), siamo in grado di sbarazzarsi della 1a (1) termine: y (n) B (1) x (n) b (2) x (n-1). b (NB1) x (n-nb) - a (2) y (n-1) -. - Un (NA1) y (n-na) Se tutti un (n) diverso da (1) sono zero, questo riduce al nostro vecchio amico il filtro FIR causale. Questo è il caso generale di un (causale) Filtro LTI, ed è implementato dal filtro funzione MATLAB. Vediamo il caso dove il B coefficienti diversi da b (1) sono zero (invece del caso FIR, dove a (n) sono zero): In questo caso, il campione di uscita y corrente (n) viene calcolato come ponderata combinazione del campione x ingresso corrente (n) e le precedenti campioni di uscita y (n-1), y (n-2), ecc Per avere un'idea di ciò che accade con tali filtri, lascia l'inizio con il caso in cui: Cioè, il campione di uscita corrente è la somma della corrente di ingresso del campione e la metà del campione di uscita precedente. Ebbene prendere un impulso di ingresso attraverso un qualche tempo passi, uno alla volta. Dovrebbe essere chiaro a questo punto che possiamo facilmente scrivere un'espressione per il valore di campionamento di uscita n-esima: si tratta solo (se MATLAB contata da 0, questo sarebbe semplicemente .5n). Poiché ciò che stiamo calcolando è la risposta all'impulso del sistema, abbiamo dimostrato con l'esempio che la risposta all'impulso può infatti avere infiniti campioni diversi da zero. Per implementare questa banale filtro del primo ordine in MATLAB, potremmo usare il filtro. La chiamata sarà simile a questo: e il risultato è: è questo business davvero ancora lineare Possiamo guardare a questo empiricamente: Per un approccio più generale, si consideri il valore di un campione di uscita y (n). Con la sostituzione successiva potremmo scrivere questo come questo è proprio come il nostro vecchio amico forma convoluzione somma di un filtro FIR, con la risposta all'impulso fornito dal .5k espressione. e la lunghezza della risposta all'impulso essendo infinito. Così gli stessi argomenti che abbiamo usato per dimostrare che filtri FIR è lineare verrà ora applicata qui. Finora questo può sembrare come un sacco di storie per non molto. Che cosa è tutta questa linea di indagine buono per ben rispondere a questa domanda in più fasi, a partire da un esempio. La sua non è una grande sorpresa che siamo in grado di calcolare un esponenziale campionato per moltiplicazione ricorsiva. Vediamo un filtro ricorsivo che fa qualcosa di meno ovvio. Questo tempo ben rendono un filtro del secondo ordine, in modo che la chiamata per filtrare sarà della scheda consente impostato secondo a2 coefficiente uscita -2cos (2pi40), e il terzo coefficiente uscita a3 1 e osservare l'impulso risposta. Non molto utile come filtro, in realtà, ma non genera una sinusoide campionata (da un impulso) con tre moltiplicazione aggiunge per campione Per comprendere come e perché lo fa, e come filtri ricorsiva può essere progettato e analizzato il caso più generale, dobbiamo fare un passo indietro e dare un'occhiata a qualche altre proprietà di numeri complessi, sulla strada per comprendere la z transform. The seguente è un hard coded 3 punti simmetrici ponderata muovendo filtro media: Quindi la mia ipotesi per come un n-punto simmetrico mobile ponderata filtro a media funzionerebbe sono i seguenti: Il mio obiettivo finale è quello di creare un simmetrica mobile ponderata filtro a media che ha un numero di punti modulare su cui può calcolare la media. La parte che mi ha veramente ottiene è la ponderazione in sé, e mentre sono sicuro che un ciclo for nidificato di un certo genere farebbe il trucco, Non riesco a capire come avrei anche cominciare qualcosa di simile. Grazie per aver dedicato del tempo per ispezionare la mia domanda, tutte le risposte sarebbe molto apprezzato. Seleziona il tuo paese
No comments:
Post a Comment