Seeing that the paper cites the author of the paper as inventor of the "SuperSmoother" filter, and this filter was (supposedly) good for this specific use case, there's no indication this filter is based on anything but the author's inventive force (his fantasy). He does mention it's a "converted analog filter made from capacitors and ...
All implementable signals are causal so there will be an inevitable delay, but when we refer to correcting the delay what we are really doing is including a compensatory delay in the reference we are using to compare inputs and outputs. filtfilt accomplishes this which is why it is known as a "zero-phase" filter, in that the results based on a ...
While designing the initial two filters, make sure that they have either zero phase or constant phase. Usually linear filters have constant phase, which gives the same group delay for all samples.
Or you can design another filter with constant gain but phase as the inverse of group delay, so that it cancels.
A causal filter such as what must be used in real time filters will always have group delay. Because it is unavoidable in such a circumstance it’s beneficial to know what it is.
Group delay cannot be corrected for in real time, as it would require knowledge about signal which hasn’t happened yet. Variable group delay can be made constant by applying a ...
I can find 2 errors at a quick glance :
1 - You should discard the transient when measuring the steady-state gain at for a given frequency $f$. I haven't checked how long the transient last, but you should factor it in your RMS measurement.
2 - The RMS calculation only works when the number of samples corresponds to a whole number of periods. Otherwise, the ...
The problem has been solved (with help prof. Grzegorz Szwoch email@example.com), in brief:
dt = 0.002
fs = 1 / dt
# read acc vs time
# detrending (baseline correction)
acc = detrend(acc_orig)
sos = iirdesign([1, 2], [0.5, 2.5], 1, 20, ftype='butter', output='sos',fs=fs)