Hola, he estado trabajando con filtros digital y me encontré con la buena ayuda del filter solution (hace poco me di cuenta que también sintetiza filtros digitales)
Como entrada tengo un array de 10 valores tipo float. El problema que como entrada para el filtro tengo 2 variabls tipo float (invar y *states). Entiendo que el array de 10 valores tiene que ser pasado a través del puntero *states pero ¿para qué es invar?
El filtro es pasabajo y el código es el siguiente:
Como entrada tengo un array de 10 valores tipo float. El problema que como entrada para el filtro tengo 2 variabls tipo float (invar y *states). Entiendo que el array de 10 valores tiene que ser pasado a través del puntero *states pero ¿para qué es invar?
El filtro es pasabajo y el código es el siguiente:
Código:
float DigFil(invar, states)
float invar, *states;
/******************************************************************************/
/* Filter Solutions Version 2015 Nuhertz Technologies, L.L.C. */
/* www.nuhertz.com */
/* +1 602-279-2448 */
/* 4th Order Low Pass Butterworth */
/* Bilinear Transformation with Prewarping */
/* Sample Frequency = 50.00 KHz */
/* Standard Form */
/* Arithmetic Precision = 4 Digits */
/* */
/* Pass Band Frequency = 10.00 KHz */
/* */
/******************************************************************************/
/* */
/* Input Variable Definitions: */
/* Inputs: */
/* invar float The input to the filter */
/* *states float Pointer to array holding the filter states */
/* (Minimum array dimension: 4) */
/* */
/* Option Selections: */
/* Standard C; Externally Initialized; External States; Optimized; */
/* */
/******************************************************************************/
/* */
/* This software is automatically generated by Filter Solutions */
/* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and */
/* distributions of this software. */
/* */
/******************************************************************************/
{
float sumnum=0.0, sumden=0.0; int i=0;
static float znum[3] = {
4.658e-02,
.1863,
.2795
};
static float zden[4] = {
3.012e-02,
-.1827,
.68,
-.7821
};
sumnum = sumden = 0.0;
for (i=0;i<4;i++){
sumden += states[i]*zden[i];
sumnum += states[i]*znum[i<3?i:4-i];
if (i<3) states[i] = states[i+1];
}
states[3] = invar-sumden;
sumnum += states[3]*znum[0];
return sumnum;
}