len = impzlength(b,a) returns
the impulse response length for the causal discrete-time filter with
the rational system function specified by the numerator, b,
and denominator, a, polynomials in z^{–1}.
For stable IIR filters, len is the effective
impulse response sequence length. Terms in the IIR filter's
impulse response after the len-th term are essentially
zero.

len = impzlength(sos) returns
the effective impulse response length for the IIR filter specified
by the second order sections matrix, sos. sos is
a K-by-6 matrix, where the number of sections, K,
must be greater than or equal to 2. If the number of sections is less
than 2, impzlength considers the input to be
the numerator vector, b. Each row of sos corresponds
to the coefficients of a second order (biquad) filter. The ith
row of the sos matrix corresponds to [bi(1)
bi(2) bi(3) ai(1) ai(2) ai(3)].

len = impzlength(d) returns
the impulse response length for the digital filter, d.
Use designfilt to generate d based
on frequency-response specifications.

len = impzlength(hs) returns
the impulse response length for the filter System object™, hs.
You must have the DSP System Toolbox™ software to use impzlength with
a filter System object.

len = impzlength(hd) returns
the impulse response length for the dfilt or mfilt filter
object, hd. You must have the DSP System Toolbox software
to use impzlength with an mfilt object.
You can also input an array of filter objects. If hd is
an array of filter objects, each column of len is
the impulse response length of the corresponding filter object.

len = impzlength(___,tol) specifies
a tolerance for estimating the effective length of an IIR filter's
impulse response. By default, tol is 5e-5.
Increasing the value of tol estimates a shorter
effective length for an IIR filter's impulse response. Decreasing
the value of tol produces a longer effective
length for an IIR filter's impulse response.

Create a lowpass allpole IIR filter with a
pole at 0.9. Calculate the effective impulse response length, obtain
the impulse response, and plot the result.

b = 1;
a = [1 -0.9];
len = impzlength(b,a)
[h,t] = impz(b,a);
stem(t,h)
h(len)

The value of the impulse response at the estimate length has
decayed to approximately 10^{–6}.

Design a 4th-order lowpass elliptic filter
with a cutoff frequency of 0.4π rad/sample. Specify 1 dB of passband ripple and 60 dB
of stopband attenuation. Design the filter in pole-zero-gain form
and obtain the second order section matrix using zp2sos.
Determine the effective impulse response sequence length from the
second order sections matrix.

[z,p,k] = ellip(4,1,60,.4);
[sos,g] = zp2sos(z,p,k);
len = impzlength(sos)

Use designfilt to design a 4th-order lowpass elliptic filter with normalized passband frequency rad/sample. Specify 1 dB of passband ripple and 60 dB of stopband attenuation. Determine the effective impulse response sequence length and visualize it.

d = designfilt('lowpassiir','FilterOrder',4,'PassbandFrequency',0.4, ...'PassbandRipple',1,'StopbandAttenuation',60, ...'DesignMethod','ellip');
len = impzlength(d)
impz(d)

This example requires DSP System Toolbox software.

Design a 4th-order lowpass elliptic filter with a cutoff
frequency of 0.4π rad/sample. Specify 1 dB of passband ripple and 60 dB
of stopband attenuation. Design the filter in pole-zero-gain form
and obtain the second order section matrix using zp2sos.
Create a biquad filter System object and input the System object to impzlength.

[z,p,k] = ellip(4,1,60,.4);
[sos,g] = zp2sos(z,p,k);
hBqdFilt = dsp.BiquadFilter('Structure','Direct form I',...'SOSMatrix', sos,...'ScaleValues',g);
len = impzlength(hBqdFilt)

Design IIR Butterworth and FIR equiripple filters
for data sampled at 1 kHz. The passband frequency is 100 Hz and the
stopband frequency is 150 Hz. The passband ripple is 0.5 dB and there
is 60 dB of stopband attenuation. Obtain dfilt objects
for the filters and compare the filter impulse response sequence lengths.

d = fdesign.lowpass('Fp,Fst,Ap,Ast',100,150,0.5,60,1000);
Hd1 = design(d,'butter');
Hd2 = design(d,'equiripple');
len = impzlength([Hd1 Hd2])

Digital filter, specified as a digitalFilter object. Use designfilt to generate a digital filter
based on frequency-response specifications.

Example: d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5) specifies
a third-order Butterworth filter with normalized
3-dB frequency 0.5π rad/sample.

Tolerance for IIR filter effective impulse response length,
specified as a positive number. The tolerance determines the term
in the absolutely summable sequence after which subsequent terms are
considered to be 0. The default tolerance is 5e-5.
Increasing the tolerance returns a shorter effective impulse response
sequence length. Decreasing the tolerance returns a longer effective
impulse response sequence length.

Length of the impulse response, specified as a positive integer.
For stable IIR filters with absolutely summable impulse responses, impzlength returns
an effective length for the impulse response beyond which the coefficients
are essentially zero. You can control this cutoff point by specifying
the optional tol input argument.