00001 /*----------------------------------------------------------------------------- 00002 * Copyright (C) 2011 ARM Limited. All rights reserved. 00003 * 00004 * $Date: 15. December 2011 00005 * $Revision: V2.0.0 00006 * 00007 * Project: Cortex-R DSP Library 00008 * Title: arm_fir_interpolate_init_q31.c 00009 * 00010 * Description: Q31 FIR interpolator initialization function 00011 * 00012 * Target Processor: Cortex-R4/R5 00013 * 00014 * Version 1.0.0 2011/03/08 00015 * Alpha release. 00016 * 00017 * Version 1.0.1 2011/09/30 00018 * Beta release. 00019 * 00020 * Version 2.0.0 2011/12/15 00021 * Final release. 00022 * 00023 * ---------------------------------------------------------------------------*/ 00024 #include "arm_math.h" 00025 00060 arm_status arm_fir_interpolate_init_q31( 00061 arm_fir_interpolate_instance_q31 * S, 00062 uint8_t L, 00063 uint16_t numTaps, 00064 q31_t * pCoeffs, 00065 q31_t * pState, 00066 uint32_t blockSize) 00067 { 00068 arm_status status; 00069 00070 /* The filter length must be a multiple of the interpolation factor */ 00071 if((numTaps % L) != 0u) 00072 { 00073 /* Set status as ARM_MATH_LENGTH_ERROR */ 00074 status = ARM_MATH_LENGTH_ERROR; 00075 } 00076 else 00077 { 00078 00079 /* Assign coefficient pointer */ 00080 S->pCoeffs = pCoeffs; 00081 00082 /* Assign Interpolation factor */ 00083 S->L = L; 00084 00085 /* Assign polyPhaseLength */ 00086 S->phaseLength = numTaps / L; 00087 00088 /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ 00089 memset(pState, 0, 00090 (blockSize + ((uint32_t) S->phaseLength - 1u)) * sizeof(q31_t)); 00091 00092 /* Assign state pointer */ 00093 S->pState = pState; 00094 00095 status = ARM_MATH_SUCCESS; 00096 } 00097 00098 return (status); 00099 00100 } 00101