Main Content

FVTool

Filter Visualization Tool

Description

Filter Visualization Tool is an interactive app that enables you to display and analyze the responses, coefficients, and other information of a filter. You can also synchronize FVTool and Filter Designer to immediately visualize any changes made to a filter design.

In the app, you can view:

  • Magnitude response

  • Phase response

  • Group delay

  • Phase delay

  • Impulse response

  • Step response

  • Pole-zero plot

  • Filter coefficients

  • Filter information

For more information, see Analysis Types.

If you have installed the DSP System Toolbox™, FVTool can also visualize the frequency response of a filter System object™. If you need to filter streaming data in real time, using System objects is the recommended approach. For more information, see fvtool (DSP System Toolbox).

Filter Visualization Tool

Open the FVTool

FVTool can be opened programmatically using one of the methods described in Programmatic Use.

Examples

expand all

Consider a 6th-order elliptic filter with a passband ripple of 3 dB, a stopband attenuation of 50 dB, a sample rate of 1 kHz, and a normalized passband edge of 300 Hz. Display the magnitude response of the filter.

[b,a] = ellip(6,3,50,300/500);
fvtool(b,a)

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

Design a 50th-order bandpass FIR filter with stopband frequencies of 150 Hz and 350 Hz and passband frequencies of 200 Hz and 300 Hz. The sample rate is 1000 Hz. Visualize the magnitude and phase response of the filter.

N = 50;
Fstop1 = 150;
Fstop2 = 350;

Fpass1 = 200;
Fpass2 = 300;

Fs = 1e3;

bpFilt = designfilt("bandpassfir",FilterOrder=N, ...
StopbandFrequency1=Fstop1,StopbandFrequency2=Fstop2,...
PassbandFrequency1=Fpass1,PassbandFrequency2=Fpass2,...
SampleRate=Fs);

fvtool(bpFilt,Analysis="freq")

Figure Figure 1: Magnitude Response (dB) and Phase Response contains an axes object. The axes object with title Magnitude Response (dB) and Phase Response, xlabel Frequency (Hz), ylabel Magnitude (dB) contains an object of type line.

Select the Analysis Parameters button in the toolstrip. An Analysis Parameters window appears that shows the parameters associated with the plot.

fvtool_analysisparams2.png

Display the magnitude response of a 6th-order elliptic filter. Specify a passband ripple of 3 dB, a stopband attenuation of 50 dB, a sample rate of 1 kHz, and a normalized passband edge of 300 Hz. Obtain the handle for FVTool.

[b,a] = ellip(6,3,50,300/500);
h = fvtool(b,a)

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude (dB) contains an object of type line.

h = 
  Figure (filtervisualizationtool) with properties:

      Number: []
        Name: 'Figure 1: Magnitude Response (dB)'
       Color: [0.9400 0.9400 0.9400]
    Position: [348 376 583 437]
       Units: 'pixels'

  Use GET to show all properties

Use the FVTool handle to display the phase response of the filter.

h.Analysis = "phase"

Figure Figure 1: Phase Response contains an axes object. The axes object with title Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Phase (radians) contains an object of type line.

h = 
  Figure (filtervisualizationtool) with properties:

      Number: []
        Name: 'Figure 1: Phase Response'
       Color: [0.9400 0.9400 0.9400]
    Position: [1 1 1024 657]
       Units: 'pixels'

  Use GET to show all properties

Turn on the plot legend and add text.

legend(h,"Phase plot")

Figure Figure 1: Phase Response contains an axes object. The axes object with title Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Phase (radians) contains an object of type line. This object represents Phase plot.

Specify a sample rate of 1 kHz. Display the two-sided centered response.

h.Fs = 1000;
h.FrequencyRange = "[-Fs/2, Fs/2)"

Figure Figure 1: Phase Response contains an axes object. The axes object with title Phase Response, xlabel Frequency (Hz), ylabel Phase (radians) contains an object of type line. This object represents Phase plot.

h = 
  Figure (filtervisualizationtool) with properties:

      Number: []
        Name: 'Figure 1: Phase Response'
       Color: [0.9400 0.9400 0.9400]
    Position: [1 1 1024 657]
       Units: 'pixels'

  Use GET to show all properties

View the all the properties of the plot. The properties specific to FVTool are at the end of the list.

get(h)
                     Grid: on
                   Legend: 'on'
               DesignMask: 'off'
          SOSViewSettings: [1x1 dspopts.sosview]
                       Fs: 1000
                 Alphamap: [0 0.0159 0.0317 0.0476 0.0635 0.0794 0.0952 0.1111 0.1270 0.1429 0.1587 0.1746 0.1905 0.2063 0.2222 0.2381 0.2540 0.2698 0.2857 0.3016 0.3175 0.3333 0.3492 0.3651 0.3810 0.3968 0.4127 0.4286 0.4444 0.4603 ... ] (1x64 double)
          CloseRequestFcn: 'closereq'
                    Color: [0.9400 0.9400 0.9400]
                 Colormap: [256x3 double]
              ContextMenu: [0x0 GraphicsPlaceholder]
              CurrentAxes: [1x1 Axes]
         CurrentCharacter: ''
            CurrentObject: [0x0 GraphicsPlaceholder]
             CurrentPoint: [0 0]
             DockControls: off
                 FileName: ''
            IntegerHandle: off
           InvertHardcopy: on
              KeyPressFcn: ''
            KeyReleaseFcn: ''
                     Name: 'Figure 1: Phase Response'
                 NextPlot: 'add'
              NumberTitle: off
               PaperUnits: 'inches'
         PaperOrientation: 'portrait'
            PaperPosition: [-0.8700 2.2150 10.2400 6.5700]
        PaperPositionMode: 'auto'
                PaperSize: [8.5000 11]
                PaperType: 'usletter'
                  Pointer: 'arrow'
        PointerShapeCData: [16x16 double]
      PointerShapeHotSpot: [1 1]
                 Position: [1 1 1024 657]
                 Renderer: 'opengl'
             RendererMode: 'auto'
                   Resize: on
                ResizeFcn: @(~,~)fix_listbox_position(this,hFVT)
            SelectionType: 'normal'
                  ToolBar: 'none'
                     Type: 'figure'
                    Units: 'pixels'
      WindowButtonDownFcn: ''
    WindowButtonMotionFcn: ''
        WindowButtonUpFcn: ''
        WindowKeyPressFcn: ''
      WindowKeyReleaseFcn: ''
     WindowScrollWheelFcn: ''
              WindowStyle: 'docked'
             BeingDeleted: off
            ButtonDownFcn: ''
                 Children: [5x1 Graphics]
                 Clipping: on
                CreateFcn: ''
                DeleteFcn: ''
               BusyAction: 'queue'
         HandleVisibility: 'off'
                  HitTest: on
            Interruptible: on
                   Parent: [1x1 Root]
                 Selected: off
       SelectionHighlight: on
                      Tag: 'filtervisualizationtool'
                 UserData: []
                  Visible: on
           NumberofPoints: 8192
        OverlayedAnalysis: ''
               PhaseUnits: 'Radians'
      NormalizedFrequency: 'off'
           FrequencyScale: 'Linear'
          FrequencyVector: [0 0.0039 0.0078 0.0118 0.0157 0.0196 0.0235 0.0275 0.0314 0.0353 0.0392 0.0431 0.0471 0.0510 0.0549 0.0588 0.0627 0.0667 0.0706 0.0745 0.0784 0.0824 0.0863 0.0902 0.0941 0.0980 0.1020 0.1059 0.1098 0.1137 ... ] (1x256 double)
            PolyphaseView: 'off'
            ShowReference: 'on'
             PhaseDisplay: 'Phase'
                 Analysis: 'phase'
           FrequencyRange: '[-Fs/2, Fs/2)'

Related Examples

Programmatic Use

expand all

fvtool(b,a) opens FVTool and displays the magnitude response of the digital filter defined with numerator b and denominator a. Specify b and a coefficients in ascending order of power z-1.

fvtool(sos) opens FVTool and displays the magnitude response of the digital filter defined by the L-by-6 matrix of second order sections:

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

The rows of sos contain the numerator and denominator coefficients bik and aik of the cascade of second-order sections of H(z):

H(z)=gk=1LHk(z)=gk=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

The number of sections L must be greater than or equal to 2. If the number of sections is less than 2, fvtool considers the input to be a numerator vector.

fvtool(d) opens FVTool and displays the magnitude response of a digital filter d. Use designfilt to generate d based on frequency-response specifications.

fvtool(b1,a1,b2,a2,...,bN,aN) opens FVTool and displays the magnitude responses of multiple filters defined with numerators b1, …, bN and denominators a1, ..., aN.

fvtool(sos1,sos2,...,sosN) opens FVTool and displays the magnitude responses of multiple filters defined with second order section matrices sos1, sos2, ..., sosN.

fvtool(Hd) opens FVTool and displays the magnitude responses for the dfilt filter object Hd or the array of dfilt filter objects.

fvtool(Hd1,Hd2,...,HdN) opens FVTool and displays the magnitude responses of the filters in the dfilt objects Hd1, Hd2, ..., HdN.

h = fvtool(___) returns a figure handle h. You can use this handle to interact with FVTool from the command line. For more information, see Controlling FVTool from the MATLAB Command Line.

More About

expand all

Version History

Introduced before R2006a

expand all