Skip to content

Instantly share code, notes, and snippets.

@rxa254
Created July 13, 2020 18:15
Show Gist options
  • Save rxa254/e76a2757d896c7dcfc15f9b4d1abc5a3 to your computer and use it in GitHub Desktop.
Save rxa254/e76a2757d896c7dcfc15f9b4d1abc5a3 to your computer and use it in GitHub Desktop.
# filter some data using SOS so as to preserve the dynamic range
import numpy as np
import scipy.signal as sig
fs = 1024
bg_raw = np.random.randn(1000)
# This is a bandpass
f1 = 15
f2 = 100
sosBP1 = sig.butter(8, [f1/(fs/2), f2/(fs/2)], btype='bandpass', output='sos')
# invertable band pass
fz = [4, 400]
fp = [15, 20, 150]
_,z0,_ = sig.butter(10, fz[0]/(fs/2), btype='lowpass', output='zpk')
_,p0,_ = sig.butter( 8, fp[0]/(fs/2), btype='lowpass', output='zpk')
_,p1,_ = sig.butter( 1, fp[1]/(fs/2), btype='lowpass', output='zpk')
_,p2,_ = sig.butter( 3, fp[1]/(fs/2), btype='lowpass', output='zpk')
_,z1,_ = sig.butter( 2, fz[1]/(fs/2), btype='lowpass', output='zpk')
zs = np.concatenate((z0, z1))
ps = np.concatenate((p0, p1))
BP = sig.zpk2sos(zs, ps, 1, pairing='keep_odd')
sosBP = np.concatenate([sosBP1, BP], axis = 0)
# filter the data using many second-order-sections
bg = sig.sosfilt(sosBP, bg_raw)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment