Contenido principal

Diseñar un filtro con fdesign

Siga los dos pasos siguientes para diseñar un filtro sencillo.

  1. Cree un objeto de especificación de filtro.

  2. Diseñe su filtro.

Ejemplo 1. Diseñar un filtro en dos pasos

Supongamos que quiere diseñar un filtro paso banda. Normalmente, un filtro paso banda se define como se muestra en la siguiente figura.

En este ejemplo, se utiliza una frecuencia de muestreo de Fs = 48 kHz. Este filtro paso banda tiene las siguientes especificaciones, especificadas aquí mediante el código de 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

En los pasos siguientes, estas especificaciones se transfieren al método fdesign.bandpass como parámetros.

Paso 1

Para crear un objeto de especificación de filtro, evalúe el siguiente código en la línea de comandos de MATLAB:

d = fdesign.bandpass

Ahora, transfiera las especificaciones del filtro que se correspondan con la Specification predeterminada: fst1,fp1,fp2,fst2,ast1,ap,ast2. Este ejemplo añade fs como último argumento de entrada para especificar la frecuencia de muestreo 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)
      

Nota

No se especifica el orden del filtro, lo que permite un grado de libertad en el diseño del algoritmo con el fin de lograr la especificación. El diseño será un diseño de orden mínimo.

Todos los parámetros de la especificación, como Fstop1, reciben valores predeterminados cuando no se proporciona ninguno. Puede cambiar los valores de los parámetros de la especificación después de que se haya creado el objeto de especificación de filtro. Por ejemplo, si hay que cambiar dos valores, Fpass2 y Fstop2, utilice el comando set, que toma primero el objeto y luego los pares de valores de los parámetros. Evalúe el siguiente código en la línea de comandos de MATLAB:

>> set(BandPassSpecObj, 'Fpass2', 15800, 'Fstop2', 18400)   
BandPassSpecObj es el nuevo objeto de especificación de filtro que contiene todos los parámetros de diseño necesarios, incluido el de tipo de filtro.

También puede cambiar los valores de los parámetros de los objetos de especificación de filtros accediendo a ellos como si fueran elementos de un arreglo struct.

>> BandPassSpecObj.Fpass2=15800;

Paso 2

Diseñe el filtro mediante el comando design. Puede acceder a los métodos de diseño disponibles para el objeto de especificación llamando a la función designmethods. Por ejemplo, en este caso, puede ejecutar el comando

>> designmethods(BandPassSpecObj)


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


butter
cheby1
cheby2
ellip
equiripple
kaiserwin
Después de seleccionar un método de diseño, puede evaluar lo siguiente en la línea de comandos de MATLAB (este ejemplo supone que ha seleccionado "equiripple"):
>> BandPassFilt = design(BandPassSpecObj, 'equiripple')
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false            
                      

Si tiene DSP System Toolbox™ instalada, puede diseñar su filtro con un System object™ de filtro. Para crear un System object de filtro con el mismo objeto de especificación BandPassSpecObj, puede ejecutar los comandos

>> 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
 
Los métodos de diseño y las opciones de diseño disponibles de System object de filtro no son necesariamente los mismos que los de los objetos de filtro.

Nota

Si no especifica un método de diseño, se utilizará un método predeterminado. Por ejemplo, puede ejecutar el comando

>> BandPassFilt = design(BandPassSpecObj)
 
BandPassFilt =
 
     FilterStructure: 'Direct-Form FIR'
          Arithmetic: 'double'         
           Numerator: [1x44 double]    
    PersistentMemory: false
y se seleccionará automáticamente un método de diseño.