Ich muss die Autokorrelation eines Arrays (Vektor) durchführen, aber ich habe Probleme bei der Suche nach dem richtigen Weg. Ich glaube, dass ich die Methode "vDSP_conv" aus dem Accelerate Framework brauche, aber ich kann nicht folgen, wie man es erfolgreich einrichtet. Das Ding, das mich am meisten abschreckt, ist die Notwendigkeit von 2 Eingängen. Vielleicht habe ich die falsche Funktion, aber ich konnte keine finden, die auf einem einzelnen Vektor operierte.Führen Sie Autokorrelation mit vDSP_conv von Apple Accelerate Framework
Die Dokumentation entweder here
kopiert von der Website
vDSP_conv
Führt Korrelation oder Faltung auf zwei Vektoren gefunden werden; single Präzision.
Hohlraum vDSP_conv (const float __vDSP_signal [], vDSP_Stride __vDSP_signalStride, const float __vDSP_filter [], vDSP_Stride __vDSP_strideFilter, float __vDSP_result [], vDSP_Stride __vDSP_strideResult, vDSP_Length __vDSP_lenResult, vDSP_Length __vDSP_lenFilter);
Parameter
__vDSP_signal
Input vector A. The length of this vector must be at least __vDSP_lenResult + __vDSP_lenFilter - 1.
__vDSP_signalStride
The stride through __vDSP_signal.
__vDSP_filter
Input vector B.
__vDSP_strideFilter
The stride through __vDSP_filter.
__vDSP_result
Output vector C.
__vDSP_strideResult
The stride through __vDSP_result.
__vDSP_lenResult
The length of __vDSP_result.
__vDSP_lenFilter
The length of __vDSP_filter.
Nehmen wir zum Beispiel an, Sie haben ein Array von float x = [1.0, 2.0, 3.0, 4.0, 5.0]
. Wie würde ich die Autokorrelation davon nehmen?
Der Ausgang etwas ähnliches wie float y = [5.0, 14.0, 26.0, 40.0, 55.0, 40.0, 26.0, 14.0, 5.0] //generated using Matlab's xcorr(x) function
sein sollte
Ich habe gerade versucht, dies mit meinem Beispiel. Aber es gibt etwas falsche Daten aus. Was mache ich falsch? x = 1 bis 5 und Ergebnis ist Größe 9 (5 · 2 -1) vDSP_conv (x, 1, x, 1, Ergebnis, 1, 9, 5); -> outputs -> 55.0, 40.0, 26.0, 14.0, 5.0, 0.0, 0.0, 0.0, 294.0 – MrHappyAsthma
Ich denke, ich habe einen Fehler gemacht, müssen Sie möglicherweise x mit Nullen auffüllen ... Ich habe meinen Mac nicht vor von mir, aber es scheint, dass die Eingabe länger sein sollte als die Ausgabe (was seltsam ist, um es am wenigsten zu sagen) – Rasman
Blah: P Das stinkt. Ich werde versuchen, damit herumzuspielen. Wenn Sie einen Weg finden, um es sicher zu beheben, dann bitte posten: D – MrHappyAsthma