LUIS

Dependencies:   mbed

Committer:
pirottealex
Date:
Fri Oct 05 14:55:30 2018 +0000
Revision:
0:43101a0b7a4c
a

Who changed what in which revision?

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