VF_autocorrVD_autocorrVE_autocorr
VFb_autocorrVDb_autocorrVEb_autocorr
FunktionAutokorrelationsfunktion
Syntax C/C++#include <VFstd.h>
void VF_autocorr( fVector Y, fVector X, ui size );
void VFb_autocorr( fVector Y, fVector X, ui size, fVector Buf );
C++ VecObj#include <OptiVec.h>
void vector<float>::autocorr( const vector<float>& X );
void vector<float>::b_autocorr( const vector<float>& X, vector<float>& Buf );
Pascal/Delphiuses VFstd;
procedure VF_autocorr( Y, X:fVector; size:UIntSize );
procedure VFb_autocorr( Y, X:fVector; size:UIntSize; Buf:fVector );
CUDA-Funktion C/C++#include <cudaVFstd.h>
int cudaVF_autocorr( fVector d_Y, fVector d_X, ui size );
void VFcu_autocorr( fVector h_Y, fVector h_X, ui size );
CUDA-Funktion Pascal/Delphiuses VFstd;
function cudaVF_autocorr( d_Y, d_X:fVector; size:UIntSize ): IntBool;
procedure VFcu_autocorr( h_Y, h_X:fVector; size:UIntSize );
BeschreibungDie Autokorrelationsfunktion (AKF) von X wird berechnet und in Y gespeichert. Dabei erhalten die Elemente Y0 bis Ysize/2−1 die AKF für 0 und für positive Verschiebungen; für negative Verschiebungen wird die AKF beginnend mit der am stärksten negativen Verschiebung in Ysize/2+1 bis Ysize−1 gespeichert. Da diese Funktion (wie alle auf der Fourier-Transformation basierenden Routinen) implizit von periodischen X, Y und Z ausgeht, ist die AKF für die stärkste positive Verschiebung identisch mit der AKF für die stärkste negative Verschiebung. Dieser Wert befindet sich im Element Ysize/2.
Um die AKF in normale Ordnung zu bringen, kann
VF_rotate( Y, Y, size, size/2 );
aufgerufen werden. Danach befindet sich der Nullpunkt an der Position size/2.

Ist X nicht periodisch, so sollten Randeffekte mit den bei VF_convolve beschriebenen Methoden vermieden werden.

Intern benötigt VF_autocorr zusätzlichen Pufferspeicher, der automatisch reserviert und wieder freigegeben wird. Bei wiederholten Aufrufen wäre dies ineffizient. Es wird empfohlen, für solche Fälle stattdessen VFb_autocorr zu verwenden. Die Größe von Buf muss dabei ≥ size sein. Außerdem muss Buf 128-bit (P8) bzw. 256-bit( P9) ausgerichtet sein. Um dies zu garantieren, sollte man nur Vektoren als Buf verwenden, die mit der VF_vector-Familie alloziert wurden.

FehlerbehandlungWenn size nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf VF_autocorr basiert) mit der Fehlermeldung "Size must be integer power of 2." und bricht das Programm ab.
Rückgabewertkeiner
QuerverweisVF_FFT,   VF_convolve,   VF_xcorr,   VF_spectrum

VectorLib Inhaltsverzeichnis  OptiVec Home