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

Este ejemplo muestra cómo utilizar varias funciones de análisis de filtro en una sola ventana de figura utilizando la herramienta de visualización de filtros (FVTool), una interfaz gráfica de usuario disponible en la caja de herramientas de procesamiento de señal™.

FVTool también tiene una interfaz de programa de aplicaciones (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,4 π Rad/Sample, una frecuencia de banda de parada de 0,6 π Rad/Sample, una ondulación de banda de paso de 1 dB y una atenuación de banda de stopband de 80 dB. Vamos a diseñar los filtros utilizando algunas de las herramientas de diseño de filtro de Signal Processing Toolbox y luego analizar los resultados en FVTool.

Diseñe un filtro FIR de equiripple de paso bajo

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

Diseñe 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 identificador 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 se comporta 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 de la gráfica pertenece a qué filtro, puede Agregar una leyenda mediante la función LEGEND del identificador FVTool.

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

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

deletefilter(hfvt, [1 3]);

Cambiar 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 regular de MATLAB®. 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'
            ShowReference: 'on'
           FrequencyScale: 'Linear'
            PolyphaseView: 'off'
    NormalizeMagnitudeto1: 'off'
           FrequencyRange: '[0, pi)'
      NormalizedFrequency: 'on'
          FrequencyVector: [1x256 double]
           NumberofPoints: 8192
        OverlayedAnalysis: ''
                 Analysis: 'magnitude'
         MagnitudeDisplay: 'Magnitude (dB)'

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 ' magnitud cuadrada '

hfvt.MagnitudeDisplay = 'Magnitude Squared';

Obtenga 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 vamos a cambiar 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;

Sobreponer dos análisis

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

Puede superponer cualquier análisis de dos 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 supergastado, simplemente establezca la propiedad ' OverlayedAnalysis ' en ' '.

hfvt.OverlayedAnalysis = '';

Interactuar con FVTool como una ventana de figura

La ventana de 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 propio manejador. Puede cerrar la figura de FVTool llamando a la función Close en el identificador de FVTool.

delete(htext); close(hfvt)