LUIS

Dependencies:   mbed

Committer:
pirottealex
Date:
Fri Oct 05 14:54:02 2018 +0000
Revision:
0:7a912bfb5a4e
a

Who changed what in which revision?

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