BQ_1I_D16F32C14_TRC_WRA_01.c revision 2c8e5cab3faa6d360e222b7a6c40a80083d021ac
1/* 2 * Copyright (C) 2004-2010 NXP Software 3 * Copyright (C) 2010 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18/************************************************************************/ 19/* */ 20/* Project:: */ 21/* $Author: beq07716 $*/ 22/* $Revision: 1000 $*/ 23/* $Date: 2010-06-28 13:08:20 +0200 (Mon, 28 Jun 2010) $*/ 24/* */ 25/************************************************************************/ 26 27#include "BIQUAD.h" 28#include "BQ_1I_D16F32Css_TRC_WRA_01_Private.h" 29#include "LVM_Macros.h" 30 31/************************************************************************** 32 ASSUMPTIONS: 33 COEFS- 34 pBiquadState->coefs[0] is A2, pBiquadState->coefs[1] is A1 35 pBiquadState->coefs[2] is A0, pBiquadState->coefs[3] is -B2 36 pBiquadState->coefs[4] is -B1, these are in Q14 format 37 38 DELAYS- 39 pBiquadState->pDelays[0] is x(n-1)L in Q0 format 40 pBiquadState->pDelays[1] is x(n-2)L in Q0 format 41 pBiquadState->pDelays[2] is y(n-1)L in Q16 format 42 pBiquadState->pDelays[3] is y(n-2)L in Q16 format 43***************************************************************************/ 44 45void BQ_1I_D16F32C14_TRC_WRA_01 ( Biquad_Instance_t *pInstance, 46 LVM_INT16 *pDataIn, 47 LVM_INT16 *pDataOut, 48 LVM_INT16 NrSamples) 49 { 50 LVM_INT32 ynL,templ; 51 LVM_INT16 ii; 52 PFilter_State pBiquadState = (PFilter_State) pInstance; 53 54 for (ii = NrSamples; ii != 0; ii--) 55 { 56 57 58 /************************************************************************** 59 PROCESSING OF THE LEFT CHANNEL 60 ***************************************************************************/ 61 // ynL=A2 (Q14) * x(n-2)L (Q0) in Q14 62 ynL=(LVM_INT32)pBiquadState->coefs[0]* pBiquadState->pDelays[1]; 63 64 // ynL+=A1 (Q14) * x(n-1)L (Q0) in Q14 65 ynL+=(LVM_INT32)pBiquadState->coefs[1]* pBiquadState->pDelays[0]; 66 67 // ynL+=A0 (Q14) * x(n)L (Q0) in Q14 68 ynL+=(LVM_INT32)pBiquadState->coefs[2]* (*pDataIn); 69 70 // ynL+= ( (-B2 (Q14) * y(n-2)L (Q16) )>>16) in Q14 71 MUL32x16INTO32(pBiquadState->pDelays[3],pBiquadState->coefs[3],templ,16) 72 ynL+=templ; 73 74 // ynL+= ( (-B1 (Q14) * y(n-1)L (Q16) )>>16) in Q14 75 MUL32x16INTO32(pBiquadState->pDelays[2],pBiquadState->coefs[4],templ,16) 76 ynL+=templ; 77 78 /************************************************************************** 79 UPDATING THE DELAYS 80 ***************************************************************************/ 81 pBiquadState->pDelays[3]=pBiquadState->pDelays[2]; // y(n-2)L=y(n-1)L 82 pBiquadState->pDelays[1]=pBiquadState->pDelays[0]; // x(n-2)L=x(n-1)L 83 pBiquadState->pDelays[2]=ynL<<2; // Update y(n-1)L in Q16 84 pBiquadState->pDelays[0]=(*pDataIn++); // Update x(n-1)L in Q0 85 86 /************************************************************************** 87 WRITING THE OUTPUT 88 ***************************************************************************/ 89 *pDataOut++=(LVM_INT16)(ynL>>14); // Write Left output in Q0 90 91 } 92 } 93 94