Contenu principal

Concevoir un filtre avec fdesign

Concevez un filtre simple en effectuant les deux étapes suivantes.

  1. Créez un objet de spécification de filtre.

  2. Concevez votre filtre.

Exemple 1. Concevez votre filtre en deux étapes

Supposez que vous vouliez concevoir un filtre passe-bande. De manière générale, un filtre passe-bande est défini comme le montre la figure suivante.

Cet exemple utilise une fréquence d’échantillonnage de Fs = 48 kHz. Ce filtre passe-bande a les spécifications suivantes, définies ici en utilisant le code MATLAB® :

A_stop1 = 60;		% Attenuation in the first stopband = 60 dB
F_stop1 = 8400;		% Edge of the stopband = 8400 Hz
F_pass1 = 10800;	% Edge of the passband = 10800 Hz
F_pass2 = 15600;	% Closing edge of the passband = 15600 Hz
F_stop2 = 18000;	% Edge of the second stopband = 18000 Hz
A_stop2 = 60;		% Attenuation in the second stopband = 60 dB
A_pass = 1;		% Amount of ripple allowed in the passband = 1 dB

Dans les deux étapes suivantes, ces spécifications sont transmises vers la méthode fdesign.bandpass en tant que paramètres.

Étape n° 1

Pour créer un objet de spécification de filtre, évaluez le code suivant à l’invite MATLAB :

d = fdesign.bandpass

Transférez ensuite les spécifications du filtre qui correspondent aux spécifications par défaut : Specificationfst1, fp1, fp2, fst2, ast1, ap, ast2. Cet exemple ajoute fs comme argument d’entrée final pour spécifier la fréquence d’échantillonnage de 48 kHz.

>> BandPassSpecObj = ...
   fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ...
		F_stop1, F_pass1, F_pass2, F_stop2, A_stop1, A_pass, ...
		A_stop2, 48000)
      

Remarque

L’ordre du filtre n'est pas spécifié, ce qui permet un degré de liberté pour le design de l'algorithme afin de réaliser les spécifications. Le design sera d’ordre minimal.

Les paramètres de spécification, tels que Fstop1, prennent tous une valeur par défaut si aucune valeur ne leur a été attribuée. Vous pourrez modifier les valeurs des paramètres de spécification une fois que l’objet de spécification du filtre aura été créé. Par exemple, si vous devez modifier deux valeurs, Fpass2 et Fstop2, utilisez la commande set, qui prend d’abord en entrée l’objet, puis les paires de valeurs des paramètres. Évaluez le code suivant à l’invite MATLAB :

>> set(BandPassSpecObj, 'Fpass2', 15800, 'Fstop2', 18400)   
BandPassSpecObj est le nouvel objet de spécification, qui contient l'ensemble des paramètres de design requis, y compris le type de filtre.

Vous pouvez également modifier les valeurs des paramètres dans les objets de spécification des filtres en y accédant comme s’il s’agissait d’éléments dans un struct array.

>> BandPassSpecObj.Fpass2=15800;

Étape n° 2

Concevez le filtre à l'aide de la commande design. Vous pouvez accéder aux méthodes de design disponibles pour votre objet de spécification en appelant la fonction designmethods. Par exemple, dans ce cas, vous pouvez exécuter la commande

>> designmethods(BandPassSpecObj)


Design Methods for class 
fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin
Après avoir choisi une méthode de design, vous pouvez évaluer ce qui suit à l’invite MATLAB (cet exemple suppose que vous avez choisi 'equiripple') :
>> BandPassFilt = design(BandPassSpecObj, 'equiripple')
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false            
                      

Si DSP System Toolbox™ est installé, vous pouvez également concevoir votre filtre avec un System object™ de filtre. Pour créer un System object de filtre ayant le même objet de spécification BandPassSpecObj, vous pouvez exécuter les commandes

>> designmethods(BandPassSpecObj,...
'SystemObject',true)


Design Methods that support System objects for class
fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin 


>> BandPassFiltSysObj = design(BandPassSpecObj,...
'equiripple','SystemObject',true)


  System: dsp.FIRFilter 

  Properties:
               Structure: 'Direct form'
         NumeratorSource: 'Property'   
               Numerator: [1x44 double]
       InitialConditions: 0            
    FrameBasedProcessing: true         
                                       
  Show fixed-point properties
 
Les méthodes et les options de design disponibles pour les System objects de filtre ne sont pas forcément les mêmes que celles des objets de filtre.

Remarque

Si vous ne spécifiez pas une méthode de design donnée, une méthode par défaut sera utilisée. Par exemple, vous pouvez exécuter la commande

>> BandPassFilt = design(BandPassSpecObj)
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false
et une méthode de design sera sélectionnée automatiquement.