From e328ebef585cea2351b37117b2d5ac4978ecd3c0 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期二, 11 二月 2025 14:57:23 +0800
Subject: [PATCH] 1111111

---
 keil/include/drivers/mk_lsp.h |  204 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 191 insertions(+), 13 deletions(-)

diff --git a/keil/include/drivers/mk_lsp.h b/keil/include/drivers/mk_lsp.h
index ac73bc5..337a4f2 100644
--- a/keil/include/drivers/mk_lsp.h
+++ b/keil/include/drivers/mk_lsp.h
@@ -51,6 +51,16 @@
  * @{
  */
 
+/**
+ * @brief Instance structure for the floating-point matrix structure.
+ */
+struct LSP_MATRIX_T
+{
+    uint16_t num_rows; /**< number of rows of the matrix.     */
+    uint16_t num_cols; /**< number of columns of the matrix.  */
+    float *data;       /**< points to the data of the matrix. */
+};
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -78,6 +88,33 @@
 void lsp_add_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t blkCnt);
 
 /**
+ * @brief 8bit integer vector addition.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_add_int8(const int8_t *pSrcA, const int8_t *pSrcB, int16_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 16bit integer vector addition.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_add_int16(const int16_t *pSrcA, const int16_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 32bit integer vector addition.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_add_int32(const int32_t *pSrcA, const int32_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
  * @brief Floating-point vector subtraction.
  * @param[in]  pSrcA      points to the first input vector
  * @param[in]  pSrcB      points to the second input vector
@@ -85,6 +122,33 @@
  * @param[in]  blkCnt     number of samples in each vector
  */
 void lsp_sub_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 8bit integer vector subtraction.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_sub_int8(const int8_t *pSrcA, const int8_t *pSrcB, int16_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 16bit integer vector subtraction.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_sub_int16(const int16_t *pSrcA, const int16_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 32bit integer vector subtraction.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_sub_int32(const int32_t *pSrcA, const int32_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
 
 /**
  * @brief Floating-point vector multiplication.
@@ -96,6 +160,33 @@
 void lsp_mult_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t blkCnt);
 
 /**
+ * @brief 8bit integer vector multiplication.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_mult_int8(const int8_t *pSrcA, const int8_t *pSrcB, int16_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 16bit integer vector multiplication.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_mult_int16(const int16_t *pSrcA, const int16_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 32bit integer vector multiplication.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_mult_int32(const int32_t *pSrcA, const int32_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
  * @brief Floating-point vector inverse.
  * @param[in]  pSrc       points to the instance of the input vector.
  * @param[out] pDst       points to the instance of the output vector.
@@ -104,13 +195,28 @@
 void lsp_vinverse_f32(const float *pSrc, float *pDst, uint32_t blkCnt);
 
 /**
- * @brief int16 vector inner product.
- * @param[in]  pSrcA      points to the first input vector
- * @param[in]  pSrcB      points to the second input vector
- * @param[out] pDst       points to the output vector
- * @param[in]  blkCnt     number of samples in each vector
+ * @brief 8bit integer vector inverse.
+ * @param[in]  pSrc       points to the instance of the input vector.
+ * @param[out] pDst       points to the instance of the output vector.
+ * @param[in]  blkCnt     number of samples in intput vector
  */
-void lsp_inner_product_int16(const int16_t *pSrcA, const int16_t *pSrcB, float *pDst, uint32_t blkCnt);
+void lsp_vinverse_int8(const int8_t *pSrc, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 16bit integer vector inverse.
+ * @param[in]  pSrc       points to the instance of the input vector.
+ * @param[out] pDst       points to the instance of the output vector.
+ * @param[in]  blkCnt     number of samples in intput vector
+ */
+void lsp_vinverse_int16(const int16_t *pSrc, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 32bit integer vector inverse.
+ * @param[in]  pSrc       points to the instance of the input vector.
+ * @param[out] pDst       points to the instance of the output vector.
+ * @param[in]  blkCnt     number of samples in intput vector
+ */
+void lsp_vinverse_int32(const int32_t *pSrc, float *pDst, uint32_t blkCnt);
 
 /**
  * @brief Floating-point vector inner product.
@@ -120,6 +226,45 @@
  * @param[in]  blkCnt     number of samples in each vector
  */
 void lsp_inner_product_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 8bit integer vector inner product.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_inner_product_int8(const int8_t *pSrcA, const int8_t *pSrcB, int32_t *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 16bit integer vector inner product.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_inner_product_int16(const int16_t *pSrcA, const int16_t *pSrcB, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief 32bit integer vector inner product.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[out] pDst       points to the output vector
+ * @param[in]  blkCnt     number of samples in each vector
+ */
+void lsp_inner_product_int32(const int32_t *pSrcA, const int32_t *pSrcB, float *pDst, uint32_t blkCnt);
+
+/**
+ * @brief Floating-point vector inner product searching to find out the maximum or minimum result.
+ * @param[in]  pSrcA      points to the first input vector
+ * @param[in]  srcALen    the length of input vector SrcA, srcALen <= 16
+ * @param[in]  pSrcB      points to the second input vector
+ * @param[in]  iterations iteration times
+ * @param[out] pDst       points to the output vector
+ * @param[in]  isMax      maximum or minimum
+ * @return the maximum or minimum inner product iteration count
+ */
+uint32_t lsp_correlate_f32(const float *pSrcA, uint32_t srcALen, const int8_t *pSrcB, uint32_t iterations, float *pDst, uint8_t isMax);
 
 /**
  * @brief Multiplies a floating-point vector by a scalar.
@@ -136,7 +281,7 @@
  * @param[in]  pSrcB       points to the second input vector
  * @param[out] pDst        points to the output vector
  * @param[in]  numSamples  number of complex samples in each vector
- * @param[in]  isConj      conjugate
+ * @param[in]  isConj      conjugate enbale or disable
  */
 void lsp_cmplx_mult_cmplx_int8(const int8_t *pSrcA, const int8_t *pSrcB, int16_t *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -146,7 +291,7 @@
  * @param[in]  pSrcB       points to the second input vector
  * @param[out] pDst        points to the output vector
  * @param[in]  numSamples  number of complex samples in each vector
- * @param[in]  isConj      conjugate
+ * @param[in]  isConj      conjugate enbale or disable
  */
 void lsp_cmplx_mult_cmplx_int16(const int16_t *pSrcA, const int16_t *pSrcB, int32_t *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -156,7 +301,7 @@
  * @param[in]  pSrcB       points to the second input vector
  * @param[out] pDst        points to the output vector
  * @param[in]  numSamples  number of complex samples in each vector
- * @param[in]  isConj      conjugate
+ * @param[in]  isConj      conjugate enbale or disable
  */
 void lsp_cmplx_mult_cmplx_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -166,7 +311,7 @@
  * @param[in]  pSrcB        points to the second input vector
  * @param[out] pDst         points to the output vector
  * @param[in]  numSamples   number of complex samples in each vector
- * @param[in]  isConj       conjugate
+ * @param[in]  isConj       conjugate enbale or disable
  */
 void lsp_cmplx_inner_product_int8(const int8_t *pSrcA, const int8_t *pSrcB, int32_t *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -176,7 +321,7 @@
  * @param[in]  pSrcB        points to the second input vector
  * @param[out] pDst         points to the output vector
  * @param[in]  numSamples   number of complex samples in each vector
- * @param[in]  isConj       conjugate
+ * @param[in]  isConj       conjugate enbale or disable
  */
 void lsp_cmplx_inner_product_int16(const int16_t *pSrcA, const int16_t *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -186,7 +331,7 @@
  * @param[in]  pSrcB        points to the second input vector
  * @param[out] pDst         points to the output vector
  * @param[in]  numSamples   number of complex samples in each vector
- * @param[in]  isConj       conjugate
+ * @param[in]  isConj       conjugate enbale or disable
  */
 void lsp_cmplx_inner_product_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
 
@@ -197,10 +342,43 @@
  * @param[in]  im_scale   scale factor to be applied on imaginary part
  * @param[out] pDst       points to the output vector
  * @param[in]  blkCnt     number of complex samples in the vector
- * @param[in]  isConj     conjugate
+ * @param[in]  isConj     conjugate enbale or disable
  */
 void lsp_cmplx_scale_f32(const float *pSrc, float re_scale, float im_scale, float *pDst, uint32_t blkCnt, uint8_t isConj);
 
+/**
+ * @brief Floating-point matrix inverse.
+ * @param[in]  pSrc     points to the instance of the input floating-point matrix structure.
+ * @param[out] pDst     points to the instance of the output floating-point matrix structure.
+ * @param[in]  rv       matrix regularization
+ */
+void lsp_cmplx_mat_inverse_f32(const struct LSP_MATRIX_T *pSrc, struct LSP_MATRIX_T *pDst, float rv);
+
+/**
+ * @brief Floating-point matrix LDL factorization.
+ * @param[in]  pSrc     points to the instance of the input floating-point matrix structure.
+ * @param[out] pDst     points to the instance of the output floating-point matrix structure.
+ * @param[in]  rv       matrix regularization
+ */
+void lsp_cmplx_mat_ldl_f32(const struct LSP_MATRIX_T *pSrc, struct LSP_MATRIX_T *pDst, float rv);
+
+/**
+ * @brief Floating-point matrix multiplication
+ * @param[in]  pSrcA     points to the first input matrix structure
+ * @param[in]  pSrcB     points to the second input matrix structure
+ * @param[out] pDst      points to output matrix structure
+ */
+void lsp_mat_mult_f32(const struct LSP_MATRIX_T *pSrcA, const struct LSP_MATRIX_T *pSrcB, struct LSP_MATRIX_T *pDst);
+
+/**
+ * @brief Floating-point complex matrix multiplication
+ * @param[in]  pSrcA     points to the first input matrix structure
+ * @param[in]  pSrcB     points to the second input matrix structure
+ * @param[out] pDst      points to output matrix structure
+ * @param[out] isConj    conjugate enbale or disable
+ */
+void lsp_cmplx_mat_mult_f32(const struct LSP_MATRIX_T *pSrcA, const struct LSP_MATRIX_T *pSrcB, struct LSP_MATRIX_T *pDst, uint8_t isConj);
+
 #ifdef __cplusplus
 }
 #endif

--
Gitblit v1.9.3