' schrieb:meine Exportfunktion lautet:
__declspec(dllexport) void correl(float data1[], float data2[], unsigned long n, float ans[]);
n ist die Anzahl der Samples.
data1 bekommt ein Sinussignal (n Samples).
data2 bekommt ein Rechtecksignal (n Samples).
ans liefert die Kreuzkorrelation beider Signale (2*n Samples).
Das scheint mir ziemlich eindeutig. Die Funktion hat 4 Parameter. Parameter 1 und 2 sind Arrays die Du in LabVIEW generierst und an die Funktion als Array C Datenpointer von Typ float (LabVIEW Single Precision Float) übergibts. Parameter 3 ist ganz einfach ein 32 Bit unsigned Integer der als Value übergeben wird. Der letzte Parameter ist auch wieder dasselbe als die ersten zwei. Hier musst Du aber in LabVIEW mit Initialize Array ein Array von 2 * n Elementen erzeugen und an das Terminal verbinden.
Das ist alles.
Übrigens hat LabVIEW auch Korrelationsfunktionen die ebenfalls in einer DLL implementiert sind. Dort wird aber nicht einfach der Code aus Numerical-Recipes für C genommen sondern nach den Funktionen der Intel Math Kernel Library gelinkt. Diese Library ist ausführlicher (mehr Funktionen), genauer und schneller (spezifische Intel CPU Optimalisierungen werden benützt) als Numerical-Recipes für C und in gewissen Fällen auch korrekter. Die Numerical-Recipes für C Routinen sind grundsätzlich nicht schlecht aber das Ziel war nicht um die Beste numerische Library zu machen sondern zu zeigen wie man numerische Berechnungen in C grundsätzlich auf eine elegante und gut lesbare Weise machen kann. Die Detailimplementierung von speziellen Randbedingungen und Optimalisierungen ist diesem Ziel aber oft entgegengesetzt.
Rolf Kalbermatter