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)