/*
|
* Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
|
* its subsidiaries and affiliates (collectly called MKSEMI).
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* 1. Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form, except as embedded into an MKSEMI
|
* integrated circuit in a product or a software update for such product,
|
* must reproduce the above copyright notice, this list of conditions and
|
* the following disclaimer in the documentation and/or other materials
|
* provided with the distribution.
|
*
|
* 3. Neither the name of MKSEMI nor the names of its contributors may be used
|
* to endorse or promote products derived from this software without
|
* specific prior written permission.
|
*
|
* 4. This software, with or without modification, must only be used with a
|
* MKSEMI integrated circuit.
|
*
|
* 5. Any software provided in binary form under this license must not be
|
* reverse engineered, decompiled, modified and/or disassembled.
|
*
|
* THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef MK_LSP_H_
|
#define MK_LSP_H_
|
#include "mk_common.h"
|
|
#ifndef LSP_INT_MODE_EN
|
#define LSP_INT_MODE_EN (1)
|
#endif
|
|
/**
|
* @addtogroup MK8000_LSP
|
* @{
|
*/
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/**
|
* @brief open LSP.
|
*
|
* @param int_en interrupt enable flag
|
* @param callback register a callback
|
*/
|
int lsp_open(uint8_t int_en, drv_callback_t callback);
|
|
/**
|
* @brief close LSP.
|
*/
|
int lsp_close(void);
|
|
/**
|
* @brief Floating-point 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_f32(const float *pSrcA, const float *pSrcB, float *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
|
* @param[out] pDst points to the output vector
|
* @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 Floating-point 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_f32(const float *pSrcA, const float *pSrcB, float *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.
|
* @param[in] blkCnt number of samples in intput vector
|
*/
|
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
|
*/
|
void lsp_inner_product_int16(const int16_t *pSrcA, const int16_t *pSrcB, float *pDst, uint32_t blkCnt);
|
|
/**
|
* @brief Floating-point 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_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t blkCnt);
|
|
/**
|
* @brief Multiplies a floating-point vector by a scalar.
|
* @param[in] pSrc points to the input vector
|
* @param[in] scale scale factor to be applied
|
* @param[out] pDst points to the output vector
|
* @param[in] blkCnt number of samples in the vector
|
*/
|
void lsp_scale_f32(const float *pSrc, float scale, float *pDst, uint32_t blkCnt);
|
|
/**
|
* @brief integer 8 complex-by-complex 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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_mult_cmplx_int8(const int8_t *pSrcA, const int8_t *pSrcB, int16_t *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief integer 16 complex-by-complex 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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_mult_cmplx_int16(const int16_t *pSrcA, const int16_t *pSrcB, int32_t *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief Floating-point complex-by-complex 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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_mult_cmplx_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief 8bit integer complex vector inner product, output integer format.
|
* @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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_inner_product_int8(const int8_t *pSrcA, const int8_t *pSrcB, int32_t *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief 16bit integer complex 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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_inner_product_int16(const int16_t *pSrcA, const int16_t *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief Floating-point complex 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] numSamples number of complex samples in each vector
|
* @param[in] isConj conjugate
|
*/
|
void lsp_cmplx_inner_product_f32(const float *pSrcA, const float *pSrcB, float *pDst, uint32_t numSamples, uint8_t isConj);
|
|
/**
|
* @brief Multiplies a floating-point complex vector by a scalar.
|
* @param[in] pSrc points to the input vector
|
* @param[in] re_scale scale factor to be applied on real part
|
* @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
|
*/
|
void lsp_cmplx_scale_f32(const float *pSrc, float re_scale, float im_scale, float *pDst, uint32_t blkCnt, uint8_t isConj);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
/**
|
* @}
|
*/
|
|
#endif /* MK_LSP_H_ */
|