Artifact Removal

Mean Subtraction

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
import plotly.io as pio
pio.renderers.default = "sphinx_gallery"
# pio.renderers.default = "plotly_mimetype"  # or "plotly_mimetype"
# 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 load_sample_ecg_small, plot_trace


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

ar = ArtifactRemoval(signal_col)
cleaned_signal = ar.mean_subtraction()

plot_trace(signal_col,cleaned_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 load_sample_ecg_small, plot_trace
     13 signal_col, date_col = load_sample_ecg_small()
     14 signal_col = np.array(signal_col)

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'

Baseline Correction

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
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)

ar = ArtifactRemoval(signal_col)
cleaned_signal = ar.baseline_correction(cutoff=0.5, fs=fs)

plot_trace(signal_col,cleaned_signal)

Wavelet Denoising

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
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)

ar = ArtifactRemoval(signal_col)

cleaned_signal = ar.wavelet_denoising(
    wavelet_type='db', 
    level=2, 
    order=4, 
    smoothing='gaussian', 
    sigma=1.0  # This will now be passed correctly through smoothing_params
)
plot_trace(signal_col,np.real(cleaned_signal),title="Debauchy & Gaussian")

clean_signal = ar.wavelet_denoising(wavelet_type='haar', level=3, 
                                    smoothing='median', kernel_size=5)
plot_trace(signal_col,np.real(cleaned_signal),title="Haar & Median")

clean_signal = ar.wavelet_denoising(wavelet_type='sym', level=3, 
                                    smoothing='moving_average', window_size=7)
plot_trace(signal_col,np.real(cleaned_signal),title="Symmetric & MAE")

custom_wavelet = np.array([0.1,0.2,0.4,0.2,0.1,1,-0.5,0.1,0.2,0.5,0.2,0.2])
clean_signal = ar.wavelet_denoising(wavelet_type='custom', 
                                    custom_wavelet=custom_wavelet, 
                                    smoothing='lowpass', cutoff=0.3, fs=fs)
plot_trace(signal_col,np.real(cleaned_signal),title="Custom & Low-pass")

Adaptive Filtering

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
import numpy as np
from plotly import graph_objects as go
import os
from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal
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)

offset = 1000
target = generate_ecg_signal(sfecg=128, duration=100, Anoise=0.01, hrmean=70, sfint=512)
reference_signal = target[offset:min(len(target),len(signal_col))]

signal_col = signal_col[offset:min(len(target),len(signal_col))]
ar = ArtifactRemoval(signal_col)

cleaned_signal = ar.adaptive_filtering(reference_signal, learning_rate=0.01, num_iterations=50)

plot_trace(signal_col,cleaned_signal)

Notch Filter

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
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)

ar = ArtifactRemoval(signal_col)
cleaned_signal = ar.notch_filter(freq=5, fs=fs, Q=2)

plot_trace(signal_col,cleaned_signal)

PCA Artifact Removal

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
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)

ar = ArtifactRemoval(signal_col)
cleaned_signal = ar.pca_artifact_removal(num_components=1,window_size=5, overlap=1) #QRS T Components

plot_trace(signal_col,cleaned_signal)

ICA Artifact Removal

from vitalDSP.filtering.artifact_removal import ArtifactRemoval
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)

ar = ArtifactRemoval(signal_col)
cleaned_signal = ar.ica_artifact_removal(num_components=1, window_size=3, 
                                        step_size=1, batch_size=200)

plot_trace(signal_col,cleaned_signal)