2024-05-01 12:53:33 +02:00
{
"cells": [
2024-05-15 20:20:01 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Signal Processing\n",
"\n",
"The notebook goes into more detail on the processing of the 12 ECG data per patient. First, the signal itself is considered and then the ECG signal processing methods integrated in the 'wfdb' module are explored. Various approaches are then used to normalize the data and reduce noise in order to make the signals as comparable as possible."
]
},
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 1,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [],
"source": [
"import pickle\n",
"from matplotlib import pyplot as plt\n",
2024-05-25 21:02:16 +02:00
"import wfdb.processing\n",
"import scipy.signal"
2024-05-15 20:20:01 +02:00
]
},
2024-05-01 12:53:33 +02:00
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 3,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [],
"source": [
2024-06-02 16:27:39 +02:00
"#path = \"C:/Studium/dsa/data\"\n",
"#path = \"C:/Users/Nils/Documents/HS-Mannheim/0000_MASTER/DSA/EKG_Prog/data\"\n",
"path = \"C:/Users/klara/projects/DSA/data\""
2024-05-15 20:20:01 +02:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Data"
]
},
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 6,
2024-05-01 12:53:33 +02:00
"metadata": {},
2024-05-07 20:16:12 +02:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Reading SB\n",
2024-06-02 16:27:39 +02:00
"Length of SB: 50\n",
2024-05-07 20:16:12 +02:00
"Reading AFIB\n",
2024-06-02 16:27:39 +02:00
"Length of AFIB: 27\n",
2024-05-07 20:16:12 +02:00
"Reading GSVT\n",
2024-06-02 16:27:39 +02:00
"Length of GSVT: 0\n",
2024-05-07 20:16:12 +02:00
"Reading SR\n",
2024-06-02 16:27:39 +02:00
"Length of SR: 13\n"
2024-05-07 20:16:12 +02:00
]
}
],
2024-05-01 12:53:33 +02:00
"source": [
2024-05-15 20:20:01 +02:00
"\n",
2024-05-01 12:53:33 +02:00
"# read pickle files and check len and print first record and first record keys\n",
"\n",
2024-05-15 20:20:01 +02:00
"\n",
2024-05-01 12:53:33 +02:00
"\n",
2024-05-07 20:16:12 +02:00
"categories_dict = {\n",
2024-05-01 12:53:33 +02:00
"'SB': [426177001],\n",
"'AFIB': [164889003, 164890007],\n",
"'GSVT': [426761007, 713422000, 233896004, 233897008, 713422000],\n",
"'SR': [426783006, 427393009]\n",
"}\n",
"\n",
"\n",
"data = {}\n",
2024-05-07 20:16:12 +02:00
"for cat_name in categories_dict.keys():\n",
2024-05-01 12:53:33 +02:00
" print(f\"Reading {cat_name}\")\n",
2024-05-07 20:16:12 +02:00
" with open(f'{path}/{cat_name}.pkl', 'rb') as f:\n",
2024-05-01 12:53:33 +02:00
" records = pickle.load(f)\n",
" data[cat_name] = records\n",
" print(f\"Length of {cat_name}: {len(records)}\")"
]
2024-05-07 20:16:12 +02:00
},
2024-05-15 20:20:01 +02:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For a better understanding of the structure and dimensions of the individual data sets, there are printed."
]
},
2024-05-07 20:16:12 +02:00
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 7,
2024-05-07 20:16:12 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Keys of first record of SB: dict_keys(['record_name', 'n_sig', 'fs', 'counter_freq', 'base_counter', 'sig_len', 'base_time', 'base_date', 'comments', 'sig_name', 'p_signal', 'd_signal', 'e_p_signal', 'e_d_signal', 'file_name', 'fmt', 'samps_per_frame', 'skew', 'byte_offset', 'adc_gain', 'baseline', 'units', 'adc_res', 'adc_zero', 'init_value', 'checksum', 'block_size'])\n",
"{'record_name': 'JS00002', 'n_sig': 12, 'fs': 500, 'counter_freq': None, 'base_counter': None, 'sig_len': 5000, 'base_time': None, 'base_date': None, 'comments': ['Age: 59', 'Sex: Female', 'Dx: 426177001,164934002', 'Rx: Unknown', 'Hx: Unknown', 'Sx: Unknown'], 'sig_name': ['I', 'II', 'III', 'aVR', 'aVL', 'aVF', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6'], 'p_signal': array([[-0.01 , 0.01 , 0.02 , ..., 0.054, 0.049, 0. ],\n",
" [-0.024, -0.02 , 0.005, ..., 0.034, 0.034, -0.015],\n",
" [-0.02 , -0.02 , 0. , ..., 0.034, 0.034, -0.01 ],\n",
" ...,\n",
" [ 0.015, 0.01 , -0.005, ..., -0.015, -0.02 , 0.005],\n",
" [ 0.01 , 0.01 , 0. , ..., -0.02 , -0.024, 0. ],\n",
2024-05-08 08:26:31 +02:00
" [ 0.01 , 0.01 , 0. , ..., -0.024, -0.029, -0.005]]), 'd_signal': None, 'e_p_signal': None, 'e_d_signal': None, 'file_name': ['JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat', 'JS00002.mat'], 'fmt': ['16', '16', '16', '16', '16', '16', '16', '16', '16', '16', '16', '16'], 'samps_per_frame': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'skew': [None, None, None, None, None, None, None, None, None, None, None, None], 'byte_offset': [24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24], 'adc_gain': [1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0, 1000.0], 'baseline': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'units': ['mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV', 'mV'], 'adc_res': [16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16], 'adc_zero': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'init_value': [-10, 10, 20, 0, -15, 15, -10, -54, 63, 54, 49, 0], 'checksum': [12346, 26962, 14528, -13537, -6991, 14569, -383, 16468, -29512, -7548, -22267, 31542], 'block_size': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}\n",
"(5000, 12)\n"
2024-05-07 20:16:12 +02:00
]
}
],
"source": [
"# print keys of first record\n",
"print(f\"Keys of first record of SB: {data['SB'][0].__dict__.keys()}\")\n",
2024-05-15 20:20:01 +02:00
"print(data['SB'][0].__dict__)\n",
"print(data['SB'][0].__dict__['p_signal'].shape)"
]
},
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 10,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-06-02 16:27:39 +02:00
"Number of records with p_signal: 13\n",
2024-05-15 20:20:01 +02:00
"Number of records with e_p_signal: 0\n",
"Number of records with d_signal: 0\n",
"Number of records with e_d_signal: 0\n"
]
}
],
"source": [
"# count how many different signals are available\n",
2024-05-07 20:16:12 +02:00
"counter_p = 0\n",
"counter_e_p = 0\n",
"counter_d = 0\n",
"counter_e_d = 0\n",
"for record in data['SR']:\n",
" if record.p_signal is not None:\n",
" counter_p += 1\n",
" if record.e_p_signal is not None:\n",
" counter_e_p += 1\n",
" if record.d_signal is not None:\n",
" counter_d += 1\n",
"\n",
"print(f\"Number of records with p_signal: {counter_p}\")\n",
"print(f\"Number of records with e_p_signal: {counter_e_p}\")\n",
"print(f\"Number of records with d_signal: {counter_d}\")\n",
2024-05-15 20:20:01 +02:00
"print(f\"Number of records with e_d_signal: {counter_e_d}\")"
2024-05-08 08:26:31 +02:00
]
},
{
"cell_type": "code",
2024-06-02 16:35:32 +02:00
"execution_count": 11,
2024-05-08 08:26:31 +02:00
"metadata": {},
"outputs": [
{
"data": {
2024-06-02 16:27:39 +02:00
"image/png": "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
2024-05-08 08:26:31 +02:00
"text/plain": [
"<Figure size 640x480 with 12 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
2024-05-15 20:20:01 +02:00
}
],
"source": [
"#Plot a complete Record\n",
"wfdb.plot_wfdb(data['SB'][24],title=\"Example for all Channels\")"
]
},
{
"cell_type": "code",
2024-06-02 16:27:39 +02:00
"execution_count": 17,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [
2024-05-08 08:26:31 +02:00
{
"data": {
2024-06-02 16:27:39 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABN0AAAGJCAYAAAC+dUXNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAADoxklEQVR4nOydd5wT1frGnyRb2QYssHSWKh0UBEHBhoIg9u5V8FquBcv1p1exgIqCvVzFy7VgV7z2AoKKYANEQZDel76N7btsS+b3RzKTmckkmzKT7Eye7+fjx+xkkjnL2TNzznue93ltgiAIIIQQQgghhBBCCCGE6IY91g0ghBBCCCGEEEIIIcRqMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEEEIIIYQQQojOMOhGCCGEENJMWb58OWw2G5YvX67bdxYUFOCiiy5CdnY2bDYbnn/+ed2+O1KmTp2K9PT0WDdDN6ZOnYrc3NxYN4MQQgghMYJBN0IIIYSYkjfffBM2m83vf6tWrYp1E5sl//znP7FkyRJMnz4d77zzDiZMmGD4NWtra/Hcc89h5MiRyMrKQkpKCvr06YNp06Zh+/bthl+/uRPo7/iMM86IdfMIIYQQEiYJsW4AIYQQQkgkPPLII+jevbvP8V69esWgNc2fH374Aeeeey7uuuuuqFyvuLgYEyZMwJo1a3D22WfjiiuuQHp6OrZt24YFCxbglVdeQX19fVTa0lx55513fI798ccfeOGFF3DmmWfGoEWEEEII0QMG3QghhBBias466ywMHz481s0wDYWFhWjZsqVu31dbW4ukpCTY7doJFFOnTsWff/6Jjz/+GBdeeKHivVmzZuH+++/XrS1m5W9/+5vPMTG1+PLLL49BiwghhBCiB0wvJYQQQoilmTlzJux2O5YuXao4fsMNNyApKQnr168HANTX12PGjBkYNmwYsrKykJaWhjFjxmDZsmWKz+Xl5cFms+Hpp5/G3Llz0aNHD7Ro0QJnnnkm9u/fD0EQMGvWLHTu3Bmpqak499xzUVJSoviO3NxcnH322fj2228xdOhQpKSkoH///vj000+D+p1+++03TJgwAVlZWWjRogVOPvlk/PrrrwE/I6bjCoKAuXPnSumLIrt378bFF1+M1q1bo0WLFjjhhBOwcOFCxXeIgaAFCxbggQceQKdOndCiRQtUVFT4befChQtx7bXX+gTcACA5ORlPP/20z/GDBw/ivPPOQ3p6Otq2bYu77roLTqdTcc7TTz+N0aNHIzs7G6mpqRg2bBg+/vhjn++y2WyYNm0aPv/8cwwcOBDJyckYMGAAFi9erDjvoYcegs1mw86dOzF16lS0bNkSWVlZuOaaa1BTU+Pzve+++y6GDRuG1NRUtG7dGpdddhn279+v+e8QKnV1dfjkk09w8skno3Pnzrp8JyGEEEKiD4NuhBBCCDE15eXlKC4uVvx35MgR6f0HHngAQ4cOxbXXXovKykoAwJIlS/Dqq69ixowZGDJkCACgoqICr732Gk455RQ88cQTeOihh1BUVITx48dj3bp1Ptd977338PLLL+PWW2/F//3f/+HHH3/EJZdcggceeACLFy/GPffcgxtuuAFfffWVZirnjh07cOmll+Kss87CnDlzkJCQgIsvvhjfffddwN/3hx9+wNixY1FRUYGZM2di9uzZKCsrw2mnnYbVq1f7/dzYsWOlNMYzzjgD77zzjvRzQUEBRo8ejSVLluDmm2/GY489htraWpxzzjn47LPPfL5r1qxZWLhwIe666y7Mnj0bSUlJmtf88ssvAQBXXXVVwN9JjtPpxPjx45GdnY2nn34aJ598Mp555hm88sorivNeeOEFHHvssXjkkUcwe/Zs6d9PHSgEgF9++QU333wzLrvsMjz55JOora3FhRdeqPg7EbnkkktQWVmJOXPm4JJLLsGbb76Jhx9+WHHOY489hquvvhq9e/fGs88+izvuuANLly7F2LFjUVZWFvTv6o9FixahrKwMV155ZcTfRQghhJAYIhBCCCGEmJA33nhDAKD5X3JysuLcDRs2CElJScJ1110nlJaWCp06dRKGDx8uNDQ0SOc0NjYKdXV1is+VlpYKOTk5wt///nfp2J49ewQAQtu2bYWysjLp+PTp0wUAwpAhQxTfe/nllwtJSUlCbW2tdKxbt24CAOGTTz6RjpWXlwsdOnQQjj32WOnYsmXLBADCsmXLBEEQBJfLJfTu3VsYP3684HK5pPNqamqE7t27C2eccUaT/24AhFtuuUVx7I477hAACD///LN0rLKyUujevbuQm5srOJ1ORXt69Ogh1NTUNHmt888/XwAglJaWNnmuIAjClClTBADCI488ojh+7LHHCsOGDVMcU1+/vr5eGDhwoHDaaacpjgMQkpKShJ07d0rH1q9fLwAQXnzxRenYzJkzBQCKvhZ/h+zsbOnnvLw8weFwCI899pjivA0bNggJCQmK41OmTBG6desWxG+u5MILLxSSk5OD/ncjhBBCSPOESjdCCCGEmJq5c+fiu+++U/z3zTffKM4ZOHAgHn74Ybz22msYP348iouL8dZbbyEhwWtv63A4JMWWy+VCSUkJGhsbMXz4cKxdu9bnuhdffDGysrKkn0eOHAnA7c8l/96RI0eivr4eBw8eVHy+Y8eOOP/886WfMzMzcfXVV+PPP/9Efn6+5u+6bt067NixA1dccQWOHDkiKfuqq6tx+umn46effoLL5Qr2n05i0aJFGDFiBE466STpWHp6Om644Qbk5eVh8+bNivOnTJmC1NTUJr9XTDvNyMgIqT033nij4ucxY8Zg9+7dimPy65eWlqK8vBxjxozR7Ktx48ahZ8+e0s+DBw9GZmamz3f6u/aRI0ek3+XTTz+Fy+XCJZdcolBXtm/fHr179/ZJRw6ViooKLFy4EBMnTtTVe48QQggh0YeFFAghhBBiakaMGBFUIYW7774bCxYswOrVqzF79mz079/f55y33noLzzzzDLZu3YqGhgbpuFZ11K5duyp+FgNwXbp00TxeWlqqON6rVy+FpxoA9OnTB4DbN659+/Y+19yxYwcAd9DLH+Xl5WjVqpXf97XYu3evFDSU069fP+n9gQMHSse1/j20yMzMBABUVlYGHUBKSUlB27ZtFcdatWrl8+/39ddf49FHH8W6detQV1cnHVf/mwK+feXvO7XOFf8tS0tLkZmZiR07dkAQBPTu3Vuz/YmJiX5+s+D45JNPUFtby9RSQgghxAIw6EYIIYSQuGD37t1S0GrDhg0+77/77ruYOnUqzjvvPNx9991o164dHA4H5syZg127dvmc73A4NK/j77ggCBG03o2oYnvqqacwdOhQzXPS09Mjvk5TBKNyA4C+ffsCcP97jxkzJqjP+Pv3k/Pzzz/jnHPOwdixY/Hyyy+jQ4cOSExMxBtvvIH3338/6O/U6pOmznW5XLDZbPjmm280z4303/+9995DVlYWzj777Ii+hxBCCCGxh0E3QgghhFgel8uFqVOnIjMzE3fccQdmz56Niy66CBdccIF0zscff4wePXrg008/VailZs6caUibdu7cCUEQFNfavn07AHd1Uy3EFMnMzEyMGzdOt7Z069YN27Zt8zm+detW6f1wmDx5MubMmYN333036KBbMHzyySdISUnBkiVLkJycLB1/4403dLuGP3r27AlBENC9e3dJmagXhw8fxrJlyzB16lTF70UIIYQQc0JPN0IIIYRYnmeffRYrVqzAK6+8glmzZmH06NG46aabUFxcLJ0jqpbk6qfffvsNK1euNKRNhw4dUlQGraiowNtvv42hQ4dqppYCwLBhw9CzZ088/fTTqKqq8nm/qKgorLZMnDgRq1evVvyu1dXVeOWVV5Cbm6uZihsMo0aNwoQJE/Daa6/h888/93m/vr5es7JrUzgcDthsNjidTulYXl6e5jX05oILLoDD4cDDDz/
2024-05-08 08:26:31 +02:00
"text/plain": [
"<Figure size 1500x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
2024-05-15 20:20:01 +02:00
}
],
"source": [
"#Plot specific Channel of Record\n",
"fig = wfdb.plot_items(data['SB'][24].p_signal[:,0],title=\"Example for Channel 7\",figsize=(15,4),return_fig=True)"
]
},
{
"cell_type": "code",
2024-06-02 16:27:39 +02:00
"execution_count": 18,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [],
"source": [
"#Find peaks in Channel 6 of Record 25\n",
"hard = wfdb.processing.find_local_peaks(data['SB'][24].p_signal[:,6],radius=3)\n",
"record = data['SB'][24].p_signal[:,6]\n",
"wholeRecord = data['SB'][24]\n",
"peak_points_y = [record[i] for i in hard] "
]
},
{
"cell_type": "code",
2024-06-02 16:27:39 +02:00
"execution_count": 19,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [
2024-05-08 08:26:31 +02:00
{
"data": {
2024-06-02 16:27:39 +02:00
"image/png": "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
2024-05-08 08:26:31 +02:00
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 5))\n",
"plt.plot(record)\n",
"plt.plot(hard, peak_points_y, 'ro', label='Peaks')\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Signal with Peaks')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
2024-06-02 16:27:39 +02:00
"execution_count": 20,
2024-05-08 08:26:31 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learning initial signal parameters...\n",
"Failed to find 8 beats during learning.\n",
"Initializing using default parameters\n",
"Running QRS detection...\n",
"QRS detection complete.\n",
"[ 484 1038 1590 2131 2675 3219 3758 4300 4838]\n"
]
}
],
"source": [
2024-05-15 20:20:01 +02:00
"# Normalize data by setting qrs peaks to index position 0 (“X-axis normalization”)\n",
2024-05-08 08:26:31 +02:00
"indicies = wfdb.processing.xqrs_detect(wholeRecord.p_signal[:,6],wholeRecord.fs,0,5000)\n",
"print(indicies)"
]
},
{
"cell_type": "code",
2024-05-25 21:02:16 +02:00
"execution_count": 12,
2024-05-08 08:26:31 +02:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-05-15 20:20:01 +02:00
"For normalization: [0.059 0.068 0.083 ... 0.068 0.063 0.049]\n",
"After normalization: [0.27931363 0.28789323 0.30219256 ... 0.28789323 0.28312679 0.26978074]\n"
2024-05-08 08:26:31 +02:00
]
2024-05-15 20:20:01 +02:00
}
],
"source": [
"# Normalization through upper and lower bounds (“Y-axis normalization”)\n",
"print(\"For normalization: \", wholeRecord.p_signal[:,0])\n",
"wholeRecord.p_signal[:,0] = wfdb.processing.normalize_bound(wholeRecord.p_signal[:,0],0,1)\n",
"print(\"After normalization: \",wholeRecord.p_signal[:,0])\n",
"\n"
]
},
{
"cell_type": "code",
2024-05-25 21:02:16 +02:00
"execution_count": 13,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [
2024-05-08 08:26:31 +02:00
{
"data": {
2024-05-15 20:20:01 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHHCAYAAACvJxw8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3xT1RfAv0m69y50QFvKKqPMlr03yBJkqEz1J4iKqAiKBUSWIiII4mKpyBYEZMiUvfcutFBa2tKW7jZpkvf7ozRNOtPSNg287+eTT/tu3ns59417zz3n3HMlgiAIiIiIiIiIiIiIFIjU0AKIiIiIiIiIiFRmRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRERERERERKQIRGVJRESkwjh06BASiYRDhw6V2TljYmIYNGgQzs7OSCQSFi1aVGbnfhZ8fHwYNWqUZrs86g4gkUiYMGFCmZ7TkEgkEmbMmGFoMUREdBCVJRGRSsKqVauQSCSFfk6ePGloESslH3zwAXv27GHq1Kn89ttv9OjRw9AilQl3797lf//7H35+flhYWGBnZ0fr1q357rvvyMjIMLR4IiIvFCaGFkBERESXL774Al9f33zl/v7+BpCm8nPgwAH69evHRx99ZGhRyoydO3cyePBgzM3NGTFiBPXr10ehUHD06FE+/vhjrl27xk8//WRoMUVEXhhEZUlEpJLRs2dPmjVrZmgxjIbY2FgcHBzK7HyZmZmYmZkhlRrG8B4WFsbQoUOpXr06Bw4coGrVqprv3nnnHUJDQ9m5c6dBZBMReVER3XAiIkbG9OnTkUql7N+/X6f8rbfewszMjEuXLgGgUCgICQmhadOm2NvbY21tTdu2bTl48KDOceHh4UgkEhYsWMDSpUvx8/PDysqKbt26ERERgSAIzJo1Cy8vLywtLenXrx8JCQk65/Dx8aFPnz7s3buXRo0aYWFhQUBAAFu2bNGrTqdOnaJHjx7Y29tjZWVF+/btOXbsWJHH5LgtBUFg6dKlGndlDvfu3WPw4ME4OTlhZWVFixYt8ikZOXFE69atY9q0aXh6emJlZUVycnKhv7tgwQJatWqFs7MzlpaWNG3alE2bNulVT3346quv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
2024-05-08 08:26:31 +02:00
"text/plain": [
"<Figure size 640x480 with 12 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
2024-05-15 20:20:01 +02:00
}
],
"source": [
"wfdb.plot_wfdb(wholeRecord,title=\"Example for all Channels\")\n"
]
},
{
"cell_type": "code",
2024-05-25 21:02:16 +02:00
"execution_count": 14,
2024-05-15 20:20:01 +02:00
"metadata": {},
"outputs": [
2024-05-08 08:26:31 +02:00
{
"data": {
2024-05-15 20:20:01 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABNEAAAGJCAYAAACkSaVDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAADly0lEQVR4nOydd5gUVdrFT3dPzsQhM+QgUZKgoCiKqBjXvAbWrBjXxKeCEcy6a1jMGTHruiCoCIqCIBnJCEOeGSYwkUnd9f3RXdWVejpW91T1+T0PD93Voe7Mnbp173vPe16bIAgCCCGEEEIIIYQQQgghPrHHugGEEEIIIYQQQgghhDR3GEQjhBBCCCGEEEIIIcQPDKIRQgghhBBCCCGEEOIHBtEIIYQQQgghhBBCCPEDg2iEEEIIIYQQQgghhPiBQTRCCCGEEEIIIYQQQvzAIBohhBBCCCGEEEIIIX5gEI0QQgghhBBCCCGEED8wiEYIIYQQQgghhBBCiB8YRCOEEEIIiRJLliyBzWbDkiVLIvadhYWF+Nvf/oZWrVrBZrPhxRdfjNh3h8vVV1+NjIyMWDcjYlx99dXIy8uLdTMIIYQQEiMYRCOEEEJIs+Ddd9+FzWbz+e/333+PdRObJXfeeScWLlyIadOm4YMPPsDpp59u+Dlra2vxwgsvYNSoUcjOzkZKSgp69+6NqVOnYvv27Yafv7mzcuVK3HzzzRg2bBgSExNhs9li3SRCCCGERICEWDeAEEIIIUTOo48+im7dummO9+zZMwataf789NNPOOecc3D33XdH5XzFxcU4/fTTsXr1apx11lm47LLLkJGRgW3btmHu3Ll4/fXXUV9fH5W2NFfmz5+PN998E4MGDUL37t0ZWCSEEEIsAoNohBBCCGlWTJo0CcOHD491M0xDUVERcnJyIvZ9tbW1SEpKgt2un7Bw9dVXY+3atfj8889xwQUXKF577LHH8MADD0SsLWblpptuwn333YfU1FSq8wghhBALwXROQgghhJiKGTNmwG63Y9GiRYrj119/PZKSkrB+/XoAQH19PaZPn45hw4YhOzsb6enpGDt2LBYvXqz4XH5+Pmw2G5599lm88sor6N69O9LS0nDaaadh3759EAQBjz32GDp16oTU1FScc845KC0tVXxHXl4ezjrrLHz//fcYMmQIUlJS0L9/f3z55ZcB/UwrVqzA6aefjuzsbKSlpeHEE0/Eb7/91uRnxPRXQRDwyiuvSGmvIrt27cKFF16Ili1bIi0tDccddxzmzZun+A7Ro23u3Ll48MEH0bFjR6SlpaGiosJnO+fNm4drrrlGE0ADgOTkZDz77LOa4wcOHMC5556LjIwMtGnTBnfffTecTqfiPc8++yzGjBmDVq1aITU1FcOGDcPnn3+u+S6bzYapU6fi66+/xoABA5CcnIxjjjkGCxYsULzv4Ycfhs1mw86dO3H11VcjJycH2dnZmDJlCmpqajTf++GHH2LYsGFITU1Fy5Ytcckll2Dfvn26vwd/5ObmIjU1NaTPEkIIIaT5wiAaIYQQQpoV5eXlKC4uVvwrKSmRXn/wwQcxZMgQXHPNNaisrAQALFy4EG+88QamT5+OwYMHAwAqKirw5ptv4qSTTsJTTz2Fhx9+GIcPH8bEiROxbt06zXk/+ugjvPrqq7j11lvxz3/+Ez///DMuuugiPPjgg1iwYAHuu+8+XH/99fj22291Uyd37NiBiy++GJMmTcKsWbOQkJCACy+8ED/88EOTP+9PP/2EcePGoaKiAjNmzMDMmTNx5MgRnHzyyVi5cqXPz40bNw4ffPABAODUU0/FBx98ID0vLCzEmDFjsHDhQtx888144oknUFtbi7PPPhtfffWV5rsee+wxzJs3D3fffTdmzpyJpKQk3XP+97//BQBcccUVTf5McpxOJyZOnIhWrVrh2WefxYknnojnnnsOr7/+uuJ9//rXvzB06FA8+uijmDlzpvT7Uwf+AODXX3/FzTffjEsuuQRPP/00amtrccEFFyj+TkQuuugiVFZWYtasWbjooovw7rvv4pFHHlG854knnsCVV16JXr164fnnn8cdd9yBRYsWYdy4cThy5EjAPyshhBBCLI5ACCGEENIMeOeddwQAuv+Sk5MV7924caOQlJQkXHvttUJZWZnQsWNHYfjw4UJDQ4P0nsbGRqGurk7xubKyMiE3N1f4xz/+IR3bvXu3AEBo06aNcOTIEen4tGnTBADC4MGDFd976aWXCklJSUJtba10rGvXrgIA4YsvvpCOlZeXC+3btxeGDh0qHVu8eLEAQFi8eLEgCILgcrmEXr16CRMnThRcLpf0vpqaGqFbt27Cqaee6vf3BkC45ZZbFMfuuOMOAYCwdOlS6VhlZaXQrVs3IS8vT3A6nYr2dO/eXaipqfF7rvPOO08AIJSVlfl9ryAIwlVXXSUAEB599FHF8aFDhwrDhg1THFOfv76+XhgwYIBw8sknK44DEJKSkoSdO3dKx9avXy8AEF566SXp2IwZMwQAir4Wf4ZWrVpJz/Pz8wWHwyE88cQTivdt3LhRSEhIUBy/6qqrhK5duwbwk3u55ZZbBE65CSGEEGtAJRohhBBCmhWvvPIKfvjhB8W/7777TvGeAQMG4JFHHsGbb76JiRMnori4GO+99x4SErx2rw6HQ1JUuVwulJaWorGxEcOHD8eaNWs0573wwguRnZ0tPR81ahQA4O9//7vie0eNGoX6+nocOHBA8fkOHTrgvPPOk55nZWXhyiuvxNq1a1FQUKD7s65btw47duzAZZddhpKSEkl5V11djVNOOQW//PILXC5XoL86ifnz52PkyJE44YQTpGMZGRm4/vrrkZ+fj82bNyvef9VVVwWUfiimeWZmZgbVnhtvvFHxfOzYsdi1a5fimPz8ZWVlKC8vx9ixY3X7asKECejRo4f0fNCgQcjKytJ8p69zl5SUSD/Ll19+CZfLhYsuukihfmzXrh169eqlSf8lhBBCSPzCwgKEEEIIaVaMHDkyoMIC99xzD+bOnYuVK1di5syZ6N+/v+Y97733Hp577jls3boVDQ0N0nG96p9dunRRPBcDap07d9Y9XlZWpjjes2dPhScZAPTu3RuA23etXbt2mnPu2LEDgDuI5Yvy8nK0aNHC5+t67NmzRwoCyunXr5/0+oABA6Tjer8PPbKysgAAlZWVARczSElJQZs2bRTHWrRoofn9/e9//8Pjjz+OdevWoa6uTjqu/p0C2r7y9Z167xV/l2VlZcjKysKOHTsgCAJ69eql2/7ExEQfPxkhhBBC4g0G0QghhBBiSnbt2iUFoTZu3Kh5/cMPP8TVV1+Nc889F/fccw/atm0Lh8OBWbNm4a+//tK83+Fw6J7H13FBEMJovRtRZfbMM89gyJAhuu/JyMgI+zz+CNQEv2/fvgDcv++xY8cG9Blfvz85S5cuxdlnn41x48bh1VdfRfv27ZGYmIh33nkHc+bMCfg79frE33tdLhdsNhu+++473fdG4/dPCCGEEHPAIBohhBBCTIfL5cLVV1+NrKws3HHHHZg5cyb+9re/4fzzz5fe8/nnn6N79+748ssvFWqmGTNmGNKmnTt3QhAExbm2b98OwF29Uw8xJTErKwsTJkyIWFu6du2Kbdu2aY5v3bpVej0UJk+ejFmzZuHDDz8MOIgWCF988QVSUlKwcOFCJCcnS8ffeeediJ3DFz169IAgCOjWrZukHCSEEEII0YOeaIQQQggxHc8//zyWLVuG119/HY899hjGjBmDm266CcXFxdJ7RFWRXJ20YsUKLF++3JA2HTx4UFH5sqKiAu+//z6GDBmim8oJAMOGDUOPHj3w7LPPoqqqSvP64cOHQ2rLGWecgZUrVyp+1urqarz++uvIy8vTTX0NhNGjR+P000/Hm2++ia+//lrzen19vW7lUn84HA7YbDY4nU7pWH5+vu45Is35558Ph8OBRx55RKNkEwRBt+InIYQQQuITKtEIIYQQ0qz47rvvJMWUnDFjxqB79+7YsmULHnroIVx99dWYPHkyAODdd9/FkCFDcPPNN+PTTz8FAJx11ln48ss
2024-05-08 08:26:31 +02:00
"text/plain": [
"<Figure size 1500x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2024-05-15 20:20:01 +02:00
"wfdb.plot_items(data['SB'][24].p_signal[:,0],title=\"Example for Channel 1\",figsize=(15,4))"
2024-05-07 20:16:12 +02:00
]
2024-05-25 21:02:16 +02:00
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_data = data['SB'][50].p_signal[:,0]\n",
"\n",
"\n",
"from scipy.signal import butter, lfilter\n",
"\n",
"def butter_lowpass(cutoff, fs, order=5):\n",
" nyq = 0.5 * fs\n",
" normal_cutoff = cutoff / nyq\n",
" b, a = butter(order, normal_cutoff, btype='low', analog=False)\n",
" return b, a\n",
"\n",
"def butter_lowpass_filter(data, cutoff, fs, order=5):\n",
" b, a = butter_lowpass(cutoff, fs, order=order)\n",
" y = lfilter(b, a, data)\n",
" return y\n",
"\n",
"# Filter requirements.\n",
"\n",
"order = 1\n",
"fs = 500.0\n",
"cutoff = 25#25\n",
"\n",
"# Get the filter coefficients so we can check its frequency response.\n",
"b, a = butter_lowpass(cutoff, fs, order)\n",
"\n",
"# Apply filter to the signal\n",
"filtered_signal = butter_lowpass_filter(test_data, cutoff, fs, order)\n",
"\n",
"# Plot the signal\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(test_data, 'b-', label='data')\n",
"plt.plot(filtered_signal, 'g-', linewidth=2, label='filtered data')\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Signal with and without Filter')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Find peaks in Channel 6 of Record 25\n",
"hard = wfdb.processing.find_local_peaks(filtered_signal,radius=3)\n",
"record = filtered_signal\n",
"peak_points_y = [record[i] for i in hard] \n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(record)\n",
"plt.plot(hard, peak_points_y, 'ro', label='Peaks')\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Filtered Signal with Peaks')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learning initial signal parameters...\n",
"Failed to find 8 beats during learning.\n",
"Initializing using default parameters\n",
"Running QRS detection...\n",
"QRS detection complete.\n",
"[ 530 1076 1631 2174 2725 3281 3828 4378 4938]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAHWCAYAAACFeEMXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC2xElEQVR4nOzdd5hU5dk/8O/U7b3vsoVepIMgomIBRYwlpqgxMWI0iYmJb0j8JSTva03UGDWWGI0tmmKJplkQQQQFQZBelw67bO99p57fH+c8Z8rO7M7CtDPz/VyXl+zs7OyzO7PnzH3u+7lvnSRJEoiIiIiIiCgo9JFeABERERERUSxhkEVERERERBREDLKIiIiIiIiCiEEWERERERFREDHIIiIiIiIiCiIGWUREREREREHEIIuIiIiIiCiIGGQREREREREFEYMsIiIiIiKiIGKQRURENEwnTpyATqfDK6+8EumlAABeeeUV6HQ6nDhxItJLISIiMMgiIqIocvToUXzve9/DqFGjkJiYiPT0dMyfPx9PPvkk+vr6hv14GzduxL333ov29vaAv+bdd9/FggULkJ+fj+TkZIwaNQpf//rXsXLlymF/fyIiik/GSC+AiIgIAN5//3187WtfQ0JCAm666SZMnjwZVqsVGzZswF133YV9+/bh+eefH9Zjbty4Effddx9uvvlmZGZmDnn/Rx99FHfddRcWLFiA5cuXIzk5GUeOHMFHH32EN954A4sXLwYAlJeXo6+vDyaT6XR+VCIiinEMsoiIKOKOHz+O66+/HuXl5fj4449RVFSkfu6HP/whjhw5gvfffz+ka7Db7XjggQewaNEirFq1asDnGxsb1X/rdDokJiaGdD1ERKRdLBckIqKIe+SRR9Dd3Y2XXnrJI8ASxowZgzvvvBPA4PuhdDod7r33XgDAvffei7vuugsAMHLkSOh0ukH3LTU3N6OzsxPz58/3+fn8/Hz13/7W8NZbb2HSpElITEzE5MmT8e9//xs333wzKioqBnzto48+iueffx6jR49GQkICzj77bHzxxRcej7d7927cfPPNavlkYWEhbrnlFrS0tPhcIxERRQdmsoiIKOLeffddjBo1Cueee27QHvPaa6/FoUOH8Prrr+P3v/89cnNzAQB5eXk+75+fn4+kpCS8++67+NGPfoTs7Oxhfb/3338f1113HaZMmYKH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
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Normalize data by setting qrs peaks to index position 0 (“X-axis normalization”)\n",
"indicies = wfdb.processing.xqrs_detect(filtered_signal,500,0,5000)\n",
"print(indicies)\n",
"\n",
"# detected = [ 530 1076 1631 2174 2725 3281 3828 4378 4938]\n",
"cut_signal = filtered_signal[indicies[0]:indicies[2]]\n",
"\n",
"# plot the cut signal\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(cut_signal)\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Cut Signal')\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1076\n",
"(array([15, 46], dtype=int64),)\n",
"[[1061 1092]]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAHWCAYAAACFeEMXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5wU5f3HP9uuckeHoxwgqBRRqgUVIQpizhprNImCxkQNakISDb8kirFg7CUmRhRJESXYouFEiiAgKErv9Y6jXIO74/rW+f2x+8xO3Z2Znb3bffi+Xy9ld3Z29pnnnnme59sdgiAIIAiCIAiCIAiCIGzB2d4NIAiCIAiCIAiC4AkSsgiCIAiCIAiCIGyEhCyCIAiCIAiCIAgbISGLIAiCIAiCIAjCRkjIIgiCIAiCIAiCsBESsgiCIAiCIAiCIGyEhCyCIAiCIAiCIAgbISGLIAiCIAiCIAjCRkjIIgiCIAiCIAiCsBESsgiCIAhbKS0thcPhwLx589q7KQCAefPmweFwoLS0NCnXHzBgAKZOnWr43Kuuuiop7YjF1KlTMWDAAEvfnTVrFhwOh70NIgiC4BwSsgiCINKEAwcO4Oc//zkGDhyIrKws5Ofn46KLLsLLL7+MlpYW09dbu3YtZs2ahbq6OsPf+fTTTzFhwgT06NEDOTk5GDhwIG6++WYsXrzY9O/zys6dOzFr1qykCHUOhwMOhwM//elPNT///e9/L55z/Phx23+fIAiCMIZDEAShvRtBEARBxGbRokW46aabkJmZidtvvx3Dhw+Hz+fDmjVr8MEHH2Dq1Kl44403TF3zueeew29/+1uUlJQYsnKw8ydMmIBrr70WOTk52L9/P5YtW4YRI0aIlitBEOD1euHxeOByuSzcrb3MmzcP06ZNM3yfZvF6vXA6nfB4PACA999/HzfddBNWrFiBiRMnys4dMGAAhg8fjv/973+WfsvhcCArKwtZWVmorKxERkaG7POBAweivLwcra2tqK6uRrdu3QAAfr8foVAImZmZpn8zEAggEAggKyvLUpsJgiBORdzt3QCCIAgiNiUlJfjhD3+I/v3744svvkCvXr3Ez37xi19g//79WLRoUVLbEAgE8Pjjj2Py5MlYsmSJ6vOqqirxNRMEThWsCC6JcMUVV+CTTz7BZ599hmuvvVY8vnbtWpSUlOCGG27ABx98IPsOEwCt4Ha74XbTdoEgCMIM5C5IEASR4jzzzDNobGzEW2+9JROwGKeffjoefPBBALHjoRwOB2bNmgUgHGfz29/+FgBw2mmniS5mei5ux48fR319PS666CLNz3v06CG+1mvDwoULMWzYMGRlZWH48OH46KOPVLFC7LvPPfcc3njjDQwaNAiZmZk499xz8e2338qut3XrVkydOlV0nywoKMCdd96JEydOaLYxFp988gkcDge2bt0qHvvggw/gcDhw/fXXy84dOnQobrnlFvG9NCZr3rx5uOmmmwAA3/ve98R+Xblypewaa9aswXnnnYesrCwMHDgQ//znPw23tU+fPrjkkkswf/582fF33nkHZ599NoYPH676TiL9rBWT5XA4MH36dPFvmp2djXHjxmHbtm0AgL///e84/fTTkZWVhYkTJ6rG1erVq3HTTTehX79+yMzMRGFhIX71q1+p3F4rKiowbdo09O3bF5mZmejVqxeuvfbapMXXEQRB2AWppgiCIFKcTz/9FAMHDsSFF15o2zWvv/567N27F++++y5efPFF0a2se/fumuf36NED2dnZ+PTTT3H//fejS5cupn5v0aJFuOWWW3D22Wdj9uzZqK2txV133YU+ffponj9//nw0NDTg5z//ORwOB5555hlcf/31OHjwoGiVWbp0KQ4ePIhp06ahoKAAO3bswBtvvIEdO3bg66+/NpWs4eKLL4bD4cCqVatwzjnnAAgLAk6nE2vWrBHPq66uxu7duzF9+nTN61xyySV44IEH8Morr+D//u//MHToUAAQ/wWA/fv348Ybb8Rdd92FO+64A3PnzsXUqVMxZswYnHXWWYbae9ttt+HBBx9EY2MjOnTogEAggIULF2LGjBlobW01fN9G+lmP1atX45NPPsEvfvELAMDs2bNx1VVX4aGHHsJf//pX3HfffaitrcUzzzyDO++8E1988YX43YULF6K5uRn33nsvunbtivXr1+PVV1/FkSNHsHDhQvG8G264ATt27MD999+PAQMGoKqqCkuXLkVZWVlSXD8JgiBsQyAIgiBSlpMnTwoAhGuvvdbQ+SUlJQIA4e2331Z9BkB49NFHxffPPvusAEAoKSkxdO1HHnlEACDk5uYK3//+94Unn3xS2LBhg6E2nH322ULfvn2FhoYG8djKlSsFAEL//v1V3+3atatQU1MjHv/vf/8rABA+/fRT8Vhzc7Pqt999910BgLBq1Srx2Ntvv23oPs866yzh5ptvFt+PHj1auOmmmwQAwq5duwRBEIQPP/xQACBs2bJFPK9///7CHXfcIb5fuHChAEBYsWKF6jf69++val9VVZWQmZkp/PrXv47ZPkEI/w1/8YtfCDU1NUJGRobwr3/9SxAEQVi0aJHgcDiE0tJS4dFHHxUACNXV1eL37rjjDsv9zK6nbEdmZqasT//+978LAISCggKhvr5ePD5z5kxV/2v97WbPni04HA7h0KFDgiAIQm1trQBAePbZZ+P2C0EQRKpB7oIEQRApTH19PQAgLy+vnVsCPPbYY5g/fz5GjRqFzz//HL///e8xZswYjB49Grt27dL93rFjx7Bt2zbcfvvt6NChg3h8woQJOPvsszW/c8stt6Bz587i+/HjxwMADh48KB7Lzs4WX7e2tuL48eO44IILAAAbN240fX/jx4/H6tWrAQANDQ3YsmULfvazn6Fbt27i8dWrV6NTp06aLnlGGTZsmHg/QNh6OHjwYNm9xaNz58644oor8O677wIIW6QuvPBC9O/f31RbjPSzHpdddpnMmnT++ecDCFufpOOVHdf72zU1NeH48eO48MILIQgCNm3aJJ6TkZGBlStXora21tR9EQRBtDckZBEEQaQw+fn5AMKb/lTg1ltvxerVq1FbW4slS5bgtttuw6ZNm3D11VfruqkdOnQIQDh2TInWMQDo16+f7D0TBKSb7ZqaGjz44IPo2bMnsrOz0b17d5x22mkAgJMnT5q+t/Hjx6O8vBz79+/H2rVr4XA4MG7cOJnwtXr1alx00UVwOq0vn8p7A8L3Z1aQuO2220TXuY8//hi33XZbwm3R6mej3+3YsSMAoLCwUPO49JplZWWYOnUqunTpgg4dOqB79+6YMGECgOjfLjMzE3/+85/x2WefoWfPnrjkkkvwzDPPoKKiwswtEgRBtAskZBEEQaQw+fn56N27N7Zv327ofL04pGAwaGezkJ+fj8mTJ+Odd97BHXfcgQMHDuCbb76x7fp6qd8FSdWRm2++GXPmzME999yDDz/8EEuWLBHrdYVCIdO/efHFFwMAVq1ahdWrV2P06NHIzc0VhazGxkZs2rRJZoWygpF7M8I111yDzMxM3HHHHfB6vbj55pvbtC163413zWAwiMmTJ2PRokV4+OGH8fHHH2Pp0qViohTp3+6Xv/wl9u7di9mzZyMrKwt//OMfMXToUNHaRRAEkaqQkEUQBJHiXHXVVThw4ADWrVsX91xmiVAWGGbWJClmEkPEYuzYsQCA8vJyzc+ZC9v+/ftVn2kdM0JtbS2WL1+O3/3ud3jsscfwgx/8AJMnT8bAgQMtXQ8IW2b69euH1atXY/Xq1aIwdckll6C0tBQLFy5EMBjEJZdcEvM6dvVrPLKzs3Hddddh5cqVmDx5spi8JNXZtm0b9u7di+effx4PP/wwrr32WkyaNAm9e/fWPH/QoEH49a9/jSVLlmD79u3w+Xx4/vnn27jVBEEQ5iAhiyAIIsV56KGHkJubi5/+9KeorKxUfX7gwAG8/PLLAMIWpm7dumHVqlWyc/7617+qvpebmwtALZBp0dzcrCvkffbZZwCAwYMHa37eu3dvDB8+HP/85z/R2NgoHv/yyy/FlN9mYdYSpcXlpZd
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"# get the local minimas around the peaks\n",
"peak = indicies[1]\n",
"print(peak)\n",
"start_idx = 30\n",
"end_idx = 30\n",
"signal_section = filtered_signal[peak-start_idx:peak+end_idx]\n",
"minimas = scipy.signal.argrelextrema(signal_section, comparator=np.less, order=5)\n",
"print(minimas)\n",
"# map the minimas to the original signal\n",
"minimas = minimas + peak - start_idx\n",
"print(minimas)\n",
"minimas_y = [filtered_signal[i] for i in minimas]\n",
"\n",
"# plot the cut signal with the minimas\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(filtered_signal)\n",
"plt.plot(minimas, minimas_y, 'ro', label='Minimas')\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Cut Signal with Minimas')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAHWCAYAAACFeEMXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd5wU5f3HP9tur9PhACmCCiJSBFFQBBVEz1hijSY/BUtiQU1IoiGJgjGKsZeYGFEkJqIGWzQgUgQBQVF6r3cc5RrluL51fn/sPrNTd2dmZ+92H77v10vZnZ2dfea5Z57n+XaHIAgCCIIgCIIgCIIgCFtwtnYDCIIgCIIgCIIgeIKELIIgCIIgCIIgCBshIYsgCIIgCIIgCMJGSMgiCIIgCIIgCIKwERKyCIIgCIIgCIIgbISELIIgCIIgCIIgCBshIYsgCIIgCIIgCMJGSMgiCIIgCIIgCIKwERKyCIIgCIIgCIIgbISELIIgCMJWSktL4XA4MHv27NZuCgBg9uzZcDgcKC0tTcn1e/fujYkTJxo+90c/+lFK2hGPiRMnonfv3pa+O336dDgcDnsbRBAEwTkkZBEEQWQIe/fuxS9+8Qv06dMH2dnZKCwsxAUXXICXX34ZTU1Npq+3atUqTJ8+HTU1NYa/8/nnn2PMmDHo3LkzcnNz0adPH9x0001YsGCB6d/nlW3btmH69OkpEeocDgccDgfuuusuzc//8Ic/iOccOXLE9t8nCIIgjOEQBEFo7UYQBEEQ8Zk3bx5uvPFGeL1e3HbbbRg4cCD8fj9WrlyJjz76CBMnTsQbb7xh6prPPfccfvvb36KkpMSQlYOdP2bMGFxzzTXIzc3Fnj17sHjxYgwePFi0XAmCAJ/PB4/HA5fLZeFu7WX27NmYNGmS4fs0i8/ng9PphMfjAQB8+OGHuPHGG7F06VKMHTtWdm7v3r0xcOBA/O9//7P0Ww6HA9nZ2cjOzkZlZSWysrJkn/fp0wfl5eVobm5GdXU1OnbsCAAIBAIIh8Pwer2mfzMYDCIYDCI7O9tSmwmCIE5G3K3dAIIgCCI+JSUl+MlPfoJevXrhq6++QteuXcXP7r//fuzZswfz5s1LaRuCwSCeeOIJjB8/HgsXLlR9XlVVJb5mgsDJghXBJRkuv/xyfPbZZ/jiiy9wzTXXiMdXrVqFkpISXH/99fjoo49k32ECoBXcbjfcbtouEARBmIHcBQmCINKcZ555BvX19XjrrbdkAhbjtNNOw0MPPQQgfjyUw+HA9OnTAUTibH77298CAE499VTRxUzPxe3IkSOora3FBRdcoPl5586dxdd6bZg7dy4GDBiA7OxsDBw4EJ988okqVoh997nnnsMbb7yBvn37wuv14txzz8X3338vu96mTZswceJE0X2yqKgId9xxB44eParZxnh89tlncDgc2LRpk3jso48+gsPhwHXXXSc798wzz8TNN98svpfGZM2ePRs33ngjAODiiy8W+3XZsmWya6xcuRIjRoxAdnY2+vTpg3feecdwW7t3746LLroIc+bMkR1/9913cfbZZ2PgwIGq7yTTz1oxWQ6HA5MnTxb/pjk5ORg5ciQ2b94MAPjHP/6B0047DdnZ2Rg7dqxqXK1YsQI33ngjevbsCa/Xix49euBXv/qVyu21oqICkyZNwimnnAKv14uuXbvimmuuSVl8HUEQhF2QaoogCCLN+fzzz9GnTx+MGjXKtmted9112LVrF9577z28+OKLoltZp06dNM/v3LkzcnJy8Pnnn+OBBx5A+/btTf3evHnzcPPNN+Pss8/GjBkzcPz4cdx5553o3r275vlz5sxBXV0dfvGLX8DhcOCZZ57Bddddh3379olWmUWLFmHfvn2YNGkSioqKsHXrVrzxxhvYunUrvv32W1PJGi688EI4HA4sX74cgwYNAhARBJxOJ1auXCmeV11djR07dmDy5Mma17nooovw4IMP4pVXXsHvf/97nHnmmQAg/gsAe/bswQ033IA777wTt99+O2bNmoWJEydi2LBhOOusswy199Zbb8VDDz2E+vp65OfnIxgMYu7cuZgyZQqam5sN37eRftZjxYoV+Oyzz3D//fcDAGbMmIEf/ehHePjhh/G3v/0N9913H44fP45nnnkGd9xxB7766ivxu3PnzkVjYyPuvfdedOjQAWvWrMGrr76KgwcPYu7cueJ5119/PbZu3YoHHngAvXv3RlVVFRYtWoSysrKUuH4SBEHYhkAQBEGkLSdOnBAACNdcc42h80tKSgQAwttvv636DIAwbdo08f2zzz4rABBKSkoMXfuxxx4TAAh5eXnCFVdcITz55JPC2rVrDbXh7LPPFk455RShrq5OPLZs2TIBgNCrVy/Vdzt06CAcO3ZMPP7f//5XACB8/vnn4rHGxkbVb7/33nsCAGH58uXisbffftvQfZ511lnCTTfdJL4/55xzhBtvvFEAIGzfvl0QBEH4+OOPBQDCxo0bxfN69eol3H777eL7uXPnCgCEpUuXqn6jV69eqvZVVVUJXq9X+PWvfx23fYIQ+Rvef//9wrFjx4SsrCzhX//6lyAIgjBv3jzB4XAIpaWlwrRp0wQAQnV1tfi922+/3XI/s+sp2+H1emV9+o9//EMAIBQVFQm1tbXi8alTp6r6X+tvN2PGDMHhcAj79+8XBEEQjh8/LgAQnn322YT9QhAEkW6QuyBBEEQaU1tbCwAoKCho5ZYAjz/+OObMmYOhQ4fiyy+/xB/+8AcMGzYM55xzDrZv3677vcOHD2Pz5s247bbbkJ+fLx4fM2YMzj77bM3v3HzzzWjXrp34fvTo0QCAffv2icdycnLE183NzThy5AjOP/98AMC6detM39/o0aOxYsUKAEBdXR02btyIn//85+jYsaN4fMWKFWjbtq2mS55RBgwYIN4PELEe9uvXT3ZviWjXrh0uv/xyvPfeewAiFqlRo0ahV69eptpipJ/1uPTSS2XWpPPOOw9AxPokHa/suN7frqGhAUeOHMGoUaMgCALWr18vnpOVlYVly5bh+PHjpu6LIAiitSEhiyAIIo0pLCwEENn0pwO33HILVqxYgePHj2PhwoW49dZbsX79elx11VW6bmr79+8HEIkdU6J1DAB69uwpe88EAelm+9ixY3jooYfQpUsX5OTkoFOnTjj11FMBACdOnDB9b6NHj0Z5eTn27NmDVatWweFwYOTIkTLha8WKFbjgggvgdFpfPpX3BkTuz6wgceutt4quc59++iluvfXWpNui1c9Gv9umTRsAQI8ePTSPS69ZVlaGiRMnon379sjPz0enTp0wZswYALG/ndfrxV/+8hd88cUX6NKlCy666CI888wzqKioMHOLBEEQrQIJWQRBEGlMYWEhunXrhi1bthg6Xy8OKRQK2dksFBYWYvz48Xj33Xdx++23Y+/evfjuu+9su75e6ndBUnXkpptuwsyZM3HPPffg448/xsKFC8V6XeFw2PRvXnjhhQCA5cuXY8WKFTjnnHOQl5cnCln19fVYv369zAplBSP3ZoSrr74aXq8Xt99+O3w+H2666aYWbYvedxNdMxQKYfz48Zg3bx4eeeQRfPrpp1i0aJGYKEX6t/vlL3+JXbt2YcaMGcjOzsajjz6KM888U7R2EQRBpCskZBEEQaQ5P/rRj7B3716sXr064bnMEqEsMMysSVLMJIaIx/DhwwEA5eXlmp8zF7Y9e/aoPtM6ZoTjx49jyZIl+N3vfofHH38cP/7xjzF+/Hj06dPH0vWAiGWmZ8+eWLFiBVasWCEKUxdddBFKS0sxd+5chEIhXHTRRXGvY1e/JiInJwfXXnstli1bhvHjx4vJS9KdzZs3Y9euXXj++efxyCOP4JprrsG4cePQrVs3zfP79u2LX//611i4cCG2bNkCv9+P559/voVbTRAEYQ4SsgiCINKchx9+GHl5ebjrrrtQWVmp+nzv3r14+eWXAUQsTB07dsTy5ctl5/ztb39TfS8vLw+AWiDTorGxUVfI++KLLwAA/fr10/y8W7duGDhwIN555x3U19eLx7/++msx5bdZmLVEaXF56aWXLF2
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.027759944001706754, -0.042024054853653535]\n"
]
}
],
"source": [
"plt.figure(figsize=(10, 5))\n",
"plt.plot(filtered_signal)\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Cut Signal with Minimas')\n",
"plt.grid(True)\n",
"\n",
"for peak in indicies:\n",
" start_idx = 20\n",
" end_idx = 25\n",
" signal_section = filtered_signal[peak-start_idx:peak+end_idx]\n",
" minimas = scipy.signal.argrelextrema(signal_section, comparator=np.less, order=5)\n",
" \n",
" # map the minimas to the original signal\n",
" minimas = minimas[0] + peak - start_idx\n",
" minimas_y = [filtered_signal[i] for i in minimas]\n",
" # if minimas more than 2 take those with biggest difference in y\n",
" if len(minimas) > 2:\n",
" minimas_y = [filtered_signal[i] for i in minimas]\n",
" minimas_y = sorted(minimas_y)\n",
" minimas_y = minimas_y[:2]\n",
" minimas = [minimas[i] for i in range(0,2)]\n",
"\n",
" # plot the minimas\n",
" plt.plot(minimas, minimas_y, 'ro')\n",
"\n",
"plt.legend(['Signal', 'Minimas'])\n",
"plt.show()\n",
"\n",
"#print y values of minimas\n",
"print(minimas_y)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1kAAAHWCAYAAACFeEMXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAADGGElEQVR4nOzdd5hU5dkG8PtM2d5736UX6SBIR6UoNiTYDYo1KkZDNIr5oqKJGitqjMSuiaJCsAVEEEFAEJTelrqU7b3vTj3fH2fOmZnd2d1ZmD7377q8ZGenvFP2nHne53mfVxBFUQQRERERERG5hMrbAyAiIiIiIgokDLKIiIiIiIhciEEWERERERGRCzHIIiIiIiIiciEGWURERERERC7EIIuIiIiIiMiFGGQRERERERG5EIMsIiIiIiIiF2KQRURERERE5EIMsoiIyCtOnjwJQRDwwQcfeHsoAIAPPvgAgiDg5MmTbrn/vLw83HrrrU5f9/LLL3fLONxlw4YNEAQBy5cv9/ZQiIi8jkEWEVGAOX78OO6++2707NkTYWFhiImJwfjx4/Hqq6+ipaWl2/e3ZcsWPPnkk6itrXX6Nt988w0mT56MlJQUREREoGfPnrj22muxevXqbj9+oDp48CCefPJJtwR1giAo/6lUKmRkZGD69OnYsGGDyx+LiIja03h7AERE5DorV67ENddcg9DQUMydOxeDBg2CXq/H5s2b8fDDD+PAgQN46623unWfW7ZswaJFi3DrrbciLi6uy+u/+OKLePjhhzF58mQsXLgQEREROHbsGL7//nt8+umnuOSSSwAAubm5aGlpgVarPZun6ncOHz4Mlco6t3nw4EEsWrQIU6ZMQV5enssfb9q0aZg7dy5EUURBQQH++c9/4qKLLsLKlStx6aWXuvzxiIjIikEWEVGAKCgowPXXX4/c3Fz88MMPSE9PV35333334dixY1i5cqVbx2A0GvH0009j2rRpWLNmTbvfl5eXK/8WBAFhYWFuHY8vCQ0N9ejj9e3bFzfffLPy89VXX40hQ4Zg8eLFDLKIiNyM5YJERAHi+eefR2NjI9599127AEvWu3dvPPDAAwA6Xw8lCAKefPJJAMCTTz6Jhx9+GADQo0cPpQStoxK3yspK1NfXY/z48Q5/n5KSovy7ozEsW7YMAwcORFhYGAYNGoQvvvgCt956q122R77tiy++iLfeegu9evVCaGgozj//fPzyyy9297d3717ceuutSvlkWloabrvtNlRVVTkcY2e+/vprCIKAvXv3Kpf997//hSAImD17tt11BwwYgOuuu0752XZN1gcffIBrrrkGAHDhhRcqr2vbcr7Nmzdj9OjRCAsLQ8+ePfHRRx91e8yywYMHIykpCQUFBcpl+fn5mDNnDhISEhAWFoZRo0bh66+/trtddXU1HnroIQwePBhRUVGIiYnBpZdeij179nT5mDqdDpdffjliY2OxZcsWAEBDQwMefPBB5OXlITQ0FCkpKZg2bRp27tx51s+NiMjXMJNFRBQgvvnmG/Ts2RPjxo1z2X3Onj0bR44cwdKlS/HKK68gKSkJAJCcnOzw+ikpKQgPD8c333yD+++/HwkJCd16vJUrV+K6667D4MGD8eyzz6Kmpga33347MjMzHV7/k08+QUNDA+6++24IgoDnn38es2fPxokTJ5QyxLVr1+LEiROYN28e0tLSlJLJAwcO4Oeff4YgCE6Pb8KECRAEARs3bsSQIUMAAJs2bYJKpcLmzZuV61VUVCA/Px/z5893eD+TJk3C73//e7z22mt47LHHMGDAAABQ/g8Ax44dw5w5c3D77bfjlltuwXvvvYdbb70VI0eOxHnnnef0mGU1NTWoqalB7969AQAHDhzA+PHjkZmZiUcffRSRkZH4/PPPMWvWLPz3v//F1VdfDQA4ceIEvvzyS1xzzTXo0aMHysrK8K9//QuTJ0/GwYMHkZGR4fDxWlpacNVVV+HXX3/F999/j/PPPx8A8Lvf/Q7Lly/H/PnzMXDgQFRVVWHz5s04dOgQRowY0e3nRUTkk0QiIvJ7dXV1IgDxqquucur6BQUFIgDx/fffb/c7AOITTzyh/PzCCy+IAMSCggKn7vvxxx8XAYiRkZHipZdeKv7tb38Td+zY4dQYBg8eLGZlZYkNDQ3KZRs2bBABiLm5ue1um5iYKFZXVyuXf/XVVyIA8ZtvvlEua25ubvfYS5cuFQGIGzduVC57//33nXqe5513nnjttdcqP48YMUK85pprRADioUOHRFEUxRUrVogAxD179ijXy83NFW+55Rbl52XLlokAxPXr17d7jNzc3HbjKy8vF0NDQ8U//vGPnY5PFKX38PbbbxcrKirE8vJycdu2beLFF18sAhBfeuklURRF8eKLLxYHDx4stra2Krczm83iuHHjxD59+iiXtba2iiaTye7+CwoKxNDQUPGpp55SLlu/fr0IQFy2bJnY0NAgTp48WUxKShJ37dpld9vY2Fjxvvvu6/I5EBH5M5YLEhEFgPr6egBAdHS0l0cCLFq0CJ988gmGDx+O7777Dn/+858xcuRIjBgxAocOHerwdsXFxdi3bx/mzp2LqKgo5fLJkydj8ODBDm9z3XXXIT4+Xvl54sSJAKTsiyw8PFz5d2trKyorK3HBBRcAwFmVqE2cOBGbNm0CIJW+7dmzB3fddReSkpKUyzdt2oS4uDgMGjSo2/cvGzhwoPJ8ACl72K9fP7vn1pl3330XycnJSElJwZgxY/DTTz9hwYIFePDBB1FdXY0ffvgB1157LRoaGlBZWYnKykpUVVVhxowZOHr0KIqKigBIa8nkhh0mkwlVVVWIiopCv379HL5+dXV1mD59OvLz87FhwwYMGzbM7vdxcXHYtm0biouLz/KVISLyfQyyiIgCQExMDADpS78vuOGGG7Bp0ybU1NRgzZo1uPHGG7Fr1y5cccUVaG1tdXibU6dOAYBSzmbL0WUAkJOTY/ezHHDV1NQol1VXV+OBBx5AamoqwsPDkZycjB49egCQAoLumjhxIkpKSnDs2DFs2bIFgiBg7NixdsHXpk2bMH78eLtugt3V9rkB0vOzfW6dueqqq7B27Vp8//332LZtGyorK/HSSy9BpVLh2LFjEEURf/nLX5CcnGz33xNPPAHA2qTEbDbjlVdeQZ8+fRAaGoqkpCQkJydj7969Dl+/Bx98EL/88gu+//57h2WNzz//PPbv34/s7GyMHj0aTz75pNOBIxGRv+CaLCKiABATE4OMjAzs37/fqet3tA7JZDK5cliIiYnBtGnTMG3aNGi1Wnz44YfYtm0bJk+e7JL7V6vVDi8XRVH597XXXostW7bg4YcfxrBhwxAVFQWz2YxLLrkEZrO52485YcIEAMDGjRtx4sQJjBgxApGRkZg4cSJee+01NDY2YteuXfjb3/52dk/Kwpnn1pmsrCxMnTrV4e/k5/3QQw9hxowZDq8jB7bPPPMM/vKXv+C2227D008/jYSEBKhUKjz44IMOX7+rrroKn376KZ577jl89NFH7QLNa6+9FhMnTsQXX3yBNWvW4IUXXsDf//53rFixgl0PiShgMMgiIgoQl19+Od566y1s3boVY8eO7fS6csan7QbDcjbJVncaQ3Rm1KhR+PDDD1FSUuLw97m5uQCkhg9tObrMGTU1NVi3bh0WLVqExx9/XLn86NGjZ3V/gJRhysnJwaZNm3DixAmlpG/SpElYsGABli1bBpPJhEmTJnV6P656Xc9Gz549AQBarbbDQEy2fPlyXHjhhXj33XftLq+trVUaodiaNWsWpk+fjltvvRXR0dF48803210nPT0d9957L+69916Ul5djxIgR+Nvf/sYgi4gCBssFiYgCxJ/+9CdERkbijjvuQFlZWbvfHz9+HK+++ioAKcOUlJSEjRs32l3nn//8Z7vbRUZGAmgfkDnS3NyMrVu3Ovzdt99+CwDo16+fw99nZGRg0KBB+Oijj9DY2Khc/uOPP2Lfvn1dPrYjcjaobfZn8eLFZ3V/sokTJ+KHH37A9u3blSBr2LBhiI6OxnPPPYfw8HCMHDmy0/vozuv
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# find peaks in the cut signal\n",
"hard = wfdb.processing.find_local_peaks(cut_signal,radius=3)\n",
"#peak_points_y = [cut_signal[i] for i in hard]\n",
"\n",
"tolerance = 1\n",
"# get standard deviation of the hard peaks\n",
"std = cut_signal[hard].std() * tolerance\n",
"# filter peaks with std\n",
"hard = [i for i in hard if cut_signal[i] > std]\n",
"# get the y values of the peaks\n",
"peak_points_y = [cut_signal[i] for i in hard]\n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(cut_signal)\n",
"plt.plot(hard, peak_points_y, 'ro', label='Peaks')\n",
"plt.xlabel('Time')\n",
"plt.ylabel('Amplitude')\n",
"plt.title('Cut Signal with Peaks')\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.show()"
]
2024-05-01 12:53:33 +02:00
}
],
"metadata": {
2024-05-07 20:16:12 +02:00
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
2024-05-01 12:53:33 +02:00
"language_info": {
2024-05-07 20:16:12 +02:00
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2024-06-02 16:27:39 +02:00
"version": "3.11.9"
2024-05-01 12:53:33 +02:00
}
},
"nbformat": 4,
"nbformat_minor": 2
}