Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Análisis de filtros mediante FVTool

En este ejemplo se muestra cómo utilizar varias funciones de análisis de filtro según una sola ventana de figura mediante la herramienta de visualización de filtros (FVTool), una interfaz gráfica de usuario disponible en el cuadro de herramientas de procesamiento de señales™.

FVTool también tiene una interfaz de programa de aplicación (API) que le permite interactuar con la GUI desde la línea de comandos. Esto le permite integrar FVTool en otras aplicaciones.

Lanzamiento de FVTool

Queremos crear un filtro de paso bajo con una frecuencia de banda de paso de 0,4o rad/sample, una frecuencia de banda de parada de 0,6o rad/sample, una ondulación de banda de paso de 1 dB y una atenuación de banda de parada de 80 dB. Diseñaremos los filtros utilizando algunas de las herramientas de diseño de filtros de Signal Processing Toolbox y luego analizaremos los resultados en FVTool.

Diseñar un filtro FIR equiripple de paso bajo

Df1 = designfilt('lowpassfir','PassbandFrequency',0.4,...                               'StopbandFrequency',0.6,...                               'PassbandRipple',1,...                               'StopbandAttenuation',80,...                               'DesignMethod','equiripple');

Diseñar un filtro IIR elíptico de paso bajo

Df2 = designfilt('lowpassiir','PassbandFrequency',0.4,...                               'StopbandFrequency',0.6,...                               'PassbandRipple',1,...                               'StopbandAttenuation',80,...                               'DesignMethod','ellip');

Inicie FVTool con los objetos de filtro y devuelva un asa a FVTool que nos permita reutilizar la misma figura de FVTool.

hfvt = fvtool(Df1, Df2);

Adición y eliminación de filtros

Podemos observar que ambos filtros cumplen con las especificaciones de diseño, pero también queremos ver qué tan bien funciona el diseño Chebyshev Tipo II.

Puede agregar un filtro a FVTool mediante la función ADDFILTER.

Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,...                               'StopbandFrequency',0.6,...                               'PassbandRipple',1,...                               'StopbandAttenuation',80,...                               'DesignMethod','cheby2'); addfilter(hfvt, Df3);

Para identificar qué línea del trazado pertenece a ese filtro, puede agregar una leyenda mediante la función LEGEND del identificador FVTool.

legend(hfvt, 'Equiripple', 'Elliptic', 'Chebyshev Type II');

Puede quitar un filtro de FVTool mediante la función DELETEFILTER y pasando el índice de los filtros que desea eliminar.

deletefilter(hfvt, [1 3]);

Cambio de los parámetros de análisis

El identificador que devuelve FVTool contiene propiedades que le permiten interactuar con el filtro y el análisis actual.

Para ver todas las propiedades disponibles, puede utilizar el comando GET. Las primeras propiedades son las de una figura MATLAB® normal. Las últimas catorce propiedades son específicas de FVTool. Los últimos seis de estos (de FrequencyScale a MagnitudeDisplay) son específicos del análisis.

s = get(hfvt);

% Keep the last 14 properties c = struct2cell(s); f = fieldnames(s); s = cell2struct(c(end-14:end),f(end-14:end),1)
s = struct with fields:
                      Tag: 'filtervisualizationtool'
            UIContextMenu: [0x0 GraphicsPlaceholder]
                 UserData: []
                  Visible: 'on'
      NormalizedFrequency: 'on'
    NormalizeMagnitudeto1: 'off'
         MagnitudeDisplay: 'Magnitude (dB)'
           NumberofPoints: 8192
           FrequencyRange: '[0, pi)'
            PolyphaseView: 'off'
           FrequencyScale: 'Linear'
                 Analysis: 'magnitude'
          FrequencyVector: [1x256 double]
            ShowReference: 'on'
        OverlayedAnalysis: ''

Todos los parámetros que están disponibles en el cuadro de diálogo Parámetros de análisis de FVTool también están disponibles como propiedades del objeto FVTool. El comando SET con solo dos argumentos de entrada devuelve todos los valores posibles.

set(hfvt, 'MagnitudeDisplay')
ans = 1x4 cell array
  Columns 1 through 3

    {'Magnitude'}    {'Magnitude (dB)'}    {'Magnitude squared'}

  Column 4

    {'Zero-phase'}

Gire la pantalla a 'Magnitude Squared'

hfvt.MagnitudeDisplay = 'Magnitude Squared';

Obtener todos los valores posibles para la propiedad 'Analysis'

set(hfvt, 'Analysis')
ans = 1x12 cell array
  Columns 1 through 5

    {'magnitude'}    {'phase'}    {'freq'}    {'grpdelay'}    {'phasedelay'}

  Columns 6 through 10

    {'impulse'}    {'step'}    {'polezero'}    {'coefficients'}    {'info'}

  Columns 11 through 12

    {'magestimate'}    {'noisepower'}

Ahora cambiemos el análisis para ver la respuesta de retardo de grupo del filtro.

hfvt.Analysis = 'grpdelay';

El comando GET devolverá nuevos parámetros de análisis para el nuevo análisis.

GroupDelayUnits = hfvt.GroupDelayUnits;

Superposición de dos análisis

También nos gustaría ver cómo el retraso del grupo y la respuesta de magnitud se superponen en el dominio de frecuencia.

Puede superponer dos análisis en FVTool que compartan un eje X común (tiempo o frecuencia) estableciendo la propiedad 'OverlayedAnalysis'.

set(hfvt, 'OverlayedAnalysis', 'magnitude', 'Legend', 'On')

Para desactivar el análisis superpuesto, simplemente establezca la propiedad 'OverlayedAnalysis' en ''.

hfvt.OverlayedAnalysis = '';

Interactuar con FVTool como una ventana de figura

La ventana FVTool también se puede anotar como una ventana de figura normal.

La figura de FVTool se comporta como una ventana de figura normal. Esto le permite utilizar las funciones de cuadrícula y eje de MATLAB.

grid on axis([.3 .45 5 25]);

El eje también es accesible desde la línea de comandos. Esto le permite cambiar el título y las etiquetas.

title('Group Delay of an Elliptic filter'); xlabel('Frequency (normalized to 1)'); ylabel('Group Delay in samples');  htext = text(.35, 23, 'Maximum Group Delay');

FVTool no eliminará automáticamente anotaciones adicionales de su análisis, puede hacerlo eliminando el identificador en sí. Puede cerrar la figura de FVTool llamando a la función close en el identificador de FVTool.

delete(htext); close(hfvt)