Ho bisogno di eseguire l'autocorrelazione di un array (vettore) ma ho difficoltà a trovare il modo corretto per farlo. Credo di aver bisogno del metodo "vDSP_conv" da Accelerate Framework, ma non posso seguire come installarlo correttamente. La cosa che mi distoglie di più è la necessità di 2 ingressi. Forse ho la funzione sbagliata, ma non sono riuscito a trovarne uno che funzionasse su un singolo vettore.Eseguire autocorrelazione con vDSP_conv da Apple Accelerate Framework
La documentazione può essere trovata here
copiati dal sito
vDSP_conv
esegue sia correlazione o la convoluzione su due vettori; singola precisione .
vuoto vDSP_conv (const float __vDSP_signal [], vDSP_Stride __vDSP_signalStride, float const __vDSP_filter [], vDSP_Stride __vDSP_strideFilter, float __vDSP_result [], vDSP_Stride __vDSP_strideResult, vDSP_Length __vDSP_lenResult, vDSP_Length __vDSP_lenFilter);
Parametri
__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.
Per un esempio, si supponga di disporre di un array di float x = [1.0, 2.0, 3.0, 4.0, 5.0]
. Come prenderei l'autocorrelazione di quello?
L'output dovrebbe essere qualcosa di simile a 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
Ho appena provato questo con il mio esempio. Ma emette dati leggermente errati. Che cosa sto facendo di sbagliato? x = da 1 a 5 e il risultato è la dimensione 9 (5 * 2 -1) vDSP_conv (x, 1, x, 1, result, 1, 9, 5); -> uscite -> 55.0, 40.0, 26.0, 14.0, 5.0, 0.0, 0.0, 0.0, 294.0 – MrHappyAsthma
Penso di aver fatto un errore, potrebbe essere necessario eseguire il pad x con gli zeri ... Non ho il mio Mac di fronte di me, ma sembra che l'input dovrebbe essere più lungo dell'output (che è a dir poco strano) – Rasman
Blah: P che puzza. Ill cercherò di giocarci. Se ti imbatti in un modo per risolverlo di sicuro, per favore pubblica: D – MrHappyAsthma