环境配置
1. CUBEMX 中勾选生成工程时添加所有库
2. Keil 中宏定义:,__FPU_PRESENT=1,__TARGET_FPU_VFP,ARM_MATH_CM4,__CC_ARM
3. Keil 中添加DSP库位置:../Drivers/CMSIS/DSP/Include
4. 添加lib文件的lf后缀到工程的core文件夹下
5. 函数使用时包含头文件:#include "arm_math.h"
6. 编译工程
函数使用
官方介绍:地址在keil的包里面
构建矩阵
介绍:
typedef struct
{
uint16_t numRows; // 矩阵行数.
uint16_t numCols; // 矩阵列数
float32_t *pData; // 矩阵地址
} arm_matrix_instance_f32
使用:
1. 创建数据源数组,申明矩阵类型
float32_t pDataA[9] = {1.1f, 1.1f, 2.1f, 2.1f, 3.1f, 3.1f, 4.1f, 4.1f, 5.1f};
arm_matrix_instance_f32 pSrcA;
2. 使用函数转换
arm_mat_init_f32(&pSrcA, 3,3, pDataA);
3. 读取数据
pSrcA.pData[0]
矩阵打印
void M_dump(const arm_matrix_instance_f32 *data)
{
int num = data->numCols * data->numRows ;
int i, j, index;
for(i=0;i<data->numRows ; i++)
{
for(j = 0; j< data->numCols ;j++)
{
index = i* data->numCols + j;
printf("%lf, ",data->pData[index]);
}
printf("\n");
}
}
矩阵转置
介绍:
arm_status arm_mat_trans_f32 (
const arm_matrix_instance_f32 *pSrc,
arm_matrix_instance_f32 *pDst)
arm_status arm_mat_trans_f64 (
const arm_matrix_instance_f64 *pSrc,
arm_matrix_instance_f64 *pDst)
矩阵加、减法
介绍:
C = A + B
C = A - B
arm_status arm_mat_add_f32(
const arm_matrix_instance_f32 * pSrcA,
const arm_matrix_instance_f32 * pSrcB,
arm_matrix_instance_f32 * pDst)
使用:
1. 创建A、B、C矩阵
2. 调用函数 arm_mat_add_f32(&A, &B, &C) 或者 arm_mat_sub_f32(&A, &B, &C);
3. 从C中获得结果
矩阵与矩阵的乘法
arm_status arm_mat_mult_f16 (
const arm_matrix_instance_f16 * pSrcA,
const arm_matrix_instance_f16 * pSrcB,
arm_matrix_instance_f16 * pDst
)
arm_status arm_mat_mult_f32 (
const arm_matrix_instance_f32 * pSrcA,
const arm_matrix_instance_f32 * pSrcB,
arm_matrix_instance_f32 * pDst
)
arm_status arm_mat_mult_f64 (
const arm_matrix_instance_f64 * pSrcA,
const arm_matrix_instance_f64 * pSrcB,
arm_matrix_instance_f64 * pDst
)
矩阵与数字的乘法
arm_status arm_mat_scale_f16 (
const arm_matrix_instance_f16 * pSrc,
float16_t scale,
arm_matrix_instance_f16 * pDst
)
arm_status arm_mat_scale_f32 (
const arm_matrix_instance_f32 * pSrc,
float32_t scale,
arm_matrix_instance_f32 * pDst
)
向量乘法
void arm_mat_vec_mult_f16 (
const arm_matrix_instance_f16 *pSrcMat,
const float16_t *pVec,
float16_t *pDst)
void arm_mat_vec_mult_f32 (
const arm_matrix_instance_f32 *pSrcMat,
const float32_t *pVec,
float32_t *pDst)
矩阵求逆
介绍:
1. 32位浮点矩阵求逆
arm_status arm_mat_inverse_f32(
const arm_matrix_instance_f32 * pSrc,
arm_matrix_instance_f32 * pDst)
2. 64位浮点矩阵求逆
arm_status arm_mat_inverse_f64(
const arm_matrix_instance_f64 * pSrc,
arm_matrix_instance_f64 * pDst)
|