Main Content

Bandpass filter design specification object

The `fdesign.bandpass`

function returns a
`bandpass`

filter design specification object that contains
specifications for a filter such as passband frequency, stopband frequency, passband
ripple, and filter order. Use the `design`

function to design the filter from the filter design
specifications object.

For more control options, see Filter Design Procedure. For a complete workflow, see Design a Filter in Fdesign — Process Overview.

constructs a bandpass filter design specifications object with the following default
values: `bandpassSpecs`

= fdesign.bandpass

First stopband frequency set to 0.35.

First passband frequency set to 0.45.

Second passband frequency set to 0.55.

Second stopband frequency set to 0.65.

First stopband attenuation set to 60 dB.

Passband ripple set to 1dB.

Second stopband attenuation set to 60 dB.

constructs a bandpass filter specification object with a particular filter order,
stopband frequency, passband frequency, and other specification options. Indicate
the options you want to specify in the expression `bandpassSpecs`

= fdesign.bandpass(`spec`

,`value1,...,valueN`

)`spec`

. After
the expression, specify a value for each option. If you do not specify values after
the `spec`

argument, the function assumes the default
values.

provides the sample rate in Hz of the signal to be filtered. `bandpassSpecs`

= fdesign.bandpass(___,`Fs`

)`Fs`

must be specified as a scalar trailing the other numerical values provided. In this
case, all frequencies in the specifications are in Hz as well.

The design specification
`fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',.4,.5,.6,.7,60,1,80)`

designs the same filter as
`fdesign.bandstop('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',1600,2000,2400,2800,60,1,80,8000)`

provides the units for the specified magnitude. `bandpassSpecs`

= fdesign.bandpass(___,`magunits`

)`magunits`

can be
one of the following: `'linear'`

, `'dB'`

, or
`'squared'`

. If this argument is omitted, the object assumes
the units of magnitude specification to be `'dB'`

. The magnitude
specifications are always converted and stored in decibels regardless of how they
were specified. If `Fs`

is provided, `magunits`

must follow `Fs`

in the input argument list.

Design a constrained-band FIR equiripple filter of order 100 with a passband of [1, 1.4] kHz. Both stopband attenuation values are constrained to 60 dB. The sample rate is 10 kHz.

Create a `bandpass`

filter design specification object using the `fdesign.bandpass`

function and specify these design parameters.

`bandpassSpecs = fdesign.bandpass('N,Fst1,Fp1,Fp2,Fst2,C',100,800,1e3,1.4e3,1.6e3,1e4);`

Constrain the two stopbands with a stopband attenuation of 60 dB.

bandpassSpecs.Stopband1Constrained = true; bandpassSpecs.Astop1 = 60; bandpassSpecs.Stopband2Constrained = true; bandpassSpecs.Astop2 = 60;

Design the bandpass filter using the `design`

function. The resulting filter is a `dsp.FIRFilter`

System object™. For details on how to apply this filter on streaming data, refer to `dsp.FIRFilter`

.

`bandpassFilt = design(bandpassSpecs,'Systemobject',true)`

bandpassFilt = dsp.FIRFilter with properties: Structure: 'Direct form' NumeratorSource: 'Property' Numerator: [1x101 double] InitialConditions: 0 Show all properties

Visualize the frequency response of the designed filter using `fvtool`

.

fvtool(bandpassFilt)

Measure the frequency response characteristics of the filter using `measure`

. The passband ripple is slightly over 2 dB. Because the design constrains both stopbands, you cannot constrain the passband ripple.

measure(bandpassFilt)

ans = Sample Rate : 10 kHz First Stopband Edge : 800 Hz First 6-dB Point : 946.7621 Hz First 3-dB Point : 975.1807 Hz First Passband Edge : 1 kHz Second Passband Edge : 1.4 kHz Second 3-dB Point : 1.4248 kHz Second 6-dB Point : 1.4533 kHz Second Stopband Edge : 1.6 kHz First Stopband Atten. : 60.0614 dB Passband Ripple : 2.1443 dB Second Stopband Atten. : 60.0399 dB First Transition Width : 200 Hz Second Transition Width : 200 Hz

Design a Butterworth IIR bandpass filter. The filter design procedure is:

Specify the filter design specifications using a

`fdesign`

function.Pick a design method provided by the

`designmethods`

function.To determine the available design options to choose from, use the

`designoptions`

function.Design the filter using the

`design`

function.

Construct a default bandpass filter design specification object using `fdesign.bandpass`

.

bandpassSpecs = fdesign.bandpass

bandpassSpecs = bandpass with properties: Response: 'Bandpass' Specification: 'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2' Description: {7x1 cell} NormalizedFrequency: 1 Fstop1: 0.3500 Fpass1: 0.4500 Fpass2: 0.5500 Fstop2: 0.6500 Astop1: 60 Apass: 1 Astop2: 60

Determine the available designmethods using the `designmethods`

function. To design a Butterworth filter, pick `butter`

.

`designmethods(bandpassSpecs,'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

When designing the filter, you can specify additional design options. View a list of options using the `designoptions`

function. The function also shows the default design options the filter uses.

`designoptions(bandpassSpecs,'butter')`

`ans = `*struct with fields:*
FilterStructure: {1x6 cell}
SOSScaleNorm: 'ustring'
SOSScaleOpts: 'fdopts.sosscaling'
MatchExactly: {'passband' 'stopband'}
SystemObject: 'bool'
DefaultFilterStructure: 'df2sos'
DefaultMatchExactly: 'stopband'
DefaultSOSScaleNorm: ''
DefaultSOSScaleOpts: [1x1 fdopts.sosscaling]
DefaultSystemObject: 0

Use the `design`

function to design the filter. Pass `'butter'`

and the specifications given by variable `bandpassSpecs`

, as input arguments. Specify the `'matchexactly'`

design option to `'passband'`

.

bpFilter = design(bandpassSpecs,'butter','matchexactly','passband','SystemObject',true)

bpFilter = dsp.BiquadFilter with properties: Structure: 'Direct form II' SOSMatrixSource: 'Property' SOSMatrix: [7x6 double] ScaleValues: [8x1 double] InitialConditions: 0 OptimizeUnityScaleValues: true Show all properties

Visualize the frequency response of the designed filter.

fvtool(bpFilter)

Bandpass filter a discrete-time sine wave signal which consists of three sinusoids at frequencies, 1 kHz, 10 kHz, and 15 kHz.

Design an FIR Equiripple bandpass filter by first creating a bandpass filter design specifications object, and then designing a filter using these specifications.

**Design Bandpass Filter**

Create a bandpass filter design specifications object using `fdesign.bandpass`

.

bandpassSpecs = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ... 1/4,3/8,5/8,6/8,60,1,60);

List the available design methods for this object.

designmethods(bandpassSpecs)

Design Methods for class fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2): butter cheby1 cheby2 ellip equiripple kaiserwin

To design an Equiripple filter, pick `'equiripple'`

.

bpFilter = design(bandpassSpecs,'equiripple','Systemobject',true)

bpFilter = dsp.FIRFilter with properties: Structure: 'Direct form' NumeratorSource: 'Property' Numerator: [1x37 double] InitialConditions: 0 Show all properties

Visualize the frequency response of the designed filter.

`fvtool(bpFilter,'Fs',44100)`

**Create Sinusoidal Signal**

Create a signal that is a sum of three sinusoids with frequencies at 1 kHz, 10 kHz, and 15 kHz. Initialize Spectrum Analyzer to view the original signal and the filtered signal.

Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); Sine3 = dsp.SineWave('Frequency',15e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ... 'SampleRate',Sine1.SampleRate, ... 'NumInputPorts',2,... 'ShowLegend',true, ... 'YLimits',[-240,45]); SpecAna.ChannelNames = {'Original noisy signal','Bandpass filtered signal'};

**Filter Sinusoidal Signal**

Filter the sinusoidal signal using the bandpass filter that has been designed. View the original signal and the filtered signal in the Spectrum Analyzer. The tone at 1 kHz is filtered out and attenuated. The tone at 10 kHz is unaffected, and the tone at 15 kHz is mildly attenuated because it appears in the transition band of the filter.

for i = 1 : 1000 x = Sine1()+Sine2()+Sine3(); y = bpFilter(x); SpecAna(x,y); end release(SpecAna)

`spec`

— Specification`'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'`

(default) | `'N,F3dB1,F3dB2'`

| `'N,F3dB1,F3dB2,Ap'`

| ...Specification expression, specified as one of these character vectors:

`'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'`

(default)`'N,F3dB1,F3dB2'`

`'N,F3dB1,F3dB2,Ap'`

`'N,F3dB1,F3dB2,Ast'`

`'N,F3dB1,F3dB2,Ast1,Ap,Ast2'`

`'N,F3dB1,F3dB2,BWp'`

`'N,F3dB1,F3dB2,BWst'`

`'N,Fc1,Fc2'`

`'N,Fc1,Fc2,Ast1,Ap,Ast2'`

`'N,Fp1,Fp2,Ap'`

`'N,Fp1,Fp2,Ast1,Ap,Ast2'`

`'N,Fst1,Fp1,Fp2,Fst2'`

`'N,Fst1,Fp1,Fp2,Fst2,C'`

`'N,Fst1,Fp1,Fp2,Fst2,Ap'`

`'N,Fst1,Fst2,Ast'`

`'Nb,Na,Fst1,Fp1,Fp2,Fst2'`

This table describes each option that can appear in the expression.

Specification option | Description |
---|---|

`Ap` | Amount of ripple allowed in passband, specified as
`Apass` in dB. |

`Ast` | Stopband attenuation (dB), specified using
`Astop` . |

`Ast1` | Attenuation in the first stopband (dB), specified using
`Astop1` . |

`Ast2` | Attenuation in the second stopband (dB), specified using
`Astop2` . |

`BWp` | Bandwidth of the filter passband, specified as
`BWpass` in normalized frequency
units. |

`BWst` | Frequency width between the two stopband frequencies,
specified as `BWstop` in normalized
frequency units. |

`F3dB1` | Frequency of the 3 dB point below the passband value for the first cutoff, specified in normalized frequency units. Applies to IIR filters. |

`F3dB2` | Frequency of the 3 dB point below the passband value for the second cutoff, specified in normalized frequency units. Applies to IIR filters. |

`Fc1` | First cutoff frequency (normalized frequency units),
specified using `Fcutoff1` . Applies to
FIR filters. |

`Fc2` | Second cutoff frequency (normalized frequency units),
specified using `Fcutoff1` . Applies to
FIR filters. |

`Fp1` | Frequency at the edge of the start of the passband,
specified as `Fpass1` in normalized
frequency units. |

`Fp2` | Frequency at the edge of the end of the passband,
specified as `Fpass2` in normalized
frequency units. |

`Fst1` | Frequency at the edge of the end of the first stop band,
specified as `Fstop1` in normalized
frequency units. |

`Fst2` | Frequency at the edge of the start of the second stop
band, specified as `Fstop2` in normalized
frequency units. |

`N` | Filter order for FIR filters. Or both the numerator and
denominator orders for IIR filters when
`Na` and `Nb` are not
provided. Specified using
`FilterOrder` . |

`Nb` | Numerator order for IIR filters, specified using the
`NumOrder` property. |

`Na` | Denominator order for IIR filters, specified using the
`DenOrder` property. |

`C` | Constrained band flag. This enables you to specify passband ripple or stopband attenuation for fixed-order designs in one or two of the three bands. For more details, see |

Graphically, the filter specifications look similar to those shown in this figure.

Regions between specification values like `Fst1`

and
`Fp1`

are transition regions where the filter response
is not explicitly defined.

The design methods available for designing the filter depend on the
specification expression. You can obtain these methods using the `designmethods`

function. This
table lists each specification expression supported by
`fdesign.bandpass`

and the available corresponding
design methods.

Specification expression | Supported design methods |
---|---|

`'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'` | `butter` , `cheby1` ,
`cheby2` , `ellip` ,
`equiripple` ,
`kaiserwin` |

`'N,F3dB1,F3dB2'` | `butter` |

`'N,F3dB1,F3dB2,Ap'` | `cheby1` |

`'N,F3dB1,F3dB2,Ast'` | `cheby2` ,
`ellip` |

`'N,F3dB1,F3dB2,Ast1,Ap,Ast2'` | `ellip` |

`'N,F3dB1,F3dB2,BWp'` | `cheby1` |

`'N,F3dB1,F3dB2,BWst'` | `cheby2` |

`'N,Fc1,Fc2'` | `window` |

`'N,Fc1,Fc2,Ast1,Ap,Ast2'` | `fircls` |

`'N,Fp1,Fp2,Ap'` | `cheby1` |

`'N,Fp1,Fp2,Ast1,Ap,Ast2'` | `ellip` |

`'N,Fst1,Fp1,Fp2,Fst2'` | `iirlpnorm` ,
`equiripple` ,
`firls` |

`'N,Fst1,Fp1,Fp2,Fst2,C'` | `equiripple` |

`'N,Fst1,Fp1,Fp2,Fst2,Ap'` | `ellip` |

`'N,Fst1,Fst2,Ast'` | `cheby2` |

`'Nb,Na,Fst1,Fp1,Fp2,Fst2'` | `iirlpnorm` |

To design the filter, call the `design`

function with one of
these design methods as an input. You can choose the type of filter response
by passing `'FIR'`

or `'IIR'`

to the
`design`

function. For more details, see `design`

. Enter
`help(bandpassSpecs,'method')`

at the MATLAB^{®} command line to obtain detailed help on the design options for
a given design method.

`value1,...,valueN`

— Specification valuescomma-separated list of values

Specification values, specified as a comma-separated list of values.
Specify a value for each option in `spec`

in the same
order that the options appear in the expression.

**Example: **```
bandpassSpecs =
fdesign.bandpass('N,Fc1,Fc2,Ast1,Ap,Ast2',n,fc1,fc2,ast1,ap,ast2)
```

The input arguments below provide more details for each option in the expression.

`n`

— Filter orderpositive integer

Filter order for FIR filters, specified as a positive integer.
In the case of an IIR filter design, if `nb`

and `na`

are not provided, this value is
interpreted as both the numerator order and the denominator
order.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`nb`

— Numerator order for IIR filtersnonnegative integer

Numerator order for IIR filters, specified as a nonnegative integer.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`na`

— Denominator order for IIR filterspositive integer

Denominator order for IIR filters, specified as a positive integer.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`c`

— Constrained band flaglogical

This enables you to specify passband ripple or stopband attenuation for fixed-order designs in one or two of the three bands.

In the specification
`'N,Fst1,Fp1,Fp2,Fst2,C'`

, you cannot
specify constraints for all three bands (two stopbands and one
passband) simultaneously. You can specify constraints in any one
or two bands.

Consider the following bandpass design specification where both the stopbands are constrained to the default value 60 dB.

**Example: **```
spec =
fdesign.bandpass('N,Fst1,Fp1,Fp2,Fst2,C',100,800,1e3,1.4e3,1.6e3,1e4);
spec.Stopband1Constrained=true;
spec.Stopband2Constrained=true;
```

`ap`

— Passband ripplepositive scalar

Passband ripple, specified as a positive scalar in dB. If
`magunits`

is `'linear'`

or `'squared'`

, the passband ripple is
converted and stored in dB by the function regardless of how it
has been specified.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`ast`

— Stopband attenuationpositive scalar

Stopband attenuation, specified as a positive scalar in dB. If
`magunits`

is `'linear'`

or `'squared'`

, the stopband attenuation is
converted and stored in dB by the function regardless of how it
has been specified.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`ast1`

— First stopband attenuationpositive scalar

Attenuation in the first stopband, specified as a positive
scalar in dB. If `magunits`

is
`'linear'`

or `'squared'`

,
the first stopband attenuation is converted and stored in dB by
the function regardless of how it has been specified.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`ast2`

— Second stopband attenuationpositive scalar

Attenuation in the second stopband, specified as a positive
scalar in dB. If `magunits`

is
`'linear'`

or `'squared'`

,
the second stopband attenuation is converted and stored in dB by
the function regardless of how it has been specified.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`F3dB1`

— First 3 dB frequencypositive scalar

First 3 dB frequency, specified as positive scalar in normalized frequency units.

This is the frequency of the 3 dB point below the passband value for the first cutoff. This input argument applies to IIR filters only.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`F3dB2`

— Second 3 dB frequencypositive scalar

Second 3 dB frequency, specified as positive scalar in normalized frequency units.

This is the frequency of the 3 dB point below the passband value for the second cutoff. This input argument applies to IIR filters only.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fc1`

— First cutoff frequencypositive scalar

First cutoff frequency, specified as positive scalar in normalized frequency units.

This input argument applies to FIR filters only.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fc2`

— Second cutoff frequencypositive scalar

Second cutoff frequency, specified as positive scalar in normalized frequency units.

This input argument applies to FIR filters only.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fst1`

— First stopband frequencypositive scalar

First stopband frequency, specified as positive scalar in normalized frequency units.

This is the frequency at the edge of the end of the first stopband.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fst2`

— Second stopband frequencypositive scalar

Second stopband frequency, specified as a positive scalar in normalized frequency units.

This is the frequency at the edge of the start of the second stopband.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fp1`

— First passband frequencypositive scalar

First passband frequency, specified as positive scalar in normalized frequency units.

This is the frequency at the edge of the start of the first passband.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`fp2`

— Second passband frequencypositive scalar

Second passband frequency, specified as positive scalar in normalized frequency units.

This is the frequency at the edge of the end of the passband.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`bwst`

— Frequency width between stopband frequenciespositive scalar

Frequency width between the two stopband frequencies, specified as a positive scalar in normalized frequency units.

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`Fs`

— Sample ratescalar

Sample rate of the signal to be filtered, specified as a scalar in Hz.
Specify the sample rate as a scalar trailing the other numerical values
provided. When `Fs`

is provided, `Fs`

is assumed to be in Hz, as are all other frequency values. Note that you do
not have to change the specification string.

The following design has the specification string set to
`'Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2'`

, and sample rate set
to 8000 Hz.

```
bandpassSpecs =
fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2',1600,2000,2400,2800,60,1,80,8000);
filt = design(bandpassSpecs,'Systemobject',true);
```

**Data Types: **`single`

| `double`

| `int8`

| `int16`

| `int32`

| `int64`

| `uint8`

| `uint16`

| `uint32`

| `uint64`

`magunits`

— Magnitude units`'dB'`

(default) | `'linear'`

| `'squared'`

Magnitude specification units, specified as `'dB'`

,
`'linear'`

, or `'squared'`

. If this
argument is omitted, the object assumes the units of magnitude to be
`'dB'`

. Note that the magnitude specifications are
always converted and stored in dB regardless of how they were specified. If
`Fs`

is one of the input arguments,
`magunits`

must be specified after
`Fs`

in the input argument list.

`bandpassSpecs`

— Bandpass filter design specification object`bandpass`

objectBandpass filter design specification object, returned as a
`bandpass`

object. The fields of the object depend on the
`spec`

input character vector.

Consider an example where the `spec`

argument is set to
`'N,Fc1,Fc2'`

, and the corresponding values are set to
`10`

, `0.6`

, and
`0.8`

, respectively. The `bandpass`

filter design specification object is populated with the following fields:

`fdesign`

| `fdesign.bandstop`

| `fdesign.highpass`

| `fdesign.lowpass`

A modified version of this example exists on your system. Do you want to open this version instead?

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Select web siteYou can also select a web site from the following list:

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

- América Latina (Español)
- Canada (English)
- United States (English)

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)