# A low-pass butterworth filter to analyze ocean bottom pressure

Hello fellow oceanographers, I just trying to design a fourth-order low-pass butterworth filter with a 15-days cutoff period, in python, with the aim to filter a ocean bottom pressure (OBP) time series sampled every hour. This is my code:

import pandas as pd
import numpy as np
import scipy
from scipy.signal import butter, filtfilt, sosfiltfilt

M = len(OBP['SPFO4']) # Number of points
# OBP['SPFO4'] is the OBP time series.

# === Applying the tapering function
beta = 2
window = scipy.signal.windows.kaiser(M,beta,sym=True)
OBP['SPFO4'] = window * OBP['SPFO4']

########### Applying the filter

fs = 1 # Sampling frecuency (sampled every hour)
fc = 1/360 # 24(hours)*15(days) = 360 hours,
# Am I correct in this step ?
fc_norm = fc/(fs/2)
# Define the filter order (4th order is commonly used)
filter_order = 2 # I used 2 because it is a forward-backward filtering,
# so the input is mulplied by two ?

# Generate the Butterworth filter coefficients
b, a = butter(filter_order, fc_norm, btype='lowpass',analog=False)

OBP['SPFO4']= filtfilt(b, a,OBP['SPFO4'])


I have documented myself to build a code correctly in the sense of signal analysis, since I am new to this. So my concern is that (1) if my code is well written for the purposes I need it to be? (2) As you know, I am using signal.filtfilt(), but I have seen other option: signal.sosfiltfilt(). I am confused because the two pictures obtained look a little different. Why?

Anyone could help me to understand the previous questions and and what depends on using a certain order in a butterworth filter (I took the order from this article: https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2020JB020065, page 4, second paragraph)? Any scientific article that explain this would be grateful. I attached the pictures.

This is obtained using signal.filtfilt()

This is obtained using signal.sosfiltfilt()