This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.


Impulse response of digital filter


[h,t] = impz(b,a)
[h,t] = impz(sos)
[h,t] = impz(d)
[h,t] = impz(...,n)
[h,t] = impz(...,n,fs)


[h,t] = impz(b,a) returns the impulse response of the filter with numerator coefficients, b, and denominator coefficients, a. impz chooses the number of samples and returns the response in the column vector, h, and the sample times in the column vector, t. t = [0:n-1]' and n = length(t) is computed automatically.

[h,t] = impz(sos)returns the impulse response for 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, impz considers the input to be a numerator vector. 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)].

[h,t] = impz(d) returns the impulse response of a digital filter, d. Use designfilt to generate d based on frequency-response specifications.

[h,t] = impz(...,n) computes n samples of the impulse response when n is an integer (t = [0:n-1]'). If n is a vector of integers, impz computes the impulse response at those integer locations, starting the response computation from 0 (and t = n or t = [0 n]). If, instead of n, you include the empty vector, [], for the second argument, the number of samples is computed automatically.

[h,t] = impz(...,n,fs) computes n samples and produces a vector t of length n so that the samples are spaced 1/fs units apart.

impz(...) with no output arguments plots the impulse response of the filter.

impz works for both real and complex input systems.

    Note:   If the input to impz is single precision, the impulse response is calculated using single-precision arithmetic. The output, h, is single precision.


collapse all

Design a fourth-order lowpass elliptic filter with normalized passband frequency 0.4. Specify a passband ripple of 0.5 dB and a stopband attenuation of 20 dB. Plot the first 50 samples of the impulse response.

[b,a] = ellip(4,0.5,20,0.4);

Design the same filter using designfilt. Plot the first 50 samples of its impulse response.

d = designfilt('lowpassiir','DesignMethod','ellip','FilterOrder',4, ...
               'PassbandFrequency',0.4, ...

Design an FIR highpass filter of order 18 using a Kaiser window with $\beta=4$. Specify a sampling rate of 100 Hz and a cutoff frequency of 30 Hz. Display the impulse response of the filter.

b = fir1(18,30/(100/2),'high',kaiser(19,4));

Design the same filter using designfilt and plot its impulse response.

d = designfilt('highpassfir','FilterOrder',18,'SampleRate',100, ...

More About

collapse all


impz filters a length n impulse sequence using

filter(b,a,[1 zeros(1,n-1)])

and plots the results using stem.

To compute n in the auto-length case, impz either uses n = length(b) for the FIR case or first finds the poles using p = roots(a), if length(a) is greater than 1.

If the filter is unstable, n is chosen to be the point at which the term from the largest pole reaches 106 times its original value.

If the filter is stable, n is chosen to be the point at which the term due to the largest amplitude pole is 5 × 10–5 of its original amplitude.

If the filter is oscillatory (poles on the unit circle only), impz computes five periods of the slowest oscillation.

If the filter has both oscillatory and damped terms, n is chosen to equal five periods of the slowest oscillation or the point at which the term due to the pole of largest nonunit amplitude is 5 × 10–5 of its original amplitude, whichever is greater.

impz also allows for delays in the numerator polynomial. The number of delays is incorporated into the computation for the number of samples.

Introduced before R2006a

Was this topic helpful?