LUIS

Dependencies:   mbed

Committer:
pirottealex
Date:
Fri Oct 05 14:55:14 2018 +0000
Revision:
0:fcc396b03bbe
a;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pirottealex 0:fcc396b03bbe 1 /**
pirottealex 0:fcc396b03bbe 2 * digital_filter.h
pirottealex 0:fcc396b03bbe 3 *
pirottealex 0:fcc396b03bbe 4 * Auteur : Ferdinand Piette (Avril 2011)
pirottealex 0:fcc396b03bbe 5 * Version : 1.0b
pirottealex 0:fcc396b03bbe 6 *
pirottealex 0:fcc396b03bbe 7 * Fourni des fonctions permettant d'appliquer des filtres numériques
pirottealex 0:fcc396b03bbe 8 * ayant pour fonction de transfert :
pirottealex 0:fcc396b03bbe 9 *
pirottealex 0:fcc396b03bbe 10 * b0*z + b1*z^-1 + ... + bN*z^-N
pirottealex 0:fcc396b03bbe 11 * H(z) = --------------------------------
pirottealex 0:fcc396b03bbe 12 * 1 + a1*z^-1 + ... + aM*z^-M
pirottealex 0:fcc396b03bbe 13 */
pirottealex 0:fcc396b03bbe 14
pirottealex 0:fcc396b03bbe 15 #ifndef DEF_digital_filter
pirottealex 0:fcc396b03bbe 16 #define DEF_digital_filter
pirottealex 0:fcc396b03bbe 17
pirottealex 0:fcc396b03bbe 18 /**
pirottealex 0:fcc396b03bbe 19 * Structure stockant les coefficients du filtre
pirottealex 0:fcc396b03bbe 20 */
pirottealex 0:fcc396b03bbe 21 typedef struct digital_filter_coefficient
pirottealex 0:fcc396b03bbe 22 {
pirottealex 0:fcc396b03bbe 23 double * coef_a; // Les coefficients a1..aN
pirottealex 0:fcc396b03bbe 24 double * coef_b; // Les coefficients b0..bM
pirottealex 0:fcc396b03bbe 25 int numberOfCoef_a; // Le nombre de coefficients a
pirottealex 0:fcc396b03bbe 26 int numberOfCoef_b; // Le nombre de coefficients b
pirottealex 0:fcc396b03bbe 27 } digital_filter_coefficient;
pirottealex 0:fcc396b03bbe 28
pirottealex 0:fcc396b03bbe 29 /**
pirottealex 0:fcc396b03bbe 30 * Structure stockant les coefficiants du filtre et les échantillons et résultats nécessaires
pirottealex 0:fcc396b03bbe 31 */
pirottealex 0:fcc396b03bbe 32 typedef struct digital_filter
pirottealex 0:fcc396b03bbe 33 {
pirottealex 0:fcc396b03bbe 34 double * samples; // Les échantillons en entrées du filtre
pirottealex 0:fcc396b03bbe 35 double * results; // Le résultat de la sortie du filtre
pirottealex 0:fcc396b03bbe 36 int current_sample; // L'indice du tableau où se trouvera le prochain échantillon
pirottealex 0:fcc396b03bbe 37 int previous_result; // L'indice du tableau où se trouve la sortie du filtre pour l'échantillon courrant
pirottealex 0:fcc396b03bbe 38 struct digital_filter_coefficient transfert_function; // La structure stockant les coefficients du filtre
pirottealex 0:fcc396b03bbe 39 } digital_filter;
pirottealex 0:fcc396b03bbe 40
pirottealex 0:fcc396b03bbe 41 void init_digital_filter_coefficient(struct digital_filter_coefficient *, double *, int, double * , int); // Initialise les coefficients du filtre
pirottealex 0:fcc396b03bbe 42 void init_digital_filter(struct digital_filter *, double *, int, double * , int); // Initialise le filtre
pirottealex 0:fcc396b03bbe 43 double filter_next_sample(digital_filter *, double); // Calcule la sortie du filtre pour un nouvel échantillon
pirottealex 0:fcc396b03bbe 44
pirottealex 0:fcc396b03bbe 45 int modulo(int, int); // Fonction modulo pour buffer circulaire (modulo(-1, 3) = 2)
pirottealex 0:fcc396b03bbe 46
pirottealex 0:fcc396b03bbe 47 #endif