| /* |
| * Copyright (C) 2004-2010 NXP Software |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * 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 |
| * |
| * http://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. |
| */ |
| |
| #ifndef _BIQUAD_H_ |
| #define _BIQUAD_H_ |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| #include "LVM_Types.h" |
| /********************************************************************************** |
| INSTANCE MEMORY TYPE DEFINITION |
| ***********************************************************************************/ |
| |
| typedef struct |
| { |
| LVM_INT32 Storage[6]; |
| |
| } Biquad_Instance_t; |
| |
| |
| /********************************************************************************** |
| COEFFICIENT TYPE DEFINITIONS |
| ***********************************************************************************/ |
| |
| /*** Biquad coefficients **********************************************************/ |
| typedef struct |
| { |
| LVM_INT16 A2; /* a2 */ |
| LVM_INT16 A1; /* a1 */ |
| LVM_INT16 A0; /* a0 */ |
| LVM_INT16 B2; /* -b2! */ |
| LVM_INT16 B1; /* -b1! */ |
| } BQ_C16_Coefs_t; |
| |
| typedef struct |
| { |
| LVM_INT32 A2; /* a2 */ |
| LVM_INT32 A1; /* a1 */ |
| LVM_INT32 A0; /* a0 */ |
| LVM_INT32 B2; /* -b2! */ |
| LVM_INT32 B1; /* -b1! */ |
| } BQ_C32_Coefs_t; |
| |
| /*** First order coefficients *****************************************************/ |
| typedef struct |
| { |
| LVM_INT16 A1; /* a1 */ |
| LVM_INT16 A0; /* a0 */ |
| LVM_INT16 B1; /* -b1! */ |
| } FO_C16_Coefs_t; |
| |
| typedef struct |
| { |
| LVM_INT32 A1; /* a1 */ |
| LVM_INT32 A0; /* a0 */ |
| LVM_INT32 B1; /* -b1! */ |
| } FO_C32_Coefs_t; |
| |
| /*** First order coefficients with Shift*****************************************************/ |
| typedef struct |
| { |
| LVM_INT16 A1; /* a1 */ |
| LVM_INT16 A0; /* a0 */ |
| LVM_INT16 B1; /* -b1! */ |
| LVM_INT16 Shift; /* Shift */ |
| } FO_C16_LShx_Coefs_t; |
| |
| /*** Band pass coefficients *******************************************************/ |
| typedef struct |
| { |
| LVM_INT16 A0; /* a0 */ |
| LVM_INT16 B2; /* -b2! */ |
| LVM_INT16 B1; /* -b1! */ |
| } BP_C16_Coefs_t; |
| |
| typedef struct |
| { |
| LVM_INT32 A0; /* a0 */ |
| LVM_INT32 B2; /* -b2! */ |
| LVM_INT32 B1; /* -b1! */ |
| } BP_C32_Coefs_t; |
| |
| /*** Peaking coefficients *********************************************************/ |
| typedef struct |
| { |
| LVM_INT16 A0; /* a0 */ |
| LVM_INT16 B2; /* -b2! */ |
| LVM_INT16 B1; /* -b1! */ |
| LVM_INT16 G; /* Gain */ |
| } PK_C16_Coefs_t; |
| |
| typedef struct |
| { |
| LVM_INT32 A0; /* a0 */ |
| LVM_INT32 B2; /* -b2! */ |
| LVM_INT32 B1; /* -b1! */ |
| LVM_INT16 G; /* Gain */ |
| } PK_C32_Coefs_t; |
| |
| |
| /********************************************************************************** |
| TAPS TYPE DEFINITIONS |
| ***********************************************************************************/ |
| |
| /*** Types used for first order and shelving filter *******************************/ |
| |
| typedef struct |
| { |
| LVM_INT32 Storage[ (1*2) ]; /* One channel, two taps of size LVM_INT32 */ |
| } Biquad_1I_Order1_Taps_t; |
| |
| typedef struct |
| { |
| LVM_INT32 Storage[ (2*2) ]; /* Two channels, two taps of size LVM_INT32 */ |
| } Biquad_2I_Order1_Taps_t; |
| |
| |
| /*** Types used for biquad, band pass and peaking filter **************************/ |
| |
| typedef struct |
| { |
| LVM_INT32 Storage[ (1*4) ]; /* One channel, four taps of size LVM_INT32 */ |
| } Biquad_1I_Order2_Taps_t; |
| |
| typedef struct |
| { |
| LVM_INT32 Storage[ (2*4) ]; /* Two channels, four taps of size LVM_INT32 */ |
| } Biquad_2I_Order2_Taps_t; |
| |
| /* The names of the functions are changed to satisfy QAC rules: Name should be Unique withing 16 characters*/ |
| #define BQ_2I_D32F32Cll_TRC_WRA_01_Init Init_BQ_2I_D32F32Cll_TRC_WRA_01 |
| #define BP_1I_D32F32C30_TRC_WRA_02 TWO_BP_1I_D32F32C30_TRC_WRA_02 |
| |
| /********************************************************************************** |
| FUNCTION PROTOTYPES: BIQUAD FILTERS |
| ***********************************************************************************/ |
| |
| /*** 16 bit data path *************************************************************/ |
| |
| void BQ_2I_D16F32Css_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_2I_Order2_Taps_t *pTaps, |
| BQ_C16_Coefs_t *pCoef); |
| |
| void BQ_2I_D16F32C15_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_2I_D16F32C14_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_2I_D16F32C13_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_2I_D16F16Css_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_2I_Order2_Taps_t *pTaps, |
| BQ_C16_Coefs_t *pCoef); |
| |
| void BQ_2I_D16F16C15_TRC_WRA_01( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_2I_D16F16C14_TRC_WRA_01( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_1I_D16F16Css_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order2_Taps_t *pTaps, |
| BQ_C16_Coefs_t *pCoef); |
| |
| void BQ_1I_D16F16C15_TRC_WRA_01( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BQ_1I_D16F32Css_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order2_Taps_t *pTaps, |
| BQ_C16_Coefs_t *pCoef); |
| |
| void BQ_1I_D16F32C14_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| /*** 32 bit data path *************************************************************/ |
| |
| void BQ_2I_D32F32Cll_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_2I_Order2_Taps_t *pTaps, |
| BQ_C32_Coefs_t *pCoef); |
| |
| void BQ_2I_D32F32C30_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT32 *pDataIn, |
| LVM_INT32 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| /********************************************************************************** |
| FUNCTION PROTOTYPES: FIRST ORDER FILTERS |
| ***********************************************************************************/ |
| |
| /*** 16 bit data path *************************************************************/ |
| |
| void FO_1I_D16F16Css_TRC_WRA_01_Init( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order1_Taps_t *pTaps, |
| FO_C16_Coefs_t *pCoef); |
| |
| void FO_1I_D16F16C15_TRC_WRA_01( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void FO_2I_D16F32Css_LShx_TRC_WRA_01_Init(Biquad_Instance_t *pInstance, |
| Biquad_2I_Order1_Taps_t *pTaps, |
| FO_C16_LShx_Coefs_t *pCoef); |
| |
| void FO_2I_D16F32C15_LShx_TRC_WRA_01(Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| /*** 32 bit data path *************************************************************/ |
| |
| void FO_1I_D32F32Cll_TRC_WRA_01_Init( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order1_Taps_t *pTaps, |
| FO_C32_Coefs_t *pCoef); |
| |
| void FO_1I_D32F32C31_TRC_WRA_01( Biquad_Instance_t *pInstance, |
| LVM_INT32 *pDataIn, |
| LVM_INT32 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| /********************************************************************************** |
| FUNCTION PROTOTYPES: BAND PASS FILTERS |
| ***********************************************************************************/ |
| |
| /*** 16 bit data path *************************************************************/ |
| |
| void BP_1I_D16F16Css_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order2_Taps_t *pTaps, |
| BP_C16_Coefs_t *pCoef); |
| |
| void BP_1I_D16F16C14_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void BP_1I_D16F32Cll_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order2_Taps_t *pTaps, |
| BP_C32_Coefs_t *pCoef); |
| |
| void BP_1I_D16F32C30_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| |
| /*** 32 bit data path *************************************************************/ |
| |
| void BP_1I_D32F32Cll_TRC_WRA_02_Init ( Biquad_Instance_t *pInstance, |
| Biquad_1I_Order2_Taps_t *pTaps, |
| BP_C32_Coefs_t *pCoef); |
| |
| void BP_1I_D32F32C30_TRC_WRA_02( Biquad_Instance_t *pInstance, |
| LVM_INT32 *pDataIn, |
| LVM_INT32 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| |
| /*** 32 bit data path STEREO ******************************************************/ |
| |
| void PK_2I_D32F32CllGss_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_2I_Order2_Taps_t *pTaps, |
| PK_C32_Coefs_t *pCoef); |
| |
| void PK_2I_D32F32C30G11_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT32 *pDataIn, |
| LVM_INT32 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| void PK_2I_D32F32CssGss_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance, |
| Biquad_2I_Order2_Taps_t *pTaps, |
| PK_C16_Coefs_t *pCoef); |
| |
| void PK_2I_D32F32C14G11_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT32 *pDataIn, |
| LVM_INT32 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| |
| /********************************************************************************** |
| FUNCTION PROTOTYPES: DC REMOVAL FILTERS |
| ***********************************************************************************/ |
| |
| /*** 16 bit data path STEREO ******************************************************/ |
| |
| void DC_2I_D16_TRC_WRA_01_Init ( Biquad_Instance_t *pInstance); |
| |
| void DC_2I_D16_TRC_WRA_01 ( Biquad_Instance_t *pInstance, |
| LVM_INT16 *pDataIn, |
| LVM_INT16 *pDataOut, |
| LVM_INT16 NrSamples); |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| |
| /**********************************************************************************/ |
| |
| #endif /** _BIQUAD_H_ **/ |
| |