VF_deconvolveVD_deconvolveVE_deconvolve
FunktionEntfaltung (Dekonvolution)
Syntax C/C++#include <VFstd.h>
void VF_deconvolve( fVector Y, fVector Flt, fVector X, fVector Rsp, ui size );
C++ VecObj#include <OptiVec.h>
void vector<T>::deconvolve( vector<T> Flt, const vector<T>& X, const vector<T>& Rsp );
Pascal/Delphiuses VFstd;
procedure VF_deconvolve( Y, Flt, X, Rsp:fVector; size:UIntSize );
CUDA-Funktion C/C++#include <cudaVFstd.h>
int cudaVF_deconvolve( fVector d_Y, fVector d_Flt, fVector d_X, fVector d_Rsp, ui size );
void VFcu_deconvolve( fVector h_Y, fVector h_Flt, fVector h_X, fVector h_Rsp, ui size );
CUDA-Funktion Pascal/Delphiuses VFstd;
function cudaVF_deconvolve( d_Y, d_Flt, d_X, d_Rsp:fVector; size:UIntSize ): IntBool;
procedure VFcu_deconvolve( h_Y, h_Flt, h_X, h_Rsp:fVector; size:UIntSize );
BeschreibungX wird als das Resultat der Faltung eines "echten" Profils mit der Impulsantwort-Funktion (Response-Funktion) Rsp angenommen. Eine Dekonvolution wird versucht und in Y gespeichert. Ein Filter Flt wird ebenfalls berechnet. Soll die Entfaltung nicht nur für einen einzigen Vektor durchgeführt werden, so sollte für weitere Vektoren nicht wieder VF_deconvolve aufgerufen werden, sondern VF_filter mit Flt als Filter.

Die Response-Funktion Rsp muß mit dem Nullpunkt beim nullten Element vorliegen. Elemente für positive Zeiten (oder was immer die unabhängige Variable ist) folgen in Rsp1 bis Rspsize/2 und die Elemente für negative Zeiten, beginnend mit der am stärksten negativen Zeit, in Rspsize/2+1 bis Rspsize-1. Um diese Ordnung herzustellen, bediene man sich gegebenenfalls der Funktionen VF_rotate oder VF_reflect.

X, Y, Rsp und Flt müssen alle dieselbe Größe size besitzen; diese muß eine ganzzahlige Potenz von 2 sein. X darf durch Y überschrieben werden und Rsp durch Flt, aber X und Flt sowie Y und Rsp müssen voneinander verschieden sein.

Mathematisch ist Flt der Kehrwert der Fourier-Transformierten von Rsp. Falls die Fourier-Transformierte von Rsp Nullen enthält, bedeutet dies jedoch, daß für die jeweilige Frequenz jegliche Information verloren gegangen ist bei der angenommenen Faltung. Sie kann also nicht durch Entfaltung rekonstruiert werden. Man sollte nur für diejenigen Frequenzen eine Rekonstruktion der ursprünglichen Information versuchen, wo auch noch etwas von ihr übrig ist. Hier ist also einer der seltenen Fälle gegeben, wo an die Stelle einer Division durch 0 sinnvoll eine Multiplikation mit 0 tritt! Um Mißverständnisse zu vermeiden: Ob besagte Information noch vorhanden ist, läßt sich nicht aus dem Eingangsvektor X entnehmen, sondern liegt allein in der angenommenen Response-Funktion begründet.

Man sollte Entfaltung jedenfalls nicht blind anwenden, sondern am besten die Fourier-Transformierte von Rsp inspizieren und danach für die jeweilige Anwendung entscheiden, was zu tun ist. Wen diese Bemerkungen noch nicht von der Verwendung dieser Entfaltungs-Funktion abgeschreckt haben, für den führt VF_deconvolve standardmäßig eine Editierung des Filters durch. Hierbei werden alle Frequenzen mit einem Filterwert unterhalb der durch Rundungsfehler gegebenen Schwelle "verloren gegeben". Anstelle des Inversen von sehr kleinen Werten (was zu OVERFLOW- oder SING-Fehlern führen könnte) wird wie oben beschrieben Null im Filter gespeichert.
Die beschriebene Editierung kann modifiziert und die Editier-Schwelle exakt festgelegt werden mittels der Funktion VF_setRspEdit. Die aktuell eingestellte Schwelle kann durch VF_getRspEdit abgefragt werden.

Diese Entfaltung basiert auf der Annahme, X sei periodisch oder konvergiere zumindest an beiden Enden zu demselben Wert (nulltes und letztes Element identisch). Ist dies nicht der Fall, so sollten Randeffekte mit den bei VF_convolve beschriebenen Methoden vermieden werden.

FehlerbehandlungWenn size nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf VF_deconvolve basiert) mit der Fehlermeldung "Size must be integer power of 2." und bricht das Programm ab.
Wenn über VF_setRspEdit Trunc.Re = Trunc.Im = 0 eingestellt wurde, können SING-Fehler entstehen, die zu ±HUGE_VAL als Ergebnisvorschlag führen. In diesem Fall droht allerdings bei der anschließenden Multiplikation von Flt mit der Transformierten von X unbehandelter Fließkomma-Überlauf (dann nämlich, wenn an den fraglichen Frequenzen doch noch Information vorhanden ist, obwohl gemäß der angenommenen Rsp-Funktion gar keine mehr zu erwarten war).
Rückgabewertkeiner
QuerverweisVF_filter,   VF_convolve,   VF_FFT,   VF_xcorr,   VF_spectrum

VectorLib Inhaltsverzeichnis  OptiVec Home