how to calculate $H_{lp} = z(1- H_{hp})$ , given coefficients for $H_{hp}$?

Given a high pass transfer fn of the form
$$H_{hp}=a_{1}*z^0 +a_{2}*z^{-1} + ... a_{n}*z^{-n}$$
Is it possible to calculate a causal low pass filter using
$$H_{lp} = z*(1-H_{hp})$$ ?
attempting
$$H_{lp} = (1-a_{1})*z - a_{2}*z^0 - a_{3}*z^{-1}... - a_{n}*z^{n-1}$$
doesn't appear causal, and setting $$(1-a_{1})$$ to 0 doesn't give the expected freq-response plot.

if z(1-H) is not causal, how can I at least calculate a low pass $$1-H_{hp}$$ ?
1-(coefficients of $$H_{hp})$$,-(coefficients of $$H_{hp}$$), 1./coefficients of $$H_{hp}$$ all seem to have a high-pass freq-response...

Thank you!

A type I (odd length $$N$$, even symmetry) FIR highpass filter with transfer function

$$H_{HP}(z)=\sum_{n=0}^{N-1}h_{HP}[n]z^{-n}\tag{1}$$

has a real-valued amplitude function

$$A_{HP}(\omega)=H_{HP}\big(e^{j\omega}\big)e^{j\omega (N-1)/2}\tag{2}$$

If the highpass filter is normalized such that it approximates unity in its passband, it can be transformed into a lowpass filter with amplitude function

$$A_{LP}(\omega)=1-A_{HP}(\omega)\tag{3}$$

The corresponding complex frequency is then given by

$$H_{LP}(e^{j\omega})=A_{LP}(\omega)e^{-j\omega (N-1)/2}\tag{4}$$

and the filter coefficients are

$$h_{LP}[n]=-h_{HP}[0],-h_{HP}[1],\ldots,1-h_{HP}[(N-1)/2],\ldots,-h_{HP}[N-1]\tag{5}$$

So you just invert the coefficients and add the value $$1$$ to the (inverted) center bin.

Note that this trick usually works well only for linear phase filters, even though in some cases a similar method can be applied to minimum-phase IIR filters (see this answer). Also take a look at this answer.

A more general method for transforming a highpass filter to a lowpass filter (or vice-versa) makes use of an all-pass transformation as explained in this answer.

• I don't think it works this way. $1-H_{HP}(z)$ is only a lowpass if $H_{HP}$ is zero phase, i.e. non causal. It can works for a linear phase high pass but only if you shift the unit impulse to the center of the impulse response, i.e. $h_{LP}[n] = \delta[n-N/2]-h_{HP}[n]$ Jun 20 at 19:02
• @Hilmar: That's right, I was a bit too quick writing up my answer. I will edit ... Jun 20 at 19:32