Main Content

fdesign.nyquist

Nyquist filter specification

Syntax

d = fdesign.nyquist
d = fdesign.nyquist(l, spec)
d = fdesign.nyquist(l,spec,specvalue1,specvalue2,...)
d = fdesign.nyquist(l,specvalue1,specvalue2)
d = fdesign.nyquist(...,fs)
d = fdesign.nyquist(...,magunits)

Description

d = fdesign.nyquist constructs a Nyquist or L-band filter specification object d, applying default values for the properties tw and ast. By default, the filter object designs a minimum-order half-band (L=2) Nyquist filter.

Using fdesign.nyquist along with design method generates a System object™, if the 'SystemObject' flag in the design method is set to true.

d = fdesign.nyquist(l, spec) constructs object d and sets its Specification property to spec. Use l to specify the desired value for L. L = 2 designs a half-band FIR filter, L = 3 a third-band FIR filter, and so on. When you use a Nyquist filter as an interpolator, l or L is the interpolation factor. The first input argument must be l when you are not using the default syntax d = fdesign.nyquist.

Entries in the spec represent various filter response features, such as the filter order, that govern the filter design. Valid entries for spec are shown below. The entries are not case sensitive.

  • tw,ast (default option)

  • n,tw

  • n

  • n,ast

where,

  • ast — attenuation in the stop band in decibels (the default units).

  • n — filter order.

  • tw — width of the transition region between the pass and stop bands. Specified in normalized frequency units.

The filter design methods that apply to a Nyquist filter specification object change depending on the Specification option. Use designmethods to determine which design method applies to an object and its specification option. Different filter design methods also have options that you can specify. Use designopts with the design method to see the available options. For example:

f=fdesign.nyquist(4,'N,TW');
designmethods(f)

d = fdesign.nyquist(l,spec,specvalue1,specvalue2,...) constructs an object d and sets its specification to spec, and the specification values to specvalue1, specvalue2, and so on at construction time.

d = fdesign.nyquist(l,specvalue1,specvalue2) constructs an object d with the values you provide in l, specvalue1,specvalue2 as the values for l, tw and ast.

d = fdesign.nyquist(...,fs) adds the argument fs, specified in Hz to define the sampling frequency to use. In this case, all frequencies in the specifications are in Hz as well.

d = fdesign.nyquist(...,magunits) specifies the units for any magnitude specification you provide in the input arguments. magunits can be one of

  • linear — specify the magnitude in linear units

  • dB — specify the magnitude in dB (decibels)

  • squared — specify the magnitude in power units

When you omit the magunits argument, fdesign assumes that all magnitudes are in decibels. Note that fdesign stores all magnitude specifications in decibels (converting to decibels when necessary) regardless of how you specify the magnitudes.

Limitations of the Nyquist fdesign Object

Using Nyquist filter specification objects with the equiripple design method imposes a few limitations on the resulting filter, caused by the equiripple design algorithm.

  • When you request a minimum-order design from equiripple with your Nyquist object, the design algorithm might not converge and can fail with a filter convergence error.

  • When you specify the order of your desired filter, and use the equiripple design method, the design might not converge.

  • Generally, the following specifications, alone or in combination with one another, can cause filter convergence problems with Nyquist objects and the equiripple design method.

    • very high order

    • small transition width

    • very large stopband attenuation

Note that halfband filters (filters where band = 2) do not exhibit convergence problems.

When convergence issues arise, either in the cases mentioned or in others, you might be able to design your filter with the kaiserwin method.

In addition, if you use Nyquist objects to design decimators or interpolators (where the interpolation or decimation factor is not a prime number), using multistage filter designs might be your best approach.

Examples

collapse all

These examples show how to construct a Nyquist filter specification object.

First, create a default specifications object without using input arguments.

d = fdesign.nyquist; %#ok

Now create an object by passing a specification type 'n,ast' - the resulting object uses default values for n and ast.

d = fdesign.nyquist(2,'n,ast'); %#ok

Create another Nyquist filter object, passing the specification values to the object rather than accepting the default values for n and ast.

d = fdesign.nyquist(3,'n,ast',42,80) %#ok
d = 
  nyquist with properties:

               Response: 'Nyquist'
          Specification: 'N,Ast'
            Description: {2x1 cell}
    NormalizedFrequency: 1
            FilterOrder: 42
                  Astop: 80
                   Band: 3

Finally, pass the filter specifications that correspond to the default Specification - tw,ast. When you pass only the values, fdesign.nyquist assumes the default Specification option.

d = fdesign.nyquist(4,.01,80)
d = 
  nyquist with properties:

               Response: 'Nyquist'
          Specification: 'TW,Ast'
            Description: {2x1 cell}
    NormalizedFrequency: 1
        TransitionWidth: 0.0100
                  Astop: 80
                   Band: 4

Now design a Nyquist filter using the kaiserwin design method.

hd = design(d,'kaiserwin','SystemObject',true);

Create two equiripple Nyquist 4th-band filters with and without a nonnegative zero phase response:

f = fdesign.nyquist(4,'N,TW',12,0.2);

Equiripple Nyquist 4th-band filter with nonnegative zero phase response

Hd1 = design(f,'equiripple','zerophase',true,'SystemObject',true);

Equiripple Nyquist 4th-band filter with 'ZeroPhase' set to false 'zerophase',false is the default

Hd2 = design(f,'equiripple','zerophase',false,'SystemObject',true);

Obtain real-valued amplitudes (not magnitudes)

[Hr_zerophase,~] = zerophase(Hd1);
[Hr,W] = zerophase(Hd2);

Plot and compare response

plot(W,Hr_zerophase,'k','linewidth',2);
xlabel('Radians/sample'); ylabel('Amplitude');
hold on;
plot(W,Hr,'r');
axis tight; grid on;
legend('with ''ZeroPhase'', true','with ''ZeroPhase'' false');

Figure contains an axes object. The axes object with xlabel Radians/sample, ylabel Amplitude contains 2 objects of type line. These objects represent with 'ZeroPhase', true, with 'ZeroPhase' false.

Note that the amplitude of the zero phase response (black line) is nonnegative for all frequencies.

The 'ZeroPhase' option is valid only for equiripple Nyquist designs with the 'N,TW' specification. You cannot specify 'MinPhase' and 'ZeroPhase' to be simultaneously 'true'.

Version History

Introduced in R2011a