Contenuto principale

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Progettare un filtro con fdesign

Usare i due passaggi seguenti per progettare un filtro semplice.

  1. Creare un oggetto di specifica del filtro.

  2. Progettare il proprio filtro.

Esempio 1. Progettare un filtro in due passaggi

Supponiamo che si voglia progettare un filtro passa banda. Generalmente un filtro passa banda è definito come mostrato nella figura seguente.

In questo esempio, viene usata una frequenza di campionamento di Fs = 48 kHz. Questo filtro passa banda possiede le seguenti specifiche, qui indicate usando il codice 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

Nei due passaggi seguenti, tali specifiche vengono trasmesse come parametri al metodo fdesign.bandpass.

Passaggio 1

Per creare un oggetto di specifica del filtro, valutare il seguente codice al prompt MATLAB:

d = fdesign.bandpass

Quindi, passare le specifiche del filtro che corrispondono all'impostazione predefinita Specification: fst1,fp1,fp2,fst2,ast1,ap,ast2. In questo esempio si aggiunge fs come argomento finale di input per specificare la frequenza di campionamento di 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)
      

Nota

L'ordine del filtro non è specificato, lasciando un margine di libertà per la progettazione dell'algoritmo al fine di raggiungere la specifica. Il progetto sarà un progetto di ordine minimo.

I parametri delle specifiche, come Fstop1, possiedono tutti valori predefiniti se non ne vengono forniti. È possibile cambiare i valori dei parametri delle specifiche dopo che l'oggetto di specifica del filtro è stato creato. Ad esempio, se vi sono due valori da cambiare, Fpass2 e Fstop2, usare il comando set, che prende prima l'oggetto e poi le coppie di valori dei parametri. Valutare il seguente codice al prompt MATLAB:

>> set(BandPassSpecObj, 'Fpass2', 15800, 'Fstop2', 18400)   
BandPassSpecObj è il nuovo oggetto di specifica del filtro che contiene tutti i parametri di progettazione richiesti, incluso il tipo di filtro.

È possibile cambiare anche i valori dei parametri negli oggetti di specifica dei filtri accedendovi come se fossero elementi di un array struct.

>> BandPassSpecObj.Fpass2=15800;

Passaggio 2

Progettare il filtro utilizzando il comando design. È possibile accedere ai metodi di progettazione disponibili dell'oggetto della specifica richiamando la funzione designmethods. Ad esempio, in questo caso, è possibile eseguire il comando

>> designmethods(BandPassSpecObj)


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


butter
cheby1
cheby2
ellip
equiripple
kaiserwin
Dopo aver scelto quale metodo di progettazione usare, è possibile valutare quanto segue al prompt MATLAB (questo esempio presuppone la scelta di 'equiripple'):
>> BandPassFilt = design(BandPassSpecObj, 'equiripple')
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false            
                      

Se si è installato DSP System Toolbox™, è possibile progettare il proprio filtro anche con un filtro System object™. Per creare un oggetto System object con la stessa specifica dell'oggetto BandPassSpecObj, è possibile eseguire i comandi

>> 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
 
I metodi di progettazione disponibili e le opzioni di progettazione dei System object del filtro non sono necessariamente gli stessi degli oggetti del filtro.

Nota

Se non si specifica un metodo di progettazione, ne verrà utilizzato uno predefinito. Ad esempio, è possibile eseguire il comando

>> BandPassFilt = design(BandPassSpecObj)
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false
e verrà selezionato automaticamente un metodo di progettazione.

Per verificare il proprio lavoro, è possibile tracciare la risposta in magnitudine del filtro utilizzando lo strumento Filter Visualization. Verificare che tutti i parametri di progettazione siano rispettati:

>> fvtool(BandPassFilt) %plot the filter magnitude response
Se si è installato DSP System Toolbox, lo strumento Filter Visualization produce la seguente figura con le linee rosse tratteggiate che indicano le bande di transizione e l’unity gain (0 in dB) sulla banda passante.