Power complementary IIR filter
[bp,ap] = iirpowcomp(b,a)
[bp,ap,c] = iirpowcomp(b,a)
[bp,ap] = iirpowcomp(b,a) returns the coefficients of the power complementary IIR filter g(z) = bp(z)/ap(z) in vectors bp and ap, given the coefficients of the IIR filter h(z) = b(z)/a(z) in vectors b and a. b must be symmetric (Hermitian) or antisymmetric (antihermitian) and of the same length as a. The two power complementary filters satisfy the relation
|H(w)|2 + |G(w)|2 = 1.
conj(bp(end:-1:1)) = c*bp.
When c is omitted, it is chosen as follows:
When b is real, chooses C as 1 or -1, whichever yields bp real
When b is complex, C defaults to 1
ap is always equal to a.
[b,a]=cheby1(10,.5,.4); [bp,ap]=iirpowcomp(b,a); Hd1 = dfilt.df2(b,a); Hd2 = dfilt.df2(bp,ap); hfvt = fvtool([Hd1,Hd2],'MagnitudeDisplay','Magnitude'); legend(hfvt,'Original Filter','Power Complementary Version');
The next figure presents the results of applying iirpowcomp to the Chebyshev filter — the power complementary version of the original filter.