Выполнение автокорреляции с помощью vDSP_conv из Apple Accelerate Framework

Мне нужно выполнить автокорреляцию массива (вектора), но я не могу найти правильный способ сделать это. Я считаю, что мне нужен метод «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)

7
задан Yotam Omer 30 June 2013 в 17:07
поделиться