Mini boîte à outil de conception CIC

Les filtres CIC sont très utiles dans les applications où l'on a besoin de changer la fréquence d'échantillonnage d'un signal dans un rapport important, que ce soit pour la décimation (réduction de la fréquence d'échantillonnage : par exemple systèmes d'acquisition sur-échantillonnés, ADC sigma-delta) ou l'interpolation (DAC).

L'avantage de ces filtres est qu'ils sont particulièrement économes en terme de complexité (aucune multiplication, seule des intégrateurs et des différenciateurs sont nécessaires), ce qui permet de les utiliser même à des fréquences d'échantillonnage très élevées.

Cette mini-toolbox pour SCILAB vous permet d'évaluer (en terme de réponse fréquentielle) des filtres CIC, de concevoir ce que l'on appelle un filtre de compensation, et de simuler le filtrage CIC sur de vraies données.

Installation

  • Si ce n'est pas déjà fait, installez SCILAB (logiciel gratuit de calcul numérique).
  • Télécharger la mini-boîte à outil de conception CIC, et décompresser l'archive.
  • Dans la console scilab, saisir la commande :
    exec("...chemin vers la boite à outil...\loader.sce");
  • Maintenant toutes les fonctions sont disponible dans la console SCILAB (voir la page API pour la documentation des fonctions).

Exemples d'utilisation


Calcul de réponse fréquentielle

A partir des trois paramètres R, N et M d'un filtre CIC (pour des explications plus détaillées sur ces notations et sur le fonctionnement d'un filtre CIC, vous pouvez vous reporter à ce petit tutoriel), on peut calculer la réponse fréquentielle et les repliements de spectre en sortie de filtre en appelant simplement la commande suivante :

cic_analysis(R, N, M, Fin);

Les courbes suivantes sont alors tracées :

Réponse fréquentielle d'un filtre CIC (avant décimation)
Filtre CIC / avant décimation : réponse fréquentielle
Réponse fréquentielle d'un filtre CIC et repliement de spectre (après décimation)
Filtre CIC / après décimation : réponse fréquentielle et repliement de spectre

Conception d'un filtre de compensation

Dans cet exemple, on souhaite décimer un signal suivant les spécifications suivantes :

  • Fréquence d'entrée (Fint) : 6,4 KHz
  • Facteur de décimation CIC (R) : 1/16 (fréquence à la sortie du filtre CIC : 400 Hz)
  • Facteur de décimation du filtre de compensation (R2) : 2 (fréquence de sortie en fin de chaîne : 200 Hz)
  • Bande passante du signal d'intérêt : 80 Hz (l'étage de compensation FIR fonctionnera à 400 Hz, et sera conçu de manière à avoir une fréquence de coupure à 80 Hz)
  • Nombre de coefficients du filtre de compensation : 60

Avec la mini-toolbox, cela peut se faire avec la commande suivante :

R=16, N=5, M=1, Fin=6400, R2=2, Fcut=80, ntaps=60;
cfir = cic_comp_design(R,N,M,Fin,R2,Fcut,ntaps);
Filtre de compensation FIR (réponse impulsionnelle)
Filtre de compensation FIR (réponse impulsionnelle)
Filtre global (CIC et FIR de compensation)
Filtre global (CIC et FIR de compensation)

Comme vous pouvez le voir sur la figure ci-dessus, le filtre de compensation (courbe rose), travaillant à 400 Hz, c'est-à-dire après décimation par un rapport de 16, a une réponse fréquentielle périodique (repliement tous les 400 Hz), ce qui est normal. Le filtre global (CIC et FIR de compensation) a la réponse désirée.


Simulation de filtrage CIC

Dans cet exemple, on simule la décimation d'un signal de fréquence 10 MHz vers une fréquence de 625 KHz (le code source complet de cet exemple est décrit dans la documentation de la fonction cic_process).

Exemple de décimation par filtre CIC
Exemple de décimation par filtre CIC