c2000ware-core-sdk/libraries/dsp/FixedPoint/c28/include/iir.h

202 lines
7.8 KiB
C
Raw Normal View History

2023-12-13 14:16:16 +03:00
#ifndef _IIR_H_
#define _IIR_H_
//#############################################################################
//! \file include/iir.h
//!
//! \brief Header file containing object definitions, prototype declaration
//! and default object initializers for IIR modules.
//!
//! \date Mar 20, 2000
//!
//
//#############################################################################
//!
//! Copyright: Copyright (C) 2023 Texas Instruments Incorporated -
//! All rights reserved not granted herein.
//! Limited License.
//!
//! Texas Instruments Incorporated grants a world-wide, royalty-free,
//! non-exclusive license under copyrights and patents it now or hereafter
//! owns or controls to make, have made, use, import, offer to sell and sell
//! ("Utilize") this software subject to the terms herein. With respect to the
//! foregoing patent license, such license is granted solely to the extent that
//! any such patent is necessary to Utilize the software alone. The patent
//! license shall not apply to any combinations which include this software,
//! other than combinations with devices manufactured by or for TI
//! ("TI Devices").
//! No hardware patent is licensed hereunder.
//!
//! Redistributions must preserve existing copyright notices and reproduce this
//! license (including the above copyright notice and the disclaimer and
//! (if applicable) source code license limitations below) in the documentation
//! and/or other materials provided with the distribution.
//!
//! Redistribution and use in binary form, without modification, are permitted
//! provided that the following conditions are met:
//!
//! * No reverse engineering, decompilation, or disassembly of this software is
//! permitted with respect to any software provided in binary form.
//! * Any redistribution and use are licensed by TI for use only
//! with TI Devices.
//! * Nothing shall obligate TI to provide you with source code for the
//! software licensed and provided to you in object code.
//!
//! If software source code is provided to you, modification and redistribution
//! of the source code are permitted provided that the following conditions
//! are met:
//!
//! * any redistribution and use of the source code, including any resulting
//! derivative works, are licensed by TI for use only with TI Devices.
//! * any redistribution and use of any object code compiled from the source
//! code and any resulting derivative works, are licensed by TI for use
//! only with TI Devices.
//!
//! Neither the name of Texas Instruments Incorporated nor the names of its
//! suppliers may be used to endorse or promote products derived from this
//! software without specific prior written permission.
//#############################################################################
//*****************************************************************************
// the includes
//*****************************************************************************
#include <stdint.h>
//!
//! \defgroup IIR Infinite Impulse Response Filters
//!
//! \ingroup IIR
//@{
#ifdef __cplusplus
extern "C" {
#endif
//*****************************************************************************
//defines
//*****************************************************************************
#define NULL 0
//! \brief Initialization defaults for the 16-bit IIR filter
//!
#define IIR5BIQ16_DEFAULTS { \
(void (*)(void *))IIR5BIQ16_init, \
(void (*)(void *))IIR5BIQ16_calc, \
(int16_t *)NULL, \
(int16_t *)NULL, \
0, \
0, \
0, \
0, \
0}
//! \brief Initialization defaults for the 32-bit IIR filter
//!
#define IIR5BIQ32_DEFAULTS { \
(void (*)(void *))IIR5BIQ32_init, \
(void (*)(void *))IIR5BIQ32_calc, \
(int32_t *)NULL, \
(int32_t *)NULL, \
0, \
0, \
0, \
0, \
0, \
0}
//*****************************************************************************
// typedefs
//*****************************************************************************
//! \brief 16-bit IIR filter structure
//!
typedef struct {
void (*init)(void *); //!< Pointer to initialization function
void (*calc)(void *); //!< Pointer to calculation function
int16_t *coeff_ptr; //!< Pointer to filter coefficients
int16_t *dbuffer_ptr; //!< Delay buffer Pointer
uint16_t nbiq; //!< Number of biquads
int16_t input; //!< Latest input sample
int16_t isf; //!< Input scale factor
uint16_t qfmat; //!< Q format of coefficients
int16_t output; //!< Filter output
}IIR5BIQ16;
//! \brief Handle to the IIR16 object
//!
typedef IIR5BIQ16 *IIR5BIQ16_Handle;
//! \brief 32-bit IIR filter structure
//!
typedef struct {
void (*init)(void *); //!< Pointer to initialization function
void (*calc)(void *); //!< Pointer to calculation function
int32_t *coeff_ptr; //!< Pointer to filter coefficients
int32_t *dbuffer_ptr; //!< Delay buffer Pointer
uint16_t nbiq; //!< Number of biquads
int32_t input; //!< Latest input sample
int32_t isf; //!< Input scale factor
int32_t output32; //!< Filter output (Q30)
int16_t output16; //!< Filter Output (Q15)
uint16_t qfmat; //!< Q format of coefficients
}IIR5BIQ32;
//! \brief Handle to the IIR32 object
//!
typedef IIR5BIQ32 *IIR5BIQ32_Handle;
//*****************************************************************************
// the function prototypes
//*****************************************************************************
//! \brief 16-bit IIR initialization routine
//! \param pointer (handle) to IIR5BIQ16 object
//! This routine zeros out the delay elements in all the biquads
void IIR5BIQ16_init(IIR5BIQ16 *);
//! \brief 16-bit IIR calculation routine
//! \param pointer (handle) to IIR5BIQ16 object
//! This routine implements the IIR filter using cascade biquad structure
void IIR5BIQ16_calc(void *);
//! \brief 32-bit IIR initialization routine
//! \param pointer (handle) to IIR5BIQ16 object
//! This routine zeros out the delay elements in all the biquads
void IIR5BIQ32_init(IIR5BIQ32 *);
//! \brief 32-bit IIR calculation routine
//! \param pointer (handle) to IIR5BIQ32 object
//! This routine implements the IIR filter using cascade biquad structure
void IIR5BIQ32_calc(void *);
//*****************************************************************************
// Sample FIR Co-efficients
//*****************************************************************************
// LPF co-efficients for IIR16 module
#define IIR16_LPF_COEFF { \
0,3794,0,307,307, \
-2159,7894,668,1335,668, \
-3483,8904,541,1082,541, \
-6131,10923,13364,26729,13364}
#define IIR16_LPF_ISF 4398
#define IIR16_LPF_NBIQ 4
#define IIR16_LPF_QFMAT 13
// LPF co-efficients for IIR32 module
#define IIR32_LPF_COEFF { \
0,248624377,0,20118017,20118017, \
-141524868,517372703,43749199,87498398,43749199, \
-228291242,583544331,35450657,70901314,35450657, \
-401770939,715847129,875854244,1751708488,875854244}
#define IIR32_LPF_ISF 288246535
#define IIR32_LPF_NBIQ 4
#define IIR32_LPF_QFMAT 29
#ifdef __cplusplus
{
#endif // extern "C"
//@} // ingroup
#endif //_IIR_H_