![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
LUIS
digital_filter.h@0:43101a0b7a4c, 2018-10-05 (annotated)
- Committer:
- pirottealex
- Date:
- Fri Oct 05 14:55:30 2018 +0000
- Revision:
- 0:43101a0b7a4c
a
Who changed what in which revision?
User | Revision | Line number | New 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 |