Thursday, 19 October 2017

Matlab Mobile Media Senza Loop


Sto cercando di completare un progetto di assegnazione MATLAB con la seguente domanda: Scrivere una funzione chiamata media mobile che prende uno scalare chiamato x come argomento di input e restituisce uno scalare. La funzione utilizza un buffer per contenere gli ingressi precedenti, e il buffer può contenere un massimo di 25 ingressi. In particolare, la funzione deve salvare le più recenti 25 ingressi in un vettore (buffer). Ogni volta che la funzione viene chiamata, esso copia l'argomento di input in un elemento del buffer. Se ci sono già 25 ingressi memorizzati nel buffer, scarta l'elemento più antico e salva quello corrente nel buffer. Dopo aver memorizzato l'ingresso nel buffer, restituisce la media di tutti gli elementi del buffer. La soluzione Fornisco è la seguente: Secondo l'auto ellista mia funzione esegue correttamente quando i valori 1-50 passano consecutivamente, ma fallisce quando i valori di un'onda sinusoidale rumoroso passano consecutivamente (che sono stato informato che potrebbe essere causa di qualche una sorta di errore di arrotondare). Le sarei grato se qualcuno di voi potrebbe fornire me alcuni suggerimenti per quanto riguarda i possibili passi errore nel mio codice (aggiunto sopra). Grazie in advanceI 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 hanno né ricontattato already. Download movAv. m (vedi anche movAv2 - una versione aggiornata che consente ponderazione) Descrizione Matlab include funzioni chiamate movavg e tsmovavg (serie temporale media mobile) nel 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. Exponential media mobile senza ciclo For ltanonymoussehotmailgt happydude ha scritto nel messaggio lthe1oepfs61fred. mathworksgt. grazie GT per questo. Sembra abbastanza vicino, ma ancora in grado di essere molto diverso da quello tradizionale EMA usati in finanza. gt gt da un numero limitato di simulazioni sembra essere molto diverso dal EMA per circa 60 datapoints o così. gt gt tutte le idee perché questo potrebbe accadere gt gt nb - la EMA tradizionale utilizza un SMA come un valore iniziale perché la formula EMA prevede un valore EMA iniziale. come fa la funzione di filtro aggirare questo La risposta è che il filtro non aggirare l'ostacolo. Per i primi 30 punti del filtro si spegne il bordo anteriore del vettore todaysClose. Questi valori oltre il bordo vengono impostati a 0. ne consegua una distorsione almeno i primi 30 punti del vostro EMA. È possibile vedere l'effetto di avere un prezzo vicino costante. todaysClose quelli (100,1) 100 daysBack 30 alpha 2 (daysBack 1) calcolare levigante coefficiente di fattore alfa repmat (1-alfa, 1, daysBack) (1: daysBack). nota 1-alfa filtro EMA (coefficiente, sum (coefficiente) , todaysClose) plot (todaysClose) tenere sulla trama (EMA, r) si potrebbe riempire il bordo iniziale della matrice replicando il primo valore dei valori daysBack e poi striscia fuori. Questo potrebbe aiutare. Quindi: todaysClose cumSum (randn (100,1)) daysBack 30 pad repmat (todaysClose (1), daysBack, 1) todaysClose padtodaysClose alpha 2 (daysBack 1) calcolare levigante fattore alfa coefficiente repmat (1-alfa, 1, daysBack). (1: daysBack) Nota 1-alfa filtro EMA (coefficiente, sum (coefficiente), todaysClose) EMA EMA (31: fine) rimuovere la trama pad (todaysClose (31: fine)) tenere sulla trama (EMA, r) grazie malati dare un colpo :) Oggetto: media mobile esponenziale senza ciclo For Da: Bwana happydude ltanonymoussehotmailgt ha scritto nel messaggio lthe3krmglm1fred. mathworksgt. gt grazie malato dare un colpo :) Oggetto: media mobile esponenziale senza Ciclo For Da: David Bwana ltbwana. mukubwagmailgt ha scritto nel messaggio lti1fpb3noh1fred. mathworksgt. gt happydude ltanonymoussehotmailgt ha scritto nel messaggio lthe3krmglm1fred. mathworksgt. gt gt grazie malato dare un colpo :) gt gt tutte costruite in: mathworksaccesshelpdeskhelptoolboxfinancetsmovavg. html Chiunque sa il motivo per cui la funzione di filtro sopra descritta dà una uscita diversa da quella del costruito in funzione di movavg il mar 15, 04:50, David ltdavidtr . gmailgt ha scritto: gt Bwana ltbwana. muku. gmailgt ha scritto nel messaggio lti1fpb3no. fred. mathworksgt. gt gt happydude ltanonymou. hotmailgt ha scritto nel messaggio lthe3krmgl. fred. mathworksgt. gt gt gt grazie malato dare un colpo :) gt gt gt tutte costruite in: mathworksaccesshelpdeskhelptoolboxfinancetsmovav. gt gt Qualcuno sa il motivo per cui la funzione di filtro sopra descritta dà una uscita diversa da quella del costruito in funzione di movavg La mia ipotesi è che il suo perché youve rovinato. Ma ci havent mostrato il codice, quindi come potremmo sapere Ciao, il secondo parametro della funzione di filtro dovrebbe essere (1alfa-1) invece di sum (coefficiente) forse Se si espande la formula ricorsiva della EMA, troverete che termine. Post scriptum (1alfa-1) è il valore per cui la somma dei coefficienti converge. perché l'utilizzo di un valore approxim invece di quella giusta o mi sto perdendo qualcosa Matthew Whitaker ltmattlwhitakerREMOVEgmailgt ha scritto nel messaggio lthdv98tdcd1fred. mathworksgt. gt provare questo codice: gt todaysClose cumSum (randn (100,1)) gt daysBack 30 gt alfa 2 (daysBack 1) calcolare levigante fattore alfa gt coefficiente repmat (1-alfa, 1, daysBack). (1: daysBack) nota 1 - alpha filtro gt EMA (coefficiente, sum (coefficiente), todaysClose) plot gt (todaysClose) gt presa sul terreno gt (EMA, r) gt gt Spero che questo aiuti gt Matt W gt gt gt gt gt happydude ltanonymoussehotmailgt ha scritto nel messaggio lthdv3c35um1fred. mathworksgt. gt gt Ciao, sto cercando di trovare il rotolamento EMA 30 giorni per una serie temporale senza utilizzare un ciclo for (ho un sacco di dati). gt gt gt gt Come exampletest questo è qualcosa di simile a quello che voglio (sotto), ma Im trovando che il mio risultato finale non è molto vicino a come dovrebbe apparire. Quando ho messo insieme in Excel o con un ciclo for si tratta in modo corretto, ma io sono al buio, se mi è usare il filtro in modo corretto sotto. gt gt gt gt Qualcuno può aiutare gt gt gt gt todaysClose cumSum (randn (100,1)) gt gt daysBack 30 gt gt alfa 2 (daysBack 1) calcolare levigante fattore alfa gt gt gt gt preparare un coefficiente per la gt gt funzione di filtro coefficiente repmat (alfa, 1, daysBack) (1: daysBack). coefficiente gt gt coefficientsum (coefficiente) gt gt gt gt filtro EMA (coefficiente, 1, todaysClose) gt gt gt gt gt gt PS questo è stato uno dei posti Ho guardato groups. googlegroupcomp. soft-sys. matlabtreebrowsefrmthread7b5c0b3146432dd958e9d04b885a576arnum11donegroupcomp. soft-sys. matlabbrowsefrmthread7b5c0b3146432dd948bdf7f81cd8f1973Ftvc3D126doca1c5b8de7a7c428a gt gt gt gt questo è anche il luogo dove ho avuto la precedenza filtro codice gt gt groups. googlegroupcomp. soft-sys. matlabbrowsethreadthread1d8d10d5b835550dtvc2qexponentialmovingaveragefilter happydude ha scritto nel messaggio lthdv3c35um1fred. mathworksgt. gt Ciao, sto cercando di trovare il rotolamento EMA 30 giorni per una serie temporale senza utilizzare un ciclo for (ho un sacco di dati). gt gt Come exampletest questo è qualcosa di simile a quello che voglio (sotto), ma Im trovando che il mio risultato finale non è molto vicino a come dovrebbe apparire. Quando ho messo insieme in Excel o con un ciclo for si tratta in modo corretto, ma io sono al buio, se mi è usare il filtro in modo corretto sotto. gt gt Qualcuno può aiutare gt gt todaysClose cumSum (randn (100,1)) gt daysBack 30 gt alfa 2 (daysBack 1) calcolare levigante fattore alfa gt gt preparare un coefficiente per il coefficiente di repmat funzione di filtro gt (alfa, 1, daysBack) . (1: daysBack) coefficiente gt coefficientsum (coefficiente) Filtro gt gt EMA (coefficiente, 1, todaysClose) gt gt gt PS questo è stato uno dei posti Ho guardato groups. googlegroupcomp. soft-sys. matlabtreebrowsefrmthread7b5c0b3146432dd958e9d04b885a576arnum11donegroupcomp. soft-sys. matlabbrowsefrmthread7b5c0b3146432dd948bdf7f81cd8f1973Ftvc3D126doca1c5b8de7a7c428a gt gt questo è anche il luogo dove ho ottenuto il codice di sopra del filtro gt groups. googlegroupcomp. soft-sys. matlabbrowsethreadthread1d8d10d5b835550dtvc2qexponentialmovingaveragefilter Si noti che i coefficienti per i dati del passato non sono proprio. La formula è: Prezzo (t) alphaPrice (t-1) alfa (1-alfa) Prezzo (t-2) alfa (1-alfa) 2. Prezzo (t-daysBack) (1-alfa) daysBack coefficient1 repmat ((1-k), 1, N) (1: N)..repmat (K, 1, N) 1 Che cosa è una lista di controllo Si può pensare di lista osserva come le discussioni che avete segnalibro. È possibile aggiungere tag, autori, discussioni, e anche risultati della ricerca alla tua lista di controllo. In questo modo si può facilmente tenere traccia di argomenti che sei interessato a. Per visualizzare l'elenco orologio, cliccare sul link quotMy Newsreaderquot. Per aggiungere elementi alla tua lista di controllo, fare clic sul quotadd per guardare collegamento listquot in fondo ad ogni pagina. Come faccio ad aggiungere una voce alla mia selezione Per aggiungere criteri di ricerca per la vostra lista di controllo, cercare il termine desiderato nella casella di ricerca. Fare clic sul quotAdd questa ricerca ad orologio collegamento listquot nella pagina dei risultati di ricerca. È inoltre possibile aggiungere un tag alla tua lista di controllo per la ricerca per il tag con la direttiva quottag: tagnamequot dove tagname è il nome del tag che si desidera guardare. Per aggiungere un autore alla tua lista di controllo, andare alla pagina autori profilo e fare clic sul quotAdd questo autore al mio orologio collegamento listquot nella parte superiore della pagina. È inoltre possibile aggiungere un autore alla tua lista di controllo andando ad una discussione che l'autore ha scritto sul e cliccando sul quotAdd questo autore per il mio link orologio listquot. Riceverai una notifica ogni volta che l'autore fa un post. Per aggiungere un filo alla vostra lista di controllo, andare alla pagina filo e fare clic sul quotAdd questa discussione alla mia collegamento listquot nella parte superiore della pagina. A proposito di newsgroup, lettori di news, e MATLAB Central Quali sono i newsgroup I newsgroup sono un forum in tutto il mondo, che è aperto a tutti. Newsgroup vengono utilizzati per discutere di una vasta gamma di argomenti, fare annunci e file commerciali. Le discussioni sono filettate, o raggruppate in un modo che permette di leggere un messaggio pubblicato e tutte le relative risposte in ordine cronologico. Ciò rende più facile seguire il filo del discorso, e di vedere whatrsquos già stato detto prima di postare la propria risposta o effettuare una nuova registrazione. contenuto dei newsgroup è distribuito da server ospitati da varie organizzazioni su Internet. I messaggi vengono scambiati e gestiti tramite protocolli aperti standard. Nessuna singola entità ldquoownsrdquo i newsgroup. Ci sono migliaia di gruppi di discussione, ogni affrontando un singolo argomento o area di interesse. I posti MATLAB Central Newsreader e messaggi visualizzati nel newsgroup comp. soft-sys. matlab. Come posso leggere o inviati ai newsgroup è possibile utilizzare il lettore di news integrato sul sito MATLAB Central per leggere e inviare messaggi in questo gruppo di discussione. MATLAB Central è ospitato da MathWorks. I messaggi postati attraverso il MATLAB Central Telecronista sono visti da tutti, utilizzando i newsgroup, a prescindere dal modo in cui accedono ai newsgroup. Ci sono molti vantaggi di utilizzare MATLAB Central. Un account Il tuo account centrale MATLAB è legato alle vostre MathWorks account per un facile accesso. Utilizzare l'indirizzo email di vostra scelta Il MATLAB Central Telecronista consente di definire un indirizzo email alternativo come vostro indirizzo di invio, evitando disordine nella vostra cassetta postale principale e riducendo lo spam. Spam Control maggior parte dello spam newsgroup viene filtrato dal MATLAB Central Newsreader. I messaggi di tag può essere contrassegnati con un'etichetta rilevante da qualsiasi utente firmato-in. I tag possono essere usati come parole chiave per trovare particolari file di interesse, o come un modo per categorizzare i tuoi messaggi preferiti. Si può scegliere di consentire ad altri di visualizzare i tag, ed è possibile visualizzare o cercare i tag othersrsquo così come quelli della comunità in generale. Tagging fornisce un modo di vedere sia le grandi tendenze e le più piccole, le idee e le applicazioni più oscuri. Guarda le liste Impostazione elenchi di controllo consente di una notifica di aggiornamenti apportati ai distacchi selezionati per autore, filo, o di qualsiasi variabile di ricerca. Lista osserva notifiche possono essere inviate via e-mail (digest giornaliero o immediato), visualizzato nel mio lettore di news, o inviati tramite feed RSS. Altri modi per accedere ai newsgroup, utilizzare un lettore di news attraverso la vostra scuola, datore di lavoro, o Internet Service Provider pagare per l'accesso newsgroup da un fornitore commerciale Usa Google Gruppi Mathforum. org fornisce un newsreader con accesso al newsgroup sys. matlab comp. soft Crea il tuo server. Per le istruzioni tipici, vedi: slyckng. phppage2 Seleziona il Paese

No comments:

Post a Comment