MF_autocorr
| MD_autocorr |
ME_autocorr |
MFb_autocorr
| MDb_autocorr |
MEb_autocorr |
|
Funktion | Rä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/Delphi | uses 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/Delphi | uses MFstd;
function cudaMF_autocorr( d_MY, d_MX:fMatrix; ht, len:UIntSize ): IntBool;
procedure MFcu_autocorr( h_MY, h_MX:fMatrix; ht, len:UIntSize );
|
|
Beschreibung | Die 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. |
|
Fehlerbehandlung | Falls 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. |
|
|