CMSIS-DSP lib 矩阵运算示例和源码

这篇具有很好参考价值的文章主要介绍了CMSIS-DSP lib 矩阵运算示例和源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Matrix interface

Matrix Initialization

初始化底层矩阵数据结构。 这些函数设置矩阵数据结构的 numRows、numCols 和 pData 字段。

/**
   @brief 浮点矩阵初始化。
   @param[in,out] S 指向浮点矩阵结构的一个实例
   @param[in] nRows 矩阵中的行数
   @param[in] nColumns 矩阵中的列数
   @param[in] pData 指向矩阵数据数组
   @return 无
*/

void 	arm_mat_init_f16 (arm_matrix_instance_f16 *S, uint16_t nRows, uint16_t nColumns, float16_t *pData)
 
void 	arm_mat_init_f32 (arm_matrix_instance_f32 *S, uint16_t nRows, uint16_t nColumns, float32_t *pData)
 
void 	arm_mat_init_q15 (arm_matrix_instance_q15 *S, uint16_t nRows, uint16_t nColumns, q15_t *pData)
 
void 	arm_mat_init_q31 (arm_matrix_instance_q31 *S, uint16_t nRows, uint16_t nColumns, q31_t *pData)

Matrix Addition

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
 @brief         Floating-point matrix addition.
 @param[in]     pSrcA      指向第一个输入矩阵结构
 @param[in]     pSrcB      指向第二个输入矩阵结构
 @param[out]    pDst       指向输出矩阵结构
 @return        execution status
                   - \ref ARM_MATH_SUCCESS       : successful
                   - \ref ARM_MATH_SIZE_MISMATCH : 矩阵尺寸检查失败
*/
arm_status arm_mat_add_f16	(const arm_matrix_instance_f16 * pSrcA,
const arm_matrix_instance_f16 * pSrcB,
arm_matrix_instance_f16 * pDst);
    
arm_status arm_mat_add_f32(const arm_matrix_instance_f32 * pSrcA,
const arm_matrix_instance_f32 * pSrcB,
arm_matrix_instance_f32 * pDst);

arm_status arm_mat_add_q15(const arm_matrix_instance_q15 * pSrcA,
const arm_matrix_instance_q15 * pSrcB,
arm_matrix_instance_q15 * pDst);
    

arm_status arm_mat_add_q31(const arm_matrix_instance_q31 * pSrcA,
const arm_matrix_instance_q31 * pSrcB,
arm_matrix_instance_q31 * pDst);

Matrix Subtraction

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
   @brief 浮点矩阵减法。
   @param[in] pSrcA 指向第一个输入矩阵结构
   @param[in] pSrcB 指向第二个输入矩阵结构
   @param[out] pDst 指向输出矩阵结构
   @return 执行状态
                    - \ref ARM_MATH_SUCCESS : 操作成功
                    - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
  */

arm_status 	arm_mat_sub_f16 (const arm_matrix_instance_f16 *pSrcA, const arm_matrix_instance_f16 *pSrcB, arm_matrix_instance_f16 *pDst)
    
arm_status 	arm_mat_sub_f32 (const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst)
 
arm_status 	arm_mat_sub_f64 (const arm_matrix_instance_f64 *pSrcA, const arm_matrix_instance_f64 *pSrcB, arm_matrix_instance_f64 *pDst)
 
arm_status 	arm_mat_sub_q15 (const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst)
 
arm_status 	arm_mat_sub_q31 (const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst)

Matrix Multiplication

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
  * @brief 浮点矩阵乘法。
  * @param[in] *pSrcA 指向第一个输入矩阵结构
  * @param[in] *pSrcB 指向第二个输入矩阵结构
  * @param[out] *pDst 指向输出矩阵结构
  * @return 函数返回任一
  * <code>ARM_MATH_SIZE_MISMATCH</code> 或 <code>ARM_MATH_SUCCESS</code> 基于大小检查的结果。
  */

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_mult_fast_q15 (const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState)
 
arm_status 	arm_mat_mult_fast_q31 (const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst)
 
arm_status 	arm_mat_mult_opt_q31 (const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst, q31_t *pState)
 
arm_status 	arm_mat_mult_q15 (const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState)

arm_status 	arm_mat_mult_q31 (const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst)
 
arm_status 	arm_mat_mult_q7 (const arm_matrix_instance_q7 *pSrcA, const arm_matrix_instance_q7 *pSrcB, arm_matrix_instance_q7 *pDst, q7_t *pState)

Complex Matrix Multiplication

只有当第一个矩阵的列数等于第二个矩阵的行数时,才定义复矩阵乘法。 将 M x N 矩阵与 N x P 矩阵相乘得到 M x P 矩阵。

/**
  * @brief 浮点矩阵乘法。
  * @param[in] *pSrcA 指向第一个输入矩阵结构
  * @param[in] *pSrcB 指向第二个输入矩阵结构
  * @param[out] *pDst 指向输出矩阵结构
  * @return 函数返回任一
  * <code>ARM_MATH_SIZE_MISMATCH</code> 或 <code>ARM_MATH_SUCCESS</code> 基于大小检查的结果。
*/
arm_status 	arm_mat_cmplx_mult_f16 (const arm_matrix_instance_f16 *pSrcA, const arm_matrix_instance_f16 *pSrcB, arm_matrix_instance_f16 *pDst);

arm_status 	arm_mat_cmplx_mult_f32 (const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);

arm_status 	arm_mat_cmplx_mult_q15 (const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pScratch);

arm_status 	arm_mat_cmplx_mult_q31 (const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);

Matrix Vector Multiplication

将矩阵和向量相乘。

/**
  * @brief 浮点矩阵和向量乘法。
  * @param[in] *pSrcMat 指向输入矩阵结构
  * @param[in] *pVec 指向输入向量
  * @param[out] *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)
 
void 	arm_mat_vec_mult_q15 (const arm_matrix_instance_q15 *pSrcMat, const q15_t *pVec, q15_t *pDst)
 
void 	arm_mat_vec_mult_q31 (const arm_matrix_instance_q31 *pSrcMat, const q31_t *pVec, q31_t *pDst)
 
void 	arm_mat_vec_mult_q7 (const arm_matrix_instance_q7 *pSrcMat, const q7_t *pVec, q7_t *pDst)

Matrix Scale

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数


/**
   @brief 浮点矩阵缩放。
   @param[in] pSrc 指向输入矩阵
   @param[in] 要应用的比例比例因子
   @param[out] pDst 指向输出矩阵结构
   @return 执行状态
                    - \ref ARM_MATH_SUCCESS : 操作成功
                    - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
 */
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)

/**
   @brief Q15 矩阵缩放。
   @param[in] pSrc 指向输入矩阵
   @param[in] scaleFract 比例因子的小数部分
   @param[in] 移位位数以将结果移位
   @param[out] pDst 指向输出矩阵结构
   @return 执行状态
                    - \ref ARM_MATH_SUCCESS : 操作成功
                    - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
  */

arm_status 	arm_mat_scale_q15 (const arm_matrix_instance_q15 *pSrc, q15_t scaleFract, int32_t shift, arm_matrix_instance_q15 *pDst)
 
arm_status 	arm_mat_scale_q31 (const arm_matrix_instance_q31 *pSrc, q31_t scaleFract, int32_t shift, arm_matrix_instance_q31 *pDst)

Matrix Transpose

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
   @brief 浮点矩阵转置。
   @param[in] pSrc 指向输入矩阵
   @param[out] pDst 指向输出矩阵
   @return 执行状态
                    - \ref ARM_MATH_SUCCESS : 操作成功
                    - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
  */
arm_status 	arm_mat_trans_f16 (const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst)
    
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)
 
arm_status 	arm_mat_trans_q15 (const arm_matrix_instance_q15 *pSrc, arm_matrix_instance_q15 *pDst)
 
arm_status 	arm_mat_trans_q31 (const arm_matrix_instance_q31 *pSrc, arm_matrix_instance_q31 *pDst)
 
arm_status 	arm_mat_trans_q7 (const arm_matrix_instance_q7 *pSrc, arm_matrix_instance_q7 *pDst)

Complex Matrix Transpose

cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
   @brief 浮点矩阵转置。
   @param[in] pSrc 指向输入矩阵
   @param[out] pDst 指向输出矩阵
   @return 执行状态
           - \ref ARM_MATH_SUCCESS : 操作成功
           - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
*/
arm_status 	arm_mat_cmplx_trans_f16 (const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst)
 
arm_status 	arm_mat_cmplx_trans_f32 (const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst)
 
arm_status 	arm_mat_cmplx_trans_q15 (const arm_matrix_instance_q15 *pSrc, arm_matrix_instance_q15 *pDst)
 
arm_status 	arm_mat_cmplx_trans_q31 (const arm_matrix_instance_q31 *pSrc, arm_matrix_instance_q31 *pDst)

Matrix Inverse

计算矩阵的逆。仅当输入矩阵是方阵且非奇异(行列式非零)时才定义逆矩阵。 该函数检查输入和输出矩阵是否为正方形且大小相同。矩阵求逆对数值敏感,CMSIS DSP 库仅支持浮点矩阵的矩阵求逆。

算法Gauss-Jordan 方法用于求逆。 该算法执行一系列基本的行操作,直到将输入矩阵简化为单位矩阵。 将相同的基本行操作序列应用于单位矩阵会产生逆矩阵。 如果输入矩阵是奇异的,则算法终止并返回错误状态 ARM_MATH_SINGULAR。
cmsis-dsp,信号处理算法,矩阵,arm开发,线性代数

/**
   @brief 浮点矩阵逆。
   @param[in] pSrc 指向输入矩阵结构。 源矩阵由函数修改。
   @param[out] pDst 指向输出矩阵结构
   @return 执行状态
          - \ref ARM_MATH_SUCCESS : 操作成功
          - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
          - \ref ARM_MATH_SINGULAR : 输入矩阵被发现是奇异的(不可逆的)
 */
arm_status 	arm_mat_inverse_f16 (const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst)
 
arm_status 	arm_mat_inverse_f32 (const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst)
 
arm_status 	arm_mat_inverse_f64 (const arm_matrix_instance_f64 *pSrc, arm_matrix_instance_f64 *pDst)
//针对上下三角的特殊运算
参数
[in] ut 上三角矩阵
[in] a 矩阵 a
[out] dst UT 的解 X。 X = 一个
退货

/**
   @brief 浮点矩阵逆。
   @param[in] ut 上三角矩阵
   @param[out] a 矩阵 a
   @param[out] dst 指向输出矩阵结构
   @return 执行状态
			如果系统无法求解,该函数返回 ARM_MATH_SINGULAR。
 */
arm_status 	arm_mat_solve_lower_triangular_f16 (const arm_matrix_instance_f16 *lt, const arm_matrix_instance_f16 *a, arm_matrix_instance_f16 *dst)

arm_status 	arm_mat_solve_lower_triangular_f32 (const arm_matrix_instance_f32 *lt, const arm_matrix_instance_f32 *a, arm_matrix_instance_f32 *dst)
 
arm_status 	arm_mat_solve_lower_triangular_f64 (const arm_matrix_instance_f64 *lt, const arm_matrix_instance_f64 *a, arm_matrix_instance_f64 *dst)
 
arm_status 	arm_mat_solve_upper_triangular_f16 (const arm_matrix_instance_f16 *ut, const arm_matrix_instance_f16 *a, arm_matrix_instance_f16 *dst)
 
arm_status 	arm_mat_solve_upper_triangular_f32 (const arm_matrix_instance_f32 *ut, const arm_matrix_instance_f32 *a, arm_matrix_instance_f32 *dst)
 
arm_status 	arm_mat_solve_upper_triangular_f64 (const arm_matrix_instance_f64 *ut, const arm_matrix_instance_f64 *a, arm_matrix_instance_f64 *dst)
 	

Cholesky and LDLT decompositions

计算矩阵的 Cholesky 或$LDLT 分解。

如果输入矩阵没有分解,则算法终止并返回错误状态 ARM_MATH_DECOMPOSITION_FAILURE。

/**
* @brief 正定矩阵的浮点 Cholesky 分解。
* @param[in] pSrc 指向输入浮点矩阵结构的实例。
* @param[out] pDst 指向输出浮点矩阵结构的实例。
* @return 如果维度不匹配,该函数返回 ARM_MATH_SIZE_MISMATCH。
* @return 执行状态
            - \ref ARM_MATH_SUCCESS : 操作成功
            - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
            - \ref ARM_MATH_DECOMPOSITION_FAILURE : 输入矩阵不能被分解
* 如果矩阵是病态的或只是半定的,那么最好使用 LDL^t 分解。
* A 的分解返回一个下三角矩阵 U,使得 A = U*U^t
*/
arm_status 	arm_mat_cholesky_f16 (const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst)
 
arm_status 	arm_mat_cholesky_f32 (const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst)

arm_status 	arm_mat_cholesky_f64 (const arm_matrix_instance_f64 *pSrc, arm_matrix_instance_f64 *pDst)
/**
* @brief 正半定矩阵的浮点 LDL^t 分解。
* @param[in] pSrc 指向输入浮点矩阵结构的实例。
* @param[out] pl 指向输出浮点三角矩阵结构的实例。
* @param[out] pd 指向输出浮点对角矩阵结构的实例。
* @param[out] pp 指向输出浮点置换向量的实例。
* @return 如果维度不匹配,该函数返回 ARM_MATH_SIZE_MISMATCH。
* @return 执行状态
                    - \ref ARM_MATH_SUCCESS : 操作成功
                    - \ref ARM_MATH_SIZE_MISMATCH : 矩阵大小检查失败
                    - \ref ARM_MATH_DECOMPOSITION_FAILURE : 输入矩阵不能被分解
* 计算矩阵 A 的 LDL^t 分解,使得 PAP^t = LDL^t。
*/
arm_status 	arm_mat_ldlt_f32 (const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pl, arm_matrix_instance_f32 *pd, uint16_t *pp)
    
arm_status 	arm_mat_ldlt_f64 (const arm_matrix_instance_f64 *pSrc, arm_matrix_instance_f64 *pl, arm_matrix_instance_f64 *pd, uint16_t *pp)

Matrix Example

示例如何使用矩阵转置、矩阵乘法和矩阵逆函数将最小二乘拟合应用于输入数据。 最小二乘拟合是寻找最佳拟合曲线的过程,该曲线使给定数据集的偏移平方和(最小二乘误差)最小化。

考虑的参数的线性组合如下:
A ∗ X = B A*X = B AX=B,其中 X 是未知值,可以从 A 和 B 估计。
最小二乘估计 X 由以下等式给出:
X = I n v e r s e ( A T ∗ A ) ∗ A T ∗ B X = Inverse(A^T * A)* A^T * B X=InverseATAATB

代码来自:arm_matrix_example_f32.c (arm-software.github.io)

#include "arm_math.h"
#include "math_helper.h"
#if defined(SEMIHOSTING)
#include <stdio.h>
#endif
#define SNR_THRESHOLD   90

//A_f32 线性组合方程中的输入矩阵
//B_f32 线性组合方程中的输出矩阵
//使用 A_f32 和 B_f32 矩阵估计的 X_f32 未知矩阵

/* --------------------------------------------------------------------------------
* Test input data(Cycles) taken from FIR Q15 module for differant cases of blockSize
* and tapSize
* --------------------------------------------------------------------------------- */
const float32_t B_f32[4] =
{
	782.0, 7577.0, 470.0, 4505.0
};
/* --------------------------------------------------------------------------------
* Formula to fit is  C1 + C2 * numTaps + C3 * blockSize + C4 * numTaps * blockSize
* -------------------------------------------------------------------------------- */
const float32_t A_f32[16] =
{
  	/* Const,   numTaps,   blockSize,   numTaps*blockSize */
  	1.0,     32.0,      4.0,     128.0,
  	1.0,     32.0,     64.0,    2048.0,
  	1.0,     16.0,      4.0,      64.0,
  	1.0,     16.0,     64.0,    1024.0,
};
/* ----------------------------------------------------------------------
* Temporary buffers  for storing intermediate values
* ------------------------------------------------------------------- */
/* Transpose of A Buffer */
float32_t AT_f32[16];
/* (Transpose of A * A) Buffer */
float32_t ATMA_f32[16];
/* Inverse(Transpose of A * A)  Buffer */
float32_t ATMAI_f32[16];
/* Test Output Buffer */
float32_t X_f32[4];
/* ----------------------------------------------------------------------
* Reference ouput buffer C1, C2, C3 and C4 taken from MATLAB
* ------------------------------------------------------------------- */
const float32_t xRef_f32[4] = {73.0, 8.0, 21.25, 2.875};
float32_t snr;
/* ----------------------------------------------------------------------
* Max magnitude FFT Bin test
* ------------------------------------------------------------------- */
int32_t main(void)
{
  	arm_matrix_instance_f32 A;      /* Matrix A Instance */
  	arm_matrix_instance_f32 AT;     /* Matrix AT(A transpose) instance */
  	arm_matrix_instance_f32 ATMA;   /* Matrix ATMA( AT multiply with A) instance */
  	arm_matrix_instance_f32 ATMAI;  /* Matrix ATMAI(Inverse of ATMA) instance */
  	arm_matrix_instance_f32 B;      /* Matrix B instance */
 	arm_matrix_instance_f32 X;      /* Matrix X(Unknown Matrix) instance */
  	uint32_t srcRows, srcColumns;  /* Temporary variables */
  	arm_status status;
  	/* Initialise A Matrix Instance with numRows, numCols and data array(A_f32) */
  	srcRows = 4;
  	srcColumns = 4;
  	arm_mat_init_f32(&A, srcRows, srcColumns, (float32_t *)A_f32);
  	
    /* Initialise Matrix Instance AT with numRows, numCols and data array(AT_f32) */
  	srcRows = 4;
  	srcColumns = 4;
  	arm_mat_init_f32(&AT, srcRows, srcColumns, AT_f32);
  	
    /* calculation of A transpose */
  	status = arm_mat_trans_f32(&A, &AT);
  	
    /* Initialise ATMA Matrix Instance with numRows, numCols and data array(ATMA_f32) */
  	srcRows = 4;
  	srcColumns = 4;
  	arm_mat_init_f32(&ATMA, srcRows, srcColumns, ATMA_f32);
  	
    /* calculation of AT Multiply with A */
  	status = arm_mat_mult_f32(&AT, &A, &ATMA);
  	
    /* Initialise ATMAI Matrix Instance with numRows, numCols and data array(ATMAI_f32) */
  	srcRows = 4;
 	srcColumns = 4;
 	arm_mat_init_f32(&ATMAI, srcRows, srcColumns, ATMAI_f32);
  	
    /* calculation of Inverse((Transpose(A) * A) */
  	status = arm_mat_inverse_f32(&ATMA, &ATMAI);
  	
    /* calculation of (Inverse((Transpose(A) * A)) *  Transpose(A)) */
  	status = arm_mat_mult_f32(&ATMAI, &AT, &ATMA);
  	
    /* Initialise B Matrix Instance with numRows, numCols and data array(B_f32) */
  	srcRows = 4;
  	srcColumns = 1;
  	arm_mat_init_f32(&B, srcRows, srcColumns, (float32_t *)B_f32);
  	
    /* Initialise X Matrix Instance with numRows, numCols and data array(X_f32) */
  	srcRows = 4;
  	srcColumns = 1;
  	arm_mat_init_f32(&X, srcRows, srcColumns, X_f32);
  	
    /* calculation ((Inverse((Transpose(A) * A)) *  Transpose(A)) * B) */
  	status = arm_mat_mult_f32(&ATMA, &B, &X);
  	
    /* Comparison of reference with test output */
  	snr = arm_snr_f32((float32_t *)xRef_f32, X_f32, 4);
  	/*------------------------------------------------------------------------------
  	*            Initialise status depending on SNR calculations
  	*------------------------------------------------------------------------------*/
  	status = (snr < SNR_THRESHOLD) ? ARM_MATH_TEST_FAILURE : ARM_MATH_SUCCESS;
}

参考:

Matrix Example (arm-software.github.io)文章来源地址https://www.toymoban.com/news/detail-634983.html

到了这里,关于CMSIS-DSP lib 矩阵运算示例和源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例

            在统计学中, 方差 是用来度量 单个随机变量 的 离散程度 ,而协方差则一般用来刻画 两个随机变量 的 相似程度。 参考: 带你了解什么是Covariance Matrix协方差矩阵 - 知乎 将输入数据A进行中心化处理得到A\\\'。即通过 减去每个维度的平均值 来实现中心化。 注意:

    2024年02月03日
    浏览(46)
  • ARM 之十六 详解 CMSIS 版本变迁、各组件使用示例

      目前,CMSIS 已经发展到了第六版,其目录结构也发生了重大的变化。在不断发展中,很多原来 CMSIS 的组件被不断独立出去,并因此成立了很多开源社区,今天就来学习一下! 由于 CMSIS 已经包含了相当丰富的文档,因此,本文重点学习版本之间的变化以及一些实际使用示

    2024年02月22日
    浏览(33)
  • 短视频抖音账号矩阵系统源码---功能架构示例1

    什么是集群化处理视频内存内耗?集群化处理视频内存内耗是指通过建立集群系统,将视频处理任务分配给多个计算节点进行并行处理,以减少单个计算节点的内存使用量,提高视频处理效率。通过集群化处理,可以将大规模的视频处理任务分解成多个小任务,并且分配给不

    2024年02月16日
    浏览(42)
  • 短视频矩阵管理系统源码开发:视频批量剪辑,分发功能开发示例

    源码所需服务器配置 1、规格:最低8核16G 2、硬盘:系统盘40-100G,数据盘不低于100G 3、带宽:10M 4、系统:CentOS7(务必选择7.*) 部署过程中,除对服务器有要求外,还需要提供准备备案域名,域名备案大致需要7-15个工作日,由于地区不同,备案审核的时间周期也不相同。 在视

    2024年02月16日
    浏览(66)
  • STM32浮点运算单元(FPU)和DSP库使用

    ==== 文章汇总(有代码汇总) ==== 针对M4往上内核的芯片都具有FPU浮点运算单元。可以加快浮点数的运算速度。 硬件:STM32F401CCU6系统板(淘宝十几块钱一个系统板)。 软件:CubeMX、Keil(5.38,建议使用新版本的,对于宏定义没有的部分会有灰色提示)。 首先打开 system_stm32f4xx.c 可

    2024年02月15日
    浏览(54)
  • DSP定点数的计算规则和示例

    目录 1. Q/S表示法的数值范围 2. 定点化加减法计算规则 2.1 防溢出处理 3. 定点化乘法计算规则 3.1 推算 4. 定点化除法计算规则 4.1 推算 5. 程序代码中如何确定Q值 6. 浮点转定点计算示例 Q表示法 S表示法 数的范围 Q15 S0.15 -1≤X≤0.9999695 Q14 S1.14 -2≤X≤1.9999390 Q13 S2.13 -4≤X≤3.99

    2024年02月14日
    浏览(74)
  • 【STM32】STM32F4调用DSP库实现FFT运算

    最近在整理之前的stm32笔记,打算把一些有价值的笔记发到CSDN分享一下。 在进行模拟/数字信号的转换过程中,当采样频率F大于信号中最高频率 fmax 的 2 倍时(F2*fmax),采样之后的数字信号完整地保留了原始信号中的信息。 设采样频率(单位时间可以采多少个信号样本)为 F

    2023年04月24日
    浏览(41)
  • 【GD32F310开发板试用】浮点DSP运算及Modbus移植测评

    首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。 1. 测评背景 GD32作为国产化ARM中的旗舰,其全系列产品不仅市场占有率高,而且各具特色,广受使用者好评。 笔者在测评这款GD32F310之前,曾经使用过GD32F450,其强大的性能,低廉的价

    2023年04月09日
    浏览(43)
  • 0202矩阵的运算-矩阵及其运算-线性代数

    定义2 设有两个 m × n mtimes n m × n 橘子 A = ( a i j ) 和 B = ( b i j ) A=(a_{ij})和B=(b_{ij}) A = ( a ij ​ ) 和 B = ( b ij ​ ) ,那么矩阵A与B的和记为A+B,规定为 A + B = ( a 11 + b 11 a 12 + b 12 ⋯ a 1 n + b 1 n a 21 + b 21 a 22 + b 22 ⋯ a 2 n + b 2 n ⋮ ⋮ ⋮ a m 1 + b m 1 a m 2 + b m 2 ⋯ a m n + b m n ) A+B=begin{pmatr

    2024年04月25日
    浏览(49)
  • 线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算

    《线性代数》中会有较多陌生的概念,如矩阵的逆,线性相关线性无关等,具有一定的难度。因而本系列尽量会以不同于课本的视角去学习线性代数,有些可以做类比记忆的我们会去做一些类比记忆,比如矩阵的逆类比于我们数的除法,有一些比如线性相关和无关会尽量以几

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包