inline short int execFiltre_i_filtre_rif(short int e) { long int temp; // calcul intermediaire sur 32 bits int i; //indice de lecture pour les valeurs des coefficients du filtre int indice_lec_i_filtre_rif = indice_ecr_i_filtre_rif; //indice de lecture pour les échantillons d'entrée short int skout = 0; //valeur pour la sortie calculée ek_filtre_i_RIF[indice_ecr_i_filtre_rif] = e - 512; //rangement de l'echantillon d'entrée dans le buffer circulaire des entrées en référencant par rapport au 0 // indice_ecr_i_filtre_rif = (indice_ecr_i_filtre_rif + 1) % SIZEFILTER_RIF; indice_ecr_i_filtre_rif = (indice_ecr_i_filtre_rif + 1); if (indice_ecr_i_filtre_rif>=SIZEFILTER_RIF) indice_ecr_i_filtre_rif=0; temp = 0; //valeur par défaut pour le résultat for (i = 0; i < SIZEFILTER_RIF; i++) { temp += (long int) numCoeff_i_FILTRE_RIF[i] * (long int)(ek_filtre_i_RIF[indice_lec_i_filtre_rif]); // calcul sur 32 bits indice_lec_i_filtre_rif--; if (indice_lec_i_filtre_rif < 0) indice_lec_i_filtre_rif = SIZEFILTER_RIF - 1; } if (temp & (1<<(NB_BITS_FRACTIONNAIRE-1)) ) // calcul de l'arrondi skout = (temp >> NB_BITS_FRACTIONNAIRE ) + 1; else skout = (temp >> NB_BITS_FRACTIONNAIRE ) ; if (skout > 511 ) // saturation du résultat sur 10 bits skout = 511 ; else if (skout < -512 ) skout = -512 ; return skout + 512; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////