# Overshoot when using Bessel filter

Here is simple code to illustrate overshoot using bessel filter:

sig = (np.random.rand(300)-0.5)*2
b, a = signal.bessel(5, np.asarray([10e3, 400e3])/(0.5*1e6), btype='bandpass')
sig_f = signal.filtfilt(b, a, sig)
print(np.amax(sig_f))
plt.plot(sig, label='input')
plt.plot(sig_f, label='filtered')
plt.legend()


I need a zero phase bandpass filter. I want to reduce overshoot as much as possible, that's why I'm using Bessel filter. But I still have some overshoot in some cases.

In this example, I would like to understand which parameters of my input signal/filter are closely related to overshoot. In my case, is it related to sharp transition in my signal? How can I prevent overshoot?

If it were a low-pass filter, I would say you need to turn the resonance (or $$Q$$) down enough that both poles are real.

What's the order of your bessel filter?

But a bandpass filter is necessarily resonant. i might think that a BPF must have poles that are complex. (now that i think about it, a BPF does not necessarily have poles that are complex conjugate.)

if the BPF has gain exceeding 1 (or 0 dB) for its resonant frequency, then then it should be expected that the output will be larger than the input at that resonant frequency. but if the gain is less than 1 for all frequencies, i dunno why it would overshoot at that frequency.

but there are zeros for BPF also. one at DC and another at Nyquist. so maybe you have to turn down the $$Q$$ to $$\frac12$$ so that no pole is "ringing".

• A 1-pole low-pass filter cascaded with a 1-pole high-pass filter will be a non-resonant bandpass filter.
– Ben
Apr 16 '19 at 1:32
• yeah @Ben , i started figuring that out. $Q<\frac12$ is such a filter, but i would still call it "resonant", but maybe that's the wrong word for it. Apr 16 '19 at 1:45