unsigned int indice_ecr=0; const int NB_COEFF_B=2 ; double coeffB[NB_COEFF_B]={0.5,0.5}; const unsigned int MEMORYSIZE=NB_COEFF_B+1; const unsigned int NB_BITS_FRACTIONNAIRE = 15; short int memoireVk_i[MEMORYSIZE]; short int coeffB_i[NB_COEFF_B]; ///////////////////////////////////////////////////////////////// short int filtreUnEchantillon_i(short int ek){ short int temp; // calcul intermediaire int i; //indice de lecture pour les valeurs des coefficients du filtre int j; //indice de lecture pour les valeurs des coefficients du filtre int indice_lec; //indice de lecture pour les échantillons d'entrée long int skout; //valeur pour la sortie calculée //suppression offset numérique temp=ek-512; //pour un RIF, NB_COEFF_A=1 donc vktemp sera inchangé //rangement de la valeur calculée dans tableau vk à l'indice indice_ecr memoireVk_i[indice_ecr]=temp; //calcul de sk skout = 0; //valeur par défaut pour le résultat indice_lec = indice_ecr; for (i = 0; i =MEMORYSIZE) indice_ecr=0; if (skout & (1<<(NB_BITS_FRACTIONNAIRE-1)) ) // calcul de l'arrondi skout = (skout >> NB_BITS_FRACTIONNAIRE ) + 1; else skout = (skout >> NB_BITS_FRACTIONNAIRE ) ; if (skout > 511 ) // saturation du résultat sur 10 bits skout = 511 ; else if (skout < -512 ) skout = -512 ; //ajout offset numérique return skout + 512; } /////////////////////////////////////////////////////////////////