Определение функции:
arm_status arm_sqrt_q15(q15_t in, q15_t * pOut)
q15 - формат с фиксированной точкой 1.15 в котором 0 представлен как 0х0000, а 1 представлена как 0х7FFF. Это значит, что например 1/2 будет представлена в формате 0х4000, а 1/4 как 0х2000. Функция возвращает статус ARM_MATH_SUCCESS или ARM_MATH_ARGUMENT_ERROR. Результат функция возвращает по ссылке pOut. Результат представлен также в формате q15. Например
arm_sqrt_q15(0x1000,&out);
0х1000 является представлением в формате q15 числа 1/8 или 0.125. Корень квадратный sqrt(0.125)=0.3536. Функция дает результат 0х2D42 = 11586/2^15 = 0,3536. Время выполнения функции для 32F103 @72MHz - 244 такта (3,39 mks).
Аналогичным образом используется и более точная функция:
arm_sqrt_q31(q31_t in, q31_t * pOut);
Ее время выполнения функции для 32F103 @72MHz - 286 тактов (3,97 mks).
Для плавающей точки:
arm_sqrt_f32(float32_t in, float32_t * pOut);
Время выполнения функции для 32F103 @72MHz - 544 такта (7,56 mks).
Указанное время выполнения функций были определены для версии V1.4.4 библиотеки CMSIS DSP (Date: 12. March 2014), которая идентична предыдущим версиям V1.4.3, V1.4.2, и V1.4.1.
Для справки: при использовании стандартной библиотеки Си math.h для различных типов переменных получим примерно такие (в зависимости от аргумента) времена выполнения функций в тактах
float sqrtf(float) ~ 575
double sqrt(double) ~ 2640
arm_status arm_sqrt_q15(q15_t in, q15_t * pOut)
q15 - формат с фиксированной точкой 1.15 в котором 0 представлен как 0х0000, а 1 представлена как 0х7FFF. Это значит, что например 1/2 будет представлена в формате 0х4000, а 1/4 как 0х2000. Функция возвращает статус ARM_MATH_SUCCESS или ARM_MATH_ARGUMENT_ERROR. Результат функция возвращает по ссылке pOut. Результат представлен также в формате q15. Например
arm_sqrt_q15(0x1000,&out);
0х1000 является представлением в формате q15 числа 1/8 или 0.125. Корень квадратный sqrt(0.125)=0.3536. Функция дает результат 0х2D42 = 11586/2^15 = 0,3536. Время выполнения функции для 32F103 @72MHz - 244 такта (3,39 mks).
Аналогичным образом используется и более точная функция:
arm_sqrt_q31(q31_t in, q31_t * pOut);
Ее время выполнения функции для 32F103 @72MHz - 286 тактов (3,97 mks).
Для плавающей точки:
arm_sqrt_f32(float32_t in, float32_t * pOut);
Время выполнения функции для 32F103 @72MHz - 544 такта (7,56 mks).
Указанное время выполнения функций были определены для версии V1.4.4 библиотеки CMSIS DSP (Date: 12. March 2014), которая идентична предыдущим версиям V1.4.3, V1.4.2, и V1.4.1.
Для справки: при использовании стандартной библиотеки Си math.h для различных типов переменных получим примерно такие (в зависимости от аргумента) времена выполнения функций в тактах
float sqrtf(float) ~ 575
double sqrt(double) ~ 2640
Комментариев нет:
Отправить комментарий