Advanced Filtering

Kalman Filter

from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering
import plotly.io as pio
pio.renderers.default = "sphinx_gallery"
# pio.renderers.default = "plotly_mimetype"  # or "jupyterlab"
# from IPython.display import display, HTML
# display(HTML('<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>'))
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import plot_trace, load_sample_ecg_small


# FILE_PATH = os.path.join("..","..","..","sample_data","public","ecg.csv")
# signal_col, date_col = process_in_chunks(FILE_PATH,data_type='ecg', fs=128)
signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

af = AdvancedSignalFiltering(signal_col)
filtered_signal = af.kalman_filter(R=0.1, Q=0.01)

plot_trace(signal_col,filtered_signal)
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 10
      8 from plotly import graph_objects as go
      9 import os
---> 10 from vitalDSP.notebooks import plot_trace, load_sample_ecg_small
     13 # FILE_PATH = os.path.join("..","..","..","sample_data","public","ecg.csv")
     14 # signal_col, date_col = process_in_chunks(FILE_PATH,data_type='ecg', fs=128)
     15 signal_col, date_col = load_sample_ecg_small()

File ~/checkouts/readthedocs.org/user_builds/vital-dsp/envs/stable/lib/python3.9/site-packages/vitalDSP/notebooks/__init__.py:27
     25 import ast
     26 import datetime as dt
---> 27 import pkg_resources
     30 # Init functions to handle the sample data
     31 def load_sample_ecg():
     32     # Get the path to the file in the package resources

ModuleNotFoundError: No module named 'pkg_resources'

Optimization-based filter

from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering
from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import process_in_chunks, plot_trace

fs = 128
signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

# Create a target signal
target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)
target = target[:min(len(target),len(signal_col))]

signal_col = signal_col[:min(len(target),len(signal_col))]

af = AdvancedSignalFiltering(signal_col)
filtered_signal = af.optimization_based_filtering(target, loss_type='mse', 
                                                initial_guess=2, learning_rate=0.1, 
                                                iterations=20)

plot_trace(signal_col,filtered_signal)

Gradient Descent Filter

from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering
from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import load_sample_ecg_small, plot_trace

fs = 128
signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

# Create a target signal
target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)
target = target[:min(len(target),len(signal_col))]

signal_col = signal_col[:min(len(target),len(signal_col))]
af = AdvancedSignalFiltering(signal_col)
filtered_signal = af.gradient_descent_filter(target, learning_rate=0.1, 
                                                iterations=20)

plot_trace(signal_col,filtered_signal)

Convolution-based filter

from vitalDSP.filtering.signal_filtering import SignalFiltering
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import plot_trace, load_sample_ecg_small

signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

sf = SignalFiltering(signal_col)
filtered_signal = af.convolution_based_filter(kernel_type='edge_detection')

plot_trace(signal_col,filtered_signal)

Attention-based filter

from vitalDSP.filtering.signal_filtering import SignalFiltering
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import load_sample_ecg_small, plot_trace

signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

sf = SignalFiltering(signal_col)
filtered_signal = af.attention_based_filter(attention_type='gaussian', size=5, sigma=1.0)

plot_trace(signal_col,filtered_signal)

LMS Adaptive Filtering

from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering
from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.notebooks import load_sample_ecg_small, plot_trace

fs = 128
signal_col, date_col = load_sample_ecg_small()
signal_col = np.array(signal_col)

# Create a target signal
target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)
target = np.array(target[:min(len(target),len(signal_col))])

signal_col = signal_col[:min(len(target),len(signal_col))]
af = AdvancedSignalFiltering(signal_col)
filtered_signal = af.adaptive_filtering(target,  mu=0.5, filter_order=5)

plot_trace(signal_col,filtered_signal)