{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Advanced Filtering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kalman Filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering\n", "import plotly.io as pio\n", "pio.renderers.default = \"sphinx_gallery\"\n", "# pio.renderers.default = \"plotly_mimetype\" # or \"jupyterlab\"\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 plot_trace, load_sample_ecg_small\n", "\n", "\n", "# FILE_PATH = os.path.join(\"..\",\"..\",\"..\",\"sample_data\",\"public\",\"ecg.csv\")\n", "# signal_col, date_col = process_in_chunks(FILE_PATH,data_type='ecg', fs=128)\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "af = AdvancedSignalFiltering(signal_col)\n", "filtered_signal = af.kalman_filter(R=0.1, Q=0.01)\n", "\n", "plot_trace(signal_col,filtered_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization-based filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering\n", "from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import process_in_chunks, plot_trace\n", "\n", "fs = 128\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "# Create a target signal\n", "target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)\n", "target = target[:min(len(target),len(signal_col))]\n", "\n", "signal_col = signal_col[:min(len(target),len(signal_col))]\n", "\n", "af = AdvancedSignalFiltering(signal_col)\n", "filtered_signal = af.optimization_based_filtering(target, loss_type='mse', \n", " initial_guess=2, learning_rate=0.1, \n", " iterations=20)\n", "\n", "plot_trace(signal_col,filtered_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gradient Descent Filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering\n", "from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal\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", "# Create a target signal\n", "target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)\n", "target = target[:min(len(target),len(signal_col))]\n", "\n", "signal_col = signal_col[:min(len(target),len(signal_col))]\n", "af = AdvancedSignalFiltering(signal_col)\n", "filtered_signal = af.gradient_descent_filter(target, learning_rate=0.1, \n", " iterations=20)\n", "\n", "plot_trace(signal_col,filtered_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convolution-based filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.signal_filtering import SignalFiltering\n", "import numpy as np\n", "from plotly import graph_objects as go\n", "import os\n", "from vitalDSP.notebooks import plot_trace, load_sample_ecg_small\n", "\n", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "sf = SignalFiltering(signal_col)\n", "filtered_signal = af.convolution_based_filter(kernel_type='edge_detection')\n", "\n", "plot_trace(signal_col,filtered_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Attention-based filter" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.signal_filtering import SignalFiltering\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", "signal_col, date_col = load_sample_ecg_small()\n", "signal_col = np.array(signal_col)\n", "\n", "sf = SignalFiltering(signal_col)\n", "filtered_signal = af.attention_based_filter(attention_type='gaussian', size=5, sigma=1.0)\n", "\n", "plot_trace(signal_col,filtered_signal)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LMS Adaptive Filtering" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from vitalDSP.filtering.advanced_signal_filtering import AdvancedSignalFiltering\n", "from vitalDSP.utils.data_processing.synthesize_data import generate_ecg_signal\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", "# Create a target signal\n", "target = generate_ecg_signal(sfecg=128, N=30, Anoise=0.01, hrmean=70, sfint=512)\n", "target = np.array(target[:min(len(target),len(signal_col))])\n", "\n", "signal_col = signal_col[:min(len(target),len(signal_col))]\n", "af = AdvancedSignalFiltering(signal_col)\n", "filtered_signal = af.adaptive_filtering(target, mu=0.5, filter_order=5)\n", "\n", "plot_trace(signal_col,filtered_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 }