Files
TAIXIN/csky/csi_dsp/include/csky_vdsp2_math.h

2379 lines
70 KiB
C

/*
* Copyright (C) 2016-2019 C-SKY Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************************************************
* @file csky_vdsp2_math.h
* @brief Public header file for CSI DSP Library.
* @version V1.0
* @date 20. Dec 2016
******************************************************************************/
#ifndef _CSKY_VDSP2_MATH_H
#define _CSKY_VDSP2_MATH_H
#include <stdint.h>
#include <string.h>
#ifdef CSKY_VDSP2_MATH_DSP
#include "csi_core.h"
#endif
#ifdef __cplusplus
extern "C"
{
#endif
/**
* @brief 8-bit fractional data type in 1.7 format.
*/
typedef int8_t q7_t;
/**
* @brief 16-bit fractional data type in 1.15 format.
*/
typedef int16_t q15_t;
/**
* @brief 32-bit fractional data type in 1.31 format.
*/
typedef int32_t q31_t;
/**
* @brief 64-bit fractional data type in 1.63 format.
*/
typedef int64_t q63_t;
/**
* @brief 32-bit floating-point type definition.
*/
typedef float float32_t;
/**
* @brief Error status returned by some functions in the library.
*/
typedef enum
{
CSKY_VDSP2_MATH_SUCCESS = 0, /**< No error */
CSKY_VDSP2_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */
CSKY_VDSP2_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */
CSKY_VDSP2_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */
CSKY_VDSP2_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */
CSKY_VDSP2_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */
CSKY_VDSP2_MATH_TEST_FAILURE = -6 /**< Test Failed */
} csky_vdsp2_status;
/**
* @brief Instance structure for the Q7 FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of filter coefficients in the filter. */
q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
} csky_vdsp2_fir_instance_q7;
/**
* @brief Instance structure for the Q15 FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of filter coefficients in the filter. */
q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
} csky_vdsp2_fir_instance_q15;
/**
* @brief Instance structure for the Q31 FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of filter coefficients in the filter. */
q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
} csky_vdsp2_fir_instance_q31;
/**
* @brief Instance structure for the floating-point FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of filter coefficients in the filter. */
float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
} csky_vdsp2_fir_instance_f32;
void csky_vdsp2_fir_q7(
const csky_vdsp2_fir_instance_q7 * S,
q7_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_init_q7(
csky_vdsp2_fir_instance_q7 * S,
uint16_t numTaps,
q7_t * pCoeffs,
q7_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_q15(
const csky_vdsp2_fir_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_fast_q15(
const csky_vdsp2_fir_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_init_q15(
csky_vdsp2_fir_instance_q15 * S,
uint16_t numTaps,
q15_t * pCoeffs,
q15_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_q31(
const csky_vdsp2_fir_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_fast_q31(
const csky_vdsp2_fir_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_init_q31(
csky_vdsp2_fir_instance_q31 * S,
uint16_t numTaps,
q31_t * pCoeffs,
q31_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_f32(
const csky_vdsp2_fir_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_init_f32(
csky_vdsp2_fir_instance_f32 * S,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
uint32_t blockSize);
/**
* @brief Instance structure for the Q15 Biquad cascade filter.
*/
typedef struct
{
int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */
} csky_vdsp2_biquad_casd_df1_inst_q15;
/**
* @brief Instance structure for the Q31 Biquad cascade filter.
*/
typedef struct
{
uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */
} csky_vdsp2_biquad_casd_df1_inst_q31;
/**
* @brief Instance structure for the Q31 Biquad cascade filter.
*/
/**
* @brief Instance structure for the floating-point Biquad cascade filter.
*/
typedef struct
{
uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */
float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */
} csky_vdsp2_biquad_casd_df1_inst_f32;
void csky_vdsp2_biquad_cascade_df1_q15(
const csky_vdsp2_biquad_casd_df1_inst_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df1_init_q15(
csky_vdsp2_biquad_casd_df1_inst_q15 * S,
uint8_t numStages,
q15_t * pCoeffs,
q15_t * pState,
int8_t postShift);
void csky_vdsp2_biquad_cascade_df1_fast_q15(
const csky_vdsp2_biquad_casd_df1_inst_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df1_q31(
const csky_vdsp2_biquad_casd_df1_inst_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df1_fast_q31(
const csky_vdsp2_biquad_casd_df1_inst_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df1_init_q31(
csky_vdsp2_biquad_casd_df1_inst_q31 * S,
uint8_t numStages,
q31_t * pCoeffs,
q31_t * pState,
int8_t postShift);
void csky_vdsp2_biquad_cascade_df1_f32(
const csky_vdsp2_biquad_casd_df1_inst_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df1_init_f32(
csky_vdsp2_biquad_casd_df1_inst_f32 * S,
uint8_t numStages,
float32_t * pCoeffs,
float32_t * pState);
/**
* @brief Instance structure for the floating-point matrix structure.
*/
typedef struct
{
uint16_t numRows; /**< number of rows of the matrix. */
uint16_t numCols; /**< number of columns of the matrix. */
float32_t *pData; /**< points to the data of the matrix. */
} csky_vdsp2_matrix_instance_f32;
/**
* @brief Instance structure for the Q15 matrix structure.
*/
typedef struct
{
uint16_t numRows; /**< number of rows of the matrix. */
uint16_t numCols; /**< number of columns of the matrix. */
q15_t *pData; /**< points to the data of the matrix. */
} csky_vdsp2_matrix_instance_q15;
/**
* @brief Instance structure for the Q31 matrix structure.
*/
typedef struct
{
uint16_t numRows; /**< number of rows of the matrix. */
uint16_t numCols; /**< number of columns of the matrix. */
q31_t *pData; /**< points to the data of the matrix. */
} csky_vdsp2_matrix_instance_q31;
csky_vdsp2_status csky_vdsp2_mat_add_f32(
const csky_vdsp2_matrix_instance_f32 * pSrcA,
const csky_vdsp2_matrix_instance_f32 * pSrcB,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_add_q15(
const csky_vdsp2_matrix_instance_q15 * pSrcA,
const csky_vdsp2_matrix_instance_q15 * pSrcB,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_add_q31(
const csky_vdsp2_matrix_instance_q31 * pSrcA,
const csky_vdsp2_matrix_instance_q31 * pSrcB,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_cmplx_mult_f32(
const csky_vdsp2_matrix_instance_f32 * pSrcA,
const csky_vdsp2_matrix_instance_f32 * pSrcB,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_cmplx_mult_q15(
const csky_vdsp2_matrix_instance_q15 * pSrcA,
const csky_vdsp2_matrix_instance_q15 * pSrcB,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_cmplx_mult_q31(
const csky_vdsp2_matrix_instance_q31 * pSrcA,
const csky_vdsp2_matrix_instance_q31 * pSrcB,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_trans_f32(
const csky_vdsp2_matrix_instance_f32 * pSrc,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_trans_q15(
const csky_vdsp2_matrix_instance_q15 * pSrc,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_trans_q31(
const csky_vdsp2_matrix_instance_q31 * pSrc,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_f32(
const csky_vdsp2_matrix_instance_f32 * pSrcA,
const csky_vdsp2_matrix_instance_f32 * pSrcB,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_trans_f32(
const csky_vdsp2_matrix_instance_f32 * pSrcA,
const csky_vdsp2_matrix_instance_f32 * pSrcB,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_q15(
const csky_vdsp2_matrix_instance_q15 * pSrcA,
const csky_vdsp2_matrix_instance_q15 * pSrcB,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_trans_q15(
const csky_vdsp2_matrix_instance_q15 * pSrcA,
const csky_vdsp2_matrix_instance_q15 * pSrcB,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_q31(
const csky_vdsp2_matrix_instance_q31 * pSrcA,
const csky_vdsp2_matrix_instance_q31 * pSrcB,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_mult_trans_q31(
const csky_vdsp2_matrix_instance_q31 * pSrcA,
const csky_vdsp2_matrix_instance_q31 * pSrcB,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_sub_f32(
const csky_vdsp2_matrix_instance_f32 * pSrcA,
const csky_vdsp2_matrix_instance_f32 * pSrcB,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_sub_q15(
const csky_vdsp2_matrix_instance_q15 * pSrcA,
const csky_vdsp2_matrix_instance_q15 * pSrcB,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_sub_q31(
const csky_vdsp2_matrix_instance_q31 * pSrcA,
const csky_vdsp2_matrix_instance_q31 * pSrcB,
csky_vdsp2_matrix_instance_q31 * pDst);
csky_vdsp2_status csky_vdsp2_mat_scale_f32(
const csky_vdsp2_matrix_instance_f32 * pSrc,
float32_t scale,
csky_vdsp2_matrix_instance_f32 * pDst);
csky_vdsp2_status csky_vdsp2_mat_scale_q15(
const csky_vdsp2_matrix_instance_q15 * pSrc,
q15_t scaleFract,
int32_t shift,
csky_vdsp2_matrix_instance_q15 * pDst);
csky_vdsp2_status csky_vdsp2_mat_scale_q31(
const csky_vdsp2_matrix_instance_q31 * pSrc,
q31_t scaleFract,
int32_t shift,
csky_vdsp2_matrix_instance_q31 * pDst);
void csky_vdsp2_mat_init_q31(
csky_vdsp2_matrix_instance_q31 * S,
uint16_t nRows,
uint16_t nColumns,
q31_t * pData);
void csky_vdsp2_mat_init_q15(
csky_vdsp2_matrix_instance_q15 * S,
uint16_t nRows,
uint16_t nColumns,
q15_t * pData);
void csky_vdsp2_mat_init_f32(
csky_vdsp2_matrix_instance_f32 * S,
uint16_t nRows,
uint16_t nColumns,
float32_t * pData);
void csky_vdsp2_mult_q15xq31_sht(
q15_t * pSrcA,
q31_t * pSrcB,
uint32_t shiftValue,
uint32_t blockSize);
void csky_vdsp2_mult_q7(
q7_t * pSrcA,
q7_t * pSrcB,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_mult_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_mult_rnd_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_mult_q31(
q31_t * pSrcA,
q31_t * pSrcB,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_mult_f32(
float32_t * pSrcA,
float32_t * pSrcB,
float32_t * pDst,
uint32_t blockSize);
/**
* @brief Instance structure for the Q15 CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
} csky_vdsp2_cfft_radix2_instance_q15;
/**
* @brief Instance structure for the Q15 CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
q15_t *pTwiddle; /**< points to the twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
} csky_vdsp2_cfft_radix4_instance_q15;
/**
* @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
q31_t *pTwiddle; /**< points to the Twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
} csky_vdsp2_cfft_radix2_instance_q31;
/**
* @brief Instance structure for the Q31 CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
q31_t *pTwiddle; /**< points to the twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
} csky_vdsp2_cfft_radix4_instance_q31;
/**
* @brief Instance structure for the floating-point CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
float32_t *pTwiddle; /**< points to the Twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
float32_t onebyfftLen; /**< value of 1/fftLen. */
} csky_vdsp2_cfft_radix2_instance_f32;
/**
* @brief Instance structure for the floating-point CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */
uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */
float32_t *pTwiddle; /**< points to the Twiddle factor table. */
uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */
float32_t onebyfftLen; /**< value of 1/fftLen. */
} csky_vdsp2_cfft_radix4_instance_f32;
/**
* @brief Instance structure for the fixed-point CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
const q15_t *pTwiddle; /**< points to the Twiddle factor table. */
const uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t bitRevLength; /**< bit reversal table length. */
} csky_vdsp2_cfft_instance_q15;
void csky_vdsp2_cfft_q15(
const csky_vdsp2_cfft_instance_q15 * S,
q15_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
void csky_vdsp2_cfft_fast_q15(
const csky_vdsp2_cfft_instance_q15 * S,
q15_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
/**
* @brief Instance structure for the fixed-point CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
const q31_t *pTwiddle; /**< points to the Twiddle factor table. */
const uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t bitRevLength; /**< bit reversal table length. */
} csky_vdsp2_cfft_instance_q31;
void csky_vdsp2_cfft_q31(
const csky_vdsp2_cfft_instance_q31 * S,
q31_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
void csky_vdsp2_cfft_fast_q31(
const csky_vdsp2_cfft_instance_q31 * S,
q31_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
/**
* @brief Instance structure for the floating-point CFFT/CIFFT function.
*/
typedef struct
{
uint16_t fftLen; /**< length of the FFT. */
const float32_t *pTwiddle; /**< points to the Twiddle factor table. */
const uint16_t *pBitRevTable; /**< points to the bit reversal table. */
uint16_t bitRevLength; /**< bit reversal table length. */
} csky_vdsp2_cfft_instance_f32;
void csky_vdsp2_cfft_f32(
const csky_vdsp2_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
/**
* @brief Instance structure for the Q15 RFFT/RIFFT function.
*/
typedef struct
{
uint32_t fftLenReal; /**< length of the real FFT. */
uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
const csky_vdsp2_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_rfft_instance_q15;
typedef struct
{
uint32_t fftLenReal; /**< length of the real FFT. */
uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
q15_t *pTwiddleAReal; /**< points to the A real twiddle factor table. */
q15_t *pTwiddleBReal; /**< points to the B real twiddle factor table. */
const csky_vdsp2_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_rfft_fast_instance_q15;
csky_vdsp2_status csky_vdsp2_rfft_init_q15(
csky_vdsp2_rfft_instance_q15 * S,
uint32_t fftLenReal,
uint32_t ifftFlagR,
uint32_t bitReverseFlag);
void csky_vdsp2_rfft_q15(
const csky_vdsp2_rfft_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst);
void csky_vdsp2_rfft_fast_q15(
const csky_vdsp2_rfft_fast_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst);
/**
* @brief Instance structure for the Q31 RFFT/RIFFT function.
*/
typedef struct
{
uint32_t fftLenReal; /**< length of the real FFT. */
uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
const csky_vdsp2_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_rfft_instance_q31;
typedef struct
{
uint32_t fftLenReal; /**< length of the real FFT. */
uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
q31_t *pTwiddleAReal; /**< points to the A real twiddle factor table. */
q31_t *pTwiddleBReal; /**< points to the B real twiddle factor table. */
const csky_vdsp2_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_rfft_fast_instance_q31;
csky_vdsp2_status csky_vdsp2_rfft_init_q31(
csky_vdsp2_rfft_instance_q31 * S,
uint32_t fftLenReal,
uint32_t ifftFlagR,
uint32_t bitReverseFlag);
void csky_vdsp2_rfft_q31(
const csky_vdsp2_rfft_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst);
void csky_vdsp2_rfft_fast_q31(
const csky_vdsp2_rfft_fast_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst);
/**
* @brief Instance structure for the floating-point RFFT/RIFFT function.
*/
typedef struct
{
uint32_t fftLenReal; /**< length of the real FFT. */
uint16_t fftLenBy2; /**< length of the complex FFT. */
uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */
uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */
uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */
float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */
float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */
csky_vdsp2_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_rfft_instance_f32;
csky_vdsp2_status csky_vdsp2_rfft_init_f32(
csky_vdsp2_rfft_instance_f32 * S,
csky_vdsp2_cfft_radix4_instance_f32 * S_CFFT,
uint32_t fftLenReal,
uint32_t ifftFlagR,
uint32_t bitReverseFlag);
void csky_vdsp2_cfft_radix4_f32(
const csky_vdsp2_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag,
float32_t onebyfftLen);
void csky_vdsp2_cfft_fast_radix4_f32(
const csky_vdsp2_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag,
float32_t onebyfftLen);
void csky_vdsp2_cfft_radix2_f32(
const csky_vdsp2_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag,
float32_t onebyfftLen);
void csky_vdsp2_rfft_f32(
const csky_vdsp2_rfft_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst);
/**
* @brief Instance structure for the floating-point RFFT/RIFFT function.
*/
typedef struct
{
csky_vdsp2_cfft_instance_f32 Sint; /**< Internal CFFT structure. */
uint16_t fftLenRFFT; /**< length of the real sequence */
float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */
} csky_vdsp2_rfft_fast_instance_f32 ;
csky_vdsp2_status csky_vdsp2_rfft_fast_init_f32 (
csky_vdsp2_rfft_fast_instance_f32 * S,
uint16_t fftLen);
void csky_vdsp2_rfft_fast_f32(
csky_vdsp2_rfft_fast_instance_f32 * S,
float32_t * p, float32_t * pOut,
uint8_t ifftFlag);
/**
* @brief Instance structure for the floating-point DCT4/IDCT4 function.
*/
typedef struct
{
uint16_t N; /**< length of the DCT4. */
uint16_t Nby2; /**< half of the length of the DCT4. */
float32_t normalize; /**< normalizing factor. */
float32_t *pTwiddle; /**< points to the twiddle factor table. */
float32_t *pCosFactor; /**< points to the cosFactor table. */
csky_vdsp2_rfft_fast_instance_f32 *pRfft; /**< points to the real FFT fast instance. */
csky_vdsp2_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_dct4_instance_f32;
csky_vdsp2_status csky_vdsp2_dct4_init_f32(
csky_vdsp2_dct4_instance_f32 * S,
csky_vdsp2_rfft_fast_instance_f32 * S_RFFT,
csky_vdsp2_cfft_radix4_instance_f32 * S_CFFT,
uint16_t N,
uint16_t Nby2,
float32_t normalize);
void csky_vdsp2_dct4_f32(
const csky_vdsp2_dct4_instance_f32 * S,
float32_t * pState,
float32_t * pInlineBuffer);
/**
* @brief Instance structure for the Q31 DCT4/IDCT4 function.
*/
typedef struct
{
uint16_t N; /**< length of the DCT4. */
uint16_t Nby2; /**< half of the length of the DCT4. */
q31_t normalize; /**< normalizing factor. */
q31_t *pTwiddle; /**< points to the twiddle factor table. */
q31_t *pCosFactor; /**< points to the cosFactor table. */
csky_vdsp2_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */
csky_vdsp2_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_dct4_instance_q31;
typedef struct
{
uint16_t N; /**< length of the DCT4. */
uint16_t Nby2; /**< half of the length of the DCT4. */
q31_t normalize; /**< normalizing factor. */
q31_t *pTwiddle; /**< points to the twiddle factor table. */
q31_t *pCosFactor; /**< points to the cosFactor table. */
csky_vdsp2_rfft_fast_instance_q31 *pRfft; /**< points to the real FFT instance. */
csky_vdsp2_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_dct4_fast_instance_q31;
csky_vdsp2_status csky_vdsp2_dct4_init_q31(
csky_vdsp2_dct4_instance_q31 * S,
csky_vdsp2_rfft_instance_q31 * S_RFFT,
csky_vdsp2_cfft_radix4_instance_q31 * S_CFFT,
uint16_t N,
uint16_t Nby2,
q31_t normalize);
void csky_vdsp2_dct4_q31(
const csky_vdsp2_dct4_instance_q31 * S,
q31_t * pState,
q31_t * pInlineBuffer);
void csky_vdsp2_dct4_fast_q31(
const csky_vdsp2_dct4_fast_instance_q31 * S,
q31_t * pState,
q31_t * pInlineBuffer);
/**
* @brief Instance structure for the Q15 DCT4/IDCT4 function.
*/
typedef struct
{
uint16_t N; /**< length of the DCT4. */
uint16_t Nby2; /**< half of the length of the DCT4. */
q15_t normalize; /**< normalizing factor. */
q15_t *pTwiddle; /**< points to the twiddle factor table. */
q15_t *pCosFactor; /**< points to the cosFactor table. */
csky_vdsp2_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */
csky_vdsp2_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_dct4_instance_q15;
typedef struct
{
uint16_t N; /**< length of the DCT4. */
uint16_t Nby2; /**< half of the length of the DCT4. */
q15_t normalize; /**< normalizing factor. */
q15_t *pTwiddle; /**< points to the twiddle factor table. */
q15_t *pCosFactor; /**< points to the cosFactor table. */
csky_vdsp2_rfft_fast_instance_q15 *pRfft; /**< points to the real FFT instance. */
csky_vdsp2_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */
} csky_vdsp2_dct4_fast_instance_q15;
csky_vdsp2_status csky_vdsp2_dct4_init_q15(
csky_vdsp2_dct4_instance_q15 * S,
csky_vdsp2_rfft_instance_q15 * S_RFFT,
csky_vdsp2_cfft_radix4_instance_q15 * S_CFFT,
uint16_t N,
uint16_t Nby2,
q15_t normalize);
void csky_vdsp2_dct4_q15(
const csky_vdsp2_dct4_instance_q15 * S,
q15_t * pState,
q15_t * pInlineBuffer);
void csky_vdsp2_dct4_fast_q15(
const csky_vdsp2_dct4_fast_instance_q15 * S,
q15_t * pState,
q15_t * pInlineBuffer);
void csky_vdsp2_add_f32(
float32_t * pSrcA,
float32_t * pSrcB,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_add_q7(
q7_t * pSrcA,
q7_t * pSrcB,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_add_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_add_q31(
q31_t * pSrcA,
q31_t * pSrcB,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_sub_f32(
float32_t * pSrcA,
float32_t * pSrcB,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_sub_q7(
q7_t * pSrcA,
q7_t * pSrcB,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_sub_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_sub_q31(
q31_t * pSrcA,
q31_t * pSrcB,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_sum_q15(
q15_t * pSrcA,
q63_t * pDst,
uint32_t blockSize);
void csky_vdsp2_scale_f32(
float32_t * pSrc,
float32_t scale,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_scale_q7(
q7_t * pSrc,
q7_t scaleFract,
int8_t shift,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_scale_q15(
q15_t * pSrc,
q15_t scaleFract,
int8_t shift,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_scale_q31(
q31_t * pSrc,
q31_t scaleFract,
int8_t shift,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_q7(
q7_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_max_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_abs_max_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_dot_prod_f32(
float32_t * pSrcA,
float32_t * pSrcB,
uint32_t blockSize,
float32_t * result);
void csky_vdsp2_dot_prod_q7(
q7_t * pSrcA,
q7_t * pSrcB,
uint32_t blockSize,
q31_t * result);
void csky_vdsp2_dot_prod_q15(
q15_t * pSrcA,
q15_t * pSrcB,
uint32_t blockSize,
q63_t * result);
void csky_vdsp2_dot_prod_q31(
q31_t * pSrcA,
q31_t * pSrcB,
uint32_t blockSize,
q63_t * result);
void csky_vdsp2_dot_prod_u64xu8(
uint8_t * pSrcA,
uint64_t * pSrcB,
uint32_t blockSize,
uint64_t * result);
void csky_vdsp2_shift_q7(
q7_t * pSrc,
int8_t shiftBits,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_shift_q15(
q15_t * pSrc,
int8_t shiftBits,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_shift_q31(
q31_t * pSrc,
int8_t shiftBits,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_offset_f32(
float32_t * pSrc,
float32_t offset,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_offset_q7(
q7_t * pSrc,
q7_t offset,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_offset_q15(
q15_t * pSrc,
q15_t offset,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_offset_q31(
q31_t * pSrc,
q31_t offset,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_negate_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_negate_q7(
q7_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_negate_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_negate_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_copy_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_copy_q7(
q7_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_copy_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_copy_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fill_f32(
float32_t value,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fill_q7(
q7_t value,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fill_q15(
q15_t value,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fill_q31(
q31_t value,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_conv_f32(
float32_t * pSrcA,
uint32_t srcALen,
float32_t * pSrcB,
uint32_t srcBLen,
float32_t * pDst);
void csky_vdsp2_conv_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
q15_t * pScratch1,
q15_t * pScratch2);
void csky_vdsp2_conv_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst);
void csky_vdsp2_conv_fast_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst);
void csky_vdsp2_conv_fast_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
q15_t * pScratch1,
q15_t * pScratch2);
void csky_vdsp2_conv_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst);
void csky_vdsp2_conv_fast_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst);
void csky_vdsp2_conv_opt_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst,
q15_t * pScratch1,
q15_t * pScratch2);
void csky_vdsp2_conv_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst);
csky_vdsp2_status csky_vdsp2_conv_partial_f32(
float32_t * pSrcA,
uint32_t srcALen,
float32_t * pSrcB,
uint32_t srcBLen,
float32_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
csky_vdsp2_status csky_vdsp2_conv_partial_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
uint32_t firstIndex,
uint32_t numPoints,
q15_t * pScratch1,
q15_t * pScratch2);
csky_vdsp2_status csky_vdsp2_conv_partial_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
csky_vdsp2_status csky_vdsp2_conv_partial_fast_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
csky_vdsp2_status csky_vdsp2_conv_partial_fast_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
uint32_t firstIndex,
uint32_t numPoints,
q15_t * pScratch1,
q15_t * pScratch2);
csky_vdsp2_status csky_vdsp2_conv_partial_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
csky_vdsp2_status csky_vdsp2_conv_partial_fast_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
csky_vdsp2_status csky_vdsp2_conv_partial_opt_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst,
uint32_t firstIndex,
uint32_t numPoints,
q15_t * pScratch1,
q15_t * pScratch2);
csky_vdsp2_status csky_vdsp2_conv_partial_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst,
uint32_t firstIndex,
uint32_t numPoints);
/**
* @brief Instance structure for the Q15 FIR decimator.
*/
typedef struct
{
uint8_t M; /**< decimation factor. */
uint16_t numTaps; /**< number of coefficients in the filter. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
} csky_vdsp2_fir_decimate_instance_q15;
/**
* @brief Instance structure for the Q31 FIR decimator.
*/
typedef struct
{
uint8_t M; /**< decimation factor. */
uint16_t numTaps; /**< number of coefficients in the filter. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
} csky_vdsp2_fir_decimate_instance_q31;
/**
* @brief Instance structure for the floating-point FIR decimator.
*/
typedef struct
{
uint8_t M; /**< decimation factor. */
uint16_t numTaps; /**< number of coefficients in the filter. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
} csky_vdsp2_fir_decimate_instance_f32;
void csky_vdsp2_fir_decimate_f32(
const csky_vdsp2_fir_decimate_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_decimate_init_f32(
csky_vdsp2_fir_decimate_instance_f32 * S,
uint16_t numTaps,
uint8_t M,
float32_t * pCoeffs,
float32_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_decimate_q15(
const csky_vdsp2_fir_decimate_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_decimate_fast_q15(
const csky_vdsp2_fir_decimate_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_decimate_init_q15(
csky_vdsp2_fir_decimate_instance_q15 * S,
uint16_t numTaps,
uint8_t M,
q15_t * pCoeffs,
q15_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_decimate_q31(
const csky_vdsp2_fir_decimate_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_decimate_fast_q31(
csky_vdsp2_fir_decimate_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_decimate_init_q31(
csky_vdsp2_fir_decimate_instance_q31 * S,
uint16_t numTaps,
uint8_t M,
q31_t * pCoeffs,
q31_t * pState,
uint32_t blockSize);
/**
* @brief Instance structure for the Q15 FIR interpolator.
*/
typedef struct
{
uint8_t L; /**< upsample factor. */
uint16_t phaseLength; /**< length of each polyphase filter component. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */
} csky_vdsp2_fir_interpolate_instance_q15;
/**
* @brief Instance structure for the Q31 FIR interpolator.
*/
typedef struct
{
uint8_t L; /**< upsample factor. */
uint16_t phaseLength; /**< length of each polyphase filter component. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */
} csky_vdsp2_fir_interpolate_instance_q31;
/**
* @brief Instance structure for the floating-point FIR interpolator.
*/
typedef struct
{
uint8_t L; /**< upsample factor. */
uint16_t phaseLength; /**< length of each polyphase filter component. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */
float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */
} csky_vdsp2_fir_interpolate_instance_f32;
void csky_vdsp2_fir_interpolate_q15(
const csky_vdsp2_fir_interpolate_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_interpolate_init_q15(
csky_vdsp2_fir_interpolate_instance_q15 * S,
uint8_t L,
uint16_t numTaps,
q15_t * pCoeffs,
q15_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_interpolate_q31(
const csky_vdsp2_fir_interpolate_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_interpolate_init_q31(
csky_vdsp2_fir_interpolate_instance_q31 * S,
uint8_t L,
uint16_t numTaps,
q31_t * pCoeffs,
q31_t * pState,
uint32_t blockSize);
void csky_vdsp2_fir_interpolate_f32(
const csky_vdsp2_fir_interpolate_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_fir_interpolate_init_f32(
csky_vdsp2_fir_interpolate_instance_f32 * S,
uint8_t L,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
uint32_t blockSize);
/**
* @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.
*/
typedef struct
{
uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */
float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */
} csky_vdsp2_biquad_cascade_df2T_instance_f32;
/**
* @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.
*/
typedef struct
{
uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */
float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */
float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */
} csky_vdsp2_biquad_cascade_stereo_df2T_instance_f32;
void csky_vdsp2_biquad_cascade_df2T_f32(
const csky_vdsp2_biquad_cascade_df2T_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_stereo_df2T_f32(
const csky_vdsp2_biquad_cascade_stereo_df2T_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_biquad_cascade_df2T_init_f32(
csky_vdsp2_biquad_cascade_df2T_instance_f32 * S,
uint8_t numStages,
float32_t * pCoeffs,
float32_t * pState);
void csky_vdsp2_biquad_cascade_stereo_df2T_init_f32(
csky_vdsp2_biquad_cascade_stereo_df2T_instance_f32 * S,
uint8_t numStages,
float32_t * pCoeffs,
float32_t * pState);
/**
* @brief Instance structure for the Q15 FIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of filter stages. */
q15_t *pState; /**< points to the state variable array. The array is of length numStages. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
} csky_vdsp2_fir_lattice_instance_q15;
/**
* @brief Instance structure for the Q31 FIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of filter stages. */
q31_t *pState; /**< points to the state variable array. The array is of length numStages. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
} csky_vdsp2_fir_lattice_instance_q31;
/**
* @brief Instance structure for the floating-point FIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of filter stages. */
float32_t *pState; /**< points to the state variable array. The array is of length numStages. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */
} csky_vdsp2_fir_lattice_instance_f32;
void csky_vdsp2_fir_lattice_init_q15(
csky_vdsp2_fir_lattice_instance_q15 * S,
uint16_t numStages,
q15_t * pCoeffs,
q15_t * pState);
void csky_vdsp2_fir_lattice_q15(
const csky_vdsp2_fir_lattice_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_lattice_init_q31(
csky_vdsp2_fir_lattice_instance_q31 * S,
uint16_t numStages,
q31_t * pCoeffs,
q31_t * pState);
void csky_vdsp2_fir_lattice_q31(
const csky_vdsp2_fir_lattice_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_fir_lattice_init_f32(
csky_vdsp2_fir_lattice_instance_f32 * S,
uint16_t numStages,
float32_t * pCoeffs,
float32_t * pState);
void csky_vdsp2_fir_lattice_f32(
const csky_vdsp2_fir_lattice_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
/**
* @brief Instance structure for the Q15 IIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of stages in the filter. */
q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
} csky_vdsp2_iir_lattice_instance_q15;
/**
* @brief Instance structure for the Q31 IIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of stages in the filter. */
q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
} csky_vdsp2_iir_lattice_instance_q31;
/**
* @brief Instance structure for the floating-point IIR lattice filter.
*/
typedef struct
{
uint16_t numStages; /**< number of stages in the filter. */
float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */
float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */
float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */
} csky_vdsp2_iir_lattice_instance_f32;
void csky_vdsp2_iir_lattice_f32(
const csky_vdsp2_iir_lattice_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_iir_lattice_init_f32(
csky_vdsp2_iir_lattice_instance_f32 * S,
uint16_t numStages,
float32_t * pkCoeffs,
float32_t * pvCoeffs,
float32_t * pState,
uint32_t blockSize);
void csky_vdsp2_iir_lattice_q31(
const csky_vdsp2_iir_lattice_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_iir_lattice_init_q31(
csky_vdsp2_iir_lattice_instance_q31 * S,
uint16_t numStages,
q31_t * pkCoeffs,
q31_t * pvCoeffs,
q31_t * pState,
uint32_t blockSize);
void csky_vdsp2_iir_lattice_q15(
const csky_vdsp2_iir_lattice_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_iir_lattice_init_q15(
csky_vdsp2_iir_lattice_instance_q15 * S,
uint16_t numStages,
q15_t * pkCoeffs,
q15_t * pvCoeffs,
q15_t * pState,
uint32_t blockSize);
/**
* @brief Instance structure for the floating-point LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
float32_t mu; /**< step size that controls filter coefficient updates. */
} csky_vdsp2_lms_instance_f32;
void csky_vdsp2_lms_f32(
const csky_vdsp2_lms_instance_f32 * S,
float32_t * pSrc,
float32_t * pRef,
float32_t * pOut,
float32_t * pErr,
uint32_t blockSize);
void csky_vdsp2_lms_init_f32(
csky_vdsp2_lms_instance_f32 * S,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
float32_t mu,
uint32_t blockSize);
/**
* @brief Instance structure for the Q15 LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
q15_t mu; /**< step size that controls filter coefficient updates. */
uint32_t postShift; /**< bit shift applied to coefficients. */
} csky_vdsp2_lms_instance_q15;
void csky_vdsp2_lms_init_q15(
csky_vdsp2_lms_instance_q15 * S,
uint16_t numTaps,
q15_t * pCoeffs,
q15_t * pState,
q15_t mu,
uint32_t blockSize,
uint32_t postShift);
void csky_vdsp2_lms_q15(
const csky_vdsp2_lms_instance_q15 * S,
q15_t * pSrc,
q15_t * pRef,
q15_t * pOut,
q15_t * pErr,
uint32_t blockSize);
/**
* @brief Instance structure for the Q31 LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
q31_t mu; /**< step size that controls filter coefficient updates. */
uint32_t postShift; /**< bit shift applied to coefficients. */
} csky_vdsp2_lms_instance_q31;
void csky_vdsp2_lms_q31(
const csky_vdsp2_lms_instance_q31 * S,
q31_t * pSrc,
q31_t * pRef,
q31_t * pOut,
q31_t * pErr,
uint32_t blockSize);
void csky_vdsp2_lms_init_q31(
csky_vdsp2_lms_instance_q31 * S,
uint16_t numTaps,
q31_t * pCoeffs,
q31_t * pState,
q31_t mu,
uint32_t blockSize,
uint32_t postShift);
/**
* @brief Instance structure for the floating-point normalized LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
float32_t mu; /**< step size that control filter coefficient updates. */
float32_t energy; /**< saves previous frame energy. */
float32_t x0; /**< saves previous input sample. */
} csky_vdsp2_lms_norm_instance_f32;
void csky_vdsp2_lms_norm_f32(
csky_vdsp2_lms_norm_instance_f32 * S,
float32_t * pSrc,
float32_t * pRef,
float32_t * pOut,
float32_t * pErr,
uint32_t blockSize);
void csky_vdsp2_lms_norm_init_f32(
csky_vdsp2_lms_norm_instance_f32 * S,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
float32_t mu,
uint32_t blockSize);
/**
* @brief Instance structure for the Q31 normalized LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
q31_t mu; /**< step size that controls filter coefficient updates. */
uint8_t postShift; /**< bit shift applied to coefficients. */
q31_t *recipTable; /**< points to the reciprocal initial value table. */
q31_t energy; /**< saves previous frame energy. */
q31_t x0; /**< saves previous input sample. */
} csky_vdsp2_lms_norm_instance_q31;
void csky_vdsp2_lms_norm_q31(
csky_vdsp2_lms_norm_instance_q31 * S,
q31_t * pSrc,
q31_t * pRef,
q31_t * pOut,
q31_t * pErr,
uint32_t blockSize);
void csky_vdsp2_lms_norm_init_q31(
csky_vdsp2_lms_norm_instance_q31 * S,
uint16_t numTaps,
q31_t * pCoeffs,
q31_t * pState,
q31_t mu,
uint32_t blockSize,
uint8_t postShift);
/**
* @brief Instance structure for the Q15 normalized LMS filter.
*/
typedef struct
{
uint16_t numTaps; /**< Number of coefficients in the filter. */
q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
q15_t mu; /**< step size that controls filter coefficient updates. */
uint8_t postShift; /**< bit shift applied to coefficients. */
q15_t *recipTable; /**< Points to the reciprocal initial value table. */
q15_t energy; /**< saves previous frame energy. */
q15_t x0; /**< saves previous input sample. */
} csky_vdsp2_lms_norm_instance_q15;
void csky_vdsp2_lms_norm_q15(
csky_vdsp2_lms_norm_instance_q15 * S,
q15_t * pSrc,
q15_t * pRef,
q15_t * pOut,
q15_t * pErr,
uint32_t blockSize);
void csky_vdsp2_lms_norm_init_q15(
csky_vdsp2_lms_norm_instance_q15 * S,
uint16_t numTaps,
q15_t * pCoeffs,
q15_t * pState,
q15_t mu,
uint32_t blockSize,
uint8_t postShift);
void csky_vdsp2_correlate_f32(
float32_t * pSrcA,
uint32_t srcALen,
float32_t * pSrcB,
uint32_t srcBLen,
float32_t * pDst);
void csky_vdsp2_correlate_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
q15_t * pScratch);
void csky_vdsp2_correlate_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst);
void csky_vdsp2_correlate_fast_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst);
void csky_vdsp2_correlate_fast_opt_q15(
q15_t * pSrcA,
uint32_t srcALen,
q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst,
q15_t * pScratch);
void csky_vdsp2_correlate_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst);
void csky_vdsp2_correlate_fast_q31(
q31_t * pSrcA,
uint32_t srcALen,
q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst);
void csky_vdsp2_correlate_opt_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst,
q15_t * pScratch1,
q15_t * pScratch2);
void csky_vdsp2_correlate_q7(
q7_t * pSrcA,
uint32_t srcALen,
q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst);
/**
* @brief Instance structure for the floating-point sparse FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
} csky_vdsp2_fir_sparse_instance_f32;
/**
* @brief Instance structure for the Q31 sparse FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
} csky_vdsp2_fir_sparse_instance_q31;
/**
* @brief Instance structure for the Q15 sparse FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
} csky_vdsp2_fir_sparse_instance_q15;
/**
* @brief Instance structure for the Q7 sparse FIR filter.
*/
typedef struct
{
uint16_t numTaps; /**< number of coefficients in the filter. */
uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */
q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */
q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/
uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */
int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */
} csky_vdsp2_fir_sparse_instance_q7;
void csky_vdsp2_fir_sparse_f32(
csky_vdsp2_fir_sparse_instance_f32 * S,
float32_t * pSrc,
float32_t * pDst,
float32_t * pScratchIn,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_init_f32(
csky_vdsp2_fir_sparse_instance_f32 * S,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
int32_t * pTapDelay,
uint16_t maxDelay,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_q31(
csky_vdsp2_fir_sparse_instance_q31 * S,
q31_t * pSrc,
q31_t * pDst,
q31_t * pScratchIn,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_init_q31(
csky_vdsp2_fir_sparse_instance_q31 * S,
uint16_t numTaps,
q31_t * pCoeffs,
q31_t * pState,
int32_t * pTapDelay,
uint16_t maxDelay,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_q15(
csky_vdsp2_fir_sparse_instance_q15 * S,
q15_t * pSrc,
q15_t * pDst,
q15_t * pScratchIn,
q31_t * pScratchOut,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_init_q15(
csky_vdsp2_fir_sparse_instance_q15 * S,
uint16_t numTaps,
q15_t * pCoeffs,
q15_t * pState,
int32_t * pTapDelay,
uint16_t maxDelay,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_q7(
csky_vdsp2_fir_sparse_instance_q7 * S,
q7_t * pSrc,
q7_t * pDst,
q7_t * pScratchIn,
q31_t * pScratchOut,
uint32_t blockSize);
void csky_vdsp2_fir_sparse_init_q7(
csky_vdsp2_fir_sparse_instance_q7 * S,
uint16_t numTaps,
q7_t * pCoeffs,
q7_t * pState,
int32_t * pTapDelay,
uint16_t maxDelay,
uint32_t blockSize);
void csky_vdsp2_sin_cos_f32(
float32_t theta,
float32_t * pSinVal,
float32_t * pCosVal);
void csky_vdsp2_sin_cos_q31(
q31_t theta,
q31_t * pSinVal,
q31_t * pCosVal);
void csky_vdsp2_cmplx_conj_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_conj_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_conj_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_squared_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_squared_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_squared_q31_basic(
q31_t * pSrc,
q63_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_squared_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_vsqrt_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_vsqrt_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_vsqrt_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_vsqrt_q7(
q7_t * pSrc,
q7_t * pDst,
uint32_t numSamples);
void csky_vdsp2_q7_to_q31(
q7_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q7_to_q15(
q7_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q7_to_float(
q7_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q31_to_float(
q31_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
csky_vdsp2_status csky_vdsp2_sqrt_f32(
float32_t in,
float32_t * pOut);
csky_vdsp2_status csky_vdsp2_sqrt_q31(
q31_t in,
q31_t * pOut);
csky_vdsp2_status csky_vdsp2_sqrt_q15(
q15_t in,
q15_t * pOut);
void csky_vdsp2_power_q31(
q31_t * pSrc,
uint32_t blockSize,
q63_t * pResult);
void csky_vdsp2_power_int32(
int32_t * pSrc,
uint32_t blockSize,
q63_t * pResult);
void csky_vdsp2_power_int32(
int32_t * pSrc,
uint32_t blockSize,
q63_t * pResult);
void csky_vdsp2_power_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult);
void csky_vdsp2_power_q15(
q15_t * pSrc,
uint32_t blockSize,
q63_t * pResult);
void csky_vdsp2_power_q7(
q7_t * pSrc,
uint32_t blockSize,
q31_t * pResult);
void csky_vdsp2_mean_q7(
q7_t * pSrc,
uint32_t blockSize,
q7_t * pResult);
void csky_vdsp2_mean_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult);
void csky_vdsp2_mean_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult);
void csky_vdsp2_mean_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult);
void csky_vdsp2_var_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult);
void csky_vdsp2_var_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult);
void csky_vdsp2_var_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult);
void csky_vdsp2_rms_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult);
void csky_vdsp2_rms_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult);
void csky_vdsp2_rms_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult);
void csky_vdsp2_std_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult);
void csky_vdsp2_std_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult);
void csky_vdsp2_std_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult);
void csky_vdsp2_cmplx_mag_f32(
float32_t * pSrc,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_q31(
q31_t * pSrc,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mag_q15(
q15_t * pSrc,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_dot_prod_q15(
q15_t * pSrcA,
q15_t * pSrcB,
uint32_t numSamples,
q31_t * realResult,
q31_t * imagResult);
void csky_vdsp2_cmplx_dot_prod_q31(
q31_t * pSrcA,
q31_t * pSrcB,
uint32_t numSamples,
q63_t * realResult,
q63_t * imagResult);
void csky_vdsp2_cmplx_dot_prod_f32(
float32_t * pSrcA,
float32_t * pSrcB,
uint32_t numSamples,
float32_t * realResult,
float32_t * imagResult);
void csky_vdsp2_cmplx_mult_real_q15(
q15_t * pSrcCmplx,
q15_t * pSrcReal,
q15_t * pCmplxDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_real_q31(
q31_t * pSrcCmplx,
q31_t * pSrcReal,
q31_t * pCmplxDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_real_f32(
float32_t * pSrcCmplx,
float32_t * pSrcReal,
float32_t * pCmplxDst,
uint32_t numSamples);
void csky_vdsp2_min_q7(
q7_t * pSrc,
uint32_t blockSize,
q7_t * result,
uint32_t * index);
void csky_vdsp2_min_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_min_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_min_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_max_q7(
q7_t * pSrc,
uint32_t blockSize,
q7_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_max_q15(
q15_t * pSrc,
uint32_t blockSize,
q15_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_max_q31(
q31_t * pSrc,
uint32_t blockSize,
q31_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_max_f32(
float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult,
uint32_t * pIndex);
void csky_vdsp2_cmplx_mult_cmplx_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_cmplx_q31(
q31_t * pSrcA,
q31_t * pSrcB,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_cmplx_f32(
float32_t * pSrcA,
float32_t * pSrcB,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_cmplx_re_q15(
q15_t * pSrcA,
q15_t * pSrcB,
q15_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_cmplx_re_q31(
q31_t * pSrcA,
q31_t * pSrcB,
q31_t * pDst,
uint32_t numSamples);
void csky_vdsp2_cmplx_mult_cmplx_re_f32(
float32_t * pSrcA,
float32_t * pSrcB,
float32_t * pDst,
uint32_t numSamples);
void csky_vdsp2_float_to_q31(
float32_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_float_to_q15(
float32_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_float_to_q7(
float32_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q31_to_q15(
q31_t * pSrc,
q15_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q31_to_q7(
q31_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q31_to_q7_rs(
q31_t * pSrc,
q7_t * pDst,
uint32_t shiftValue,
uint32_t blockSize);
void csky_vdsp2_q63_to_q31_rs(
q63_t * pSrc,
q31_t * pDst,
uint32_t shiftValue,
uint32_t blockSize);
void csky_vdsp2_q15_to_float(
q15_t * pSrc,
float32_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q15_to_q31(
q15_t * pSrc,
q31_t * pDst,
uint32_t blockSize);
void csky_vdsp2_q15_to_q7(
q15_t * pSrc,
q7_t * pDst,
uint32_t blockSize);
#ifdef __cplusplus
}
#endif
#endif /* _CSKY_VDSP2_MATH_H */
/**
*
* End of file.
*/