[b,a] = prony(h,bord,aord)
returns the numerator and denominator coefficients for a causal rational transfer function
with impulse response h, numerator order bord, and
denominator order aord.
Fit a 4th-order IIR model to the impulse response of a lowpass filter. Plot the original and Prony-designed impulse responses.
d = designfilt('lowpassiir','NumeratorOrder',4,'DenominatorOrder',4, ...'HalfPowerFrequency',0.2,'DesignMethod','butter');
h = filter(d,[1 zeros(1,31)]);
bord = 4;
aord = 4;
[b,a] = prony(h,bord,aord);
subplot(2,1,1)
stem(impz(b,a,length(h)))
title 'Impulse Response with Prony Design'
subplot(2,1,2)
stem(h)
title 'Input Impulse Response'
Fit a 10th-order FIR model to the impulse response of a highpass filter. Plot the original and Prony-designed frequency responses. The responses match to high precision.
d = designfilt('highpassfir','FilterOrder',10,'CutoffFrequency',0.8);
h = filter(d,[1 zeros(1,31)]);
bord = 10;
aord = 0;
[b,a] = prony(h,bord,aord);
fvt = fvtool(b,a,d);
legend(fvt,'Prony','Original')
Example: impz(fir1(20,0.5)) specifies the impulse response of a
20th-order FIR filter with normalized cutoff frequency π/2 rad/sample.
Data Types: single | double Complex Number Support: Yes
bord, aord — Numerator and denominator orders positive integer scalars
Numerator and denominator orders, specified as positive integer scalars. If the
length of h is less than max(bord,aord), the function pads the impulse response with zeros.
If you want an all-pole transfer function, specify bord
as 0.
If you want an all-zero transfer function, specify aord
as 0.
The transfer function is the Z-transform of the
impulse response h[n]:
A rational transfer function is a ratio of
polynomials in z–1. This equation describes a causal rational transfer function of numerator
order q and denominator order p:
where a[0] = 1.
References
[1] Parks, Thomas W., and C. Sidney
Burrus. Digital Filter Design. New York, NY, USA: Wiley-Interscience,
1987.