///////////////////////////////////////////////////////////////// const int OFFSET_ENTREE=0; const int OFFSET_SORTIE=0; const int VALEUR_MAX=10000; const int VALEUR_MIN=-10000; int NB_COEFF_B; int NB_COEFF_A; int MEMORYSIZE; double *b; //Coefficients du numérateur de la fonction de transfert du filtre double *a; //Coefficients du dénominateur de la fonction de transfert du filtre //le premier élement est a1 //le tableau denCoeffs est de taille 1 pour un RIF double *memoireVk; //buffer rotatif pour stocker les valeurs de vk int indice_ecr; //indice d'écriture dans le buffer rotatif memoireVk ///////////////////////////////////////////////////////////////// void initFiltreUnEchantillon(sFiltre * pFiltre){ int i; //met à jour les variables globales NB_COEFF_B= pFiltre->nbCoeffB; b= pFiltre->pCoeffB; NB_COEFF_A= pFiltre->nbCoeffA; a= pFiltre->pCoeffA; MEMORYSIZE=pFiltre->nbMemoireVk; memoireVk=pFiltre->memoireVk; for (i=0;i=MEMORYSIZE) indice_ecr=0; if (skout > VALEUR_MAX ) // gestion des saturations du résultat skout = VALEUR_MAX ; else if (skout < VALEUR_MIN ) skout = VALEUR_MIN ; //ajout offset numérique return skout + OFFSET_SORTIE; } ///////////////////////////////////////////////////////////////// void calculReponseFiltreEnLigne(sFiltre * pFiltre, double * ek, double * sk, int nbPts) { initFiltreUnEchantillon(pFiltre); for (int k=0; k < nbPts; k++) { sk[k] = filtreUnEchantillon(ek[k]); } } /////////////////////////////////////////////////////////////////