{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Artifact Removal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mean Subtraction" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import plotly.io as pio\n", "pio.renderers.default = \"sphinx_gallery\"\n", "# pio.renderers.default = \"plotly_mimetype\" # or \"plotly_mimetype\"\n", "# from IPython.display import display, HTML\n", "# display(HTML(''))\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "cleaned_signal = ar.mean_subtraction()\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Baseline Correction" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "cleaned_signal = ar.baseline_correction(cutoff=0.5, fs=fs)\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Wavelet Denoising" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "\n", "cleaned_signal = ar.wavelet_denoising(\n", " wavelet_type='db', \n", " level=2, \n", " order=4, \n", " smoothing='gaussian', \n", " sigma=1.0 # This will now be passed correctly through smoothing_params\n", ")\n", "plot_trace(signal_col,np.real(cleaned_signal),title=\"Debauchy & Gaussian\")\n", "\n", "clean_signal = ar.wavelet_denoising(wavelet_type='haar', level=3, \n", " smoothing='median', kernel_size=5)\n", "plot_trace(signal_col,np.real(cleaned_signal),title=\"Haar & Median\")\n", "\n", "clean_signal = ar.wavelet_denoising(wavelet_type='sym', level=3, \n", " smoothing='moving_average', window_size=7)\n", "plot_trace(signal_col,np.real(cleaned_signal),title=\"Symmetric & MAE\")\n", "\n", "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])\n", "clean_signal = ar.wavelet_denoising(wavelet_type='custom', \n", " custom_wavelet=custom_wavelet, \n", " smoothing='lowpass', cutoff=0.3, fs=fs)\n", "plot_trace(signal_col,np.real(cleaned_signal),title=\"Custom & Low-pass\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adaptive Filtering" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "offset = 1000\n", "target = generate_ecg_signal(sfecg=128, duration=100, Anoise=0.01, hrmean=70, sfint=512)\n", "reference_signal = target[offset:min(len(target),len(signal_col))]\n", "\n", "signal_col = signal_col[offset:min(len(target),len(signal_col))]\n", "ar = ArtifactRemoval(signal_col)\n", "\n", "cleaned_signal = ar.adaptive_filtering(reference_signal, learning_rate=0.01, num_iterations=50)\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notch Filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "cleaned_signal = ar.notch_filter(freq=5, fs=fs, Q=2)\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PCA Artifact Removal" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "cleaned_signal = ar.pca_artifact_removal(num_components=1,window_size=5, overlap=1) #QRS T Components\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ICA Artifact Removal" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.artifact_removal import ArtifactRemoval\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import load_sample_ecg_small, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "ar = ArtifactRemoval(signal_col)\n", "cleaned_signal = ar.ica_artifact_removal(num_components=1, window_size=3, \n", " step_size=1, batch_size=200)\n", "\n", "plot_trace(signal_col,cleaned_signal)" ] } ], "metadata": { "kernelspec": { "display_name": "wearables", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.17" } }, "nbformat": 4, "nbformat_minor": 2 }