我需要執行數組(矢量)的自相關,但我無法找到正確的方法來執行此操作。我相信我需要加速框架中的「vDSP_conv」方法,但我無法按照如何成功設置它。拋出我最多的東西是需要2個輸入。也許我有錯誤的功能,但我找不到在單個矢量上運行的功能。使用Apple Accelerate Framework中的vDSP_conv執行自相關
的文檔可以發現here
從站點複製
vDSP_conv
執行任一上的兩個向量的相關性或卷積;單精度 。
空隙vDSP_conv(常量浮子__vDSP_signal [],vDSP_Stride __vDSP_signalStride,常量浮子__vDSP_filter [],vDSP_Stride __vDSP_strideFilter,浮__vDSP_result [],vDSP_Stride __vDSP_strideResult,vDSP_Length __vDSP_lenResult,vDSP_Length __vDSP_lenFilter);
參數
__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.
舉一個例子,假設你有一個數組float x = [1.0, 2.0, 3.0, 4.0, 5.0]
。我將如何採取這種自相關?
輸出應該類似於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
我只是想這跟我的例子。但是它輸出的數據有點不對。我究竟做錯了什麼? x = 1至5並且結果是大小9(5 * 2 -1)vDSP_conv(x,1,x,1,result,1,9,5); - >輸出 - > 55.0,40.0,26.0,14.0,5.0,0.0,0.0,0.0,294.0 – MrHappyAsthma
我想我犯了一個錯誤,你可能需要用零填充x ...我前面沒有我的Mac的,但似乎輸入應該是更長的輸出(這是很奇怪的說至少) – Rasman
布拉赫:P這太臭了。我試着亂搞一下。如果你遇到一種方法來確定它,那麼請發帖:D – MrHappyAsthma