STM32F4的DSP库

环境配置

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)



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰灰的大灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值