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 – количество элементов выходного массива