MF_autocorr MD_autocorr ME_autocorr
MFb_autocorr MDb_autocorr MEb_autocorr
FunktionRäumliche Autokorrelations-Funktion
Syntax C/C++#include <MFstd.h>
void MF_autocorr( fMatrix Y, fMatrix X, ui ht, ui len ); void MFb_autocorr( fMatrix Y, fMatrix X, ui ht, ui len, fVector Buf );
C++ MatObj#include <OptiVec.h>
void matrix<T>::autocorr( const matrix<T>& MX); void matrix<T>::b_autocorr( const matrix<T>& MX, vector<T>& Buf);
Pascal/Delphiuses MFstd;
procedure MF_autocorr( MY, MX:fMatrix; ht, len:UIntSize ); procedure MFb_autocorr( MY, MX:fMatrix; ht, len:UIntSize; Buf:fVector );
CUDA-Funktion C/C++#include <cudaMFstd.h>
int cudaMF_autocorr( fMatrix d_Y, fMatrix d_X, ui ht, ui len );
void MFcu_autocorr( fMatrix h_Y, fMatrix h_X, ui ht, ui len );
CUDA-Funktion Pascal/Delphiuses MFstd;
function cudaMF_autocorr( d_MY, d_MX:fMatrix; ht, len:UIntSize ): IntBool;
procedure MFcu_autocorr( h_MY, h_MX:fMatrix; ht, len:UIntSize );
BeschreibungDie räumliche Autokorrelations-Funktion (entl.: spatial autocorrelation function, SACF) von MX wird berechnet und in MY gespeichert. Dabei erhalten die Zeilen-Elemente MYi,0 bis MYi,len/2-1 die SACF für 0 und positive Verschiebungen in x-Richtung. Beginnend mit der größten negativen Verschiebung in MYi,len/2+1 enthalten die Elemente bis MYi,len-1 die SACF für negative Verschiebungen. Da diese Funktion MX als periodisch annimmt, ist die SACF für die größte positive Verschiebung gleich derjenigen für die größte negative Verschiebung. Dieses Element findet sich als Yi,len/2.
In ähnlicher Weise enthalten die Spalten-Elemente MY0,j bis MYlen/2-1,j die SACF für 0 und positive y-Verschiebungen. Beginnend mit der größten negativen Verschiebung in MYlen/2+1,j enthalten die Elemente bis MYlen-1,j die SACF für negative Verschiebungen.
Um die SACF in normale Reihenfolge zu bekommen, kann man die folgende Sequenz aufrufen:
MF_Rows_rotate( MY, ht, len, len/2 );
MF_Cols_rotate( MY, ht, len, ht/2 );

Danach befindet sich der Nullpunkt bei MYht/2,len/2.
Falls MX nicht-periodisch ist, sollten Randeffekte mit den bei MF_convolve beschriebenen Methoden vermieden werden.
Sowohl ht als auch len müssen ganzzahlige Potenzen von 2 sein.

Intern benötigt MF_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 MFb_autocorr zu verwenden. Die Größe von Buf muss dabei für C/C++ >= ht*(len+2) sein, fü Pascal/Delphi >= ht*len.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.

FehlerbehandlungFalls entweder len oder ht nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf MF_autocorr basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
QuerverweisMF_FFT,   MF_xcorr,   MF_convolve,   VF_autocorr,   Kap. 12

MatrixLib Inhaltsverzeichnis  OptiVec Home