dsplib

Описание

Библиотека elcore50-dsplib содержит референсные реализации функций цифровой обработки сигналов, скалярных, векторных и матричных операций и оптимизированные реализации для архитектуры DSP ELcore-50 математических и матричных операций.

Форматы поддерживаемых данных оптимизированных реализаций: int16, int32, float, double.

API

Состоит из следующих заголовочных файлов:

  • elcore50-dsplib/asm_func.h — функции библиотеки.

  • elcore50-dsplib/reference.h — референсные функции.

Примечание

Для операций с фиксированной точкой числа записываются в int32, младшие 16 бит — дробная часть, старшие — целая. Порядок следования байтов little-endian.

Functions

void adds16(int16_t *src0, int16_t *src1, int16_t *dst, int32_t size)

Сумма элементов типа int16.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void adds32(int32_t *src0, int32_t *src1, int32_t *dst, int32_t size)

Сумма элементов типа int32.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void add_fl(float *src0, float *src1, float *dst, int32_t size)

Сумма элементов типа float.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void add_db(double *src0, double *src1, double *dst, int32_t size)

Сумма элементов типа double.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • dst – выходные данные

  • size – размер входных данных

int32_t dotprod(int16_t *src0, int16_t *src1, int32_t size)

Скалярное произведение векторов типа int16

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных данных

Результат:

Значение скалярного произведения

int64_t dotprod32(int32_t *src0, int32_t *src1, int32_t size)

Скалярное произведение векторов типа int32

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных данных

Результат:

Значение скалярного произведения

float dotprod_fl(float *src0, float *src1, int32_t size)

Скалярное произведение векторов типа float

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных данных

Результат:

Значение скалярного произведения

double dotprod_db(double *src0, double *src1, int32_t size)

Скалярное произведение векторов типа double

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных данных

Результат:

Значение скалярного произведения

int64_t vecsumsq(int16_t *src0, int32_t size)

Корень из суммы элементов вектора типа int16

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Корень из суммы элементов вектора

int64_t vecsumsq32(int32_t *src0, int32_t size)

Корень из суммы элементов вектора типа int32

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Корень из суммы элементов вектора

float vecsumsq_fl(float *src0, int32_t size)

Корень из суммы элементов вектора типа float

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Корень из суммы элементов вектора

double vecsumsq_db(double *src0, int32_t size)

Корень из суммы элементов вектора типа double

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Корень из суммы элементов вектора

void neg32(int32_t *src0, int32_t *dst, int32_t size)

Отрицание элементов вектора типа int32.

Параметры:
  • src0 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void neg16(int16_t *src0, int16_t *dst, int32_t size)

Отрицание элементов вектора типа int16.

Параметры:
  • src0 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void neg_fl(float *src0, float *dst, int32_t size)

Отрицание элементов вектора типа float.

Параметры:
  • src0 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void neg_db(double *src0, double *dst, int32_t size)

Отрицание элементов вектора типа double.

Параметры:
  • src0 – входные данные

  • dst – выходные данные

  • size – размер входных данных

void w_vec(int16_t *src0, int16_t *src1, int16_t w, int16_t *dst, int32_t size)

Сложение элементов вектора с взвешенными элементами другого вектора для типа int16.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • w – весовой коэффициент

  • dst – выходные данные

  • size – размер входных данных

void w_vec32(int32_t *src0, int32_t *src1, int32_t w, int32_t *dst, int32_t size)

Сложение элементов вектора с взвешенными элементами другого вектора для типа int32.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • w – весовой коэффициент

  • dst – выходные данные

  • size – размер входных данных

void w_vec_fl(float *src0, float *src1, float w, float *dst, int32_t size)

Сложение элементов вектора с взвешенными элементами другого вектора для типа float.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • w – весовой коэффициент

  • dst – выходные данные

  • size – размер входных данных

void w_vec_db(double *src0, double *src1, double w, double *dst, int32_t size)

Сложение элементов вектора с взвешенными элементами другого вектора для типа double.

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • w – весовой коэффициент

  • dst – выходные данные

  • size – размер входных данных

int32_t dotp_sqr(int32_t G, int16_t *src0, int16_t *src1, int32_t *r, int32_t size)

Подсчет суммы квадратов элементов второго вектора, вычисление скалярного произведения векторов типа int16

Параметры:
  • G – коэффициент, который суммируется с результатом суммы квадратов

  • src0 – входные данные

  • src1 – входные данные

  • r – скалярное произведение векторов

  • size – размер входных данных

Результат:

Сумма квадратов элементов второго вектора

int64_t dotp_sqr32(int64_t G, int32_t *src0, int32_t *src1, int64_t *r, int32_t size)

Подсчет суммы квадратов элементов второго вектора, вычисление скалярного произведения векторов типа int32

Параметры:
  • G – коэффициент, который суммируется с результатом суммы квадратов

  • src0 – входные данные

  • src1 – входные данные

  • r – скалярное произведение векторов

  • size – размер входных данных

Результат:

Сумма квадратов элементов второго вектора

float dotp_sqr_fl(float G, float *src0, float *src1, float *r, int32_t size)

Подсчет суммы квадратов элементов второго вектора, вычисление скалярного произведения векторов типа float

Параметры:
  • G – коэффициент, который суммируется с результатом суммы квадратов

  • src0 – входные данные

  • src1 – входные данные

  • r – скалярное произведение векторов

  • size – размер входных данных

Результат:

Сумма квадратов элементов второго вектора

double dotp_sqr_db(double G, double *src0, double *src1, double *r, int32_t size)

Подсчет суммы квадратов элементов второго вектора, вычисление скалярного произведения векторов типа double

Параметры:
  • G – коэффициент, который суммируется с результатом суммы квадратов

  • src0 – входные данные

  • src1 – входные данные

  • r – скалярное произведение векторов

  • size – размер входных данных

Результат:

Сумма квадратов элементов второго вектора

int16_t maxval(int16_t *src0, int32_t size)

Поиск значения максимального элемента в векторе типа int16

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

int32_t maxval32(int32_t *src0, int32_t size)

Поиск значения максимального элемента в векторе типа int32

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

float maxval_fl(float *src0, int32_t size)

Поиск значения максимального элемента в векторе типа float

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

double maxval_db(double *src0, int32_t size)

Поиск значения максимального элемента в векторе типа double

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

int16_t minval(int16_t *src0, int32_t size)

Поиск значения минимального элемента в векторе типа int16

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

int32_t minval32(int32_t *src0, int32_t size)

Поиск значения минимального элемента в векторе типа int32

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

float minval_fl(float *src0, int32_t size)

Поиск значения минимального элемента в векторе типа float

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

double minval_db(double *src0, int32_t size)

Поиск значения минимального элемента в векторе типа double

Параметры:
  • src0 – входные данные

  • size – размер входных данных

Результат:

Значение максимума

void mat_trans_scalar(int16_t *src0, int32_t rows, int32_t columns, int16_t *dst)

Транспонирование матрицы типы int16.

Параметры:
  • src0 – входные данные

  • rows – количество строк матрицы

  • columns – количество столбцов матрицы

  • dst – выходные данные

void mat_trans_scalar_fl(float *src0, int32_t rows, int32_t columns, float *dst)

Транспонирование матрицы типы float.

Параметры:
  • src0 – входные данные

  • rows – количество строк матрицы

  • columns – количество столбцов матрицы

  • dst – выходные данные

void mat_trans_scalar_s32(int32_t *src0, int32_t rows, int32_t columns, int32_t *dst)

Транспонирование матрицы типы int32.

Параметры:
  • src0 – входные данные

  • rows – количество строк матрицы

  • columns – количество столбцов матрицы

  • dst – выходные данные

void mat_trans_scalar_db(double *src0, int32_t rows, int32_t columns, double *dst)

Транспонирование матрицы типы double.

Параметры:
  • src0 – входные данные

  • rows – количество строк матрицы

  • columns – количество столбцов матрицы

  • dst – выходные данные

void mat_mul(int16_t *src0, int32_t rows0, int32_t columns0, int16_t *src1, int32_t columns1, int16_t *dst, int32_t shift)

Умножение матриц типа int16.

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные

  • shift – сдвиг результата

void mat_mul32(int32_t *src0, int32_t rows0, int32_t columns0, int32_t *src1, int32_t columns1, int32_t *dst, int32_t shift)

Умножение матриц типа int32.

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные

  • shift – сдвиг результата

void mat_mul_fl(float *src0, int32_t rows0, int32_t columns0, float *src1, int32_t columns1, float *dst)

Умножение матриц типа float.

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные

void mat_mul_db(double *src0, int32_t rows0, int32_t columns0, double *src1, int32_t columns1, double *dst)

Умножение матриц типа double.

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные

void mat_mul_cplx(int16_t *src0, int32_t rows0, int32_t columns0, int16_t *src1, int32_t columns1, int16_t *dst, int32_t shift)

Комплексное умножение матриц типа int16 (cint16)

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные референсной функции

  • shift – сдвиг результата

void mat_mul_cplx32(int32_t *src0, int32_t rows0, int32_t columns0, int32_t *src1, int32_t columns1, int32_t *dst, int32_t shift)

Комплексное умножение матриц типа int32 (cint32)

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные референсной функции

  • shift – сдвиг результата

void mat_mul_cplx_fl(float *src0, int32_t rows0, int32_t columns0, float *src1, int32_t columns1, float *dst)

Комплексное умножение матриц типа float (cfloat)

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные референсной функции

void mat_mul_cplx_db(double *src0, int32_t rows0, int32_t columns0, double *src1, int32_t columns1, double *dst)

Комплексное умножение матриц типа double (cdouble)

Параметры:
  • src0 – входные данные

  • rows0 – количество строк первой матрицы

  • columns0 – количество столбцов первой матрицы

  • src1 – входные данные

  • columns1 – количество столбцов второй матрицы

  • dst – выходные данные референсной функции

void recip16(int16_t *x, int16_t *rfrac, int16_t *rexp, int32_t size)

Обратная величина для чисел с фиксированной точкой типа int16.

Параметры:
  • x – входные данные

  • rfrac – выходные данные, нормализованное значение

  • rexp – выходные данные, значение степени экспоненты

  • size – размер входных массивов

void mul16i16f(int32_t *src0, int32_t *src1, int32_t *dst, int32_t size)

Умножение чисел с фиксированной точкой (i=16,f=16)

Параметры:
  • src0 – входные данные первого массива

  • src1 – входные данные второго массива

  • dst – выходные данные массива

  • size – количество элементов входных массивов

void add_cplx32(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Сложение комплексных чисел

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных массивов

  • dst – выходные данные

void acc_cplx32(int32_t *dst, int32_t *src0, int32_t size)

Комплексное векторное сложение с накоплением

Параметры:
  • dst – входные/выходные данные

  • src0 – входные данные

  • size – размер входных массивов

void sub_cplx32(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Комплексное векторное вычитание

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных массивов

  • dst – выходные данные

void mul_cplx32(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Комплексное векторное умножение

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных массивов

  • dst – выходные данные

void mul_cplx16_re_im(int16_t *src0, int16_t *src1, int32_t size, int16_t *dst)

Поэлементное умножение двух векторов комплексных чисел, порядок следования Re, Im для типа int16_t.

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_cplx32_re_im(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Поэлементное умножение двух векторов комплексных чисел, порядок следования Re, Im для типа int32_t.

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_cplx_fl_re_im(float *src0, float *src1, int32_t size, float *dst)

Поэлементное умножение двух векторов комплексных чисел, порядок следования Re, Im для типа float.

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_cplx_db_re_im(double *src0, double *src1, int32_t size, double *dst)

Поэлементное умножение двух векторов комплексных чисел, порядок следования Re, Im для типа double.

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_conj_cplx16_re_im(int16_t *src0, int16_t *src1, int32_t size, int16_t *dst)

Поэлементное умножение двух векторов комплексных чисел c комплексным сопряжением второго вектора, порядок следования Re, Im для типа int16_t

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_conj_cplx32_re_im(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Поэлементное умножение двух векторов комплексных чисел c комплексным сопряжением второго вектора, порядок следования Re, Im для типа int32_t

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_conj_cplx_fl_re_im(float *src0, float *src1, int32_t size, float *dst)

Поэлементное умножение двух векторов комплексных чисел c комплексным сопряжением второго вектора, порядок следования Re, Im для типа float

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_conj_cplx_db_re_im(double *src0, double *src1, int32_t size, double *dst)

Поэлементное умножение двух векторов комплексных чисел c комплексным сопряжением второго вектора/ порядок следования Re, Im для типа double

Параметры:
  • src0 – входные данные для первого массива

  • src1 – входные данные для второго массива

  • size – количество комплексных элементов входных массивов

  • dst – выходные данные

void mul_conj_cplx32(int32_t *src0, int32_t *src1, int32_t size, int32_t *dst)

Поэлементное умножение двух векторов комплексных чисел c комплексным сопряжением второго вектора

Параметры:
  • src0 – входные данные

  • src1 – входные данные

  • size – размер входных массивов

  • dst – выходные данные

void add_rconst_cplx32(int32_t *dst, int32_t size, int32_t value)

Добавление числа к каждому элементу вектора

Параметры:
  • dst – входные данные

  • size – размер входных массивов

  • value – коэффициент

void mul_rconst_cplx32(int32_t *dst, int32_t size, int32_t value)

Умножение вектора на реальное число

Параметры:
  • dst – входные данные

  • size – размер входных массивов

  • value – коэффициент

void scale_cplx32(int32_t *dst, int32_t size, int32_t value)

Масштабирование вектора на степень двойки

Параметры:
  • dst – входные данные

  • size – размер входных массивов

  • value – коэффициент

void div_rconst_cplx32(int32_t *dst, int32_t size, int32_t value)

Деление вектора на реальное число

Параметры:
  • dst – входные данные

  • size – размер входных массивов

  • value – коэффициент

void sum_cplx32(int32_t *dst, int32_t size, int32_t *res)

Сумма всех элементов вектора

Параметры:
  • dst – входные данные

  • size – размер входных массивов

  • res – указатель на результат

void abs_cplx32(int32_t *src, int32_t size, int32_t *res)

Расчет модуля

Параметры:
  • src – входные данные

  • size – размер входных массивов

  • res – указатель на результат

void conv_cplx32(int32_t *src0, int32_t *src1, int32_t size, int32_t size_ker, int32_t *dst)

Вычисление свертки для одномерного массива, тип обработки границ valid, размер результата input_size - ker_size + 1.

Параметры:
  • src0 – входные данные

  • src1 – входные данные ядра

  • size – размер входного массива

  • size_ker – размер ядра свертки

  • dst – указатель на результат

void conv_cplx32_re_im(int32_t *src0, int32_t *src1, int32_t size, int32_t size_ker, int32_t *dst)

Вычисление свертки для одномерного массива, тип обработки границ valid, размер результата input_size - ker_size

  • 1. Порядок следования Re, Im. Тип данных int32

Параметры:
  • src0 – входные данные

  • src1 – входные данные ядра

  • size – размер входного массива

  • size_ker – размер ядра свертки

  • dst – указатель на результат

void conv_cplx_fl_re_im(float *src0, float *src1, int32_t size, int32_t size_ker, float *dst)

Вычисление свертки для одномерного массива, тип обработки границ valid, размер результата input_size - ker_size

  • 1. Порядок следования Re, Im. Тип данных float

Параметры:
  • src0 – входные данные

  • src1 – входные данные ядра

  • size – размер входного массива

  • size_ker – размер ядра свертки

  • dst – указатель на результат

void muls16(const int16_t *src0, const int16_t *src1, int16_t *dst, const int32_t size)

Поэлементное перемножение двух массивов типа int16.

Параметры:
  • src0 – входные данные первого массива

  • src1 – входные данные второго массива

  • dst – выходные данные массива

  • size – количество элементов выходного массива

void muls32(const int32_t *src0, const int32_t *src1, int32_t *dst, const int32_t size)

Поэлементное перемножение двух массивов типа int32.

Параметры:
  • src0 – входные данные первого массива

  • src1 – входные данные второго массива

  • dst – выходные данные массива

  • size – количество элементов выходного массива

void mul_fl(const float *src0, const float *src1, float *dst, const int32_t size)

Поэлементное перемножение двух массивов типа float.

Параметры:
  • src0 – входные данные первого массива

  • src1 – входные данные второго массива

  • dst – выходные данные массива

  • size – количество элементов выходного массива

void mul_db(const double *src0, const double *src1, double *dst, const int32_t size)

Поэлементное перемножение двух массивов типа double.

Параметры:
  • src0 – входные данные первого массива

  • src1 – входные данные второго массива

  • dst – выходные данные массива

  • size – количество элементов выходного массива