AnalyticSignal (FPScript)
Transformiert ein reelles Signal in ein analytisches Signal, dessen Imaginärteil die Hilbert-Transformation liefert. Wird häufig verwendet zur Berechnung der Momentanamplitude oder Momentanfrequenz sowie zur Demodulation von Signalen.
Syntax
AnalyticSignal(Signal [ , FFTLength = 0 ])
Die Syntax der AnalyticSignal-Funktion besteht aus folgenden Teilen:
Teil |
Beschreibung |
---|---|
Signal |
Der reelle Datensatz, von dem das analytische Signal berechnet werden soll. Der Datensatz sollte äquidistant abgetastet sein, da der Algorithmus die diskrete Fourier-Transformation (für äquidistante Daten) verwendet. Erlaubte Datenstrukturen sind Datenreihe, Datenmatrix, Signal, Signalreihe und Signalreihe mit zweidimensionaler X-Komponente. Es sind alle reellen Datentypen erlaubt außer Kalenderzeit und Zeitspanne. Ungültige Werte sind in diesem Argument nicht zulässig. Ist das Argument eine Liste, dann wird die Funktion für jedes Element der Liste ausgeführt und das Ergebnis ist ebenfalls eine Liste. |
FFTLength |
Die Länge der Fourier-Transformation welche zur Berechnung des analytischen Signals benötigt wird. Die FFT-Länge muss größer gleich der Datenlänge sein. Wenn die angegebene FFT-Länge größer als die Datenlänge ist, dann werden Nullen für die interne Fourier-Transformation angehängt. Ein Wert von -1 setzt die FFT-Länge auf die nächst größere 2er-Potenz. Der Vorgabewert 0 setzt die FFT-Länge auf die Datenlänge. Erlaubte Datenstrukturen sind Einzelwert. Es sind alle ganzzahligen Datentypen erlaubt. Der Wert muss größer gleich -1 sein. Ist das Argument eine Liste, dann wird deren erstes Element entnommen. Ist dies wieder eine Liste, dann wird der Vorgang wiederholt. Wenn das Argument nicht angegeben wird, wird es auf den Vorgabewert 0 gesetzt. |
Anmerkungen
Das Ergebnis hat die gleiche Einheit wie das Argument Signal.
Bei zusammengesetzten Datenstrukturen wird nur die Y-Komponente verrechnet. Die X- bzw. Z-Komponenten werden, falls vorhanden, unverändert in das Ergebnis übernommen. Bei Datenmatrizen und Signalreihen erfolgt die Berechnung spaltenweise.
Die Funktion berechnet aus einem reellen Eingangssignal x(t) ein analytisches (d.h. komplex differenzierbares) Signal z(t) durch folgende mathematische Vorschrift im Frequenzbereich, siehe [1]:
Hierbei bezeichnen X(f) und Z(f) die zugehörigen komplexwertigen (zeit-kontinuierlichen) Fourier-Transformationen von x(t) und z(t). Die Übertragungsfunktion ist damit gegeben als:
Mit anderen Worten: z(t) ergibt sich aus x(t) indem die positive Hälfte des Spektrum verdoppelt und die negative Hälfte des Spektrum entfernt wird.
Hinweis Der Realteil des so definierten analytischen Signals z(t) entspricht dem ursprünglichen Eingangssignal x(t), der Imaginärteil des analytischen Signals liefert die Hilbert-Transformation von x(t), siehe [1].
Verfügbarkeit
Option Spektralanalyse
Beispiele
Imag(AnalyticSignal(realSig))
Liefert die Hilbert-Transformation eines reellwertigen Signals. Der Code ist äquivalent zu Hilbert(realSig).
realSig + 1i*Hilbert(realSig)
Transformiert ein reellwertiges Signal in ein analytisches Signal, dessen Imaginärteil der Hilbert-Transformation entspricht. Der Code liefert dasselbe Resultat wie AnalyticSignal(realSig).
Absolute(AnalyticSignal(realSig))
Liefert die Momentanamplitude bzw. obere Einhüllende eines Signals (falls das Signal keinen Trend besitzt).
Dim offset = Trend(realSig, TREND_LINEAR)
Absolute(AnalyticSignal(realSig - offset))
Berechnet die Momentanamplitude eines Signals. Die Trendkorrektur erfolgt hier beispielsweise mittels der Trend-Funktion.
Dim offset = Trend(realSig, TREND_LINEAR)
Absolute(AnalyticSignal(realSig - offset)) + offset
Berechnet die obere Einhüllende eines Signals. Die Trendkorrektur erfolgt hier beispielsweise mittels der Trend-Funktion.
Dim offset = Mean(realSig, MEAN_ARITHMETIC + CALC_MOVING, 200)
-Absolute(AnalyticSignal(realSig - offset)) + offset
Berechnet die untere Einhüllende eines Signals. Die Trendkorrektur erfolgt hier beispielsweise mittels der Mean-Funktion.
PhaseUnwrap(Phase(AnalyticSignal(realSig)))
Liefert die Momentanphase eines einkomponentigen Signals (falls das Signal keinen Trend besitzt).
Dim offset = Trend(realSig, TREND_ADAPTIVE)
PhaseUnwrap(Phase(AnalyticSignal(realSig - offset)))
Berechnet die Momentanphase eines einkomponentigen Signals. Die Trendkorrektur erfolgt hier beispielsweise mittels der Trend-Funktion.
Dim instPhase = PhaseUnwrap(Phase(AnalyticSignal(realSig)))
Derivative(instPhase)/(2*PI)
Liefert die Momentanfrequenz eines einkomponentigen Signals (falls das Signal keinen Trend besitzt).
Dim offset = Mean(realSig, MEAN_ARITHMETIC + CALC_MOVING, 50)
Dim instPhase = PhaseUnwrap(Phase(AnalyticSignal(realSig - offset)))
Derivative(instPhase)/(2*PI)
Berechnet die Momentanfrequenz eines einkomponentigen Signals. Die Trendkorrektur erfolgt hier beispielsweise mittels der Mean-Funktion.
Siehe auch
Berechnung des analytischen Signals
Literatur
[1] S. Lawrence Marple, Jr.: Computing the Discrete-Time "Analytic" Signal via FFT. In: IEEE Transactions on Signal Processing, Vol. 47, No.9. http://ieeexplore.ieee.org/iel5/78/16975/00782222.pdf?arnumber=782222,1999.
[2] B. Boashash: Estimating and Interpreting the Instantaneous Frequency of a Signal-Part I: Fundamentals. In: Proceedings of the IEEE, Vol. 80, No. 4, pp. 519–538. 1992.
[3] Bernard Picinbono: On Instantaneous Amplitude and Phase of Signals. In: IEEE Trans. Signal Processing, Vol. 45, No. 3. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.178.833,1997.