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