VF_convolve und VF_deconvolve modifizieren (OptiVec Vektor-Funktion)">VF_convolve, VF_deconvolve, modifizieren">
VF_setRspEditVD_setRspEditVE_setRspEdit
FunktionBehandlung von Rundungsfehlern in den Funktionen VF_convolve und VF_deconvolve modifizieren
Syntax C/C++#include <VFstd.h>
void VF_setRspEdit( fComplex Trunc );
C++ VecObj#include <OptiVec.h>
void vector<T>::setRspEdit( const complex<T>& Trunc );
Pascal/Delphiuses VFstd;
procedure VF_setRspEdit( Trunc:fComplex );
CUDA-Funktion C/C++#include <cudaVFstd.h>
void cudaVF_setRspEdit( fComplex Trunc );
CUDA-Funktion Pascal/Delphiuses VFstd;
procedure cudaVF_setRspEdit( Trunc:fComplex );
BeschreibungIn den Funktionen VF_convolve und VF_deconvolve wird durch Fourier-Transformation aus einer Response-Funktion ein Frequenzfilter berechnet, das anschließend auf einen Vektor angewendet wird. Falls für "breite" Response-Funktionen das Filter für hohe Frequenzen Null sein sollte, so führen doch Rundungsfehler dazu, dass kleine Zahlen ungleich Null anstelle der "korrekten" Nullen stehen.

Der maximale Rundungsfehler bei der Konstruktion des Filters Flt stellt sich in grober Näherung auf (size * big * prec), wobei big das betragsmäßig größte Element von Flt und prec die relative Fließkomma-Genauigkeit bedeuten. Jedes Element, das kleiner als dieser Wert ist, sollte als 0 betrachtet werden. Die Funktion VF_setRspEdit erlaubt eine genaue Festlegung dieser Schwelle. Der Realteil von Trunc bestimmt die Behandlung der Realteile des Filters und entsprechend der Imaginärteil von Trunc die Behandlung der Imaginärteile. Normalerweise wird man Trunc.Re = Trunc.Im wählen oder auch einen etwas striktereren (d.h. größereren) Wert für Trunc.Im.

Standardmäßig sind Werte von Trunc.Re = 16*EPSILON und Trunc.Im = 32*EPSILON eingestellt, wobei EPSILON je nach Datentyp für FLT_EPSILON,  DBL_EPSILON oder LDBL_EPSILON steht (diese Konstanten sind für C/C++ in <float.h> definiert). Sowohl Trunc.Re als auch Trunc.Im müssen < 1.0 sein; andernfalls erfolgt eine Fehlermeldung "Invalid Parameter(s)" und Abbruch des Programms.

Ist die Editierung des Filters nicht erwünscht, wähle man Trunc.Re = Trunc.Im = 0.

Bei der Konvolution führt die Editierung des Filters zu einer (geringfügigen) Glättung des Ergebnisses. Bei der Dekonvolution besitzt sie noch eine andere Bedeutung: Für alle vollständig verlorenen Frequenzen, also für diejenigen Frequenzen, an denen der Filter gleich Null gesetzt wurde, wird eine Rekonstruktion gar nicht erst versucht. Die Editierung des Filters verhindert also eine Division durch sehr kleine Zahlen nahe oder gleich Null, die sonst zu OVERFLOW- oder SING-Fehlern führen könnte. Es wird daher geraten, die Editierung stets beizubehalten.

Um die derzeit eingestellte Schwelle abzufragen, bediene man sich der Funktion VF_getRspEdit.

FehlerbehandlungFalls Trunc.Re oder Trunc.Im >= 1.0 sind, erfolgt eine Fehlermeldung "Invalid Parameter(s)" und Abbruch des Programms.
Rückgabewertkeiner
QuerverweisVF_convolve,   VF_deconvolve,   VF_getRspEdit

VectorLib Inhaltsverzeichnis  OptiVec Home