Мне нужно выполнить автокорреляцию массива (вектора), но я не могу найти правильный способ сделать это. Я считаю, что мне нужен метод «vDSP_conv» из Accelerate Framework, но я не могу понять, как его успешно настроить. Больше всего меня смущает необходимость двух входов. Возможно, у меня не та функция, но я не смог найти ни одной, работающей с одним вектором.
Документацию можно найти здесь
Скопировано с сайта
vDSP_conv
Выполняет корреляцию или свертку двух векторов; Один точность.
void 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 );
Параметры
__vDSP_signal
Входной вектор A. Длина этого вектора должна быть не менее __vDSP_lenResult + __vDSP_lenFilter - 1.
__vDSP_signalStride
Шаг через __vDSP_signal.
__vDSP_filter
Входной вектор B.
__vDSP_strideFilter
Шаг через __vDSP_filter.
__vDSP_result
Выходной вектор C.
__vDSP_strideResult
Шаг до __vDSP_result.
__vDSP_lenResult
Длина __vDSP_result.
__vDSP_lenFilter
Длина __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] // сгенерировано с помощью функции Matlab xcorr(x)