Home : Signal Processing Library | Fixed-point biquad filters

Description

Fixed-point functions for single and cascaded (double, triple, and quadruple) biquad filters.

BiQuad function parameter combinations for input sample, history data, and computed result are provided for all supported fixed-point formats (Q25, Q28, Q31).

// - n01, n02, n03 and n04 indicate cascade count (n01 for single, n02/03/04 for double, triple, quadruple). // - r??x??c?? indicates the sample data (x), coefficient and history data, and filter result formats respectively. // - Example: xsignalproc_biq_n02_r28x25c31 --> 2x cascaded BiQuad, Q28 sample, Q25 coefficients, and a Q31 result.

Naming Conventions

  • nNN indicates the biquad filter cascade count (n01 for single, n02/03/04 for double, triple, quadruple).
  • rRRxXXcCC indicates the result (RR), sample data (XX), and coefficient (CC) formats respectively.

Example: Function for a single biquad filter with a Q28 formatted sample, Q25 formatted coefficients, and a Q31 formatted result:

int xsignalproc_biquad_n01_r31x28c25( int sample, const int coefficients[5], int history[5] )

Example Usage

The following example shows how to use various biquad functions.

Example for single biquad filter using Q28 fixed-point format:

const int coefficients[5] = { Q28(+0.99415702),Q28(-1.97113267),Q28(+0.97707625),Q28(+1.97104121),Q28(-0.97132473) };
int history[5] =            { 0,0,0,0,0 }; // Must be initialized to zero's

sample_q28 = xsignalproc_biquad_n01_r28x28c28( sample_q28, coefficients, history );

where:

  • 'history' must be inititalized to all zeros

Example for 4-times cascaded biquad filter using Q28 fixed-point format:

const int coefficients[4][5] = {{ Q28(+0.99415702),Q28(-1.97113267),Q28(+0.97707625),Q28(+1.97104121),Q28(-0.97132473) },
                                 { Q28(+0.99415702),Q28(-1.97113267),Q28(+0.97707625),Q28(+1.97104121),Q28(-0.97132473) },
                                 { Q28(+0.99415702),Q28(-1.97113267),Q28(+0.97707625),Q28(+1.97104121),Q28(-0.97132473) },
                                 { Q28(+0.99415702),Q28(-1.97113267),Q28(+0.97707625),Q28(+1.97104121),Q28(-0.97132473) }};
int history[4][5] =             {{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}; // Must be initialized to zero's

sample_q28 = xsignalproc_biquad_n04_r28x28c28( sample_q28, coefficients, history );

where:

  • 'history' must be inititalized to all zeros

Source Files

xsignalproc_biquad.h Fixed-point functions for single and cascaded (double, triple, and quadruple) biquad filters
xsignalproc_biquad.xc  

Source Fistings

xsignalproc_biquad.h

#ifndef XSIGNALPROC_BIQUAD_INCLUDED
#define XSIGNALPROC_BIQUAD_INCLUDED

// Function naming conventions:
//
// - n01, n02, n03 and n04 indicate cascade count (n01 for single, n02/03/04 for double, triple, quadruple).
// - r??x??c?? indicates the sample data (x), coefficient and history data, and filter result formats respectively.
// - Example: xsignalproc_biq_n02_r28x25c31 --> 2x cascaded BiQuad, Q28 sample, Q25 coefficients, and a Q31 result.

#include "xstream-dsp-types.h"

int xsignalproc_biquad_n01_r31x31c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x31c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x31c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x28c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x28c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x28c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x25c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x25c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r31x25c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x31c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x31c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x31c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x28c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x28c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x28c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x25c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x25c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r28x25c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x31c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x31c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x31c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x28c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x28c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x28c25( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x25c31( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x25c28( int sample, const int coefficients[5], int history[5] );
int xsignalproc_biquad_n01_r25x25c25( int sample, const int coefficients[5], int history[5] );

#define XSIGNALPROC_BIQUAD_NN_INTERFACE( nn ) \
  \
  int xsignalproc_biquad_n##N##_r31x31c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x31c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x31c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x28c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x28c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x28c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x25c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x25c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r31x25c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x31c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x31c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x31c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x28c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x28c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x28c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x25c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x25c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r28x25c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x31c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x31c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x31c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x28c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x28c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x28c25( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x25c31( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x25c28( int sample, const int coefficients[N][5], int history[N][5] ); \
  int xsignalproc_biquad_n##N##_r25x25c25( int sample, const int coefficients[N][5], int history[N][5] );

XSIGNALPROC_BIQUAD_NN_INTERFACE( 02 )
XSIGNALPROC_BIQUAD_NN_INTERFACE( 03 )
XSIGNALPROC_BIQUAD_NN_INTERFACE( 04 )

#endif

xsignalproc_biquad.xc

#include "xsignalproc_biquad.h"
#include "xsignalproc_common.h"

#include <xs1.h>

inline int _xsignalproc_biq_adjust_R05( int ah, unsigned al ) { return (ah>>5); }
inline int _xsignalproc_biq_adjust_R02( int ah, unsigned al ) { return (ah>>2); }
inline int _xsignalproc_biq_adjust_L01( int ah, unsigned al ) { return (ah<< 1)+(al>>31); }
inline int _xsignalproc_biq_adjust_L04( int ah, unsigned al ) { return (ah<< 4)+(al>>28); }
inline int _xsignalproc_biq_adjust_L07( int ah, unsigned al ) { return (ah<< 7)+(al>>25); }
inline int _xsignalproc_biq_adjust_L10( int ah, unsigned al ) { return (ah<<10)+(al>>22); }
inline int _xsignalproc_biq_adjust_L13( int ah, unsigned al ) { return (ah<<13)+(al>>19); }

#define _XSIGNALPROC_BIQUAD( adjust ) \
    \
    register int ah=0; register unsigned int rr, al=0; \
    switch( hh[4] ) \
    { \
        case 0: hh[4] = 1; \
                {ah,al} = macs( hh[0], ba[ 2], ah, al ); \
                {ah,al} = macs( hh[1], ba[ 1], ah, al ); \
                {ah,al} = macs( xx,    ba[ 0], ah, al ); hh[0] = xx; \
                {ah,al} = macs( hh[2], ba[ 4], ah, al ); \
                {ah,al} = macs( hh[3], ba[ 3], ah, al ); hh[2] = rr = adjust(ah,al); break; \
        case 1: hh[4] = 0; \
                {ah,al} = macs( hh[1], ba[ 2], ah, al ); \
                {ah,al} = macs( hh[0], ba[ 1], ah, al ); \
                {ah,al} = macs( xx,    ba[ 0], ah, al ); hh[1] = xx; \
                {ah,al} = macs( hh[3], ba[ 4], ah, al ); \
                {ah,al} = macs( hh[2], ba[ 3], ah, al ); hh[3] = rr = adjust(ah,al); break; \
    }

#define _XSIGNALPROC_BIQUAD( adjust ) \
    \
    register int ah=0; register unsigned int rr, al=0; \
    {ah,al} = macs( xx,    ba[0], ah, al ); \
    {ah,al} = macs( hh[0], ba[1], ah, al ); \
    {ah,al} = macs( hh[1], ba[2], ah, al ); \
    {ah,al} = macs( hh[2], ba[3], ah, al ); \
    {ah,al} = macs( hh[3], ba[4], ah, al ); \
    hh[1] = hh[0]; hh[0] = xx; hh[3] = hh[2]; \
    rr = hh[2] = (ah<<4)+(al>>28);

int _xsignalproc_biquad_R05( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_R05); return rr; }
int _xsignalproc_biquad_R02( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_R02); return rr; }
int _xsignalproc_biquad_L01( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_L01); return rr; }
int _xsignalproc_biquad_L04( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_L04); return rr; }
int _xsignalproc_biquad_L07( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_L07); return rr; }
int _xsignalproc_biquad_L10( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_L10); return rr; }
int _xsignalproc_biquad_L13( int xx, const int ba[5], int hh[5] ) {_XSIGNALPROC_BIQUAD(_xsignalproc_biq_adjust_L13); return rr; }

int xsignalproc_biquad_n01_r31x31c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x31c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x31c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x28c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x28c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x28c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L10( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x25c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x25c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L10( xx, ba, hh ); }
int xsignalproc_biquad_n01_r31x25c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L13( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x31c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_R02( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x31c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x31c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x28c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x28c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x28c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x25c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x25c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }
int xsignalproc_biquad_n01_r28x25c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L10( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x31c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_R05( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x31c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_R02( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x31c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x28c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_R02( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x28c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x28c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x25c31( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L01( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x25c28( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L04( xx, ba, hh ); }
int xsignalproc_biquad_n01_r25x25c25( int xx, int const ba[5], int hh[5] ) { return _xsignalproc_biquad_L07( xx, ba, hh ); }

int xsignalproc_biquad_n02_r31x31c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x31c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x31c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x28c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x28c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x28c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x25c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x25c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r31x25c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L13( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L13( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x31c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x31c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x31c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x28c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x28c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x28c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x25c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x25c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r28x25c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x31c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_R05( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_R05( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x31c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x31c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x28c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x28c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x28c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x25c31( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x25c28( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
}
int xsignalproc_biquad_n02_r25x25c25( int xx, const int ba[2][5], int hh[2][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    return _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
}

int xsignalproc_biquad_n03_r31x31c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x31c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x31c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x28c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x28c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x28c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x25c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x25c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r31x25c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L13( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L13( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L13( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x31c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_R02( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x31c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x31c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x28c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x28c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x28c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x25c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x25c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r28x25c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x31c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_R05( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R05( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_R05( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x31c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_R02( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x31c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x28c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x28c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x25c31( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x25c28( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
}
int xsignalproc_biquad_n03_r25x25c25( int xx, const int ba[3][5], int hh[3][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    return _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
}

int xsignalproc_biquad_n04_r31x31c31( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L01( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x31c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L04( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x31c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L07( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x28c31( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L04( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x28c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L07( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x28c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L10( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x25c31( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L07( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x25c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L10( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r31x25c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L13( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L13( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L13( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L13( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x31c31( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_R02( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_R02( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x31c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L01( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x31c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L04( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x28c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L04( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x28c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L07( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r28x25c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L10( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L10( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L10( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L10( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x31c31( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_R05( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R05( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_R05( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_R05( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x31c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_R02( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_R02( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_R02( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_R02( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x31c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L01( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x28c28( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L01( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L01( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L01( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L01( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x28c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L04( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L04( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L04( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L04( xx, ba[3], hh[3] );
}
int xsignalproc_biquad_n04_r25x25c25( int xx, const int ba[4][5], int hh[4][5] ) {
    xx =   _xsignalproc_biquad_L07( xx, ba[0], hh[0] );
    xx =   _xsignalproc_biquad_L07( xx, ba[1], hh[1] );
    xx =   _xsignalproc_biquad_L07( xx, ba[2], hh[2] );
    return _xsignalproc_biquad_L07( xx, ba[3], hh[3] );
}