MF_spectrum MD_spectrum ME_spectrum
MFb_spectrum MDb_spectrum MEb_spectrum
MFb_spectrum_sizeBuf MDb_spectrum_sizeBuf MEb_spectrum_sizeBuf
FunktionRaumfrequenz-Spektrum
Syntax C/C++#include <MFstd.h>
void MF_spectrum( fMatrix MSpec, ui htSpec, ui lenSpec, fMatrix MX, ui htX, ui lenX, fMatrix Win );
void MFb_spectrum( fMatrix MSpec, ui htSpec, ui lenSpec, fMatrix MX, ui htX, ui lenX, fMatrix Win, fVector Buf );
ui MFb_spectrum_sizeBuf( ui htSpec, ui lenSpec, ui htX, ui lenX );
C++ MatObj#include <OptiVec.h>
void matrix<T>::spectrum( const matrix<T>& MX, const matrix<T>& MWin );
void matrix<T>::b_spectrum( const matrix<T>& MX, const matrix<T>& MWin, vector<T> Buf );
Pascal/Delphiuses MFstd;
procedure MF_spectrum( MSpec:fMatrix; htSpec, lenSpec:UIntSize; MX:fMatrix; htX, lenX:UIntSize; MWin:fMatrix );
procedure MFb_spectrum( MSpec:fMatrix; htSpec, lenSpec:UIntSize; MX:fMatrix; htX, lenX:UIntSize; MWin:fMatrix; Buf:fVector );
function MFb_spectrum_sizeBuf( htSpec, lenSpec, htX, lenX:UIntSize ): UIntSize;
CUDA-Funktion C/C++#include <cudaMFstd.h>
int cudaMF_spectrum( fMatrix d_Spec, ui htSpec, ui lenSpec, fMatrix d_X, ui htX, ui lenX, fMatrix d_Win );
void MFcu_spectrum( fMatrix h_Spec, ui htSpec, ui lenSpec, fMatrix h_X, ui htX, ui lenX, fMatrix h_Win );
CUDA-Funktion Pascal/Delphiuses MFstd;
function cudaMF_spectrum( d_MSpec:fMatrix; htSpec, lenSpec:UIntSize; d_MX:fMatrix; htX, lenX:UIntSize; d_MWin:fMatrix ): IntBool;

procedure MFcu_spectrum( h_MSpec:fMatrix; htSpec, lenSpec:UIntSize; h_MX:fMatrix; htX, lenX:UIntSize; h_MWin:fMatrix );
BeschreibungDas mittlere Amplitudenquadrat des Raumfrequenz-Spektrums der in MX enthaltenen Daten wird berechnet und in MSpc gespeichert. Intern wird MX in überlappende Segmente unterteilt, ähnlich wie für den eindimensionalen Fall bei VF_spectrum beschrieben. MWin ist ein Fenster, das auf die Datensegmente angewendet wird. OptiVec bietet drei Funktionen zur Erzeugung passender Fenster: MF_Welch,   MF_Parzen und MF_Hann. Ein Rechteck-Fenster erhält man durch Setzen aller Matrix-Elemente auf den Wert 1.0 (MF_equC( MWin, htWin, lenWin, 1.0 ); ), dies wird aber nicht empfohlen.
htSpec und lenSpec müssen ganzzahlige Potenzen von 2 sein. Außerdem müssen folgende Bedingungen erfüllt sein:
htX >= n*htSpec, lenX >= n*lenSpec, htWin = htSpec, lenWin = lenSpec.

Intern benötigt MF_spectrum 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_spectrum zu verwenden. Die notwendige Größe von Buf kann dabei durch Aufruf der Funktion MFb_spectrum_sizeBuf ermittelt werden. Sie wird nie mehr als 4*htX*lenX betragen. 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 htSpec oder lenSpec keine ganzzahlige Potenz von 2 ist, meldet sich VF_FFT (worauf MF_spectrum basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
QuerverweisMF_FFT,   MF_convolve,   MF_autocorr,   MF_xcorr,   MF_filter,   Kap. 12

MatrixLib Inhaltsverzeichnis  OptiVec Home