1/*---------------------------------------------------------------------------* 2 * filter.h * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20#ifndef __FILTER_H__ 21#define __FILTER_H__ 22 23// Define new data types 24 25typedef short typeSample; // for input and output samples 26typedef short typeCoeff; // FIR filter coefficients 27typedef long typeAccum; // FIR filter accumulator 28 29#define FACTOR_UP 1 // upsampling factor 30#define FACTOR_DOWN 4 // downsampling factor 31 32#define u16ScaleFilterCoeff_up1_down4 15 33 34typedef struct fir_struct 35{ 36 int state; // state of FIR delay line (index of next slot to fill) 37 typeSample *z; // pointer to delay line 38 39 unsigned int factor_up; 40 unsigned int factor_down; 41 42 unsigned int nTaps; // length of FIR filter 43 unsigned int scale; // fixed-point filter scale factor 44 const typeCoeff *h; // pointer to FIR filter coefficients 45 typeAccum round; // used for roundoff 46} FIR_struct; 47 48extern const typeCoeff ps16FilterCoeff_up1_down4[]; 49 50extern unsigned int filter_length; 51 52extern void FIR_downsample(unsigned int nInput, typeSample *pInput, 53 typeSample *pOutput, FIR_struct *pFIR); 54 55extern FIR_struct* FIR_construct(unsigned int nTaps, const typeCoeff *pCoeffs, int scale, int factor_up, int factor_down); 56 57extern int FIR_deconstruct(FIR_struct *pFIR); 58 59extern void FIR_reset(FIR_struct *pFIR); 60 61#endif 62