MF_filter MD_filter ME_filter
MCF_filter MCD_filter MCE_filter
MFb_filter MDb_filter MEb_filter
MCFb_filter MCDb_filter MCEb_filter
FunktionRaumfrequenz-Filterung
Syntax C/C++#include <MFstd.h>
void MF_filter( fMatrix Y, fMatrix X, fMatrix Flt, ui ht, ui len );
void MFb_filter( fMatrix Y, fMatrix X, fMatrix Flt, ui ht, ui len, fVector Buf );
C++ MatObj#include <OptiVec.h>
void matrix<T>::filter( const matrix<T>& MX, const matrix<T>& MFlt );
void matrix<T>::b_filter( const matrix<T>& MX, const matrix<T>& MFlt, vector<T>& Buf );
Pascal/Delphiuses MFstd;
procedure MF_filter( MY, MX, MFlt:fMatrix; ht, len:UIntSize );
procedure MFb_filter( MY, MX, MFlt:fMatrix; ht, len:UIntSize; Buf:fVector );
CUDA-Funktion C/C++#include <cudaMFstd.h>
int cudaMF_filter( fMatrix d_MY, fMatrix d_MX, fMatrix d_MFlt, ui ht, ui len );
void MFcu_filter( fMatrix h_MY, fMatrix h_MX, fMatrix h_MFlt, ui ht, ui len );
CUDA-Funktion Pascal/Delphiuses MFstd;
function cudaMF_filter( d_MY, d_MX, d_MFlt:fMatrix; ht, len:UIntSize ): IntBool;
procedure MFcu_filter( h_MY, h_MX, h_MFlt:fMatrix; ht, len:UIntSize );
BeschreibungDer Raumfrequenz-Filer MFlt wird auf die Matrix X angewandt. Intern geschieht dies durch Multiplikation der Fourier-Transformierten von MX mit MFlt und Rücktransformation des Produktes.

Komplexe Versionen: MX, MY und der Filter MFlt sind komplexe Matrizen.
Reelle Versionen: MX und MY sind reell. MFlt muss in dem gepackt-komplexen Format vorliegen, das man durch Fourier-Transformation einer reellen Matrix mit MF_FFT oder durch Aufruf von MF_convolve erhält. Siehe MF_FFT bezüglich des gepackt-komplexen Formates.

Falls MX nicht-periodisch ist, kann das Filter-Ergebnis durch Randeffekte beeinträchtigt sein. Siehe VF_convolve bezüglich der Vermeidung von Randeffekten. Wie dort für Vektoren beschrieben, sollte auch die Matrix X eventuell in eine größere Matrix eingebettet oder mögliche lineare Trends in beiden Dimensionen beseitigt werden.

Intern benötigt MF_filter 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_filter zu verwenden. Für die Größe von Buf gilt dabei:
C/C++, reell:sizeof(Buf) >= ht*(len+4)
C/C++, komplex:sizeof(Buf) >= ht*len
Pascal/Delphi, reell oder komplex:  sizeof(Buf) >= 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_filter basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
QuerverweisMF_FFT,   MF_convolve,   Kap. 12,   Kap. 4.8 of http://www.optivec.de/vecfuncs/

MatrixLib Inhaltsverzeichnis  OptiVec Home