I'm trying to design the highpass filter in Python for my accelerometer data in order to integrate them. I need to preserve low frequencies. For example, data with a sampling frequency of 2 kHz need to have a highpass filter with a cutoff frequency of 1 Hz, maybe even 0.5 Hz. Unfortunately, scipy signal filters (I tried all of them) cannot design the highpass filter so low. In the image below you can see that under 10 Hz nothing changes even with different order.Filter designs - Butterworth I tried web filter designs (e.g. https://fiiir.com/ ) and have the same result - not possible to go lower. On the other hand, when using the same filter in LabVIEW, the filter works great even for lower frequencies. Where's the mistake? And how can I solve it? Here's the code in case it's not a theoretical issue:

fs=1/(data[1,0]-data[0,0]) #sampling frequency

cutoff=[0.5,1,10] #freq in Hz

for i in range(len(cutoff)):
    for j in range(len(order)):
        sosv=signal.butter(order[j], cutoff[i], 'highpass',fs=fs,output="sos")
        w, h = signal.sosfreqz(sosv, fs=fs)

Thanks for all your help.


1 Answer 1


That's just a plotting resolution artifact.

Increase your plot resolution the following way:

w, h = signal.sosfreqz(sosv, worN=4*fs, fs=fs)
  • $\begingroup$ Thanks, this helps! $\endgroup$
    – Martin E.
    Jul 4, 2023 at 5:45
  • $\begingroup$ @MartinE. no problem, don’t forget to mark the answer accepted if you’re satisfied so the question doesn’t keep coming back up and others can benefit ;) $\endgroup$
    – Jdip
    Jul 4, 2023 at 5:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.