Moving Average Oktave

Gewichtete gleitende Durchschnitt In einer Antwort auf diesen Beitrag von Luca Delucchi Eine Online-Methode zu tun, wma (dh, wo Sie können einen einzigen Wert auf einmal) mit einem expinentiellen Fenster (das wiegt mehrere Ereignisse stärker als weniger jüngsten) funktioniert wie folgt: xmean (T1) exp (-1tau) (xmean (t) x (t) tau) Dies gibt Ihnen eine wma von x (t). Tau ist so etwas wie die Länge des Gedächtnisses (Ereignisse, die weiter zurück als tau sind, werden nicht quittrememberedquot zu gut). Am 10.08.2007 um 09:19 schrieb Luca Delucchi: gt Hallo, ich kann eine Funktion auf Weighted Moving Average, wo der Wert sind gt nehmen im automatischen Modus diese meine Idee gt gt yy1, y2, y3, y4, y5 gt Funktion wma (Y) gt (y12y2y3) 4 gt (y22y3y4) 4 gt etc gt usw gt Endfunktion gt gt I konnte die Formel (y12y2y3) 4 nicht wiederholen (weil, wenn der lange Gt-Vektor unterschiedlich ist, die Funktion ändern muss) nur eine gt Formel, die die Formel für alle Werte von Vektor gt gt verwende ich Ive hoffe, eine klare Erklärung gt gt Luca gt gt gegeben Hilfe-Oktaven-Mailing-Liste gt versteckte E-Mail gt cae. wisc. edumailmanlistinfohelp-Oktaven-Sein nicht eine Oktave Sache, aber Eine Signalverarbeitungssache. Ein FIR (Finite-Input-Response) - Filter wird durch den Vektor der Koeffizienten bestimmt. Wenn also der Filter die Länge 4 hat, wäre der Ausgang so: y (t) b (1) x (t) b (2) T-1) b (3) x (t-2) b (4) x (t-3) Wenn b eine (1,4) 4 ist, ist es nur der Durchschnitt der letzten vier Elemente. In Oktave können Sie mit der Funktion quotfilterquot genau das tun, wenn x Ihr Signal ist, können Sie einfach y Filter (b, 1, x) P. S. Dies ist fast das gleiche wie Sren39s Vorschlag zur Verwendung von Faltung (mit der conv-Funktion). Der einzige Unterschied (glaube ich) ist, dass Filter die gleiche Ausgabe wie conv geben wird, aber abgeschnitten auf die Länge von x. Auf 81007, Luca Delucchi lthidden E-Mail gt schrieb: 2007810, Schirmacher, Rolf lthidden E-Mail gt: gt Filter mit einem FIR-Filter Koeffizienten wäre gt gt b 1 1 1 1. 4 gt Was ist das Sorry, aber I39m ein Neuling von Oktave gt gt ----- Ursprüngliche Nachricht ----- gt gt Von: Luca Delucchi mailto: versteckte e-Mail gt gt Gesendet: Friday, August 10, 2007 9:20 AM gt gt: Oktave gt gt Betreff: Weighted Moving Average gt gt gt gt gt gt Hallo, ich kann auf gewichteten gleitenden Durchschnitt eine Funktion zu tun, wenn der Wert sind gt gt nehmen im Automatikbetrieb diese meine Idee gt gt gt gt yy1, y2, y3, y4, y5 gt gt Funktion wma (y) gt gt (y12y2y3) 4 gt gt (y22y3y4) 4 gt gt etc gt gt usw. gt gt Ende Funktion gt gt gt gt ich nicht die Formel (y12y2y3) wiederholen könnte 4 (weil Wenn die Länge des gt-gt-Vektors unterschiedlich ist, i die Funktion ändern muß), sondern nur eine gt gt-Formel haben, die die Formel für alle Werte des Vektors gt gt gt gt verwendet, hoffe ich eine klare Erklärung gegeben gt gt gt gt Luca gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt in Antwort auf dieses Thema von Luca Delucchi Hallo, kann ich eine Funktion auf gewichteten gleitenden Durchschnitt zu tun, wenn der Wert nehmen sind im Automatik-Modus dieser (Y12y2y3) 4 (y22y3y4) 4 etc etc End-Funktion Ich konnte nicht wiederholen, die Formel (y12y2y3) 4 (weil, wenn die Länge der Vektor ist anders Ich muss ändern Die Funktion) haben aber nur eine Formel, die die Formel für alle Werte des Vektors verwendet. Sie müssen an Ihre Daten anders denken, wenn Sie die Matlaboctave effizient nutzen wollen. Die Daten werden als Vektoren oder Matrizen dargestellt, und Sie sollten alle Operationen auf den gesamten Daten durchführen - denken Sie nicht an Elemente y1, y2 usw., sondern behandeln Sie den gesamten Vektor y. Sie müssen Vektorelemente aus verschiedenen Positionen mischen, also müssen Sie verschobene Versionen des Vektors konstruieren. Zum Beispiel ist y (2: Ende) der Vektor, dessen erstes Element das zweite Element von y ist. Wenn du es auf diese Weise tust, zwingt es dich, verschiedene Probleme zu erkennen, die unter den Teppich gekehrt werden, sonst zum Beispiel, was ist die Bedeutung deines gewichteten Mittelwertes für y1, der nicht über einen früheren Datenpunkt verfügt. Ein Ansatz könnte sein, das zu duplizieren Erster und letzter Punkt: temp y (1) yy (Ende) Durchschnitt (temp (1: end-2) 2temp (2: end-1) temp (3: end)) 4 oder geben Sie auf und geben Sie zu, dass Sie nur berechnen können (2: end-1) y (3: end)) 4 Es gibt eine Oktave-Funktion mit dem Namen filter (), die beliebige lineare Filter sein kann Ziemlich kompliziert, weil es eine lineare Rückmeldung, die Sie arent interessiert, so dass Sie verwenden eine spezielle Form eines Feedback-Vektor b1 0 0 0 0 0. Durchschnittliche Filter (1 2 14,1, y)) Schließlich hat Octave einige Filter in meinem gebaut Favorit ist der Savitzky-Golay-2-Moment-Schutzfilter31 Signalverarbeitung Dieses Kapitel beschreibt die Signalverarbeitung und die schnellen Fourier-Transformationsfunktionen, die in Octave zur Verfügung stehen. Fast Fourier-Transformationen werden mit den FFTW - oder FFTPACK-Bibliotheken berechnet, je nachdem, wie Octave aufgebaut wird. Berechnen Sie die diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die FFT wird entlang der ersten Nicht-Singleton-Dimension des Arrays berechnet. Wenn also x eine Matrix ist, berechnet fft (x) die FFT für jede Spalte von x. Wenn mit zwei Argumenten aufgerufen wird, wird erwartet, dass n eine Ganzzahl ist, die die Anzahl der Elemente von x angibt, die verwendet werden sollen, oder eine leere Matrix, um festzulegen, dass ihr Wert ignoriert werden soll. Wenn n größer als die Dimension ist, entlang der die FFT berechnet wird, dann wird x verkleinert und mit Nullen aufgefüllt. Andernfalls wird, wenn n kleiner als die Dimension ist, entlang der die FFT berechnet wird, x abgeschnitten. Wenn mit drei Argumenten aufgerufen wird, ist dim eine Ganzzahl, die die Dimension der Matrix angibt, entlang der die FFT durchgeführt wird. Berechnen Sie die inverse diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die inverse FFT wird entlang der ersten Nicht-Singleton-Dimension des Arrays berechnet. Wenn also x eine Matrix ist, berechnet fft (x) die inverse FFT für jede Spalte von x. Wenn mit zwei Argumenten aufgerufen wird, wird erwartet, dass n eine Ganzzahl ist, die die Anzahl der Elemente von x angibt, die verwendet werden sollen, oder eine leere Matrix, um festzulegen, dass ihr Wert ignoriert werden soll. Wenn n größer als die Dimension ist, entlang der die inverse FFT berechnet wird, wird x in der Größe skaliert und mit Nullen aufgefüllt. Andernfalls wird, wenn n kleiner als die Dimension ist, entlang der die inverse FFT berechnet wird, x abgeschnitten. Bei Aufruf mit drei Argumenten ist dim eine Ganzzahl, die die Dimension der Matrix angibt, entlang derer die inverse FFT ausgeführt wird. Berechnen Sie die zweidimensionale diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die optionalen Argumente m und n können verwendet werden, um die Anzahl der zu verwendenden Zeilen und Spalten von A anzugeben. Wenn einer von diesen größer als die Größe von A ist, wird A verkleinert und mit Nullen aufgefüllt. Wenn A eine mehrdimensionale Matrix ist, wird jede zweidimensionale Submatrix von A separat behandelt. Berechnen Sie die inverse zweidimensionale diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die optionalen Argumente m und n können verwendet werden, um die Anzahl der zu verwendenden Zeilen und Spalten von A anzugeben. Wenn einer von diesen größer als die Größe von A ist, wird A verkleinert und mit Nullen aufgefüllt. Wenn A eine mehrdimensionale Matrix ist, wird jede zweidimensionale Submatrix von A separat behandelt. Berechnen Sie die N-dimensionale diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die optionale Vektor-Argumentgröße kann verwendet werden, um die Dimensionen des zu verwendenden Arrays anzugeben. Wenn ein Element der Größe kleiner als die entsprechende Dimension von A ist, wird die Dimension von A vor der Durchführung der FFT abgeschnitten. Andernfalls wird, wenn ein Element der Größe größer als die entsprechende Dimension ist, A verkleinert und mit Nullen aufgefüllt. Berechnen Sie die inverse n-dimensionale diskrete Fourier-Transformation von A mit einem Fast Fourier Transform (FFT) Algorithmus. Die optionale Vektor-Argumentgröße kann verwendet werden, um die Dimensionen des zu verwendenden Arrays anzugeben. Wenn ein Element der Größe kleiner als die entsprechende Dimension von A ist, wird die Dimension von A vor der Durchführung der inversen FFT abgeschnitten. Andernfalls wird, wenn ein Element der Größe größer als die entsprechende Dimension ist, A verkleinert und mit Nullen aufgefüllt. Octave verwendet die FFTW-Bibliotheken, um FFT-Berechnungen durchzuführen. Wenn Octave die FFTW-Bibliotheken startet und initialisiert, lesen sie eine systemweite Datei (auf einem Unix-System, typischerweise etcfftwisdom), die Informationen enthält, die nützlich sind, um FFT-Berechnungen zu beschleunigen. Diese Information wird Weisheit genannt. Die systemweite Datei ermöglicht die gemeinsame Nutzung von Weisheit zwischen allen Anwendungen mit den FFTW-Bibliotheken. Verwenden Sie die Funktion fftw, um Weisheit zu erzeugen und zu speichern. Unter Verwendung der Dienstprogramme, die zusammen mit den FFTW-Bibliotheken (fftw-Weisheit auf Unix-Systemen) zur Verfügung stehen, können Sie sogar Weisheiten hinzufügen, die von Octave an die systemweite Weisheitsdatei erzeugt werden. Verwalten von FFTW-Weisheitsdaten. Weisheitsdaten können verwendet werden, um die Berechnung der FFTs erheblich zu beschleunigen, aber impliziert eine anfängliche Kosten bei ihrer Berechnung. Wenn die FFTW-Bibliotheken initialisiert werden, lesen sie eine systemweite Weisheitsdatei (normalerweise in etcfftwwdomdom), so dass Weisheit von anderen Anwendungen als Octave gemeinsam genutzt werden kann. Alternativ kann die fftw-Funktion verwendet werden, um Weisheit zu importieren. Zum Beispiel wird die bestehende Weisheit, die von Octave verwendet wird, an die Weisheit der Weisheit speichern. Dieser String kann dann in einer Datei gespeichert und mit den Save - und Load-Befehlen wiederhergestellt werden. Diese Weisheit kann wie folgt wieder importiert werden Wenn Weisheit eine leere Zeichenfolge ist, dann wird die Weisheit gelöscht. Während der Berechnung der Fourier-Transformationen wird weitere Weisheit erzeugt. Die Weise, in der diese Weisheit erzeugt wird, wird auch durch die fftw-Funktion gesteuert. Es gibt fünf verschiedene Arten, in denen die Weisheit behandelt werden kann: Legt fest, dass keine Laufzeitmessung der optimalen Mittel zur Berechnung eines bestimmten durchgeführt wird und eine einfache Heuristik verwendet wird, um einen (wahrscheinlich suboptimalen) Plan auszuwählen. Der Vorteil dieser Methode besteht darin, dass bei der Erzeugung des Plans wenig oder kein Overhead vorhanden ist, was für eine einmal berechnete Fourier-Transformation geeignet ist. In diesem Fall wird eine Reihe von Algorithmen zur Durchführung der Transformation betrachtet und die beste Auswahl wird basierend auf ihrer Ausführungszeit ausgewählt. Ähnlich wie quotmeasurequot. Aber ein breiteres Spektrum von Algorithmen betrachtet wird. Wie quotmeasurequot. Aber alle möglichen Algorithmen, die verwendet werden können, um die Transformation zu behandeln, werden betrachtet. Da die Laufzeitmessung des Algorithmus kostspielig sein kann, ist dies ein Kompromiss, bei dem für die Transformation bis zu einer Größe von 8192 und darüber hinaus das Quotientenquot-Verfahren verwendet wird. Die Standardmethode ist quotestimatequot. Die aktuelle Methode kann mit Hilfe von Hinweis abgefragt oder eingestellt werden, dass die berechnete Weisheit beim Neustart von Octave verloren geht. Die Weisheitsdaten können jedoch erneut geladen werden, wenn sie wie oben beschrieben in einer Datei gespeichert werden. Gespeicherte Weisheitsdateien sollten nicht auf verschiedenen Plattformen verwendet werden, da sie nicht effizient sind und der Punkt der Berechnung der Weisheit verloren geht. Die Anzahl der Threads, die für die Berechnung der Pläne und die Ausführung der Transformationen verwendet werden, kann eingestellt werden. Beachten Sie, dass die Oktave mit der Multithread-FFTW-Unterstützung für diese Funktion kompiliert werden muss. Die Anzahl der Prozessoren, die für den aktuellen Prozess verfügbar sind, wird standardmäßig verwendet. Falten Sie zwei Vektoren mit der FFT für die Berechnung. C fftconv (x, y) liefert einen Vektor der Länge gleich der Länge (x) Länge (y) - 1. Wenn x und y die Koeffizientenvektoren zweier Polynome sind, ist der zurückgegebene Wert der Koeffizientenvektor des Produktpolynoms. Die Berechnung nutzt die FFT durch Aufruf der Funktion fftfilt. Wenn das optionale Argument n angegeben ist, wird eine N-Punkt-FFT verwendet. Filter x mit dem FIR-Filter b mit der FFT. Wenn x eine Matrix ist, filtern Sie jede Spalte der Matrix. Angesichts der optionalen dritten Argument, n. Fftfilt verwendet die Overlap-add-Methode, um x mit b mit einer N-Punkt-FFT zu filtern. Die FFT-Größe muss eine gerade Potenz von 2 sein und muss größer oder gleich der Länge von b sein. Wenn das angegebene n diese Kriterien nicht erfüllt, wird es automatisch auf den nächstliegenden Wert eingestellt. Wenden Sie ein 1-D-Digitalfilter an die Daten x an. Filter die Lösung auf die folgende lineare, zeitinvariante Differenzgleichung zurück: wobei Nlength (a) -1 und Mlength (b) -1 sind. Das Ergebnis wird über die erste Nicht-Singleton-Dimension von x oder über dim berechnet. Eine äquivalente Form der Gleichung lautet: wobei c aa (1) und d ba (1). Wenn das vierte Argument si gegeben ist, wird es als Anfangszustand des Systems genommen und der endgültige Zustand als sf zurückgegeben. Der Zustandsvektor ist ein Spaltenvektor, dessen Länge gleich der Länge des längsten Koeffizientenvektors minus eins ist. Wenn si nicht geliefert wird, wird der Anfangszustandsvektor auf alle Nullen gesetzt. In Bezug auf die Z-Transformation ist y das Ergebnis des Durchlaufens des diskreten Zeitsignals x durch ein System, das durch die folgende rationale Systemfunktion gekennzeichnet ist: Anwenden des 2-D-FIR-Filters b auf x. Wenn die Argumentform angegeben wird, geben Sie ein Array der gewünschten Form zurück. Mögliche Werte sind: pad x mit Nullen auf allen Seiten vor dem Filtern. Unpadded x (Standard) trim x nach dem Filtern, sodass Randeffekte nicht enthalten sind. Beachten Sie, dies ist nur eine Variation auf Faltung, mit den Parametern umgekehrt und b um 180 Grad gedreht. Geben Sie den komplexen Frequenzgang h des rationalen IIR-Filters zurück, dessen Zähler - und Nennerkoeffizienten b und a sind. beziehungsweise. Die Antwort wird bei n Winkelfrequenzen zwischen 0 und 2pi ausgewertet. Der Ausgangswert w ist ein Vektor der Frequenzen. Wenn a weggelassen wird, wird der Nenner mit 1 angenommen (dies entspricht einem einfachen FIR-Filter). Wenn n weggelassen wird, wird ein Wert von 512 angenommen. Für die schnellste Berechnung sollte n in eine kleine Anzahl kleiner Primzahlen fließen. Wenn das vierte Argument, quotwholequot. Wird die Antwort bei Frequenzen zwischen 0 und pi ausgewertet. Bewerten Sie die Antwort bei den spezifischen Frequenzen im Vektor w. Die Werte für w werden im Bogenmaß gemessen. Hellip freqz (hellip, Fs) Rücklauffrequenzen in Hz anstelle von Radiant unter der Annahme einer Abtastrate Fs. Wenn Sie die Antwort bei bestimmten Frequenzen w. Sollten diese Frequenzen in Hz anstatt in Radianten angefordert werden. Zeichnen Sie die Größe und die Phasenantwort von h anstatt sie zurückzugeben. Zeichnen Sie die Größe und die Phasenreaktion von h. Wenn das optionale freqnorm-Argument wahr ist, ist der Frequenzvektor w in Einheiten normalisierten Bogenmaßes. Wenn freqnorm falsch oder nicht gegeben ist, wird w in Hertz gemessen. Berechnen Sie die sinc-Funktion. Rückkehr sin (pix) (pix). Umwickeln Sie radianische Phasen, indem Sie Multiples von 2pi addieren, wie angebracht, um Sprünge zu entfernen, die größer als tol sind. Tol setzt auf pi. Unverpackung arbeitet entlang der Dimension dim. Wenn dim nicht spezifiziert ist, wird standardmäßig die erste Nicht-Singleton-Dimension verwendet. Passen Sie ein ARCH-Regressionsmodell an die Zeitreihe y mit dem Scoring-Algorithmus in Englersquos original ARCH-Papier an. Wobei e (t) N (0, h (t)) ist. Gegeben durch einen Zeitreihenvektor y bis zur Zeit t-1 und eine Matrix von (gewöhnlichen) Regressoren x bis zu t. Die Reihenfolge der Regression der Restvarianz ist durch p angegeben. Wird als Archfit (y k) mit einer positiven ganzen Zahl k aufgerufen. Passen einen ARCH (k. P) - Verfahren an, d. h. das obige mit der t-ten Zeile von x, die durch optional gegeben wird, kann man die Anzahl der Iterationen iter angeben. Der Aktualisierungsfaktor gamma. Und Anfangswerte a0 und b0 für den Bewertungsalgorithmus. Simulieren Sie eine ARCH-Sequenz der Länge t mit AR-Koeffizienten b und CH-Koeffizienten a. Das Ergebnis y (t) folgt dem Modell mit e (t). Gegeben y bis zum Zeitpunkt t-1. Ist N (0, h (t)). Mit einem linearen Regressionsmodell führen Sie einen Lagrange Multiplikator (LM) - Test der Nullhypothese ohne bedingte Heteroszene gegen die Alternative von CH (p) durch. D. h. Das Modell y bis t-1 und x bis t gegeben. E (t) ist N (0, h (t)) mit und die Null ist ein (1) hellip a (p) 0. Wenn das zweite Argument eine skalare ganze Zahl ist, Den gleichen Test in einem linearen Autoregressionsmodell der Ordnung k durchführen. D. h. mit der t-ten Zeile von x. Unter der Nullstelle hat LM ungefähr eine Chisquareverteilung mit p Freiheitsgraden und pval den p-Wert (1 minus der CDF dieser Verteilung bei LM) des Tests. Wenn kein Ausgabeargument angegeben ist, wird der p-Wert angezeigt. Geben Sie eine Simulation des ARMA-Modells zurück. Das ARMA-Modell ist definiert durch wobei k die Länge des Vektors a ist. L die Länge des Vektors b und e das Gaußsche weiße Rauschen mit Varianz v ist. Die Funktion liefert einen Vektor der Länge t zurück. Der optionale Parameter n gibt die Anzahl der zur Initialisierung verwendeten Dummy x (i) an, d. H. Es wird eine Sequenz der Länge t n erzeugt und x (n 1: t n) zurückgegeben. Wenn n weggelassen wird, wird n 100 verwendet. Gegeben sei eine Zeitreihe (Vektor) y. Eine Matrix mit Einsen in der ersten Spalte und die ersten k Verzögerungswerte von y in den anderen Spalten zurück. Mit anderen Worten, für t gt k. 1, y (t - 1), hellip, y (t - k) die t-te Zeile des Ergebnisses. Die resultierende Matrix kann als Regressor-Matrix in Autoregressionen verwendet werden. Geben Sie die Filterkoeffizienten eines Bartlett - (dreieckigen) Fensters der Länge m zurück. Für eine Definition des Bartlett-Fensters siehe z. B. EIN V. Oppenheim amp R. W. Schafer, Diskrete Zeitsignalverarbeitung. Geben Sie die Filterkoeffizienten eines Blackman-Fensters der Länge m zurück. Wenn das optionale Argument quotperiodicquot angegeben wird, wird die periodische Form des Fensters zurückgegeben. Dies entspricht dem Fenster der Länge m 1, wobei der letzte Koeffizient entfernt ist. Das optionale Argument quotsymmetricquot entspricht nicht der Angabe eines zweiten Arguments. Für eine Definition des Blackman-Fensters siehe z. B. EIN V. Oppenheim amp R. W. Schafer, Diskrete Zeitsignalverarbeitung. Wenn x ein Vektor ist, entfernt detrend (x. P) die beste Passung eines Polynoms der Ordnung p aus den Daten x. Wenn x eine Matrix ist, macht detrend (x. P) dasselbe für jede Spalte in x. Das zweite Argument p ist optional. Wenn es nicht angegeben ist, wird ein Wert von 1 angenommen. Dies entspricht der Entfernung eines linearen Trends. Die Reihenfolge des Polynoms kann auch als String angegeben werden, wobei p also entweder konstant (entspricht p 0) oder quotlinearquot (entspricht p 1) sein muss. Geben Sie den Schätzer d für den Differenzierungsparameter einer integrierten Zeitreihe zurück. Für die Schätzung werden die Frequenzen von 2piat, 2pibT verwendet. Wenn b weggelassen wird, wird das Intervall 2piT, 2piaT verwendet. Wenn sowohl b als auch a weggelassen werden, wird ein 0,5 sqrt (T) und b 1,5 sqrt (T) verwendet, wobei T die Stichprobengröße ist. Wenn x eine Matrix ist, wird der Differenzierungsparameter jeder Spalte abgeschätzt. Die Schätzwerte für alle Frequenzen in den oben beschriebenen Intervallen werden in dd zurückgegeben. Der Wert von d ist einfach der Mittelwert von dd. Referenz: P. J. Brockwell amp R. A. Davis. Zeitreihe: Theorie und Methoden. Springer 1987. Führen Sie einen Schritt des Durbin-Levinson-Algorithmus durch. Der Vektor c spezifiziert die Autokovarianzen gamma0, hellip, gammat von lag 0 bis t. Oldphi gibt die auf c (t -1) basierenden Koeffizienten an und oldv gibt den entsprechenden Fehler an. Wenn oldphi und oldv weggelassen werden, werden alle Schritte von 1 bis t des Algorithmus durchgeführt. Führen Sie eine Verschiebung des Vektors x durch. Zur Verwendung mit den Funktionen fft und ifft, um die Frequenz 0 in die Mitte des Vektors oder der Matrix zu verschieben. Wenn x ein Vektor von N Elementen ist, die N Zeitproben entsprechen, die durch dt beabstandet sind. Dann gilt fftshift (fft (x)) den Frequenzen. Wenn x eine Matrix ist, gilt das gleiche für Zeilen und Spalten. Wenn x ein Array ist, gilt das gleiche für jede Dimension. Das optionale dim-Argument kann verwendet werden, um die Dimension zu begrenzen, entlang der die Permutation auftritt. Rückgängigmachen der Aktion der fftshift-Funktion. Für gerade Länge x. Fftshift ist seine eigene inverse, aber ungerade Längen unterscheiden sich geringfügig. Berechnen Sie die Fraktionsunterschiede (1-L) d x, wobei L den Lag-Operator und d größer als -1 ist. Geben Sie die Filterkoeffizienten eines Hamming-Fensters der Länge m zurück. Wenn das optionale Argument quotperiodicquot angegeben wird, wird die periodische Form des Fensters zurückgegeben. Dies entspricht dem Fenster der Länge m 1, wobei der letzte Koeffizient entfernt ist. Das optionale Argument quotsymmetricquot entspricht nicht der Angabe eines zweiten Arguments. Für eine Definition des Hamming-Fensters siehe z. B. EIN V. Oppenheim amp R. W. Schafer, Diskrete Zeitsignalverarbeitung. Geben Sie die Filterkoeffizienten eines Hanning-Fensters der Länge m zurück. Wenn das optionale Argument quotperiodicquot angegeben wird, wird die periodische Form des Fensters zurückgegeben. Dies entspricht dem Fenster der Länge m 1, wobei der letzte Koeffizient entfernt ist. Das optionale Argument quotsymmetricquot entspricht nicht der Angabe eines zweiten Arguments. Für eine Definition des Hanning-Fensters siehe z. B. EIN V. Oppenheim amp R. W. Schafer, Diskrete Zeitsignalverarbeitung. Schätzen Sie den Hurst-Parameter von Stichprobe x über die rekalierte Bereichsstatistik. Wenn x eine Matrix ist, wird der Parameter für jede Spalte geschätzt. Geben Sie das pseudische kubische Hermite-Interpolationspolynom (pchip) der Punkte x und y zurück. Wenn mit zwei Argumenten aufgerufen, geben Sie das Stückpolynom pp zurück, das mit ppval verwendet werden kann, um das Polynom an bestimmten Punkten auszuwerten. Bei Aufruf mit einem dritten Eingabeargument wertet pchip das pchip-Polynom an den Punkten xi aus. Die dritte Aufrufform ist äquivalent zu ppval (pchip (x. Y), xi). Die Variable x muss ein streng monotoner Vektor (entweder zunehmen oder abnehmen) der Länge n sein. Y kann entweder ein Vektor oder ein Array sein. Wenn y ein Vektor ist, muss er die gleiche Länge n wie x haben. Wenn y ein Array ist, dann muss die Größe von y die Form s1 haben. S2. Hellip, sk. N Das Array wird intern in eine Matrix umgeformt, wobei die führende Dimension durch s1 s2 hellip sk gegeben wird und jede Zeile dieser Matrix dann separat behandelt wird. Beachten Sie, dass dies genau umgekehrt zu interp1 ist, aber für MATLAB-Kompatibilität getan wird. Geben Sie das Periodogramm (Power Spectral Density) von x zurück. Die möglichen Eingaben sind: Datenvektor. Wenn x reellwertig ist, wird ein einseitiges Spektrum geschätzt. Wenn x komplexwertig ist oder der Bereichsquot quadratisch angegeben ist. Wird das gesamte Spektrum geschätzt. Fenstergewichtsdaten. Wenn das Fenster leer oder nicht spezifiziert ist, wird ein voreingestelltes rechteckiges Fenster verwendet. Andernfalls wird das Fenster auf das Signal (x. Win) angewendet, bevor das Periodogramm berechnet wird. Die Fensterdaten müssen ein Vektor mit der gleichen Länge wie x sein. Anzahl der Frequenzbins. Die Voreinstellung ist 256 oder die nächst höhere Leistung von 2 größer als die Länge von x (max (256, 2.nextpow2 (Länge (x)))). Wenn nfft größer als die Länge des Eingangs ist, wird x auf die Länge von nfft nullpoliert. Abtastrate. Die Voreinstellung ist 1. Spektrumbereich. Berechnet das Spektrum von 0..nfft21. Der zweiseitige Punkt berechnet das Spektrum von 0..nfft-1. Der optionale zweite Ausgang w sind die normierten Winkelfrequenzen. Für eine einseitige Berechnung ist w im Bereich 0, pi, wenn nfft gerade ist und 0, pi) wenn nfft ungerade ist. Ähnlich ist für eine zweiseitige Berechnung w im Bereich 0, 2pi oder 0, 2pi) abhängig von nfft. Wenn eine Abtastfrequenz angegeben ist, Fs. Dann liegen die Ausgangsfrequenzen f im Bereich 0, Fs 2 oder 0, Fs 2) für einseitige Berechnungen. Für zweiseitige Berechnungen beträgt der Bereich 0, Fs). Bei Aufruf ohne Ausgänge wird das Periodogramm sofort im aktuellen Bildfenster geplottet. Setzen Sie ein Sinterfrequenzspektrum mit einer Länge von sek. Sekunden mit Abtastrate und Amplitudenamplitude zurück. Die Argumente freq und ampl können Vektoren von gemeinsamer Größe sein. Die Standardwerte sind die Rate 8000, sek 1 und ampl 64. Geben Sie einen m - Elementvektor mit dem durch sin (2 pi (i d -1) n) gegebenen i-ten Element zurück. Der Standardwert für d ist 0 und der Standardwert für n ist m. Geben Sie die spektrale Dichte Schätzer gegeben einen Vektor von Autokovarianzen c. Fenster Name win. Und Bandbreite, b. Der Fenstername, z. B. Quottrianglequot oder quotrectanglequot wird verwendet, um nach einer Funktion namens win lw zu suchen. Wenn win weggelassen wird, wird das Dreieckfenster verwendet. Wenn b weggelassen wird, wird 1 sqrt (Länge (x)) verwendet. Geben Sie den Schätzer für die spektrale Dichte bei einem Datenvektor x zurück. Fenster Name win. Und Bandbreite, b. Der Fenstername, z. B. Quottrianglequot oder quotrectanglequot wird verwendet, um nach einer Funktion namens win sw zu suchen. Wenn win weggelassen wird, wird das Dreieckfenster verwendet. Wenn b weggelassen wird, wird 1 sqrt (Länge (x)) verwendet. Zurück Spencerrsquos 15 Punkt gleitenden Durchschnitt jeder Spalte von x. Berechnen Sie die Kurzzeit-Fourier-Transformation des Vektors x mit Numcoef-Koeffizienten durch Anwenden eines Fensters von Winsize-Datenpunkten und einer Inkrementierung von inc-Punkten. Vor der Berechnung der Fourier-Transformation wird eines der folgenden Fenster angewendet: Die Fensternamen können als Strings oder durch die Wintype-Zahl übergeben werden. Folgende Vorgaben werden für nicht spezifizierte Argumente verwendet: winsize 80, inc 24, numcoef 64 und wintype 1. y stft (x. Hellip) gibt die absoluten Werte der Fourierkoeffizienten gemäß den positiven Numcoeffrequenzen zurück. Y ist. C stft (x, hellip) liefert die gesamte STFT-Matrix y und einen 3-Element-Vektor c mit Fenstergröße, Inkrement und Fenstertyp, der von der Synthesefunktion benötigt wird. Berechnen Sie ein Signal aus seiner Kurzzeit-Fourier-Transformation y und einem 3-Element-Vektor c, der Fenstergröße, Inkrement und Fenstertyp spezifiziert. Die Werte y und c können durch Anpassen eines AR (p) - Modells mit Yule-Walker-Schätzungen unter Verwendung eines Vektors c der Autokovarianzen gamma0, hellip, gammap abgeleitet werden. Gibt die AR-Koeffizienten, a zurück. Und die Varianz des weißen Rauschens, v. vektorisiertes gleitendes Mittel y-Filter (110ones (1, 10), 1, x) Dies setzt voraus, daß die Werte bei negativer Zeit (x (0), x (-1) usw.) alle sind Null. So wäre zum Beispiel der erste Wert von y x (1) 10. Ich schaute auf beide conv () und Filter (), aber can39t herauszufinden, wie man einen gleitenden Durchschnitt mit ihnen zu tun. Vielleicht I39m nicht verstehen, die Funktionen der Eingabevars richtig. Let39s sagen, ich habe ein Array, ein rand (1.100). Können Sie mir sagen, wie I39d verwenden conv () und Filter () zu nehmen, sagen die 10-Tage gleitenden Durchschnitt, mit einer Gewichtung von 0,5 gt ----- Ursprüngliche Nachricht ----- gt Von: Andy Buckle Mailto: hidden email gt Gesendet am: Donnerstag, den 06. Mai 2010 um 12:06 Uhr gt an: versteckte E-Mail gt Cc: versteckte E-Mail gt Thema: Re: vectorized gleitende gt gt Conv ist auch eine m-Datei, aber es hat nur ein paar Ifs in. Dann es gt ruft Filter, um den Job zu erledigen. Die eine oct-Datei ist. Gt gt Andy gt gt Am Thu, 6. Mai 2010 um 06.28 Uhr, Tim Rueth lthidden E-Mail gt schrieb: gt gt Wer weiß, wie man einen n-Tag gewichteten gleitenden Durchschnitt eines gt gt Vektor ohne Verwendung einer for - Loop Ich schaute auf die M-Code gt für movavg () gt gt und es verwendet eine for-Schleife, so I39m Vermutung dort wahrscheinlich isn39t ein Weg, gt gt aber ich dachte, I39d überprüfen. Vielen Dank. gt gt gt gt --Tim gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt www-old. cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt gt gt gt gt gt - gt andy gt Dank Schnalle für das Zeigen Wie man filter () verwenden, um einen einfachen gleitenden Durchschnitt zu machen. Ich implementierte Ihren Code, und es stimmt mit movavg (x, 10,10,0), die einen 10-tägigen einfachen gleitenden Durchschnitt berechnet. Es gibt nur einen Unterschied in den ersten 9 Zahlen aufgrund der angenommenen Werte der negativen Zeit (movavg berechnet eine Einlaufperiode). Wie Sie vielleicht daran erinnern, Im versucht, Filter () verwenden, um movavg () s for-Schleife zu vermeiden. Nun, was ich versuche zu tun ist ein gewichteter gleitender Durchschnitt, identisch mit dem Alpha-Parameter von movavg (). Wenn alpha0, es ist ein einfacher gleitender Durchschnitt, und stimmt mit filter () überein. Wenn ich Alpha zu 1 ändere, Im annehmen, um eine lineare MA zu erhalten. Heres den Code in movavg. m, dass die Gewichtung (Blei ist die Anzahl der Tage zu durchschnittlich, gleich 10 im obigen Fall): Blei (1: Blei).Alpha Anpassung der Gewichte zu 1 Bleifreiespitze (Blei) So, für einen 10-Tage linear gewichteten gleitenden Durchschnitt (Blei 10, Alpha 1). Sollten die letzten 9 Tage und der aktuelle Tag wie folgt gewichtet werden: 155, 255, 355. 1055, wobei das größte Gewicht (1055) auf den aktuellen Tag angewendet wird. Also, ich versuchte eine einfache Testfall mit nur ein 2-Tage-MA auf einem 6-Element-Vektor. madays 2 alpha 1 len 6 a rand (1. len) berechnen MA mit movavg () ma movavg (a, madays, madays, alpha) berechnen MA mit filter () Sweep (1: madays) alpha normsweep sweepsum (Sweep) f Filter (normsweep, 1, a) Die Ergebnisse von movavg () und filter () sind ähnlich, aber nicht gleich. Ich vermute, ich habe nicht die Argumente für Filter () richtig, aber ich kann nicht herausfinden, was ich falsch gemacht habe. Insbesondere bin ich nicht sicher, was das zweite Argument von Filter () soll. Hilfe Im nicht sicher, was Sie mit der Gewichtung von 0,5 bedeuten, aber um eine einfache 10-Tage-Durchschnitt zu tun, itd y-Filter (110ones (1, 10), 1, x) Dies setzt voraus, dass die Werte bei negativen Zeit (x (0 ), X (-1), usw.) alle Null sind. So wäre zum Beispiel der erste Wert von y x (1) 10. Hallo ihr Lieben, ich glaube nicht, dass es sich hierbei um ein Problem handelt. Vielleicht Im nicht verstehen, die Funktionen der Eingabevars richtig. Lets sagen, ich habe ein Array, ein rand (1.100). Können Sie mir sagen, wie Id verwenden conv () und Filter () zu nehmen, sagen die 10-Tage gleitenden Durchschnitt, mit einer Gewichtung von 0,5 gt ----- Ursprüngliche Nachricht ----- gt Von: Andy Buckle Mailto: hidden email gt Gesendet am: Donnerstag, den 06. Mai 2010 um 12:06 Uhr gt an: versteckte E-Mail gt Cc: versteckte E-Mail gt Thema: Re: vectorized gleitende gt gt Conv ist auch eine m-Datei, aber es hat nur ein paar Ifs in. Dann es gt ruft Filter, um den Job zu erledigen. Die eine oct-Datei ist. gt gt Andy gt gt Am Do, 6. Mai 2010, um 06.28 Uhr, Tim Rueth lthidden E-Mail gt geschrieben: gt gt Wer weiß, wie eine n-Tag eines gt gt Vektor gewichtet zu nehmen gleitenden Durchschnitt ohne for - mit Loop Ich schaute auf die M-Code gt für movavg () gt gt und es nutzt eine for-Schleife, so Im vermutlich gibt es wahrscheinlich nicht eine Möglichkeit, gt gt aber ich dachte, Id-Check. Vielen Dank. gt gt gt gt --Tim gt gt gt gt Hilfe-Oktaven-Mailing-Liste gt gt versteckte E-Mail gt gt www-old. cae. wisc. edumailmanlistinfohelp Oktaven gt gt gt gt gt gt gt gt - gt andy gt gtYour Filtercode Schnalle Unten funktioniert im Vergleich zu dem, was ich hatte gtdoing, außer für eine Reihe von ersten Tagen, aufgrund dessen, welche Werte gtin negative Zeit angenommen werden. Ich hatte den folgenden Code verwendet: gt gt quotndaysquot ist die Anzahl der Tage, die beim Berechnen des exponentiellen gtmoving-Mittels von quotdataquot (Daten ist ein Spaltenvektor) gt data repmat (Daten (1), ndays, 1) Datenwiederholungsdaten zu verwenden sind (1) gt avg (1) Daten (1) Die obige Anweisung ist alles, was Sie benötigen Auf negative Werte zurücksetzen. Sie sollten das gleiche für die Filter-Funktion tun, aber ich konnte nicht sagen, wie es zu tun, offhand. Gt für i 2. n gt ao avg (i-1) gt avg (i) ao alpha (Daten (i) - ao) gt end für gt gt trim off Einlaufzeit für negative Zeitwerte gt longma longma (lmadays1 ) Ich verstehe nicht die oben genannten Anweisung. Was ist longma gtFor kleine Werte von ndays, die Anzahl der ersten Tage, wo theres eine gtdiscrepancy mit Ihrer Filter () - Implementierung ist minimal, aber für größere gtvalues ​​von ndays wächst die Anzahl der ersten Tage der Diskrepanz (offensichtlich, gtdue auf die Natur der Ein exponentielles MA mit einem Long-Tail-Speicher). Beachten Sie, dass ich gtadd ähnliche negative Zeitwerte auf die Vorderseite des Vektors bei der Verwendung von gtfilter () auch. Im nur nicht sicher, was ist die Konvention, wenn es darum geht, gtcalculating exponentielle gleitende Mittelwerte für Punkte in quotdataquot wo quotndaysquot gtreaches zurück in negative Zeit. Danke noch einmal. -- Francesco Potort (ricercatore) Voice: 39 050 315 3058 (op.2111) ISTI - Area della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: hidden email (entrance 20, 1st floor, room C71) Web: fly. isti. cnr. it Help-octave mailing list hidden email www-old. cae. wisc. edumailmanlistinfohelp-octave I can39t check it currently, but if I remember correctly, the 4th argument to filter is initial conditions. So, something like if you want your initial condition to be the first value of data, I think the command would be: b alpha a 1, alpha-1 s filter(b, a, x, x(1)) It only needs to be one element in this case because the only initial condition you need is s0. On Thu, May 13, 2010 at 2:21 AM, Francesco Potort lthidden email gt wrote: gtYour filter code below works just fine when compared to what I had been gtdoing, except for a number of initial days, due to what values are assumed gtin negative time. I had been using the following code: gt gt quotndaysquot is the number of days to be used when computing the exponential gtmoving average of quotdataquot (data is a column vector) gt data repmat(data(1), ndays, 1) data repeat data(1) ndays times at gtthe beginning of data for negative time values gt alpha 2(ndays1) gt n length(data) gt avg zeros(n,1) gt avg(1) data(1) The above instruction is all you need to quotinventquot past memory for negative values. You should do the same for the filter function, but I could not say how to do it offhand. gt for i 2. n gt ao avg(i-1) gt avg(i) ao alpha(data(i) - ao) gt endfor gt gt trim off run-in period for negative time values gt longma longma(lmadays1. end) I don39t understand the above instruction. What is longma gtFor small values of ndays, the number of initial days where there39s a gtdiscrepancy with your filter() implementation is minimal, but for larger gtvalues of ndays, the number of initial days of discrepancy grows (obviously, gtdue to the nature of an exponential MA having a long-tail memory). Note, I gtadd similar negative time values to the front of the vector when using gtfilter() as well. I39m just not sure what is the convention when it comes to gtcalculating exponential moving averages for points in quotdataquot where quotndaysquot gtreaches back into negative time. Danke noch einmal. -- Francesco Potort (ricercatore) Voice: 39 050 315 3058 (op.2111) ISTI - Area della ricerca CNR Fax: 39 050 315 2040 via G. Moruzzi 1, I-56124 Pisa Email: hidden email (entrance 20, 1st floor, room C71) Web: fly. isti. cnr. it In reply to this post by Francesco Potort The last instruction with quotlongmaquot should have read: quotavg avg(n1. end)quot which effectively trims off the computed values from negative time. But, as you say, it looks like I didnt need to do this because the history is completely captured in avg(1) data(1), so no need to compute a quotrun-inquot time. Thanks Francesco. Sherman had found that I can set the initial condition by specifying a 4th parameter in filter() equal to the first data point. I tried this, and got very similar (but not quite exact) results when compared to the for-loop below with no negative time values. But this small difference dissipated within quotndaysquot and isnt a big deal. Thanks Sherman. In summary, to calculate the exponential moving average of quotdataquot for quotndaysquot, the following code: alpha 2(ndays1) n length(data) avg zeros(n,1) avg(1) data(1) for i 2. n ao avg(i-1) avg(i) ao alpha(data(i) - ao) endfor is close, but not quite equal to: alpha 2(ndays1) avg filter(alpha, 1 alpha-1, data, data(1)) for roughly the first ndays of avg. gt -----Original Message----- gt From: Francesco Potort mailto:hidden email gt Sent: Wednesday, May 12, 2010 11:22 PM gt To: hidden email gt Cc: Octave-ML James Sherman Jr. gt Subject: Re: vectorized moving average gt gt gtYour filter code below works just fine when compared to what gt I had been gt gtdoing, except for a number of initial days, due to what values are gt gtassumed in negative time. I had been using the following code: gt gt gt gt quotndaysquot is the number of days to be used when computing the gt gtexponential moving average of quotdataquot (data is a column vector) gt gt data repmat(data(1), ndays, 1) data repeat gt data(1) ndays times at gt gtthe beginning of data for negative time values alpha gt 2(ndays1) n gt gt length(data) avg zeros(n,1) gt gt avg(1) data(1) gt gt The above instruction is all you need to quotinventquot past memory gt for negative values. You should do the same for the filter gt function, but I could not say how to do it offhand. gt gt gt for i 2. n gt gt ao avg(i-1) gt gt avg(i) ao alpha(data(i) - ao) endfor gt gt gt gt trim off run-in period for negative time values gt gt longma longma(lmadays1. end) gt gt I dont understand the above instruction. What is longma gt gt gtFor small values of ndays, the number of initial days where gt theres a gt gtdiscrepancy with your filter() implementation is minimal, but for gt gtlarger values of ndays, the number of initial days of gt discrepancy grows gt gt(obviously, due to the nature of an exponential MA having a gt long-tail gt gtmemory). Note, I add similar negative time values to the gt front of the gt gtvector when using gt gtfilter() as well. Im just not sure what is the convention when it gt gtcomes to calculating exponential moving averages for points gt in quotdataquot where quotndaysquot gt gtreaches back into negative time. Danke noch einmal. gt gt -- gt Francesco Potort (ricercatore) Voice: 39 050 315 gt 3058 (op.2111) gt ISTI - Area della ricerca CNR Fax: 39 050 315 2040 gt via G. Moruzzi 1, I-56124 Pisa Email: hidden email gt (entrance 20, 1st floor, room C71) Web: fly. isti. cnr. it gt So, this bugged me, so I looked a bit at the filter function, and I think I found where the mistake was in my initial suggestion. The initial condition vector has to do with the internal states of the filter not the negative time outputs of the filter (at least not directly), so to get what I think is exactly what your code with the for loop, the filter line should be: avg filter(alpha, 1 alpha-1, data, data(1)(1-alpha)) It is rather unintuitive why the 1-alpha term needs to be there, and I don39t know if there39s much interest in it, but it shouldn39t be that hard (probably I just need to crack open my signals and systems book) to write a function to calculate the those initial conditions that the filter function expects just giving the outputs and inputs from negative time. On Thu, May 13, 2010 at 8:38 PM, Tim Rueth lthidden email gt wrote: The last instruction with quotlongmaquot should have read: quotavg avg(n1 : end)quot which effectively trims off the computed values from negative time. But, as you say, it looks like I didn39t need to do this because the history is completely captured in avg(1) data(1), so no need to compute a quotrun-inquot time. Thanks Francesco. Sherman had found that I can set the initial condition by specifying a 4th parameter in filter() equal to the first data point. I tried this, and got very similar (but not quite exact) results when compared to the for-loop below with no negative time values. But this small difference dissipated within quotndaysquot and isn39t a big deal. Thanks Sherman. In summary, to calculate the exponential moving average of quotdataquot for quotndaysquot, the following code: alpha 2(ndays1) n length(data) avg zeros(n,1) avg(1) data(1) for i 2. n ao avg(i-1) avg(i) ao alpha(data(i) - ao) is close, but not quite equal to: alpha 2(ndays1) avg filter(alpha, 1 alpha-1, data, data(1)) for roughly the first ndays of avg. gt -----Original Message----- gt From: Francesco Potort mailto:hidden email gt Sent: Wednesday, May 12, 2010 11:22 PM gt To: hidden email gt Cc: 39Octave-ML39 39James Sherman Jr.39 gt Subject: Re: vectorized moving average gt gt gtYour filter code below works just fine when compared to what gt I had been gt gtdoing, except for a number of initial days, due to what values are gt gtassumed in negative time. I had been using the following code: gt gt gt gt quotndaysquot is the number of days to be used when computing the gt gtexponential moving average of quotdataquot (data is a column vector) gt gt data repmat(data(1), ndays, 1) data repeat gt data(1) ndays times at gt gtthe beginning of data for negative time values alpha gt 2(ndays1) n gt gt length(data) avg zeros(n,1) gt gt avg(1) data(1) gt gt The above instruction is all you need to quotinventquot past memory gt for negative values. You should do the same for the filter gt function, but I could not say how to do it offhand. gt gt gt for i 2. n gt gt ao avg(i-1) gt gt avg(i) ao alpha(data(i) - ao) endfor gt gt gt gt trim off run-in period for negative time values gt gt longma longma(lmadays1. end) gt gt I don39t understand the above instruction. What is longma gt gt gtFor small values of ndays, the number of initial days where gt there39s a gt gtdiscrepancy with your filter() implementation is minimal, but for gt gtlarger values of ndays, the number of initial days of gt discrepancy grows gt gt(obviously, due to the nature of an exponential MA having a gt long-tail gt gtmemory). Note, I add similar negative time values to the gt front of the gt gtvector when using gt gtfilter() as well. I39m just not sure what is the convention when it gt gtcomes to calculating exponential moving averages for points gt in quotdataquot where quotndaysquot gt gtreaches back into negative time. Danke noch einmal. gt gt -- gt Francesco Potort (ricercatore) Voice: 39 050 315 gt 3058 (op.2111) gt ISTI - Area della ricerca CNR Fax: 39 050 315 2040 gt via G. Moruzzi 1, I-56124 Pisa Email: hidden email gt (entrance 20, 1st floor, room C71) Web: fly. isti. cnr. it gt So, this bugged me, so I looked a bit at the filter function, and I think I found where the mistake was in my initial suggestion. The initial condition vector has to do with the internal states of the filter not the negative time outputs of the filter (at least not directly), so to get what I think is exactly what your code with the for loop, the filter line should be: avg filter(alpha, 1 alpha-1, data, data(1)(1-alpha)) It is rather unintuitive why the 1-alpha term needs to be there, and I dont know if theres much interest in it, but it shouldnt be that hard (probably I just need to crack open my signals and systems book) to write a function to calculate the those initial conditions that the filter function expects just giving the outputs and inputs from negative time. On Thu, May 13, 2010 at 8:38 PM, Tim Rueth lthidden email gt wrote: The last instruction with longma should have read: avg avg(n1 : end) which effectively trims off the computed values from negative time. But, as you say, it looks like I didnt need to do this because the history is completely captured in avg(1) data(1), so no need to compute a run-in time. Thanks Francesco. Sherman had found that I can set the initial condition by specifying a 4th parameter in filter() equal to the first data point. I tried this, and got very similar (but not quite exact) results when compared to the for-loop below with no negative time values. But this small difference dissipated within ndays and isnt a big deal. Thanks Sherman. In summary, to calculate the exponential moving average of data for ndays, the following code: alpha 2(ndays1) n length(data) avg zeros(n,1) avg(1) data(1) for i 2. n ao avg(i-1) avg(i) ao alpha(data(i) - ao) is close, but not quite equal to: alpha 2(ndays1) avg filter(alpha, 1 alpha-1, data, data(1)) for roughly the first ndays of avg.


Comments