biosppy.synthesizers.ecg

biosppy.synthesizers.ecg

This module provides methods to synthesize Electrocardiographic (ECG) signals.

copyright:
  1. 2015-2026 by Instituto de Telecomunicacoes

license:

BSD 3-clause, see LICENSE for more details.

Functions

B(l, Kb)

Generates the amplitude values of the first isoelectric line (B segment) of the ECG signal.

I(i, As, Ks, Kcs, sm, Kst, At, Kt, si, Ki)

Generates the amplitude values of the final isoelectric segment (I segment) in the ECG signal.

P(i, Ap, Kp)

Generates the amplitude values of the P wave in the ECG signal.

Pq(l, Kpq)

Generates the amplitude values of the PQ segment in the ECG signal.

Q1(i, Aq, Kq1)

Generates the amplitude values of the first 5/6 of the Q wave in the ECG signal.

Q2(i, Aq, Kq2)

Generates the amplitude values of the last 1/6 of the Q wave in the ECG signal.

R(i, Ar, Kr)

Generates the amplitude values of the R wave in the ECG signal.

S(i, As, Ks, Kcs[, k])

Generates the amplitude values of the S wave in the ECG signal.

St(i, As, Ks, Kcs, sm, Kst[, k])

Generates the amplitude values of the ST segment in the ECG signal.

T(i, As, Ks, Kcs, sm, Kst, At, Kt[, k])

Generates the amplitude values of the T wave in the ECG signal.

ecg([Kb, Ap, Kp, Kpq, Aq, Kq1, Kq2, Ar, Kr, ...])

Concatenates the segments and waves to make an ECG signal.

biosppy.synthesizers.ecg.B(l, Kb)[source]

Generates the amplitude values of the first isoelectric line (B segment) of the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameter introduced doesn’t make sense in this context, an error will raise.

Parameters:
  • l (float) – Inverse of the sampling rate.

  • Kb (int) – B segment width (miliseconds).

Returns:

B_segment (array) – B segment amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.I(i, As, Ks, Kcs, sm, Kst, At, Kt, si, Ki)[source]

Generates the amplitude values of the final isoelectric segment (I segment) in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • As (int) – S wave amplitude (milivolts).

  • Ks (int) – S wave width (miliseconds).

  • Kcs (int) – Parameter which allows slight adjustment of S wave shape by cutting away a portion at the end.

  • sm (int) – Slope parameter in the ST segment.

  • Kst (int) – ST segment width (miliseconds).

  • At (int) – 1/2 of the T wave amplitude (milivolts).

  • Kt (int) – T wave width (miliseconds).

  • si (int) – Parameter for setting the transition slope between T wave and isoelectric line.

  • Ki (int) – I segment width (miliseconds).

Returns:

I_segment (array) – I segment amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.P(i, Ap, Kp)[source]

Generates the amplitude values of the P wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • Ap (int) – P wave amplitude (milivolts).

  • Kp (int) – P wave width (miliseconds).

Returns:

P_wave (array) – P wave amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.Pq(l, Kpq)[source]

Generates the amplitude values of the PQ segment in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • l (float) – Inverse of the sampling rate.

  • Kpq (int) – PQ segment width (miliseconds).

Returns:

PQ_segment (array) – PQ segment amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.Q1(i, Aq, Kq1)[source]

Generates the amplitude values of the first 5/6 of the Q wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • Aq (int) – Q wave amplitude (milivolts).

  • Kq1 (int) – First 5/6 of the Q wave width (miliseconds).

Returns:

Q1_wave (array) – First 5/6 of the Q wave amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.Q2(i, Aq, Kq2)[source]

Generates the amplitude values of the last 1/6 of the Q wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • Aq (int) – Q wave amplitude (milivolts).

  • Kq2 (int) – Last 1/6 of the Q wave width (miliseconds).

Returns:

Q2_wave (array) – Last 1/6 of the Q wave amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.R(i, Ar, Kr)[source]

Generates the amplitude values of the R wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • Ar (int) – R wave amplitude (milivolts).

  • Kr (int) – R wave width (miliseconds).

Returns:

R_wave (array) – R wave amplitude values (milivolts).

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.S(i, As, Ks, Kcs, k=0)[source]

Generates the amplitude values of the S wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • As (int) – S wave amplitude (milivolts).

  • Ks (int) – S wave width (miliseconds).

  • Kcs (int) – Parameter which allows slight adjustment of S wave shape by cutting away a portion at the end.

  • k (int, optional) –

Returns:

  • S (array) – If k = 0, S wave amplitude values (milivolts).

  • S (int) – If k != 0, value obtained by using the S wave expression for the given k value.

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.St(i, As, Ks, Kcs, sm, Kst, k=0)[source]

Generates the amplitude values of the ST segment in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • As (int) – S wave amplitude (milivolts).

  • Ks (int) – S wave width (miliseconds).

  • Kcs (int) – Parameter which allows slight adjustment of S wave shape by cutting away a portion at the end.

  • sm (int) – Slope parameter in the ST segment.

  • Kst (int) – ST segment width (miliseconds).

  • k (int, optional) –

Returns:

  • ST (array) – If k = 0, ST segment amplitude values (milivolts).

  • ST (int) – If k != 0, value obtained by using the ST segment expression for the given k value.

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.T(i, As, Ks, Kcs, sm, Kst, At, Kt, k=0)[source]

Generates the amplitude values of the T wave in the ECG signal.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced don’t make sense in this context, an error will raise.

Parameters:
  • i (int) – Sampling rate.

  • As (int) – S wave amplitude (milivolts).

  • Ks (int) – S wave width (miliseconds).

  • Kcs (int) – Parameter which allows slight adjustment of S wave shape by cutting away a portion at the end.

  • sm (int) – Slope parameter in the ST segment.

  • Kst (int) – ST segment width (miliseconds).

  • At (int) – 1/2 of the T wave amplitude (milivolts).

  • Kt (int) – T wave width (miliseconds).

  • k (int, optional) –

Returns:

  • T (array) – If k = 0, T wave amplitude values (milivolts).

  • T (int) – If k != 0, value obtained by using the T wave expression for the given k value.

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8

biosppy.synthesizers.ecg.ecg(Kb=130, Ap=0.2, Kp=100, Kpq=40, Aq=0.1, Kq1=25, Kq2=5, Ar=0.7, Kr=40, As=0.2, Ks=30, Kcs=5, sm=96, Kst=100, At=0.15, Kt=220, si=2, Ki=200, var=0.01, sampling_rate=10000)[source]

Concatenates the segments and waves to make an ECG signal. The default values are physiological.

Follows the approach by Dolinský, Andráš, Michaeli and Grimaldi [Model03].

If the parameters introduced aren’t within physiological values (limits based on the website [ECGwaves]), a warning will raise.

Parameters:
  • Kb (int, optional) – B segment width (miliseconds).

  • Ap (float, optional) – P wave amplitude (milivolts).

  • Kp (int, optional) – P wave width (miliseconds).

  • Kpq (int, optional) – PQ segment width (miliseconds).

  • Aq (float, optional) – Q wave amplitude (milivolts).

  • Kq1 (int, optional) – First 5/6 of the Q wave width (miliseconds).

  • Kq2 (int, optional) – Last 1/6 of the Q wave width (miliseconds).

  • Ar (float, optional) – R wave amplitude (milivolts).

  • Kr (int, optional) – R wave width (miliseconds).

  • As (float, optional) – S wave amplitude (milivolts).

  • Ks (int, optional) – S wave width (miliseconds).

  • Kcs (int, optional) – Parameter which allows slight adjustment of S wave shape by cutting away a portion at the end.

  • sm (int, optional) – Slope parameter in the ST segment.

  • Kst (int, optional) – ST segment width (miliseconds).

  • At (float, optional) – 1/2 of the T wave amplitude (milivolts).

  • Kt (int, optional) – T wave width (miliseconds).

  • si (int, optional) – Parameter for setting the transition slope between T wave and isoelectric line.

  • Ki (int, optional) – I segment width (miliseconds).

  • var (float, optional) – Value between 0.0 and 1.0 that adds variability to the obtained signal, by changing each parameter following a normal distribution with mean value parameter_value and std var * parameter_value.

  • sampling_rate (int, optional) – Sampling frequency (Hz).

Returns:

  • ecg (array) – Amplitude values of the ECG wave.

  • t (array) – Time values accoring to the provided sampling rate.

  • params (dict) – Input parameters of the function

Examples

import numpy as np
import matplotlib.pyplot as plt
from biosppy.synthesizers import ecg as ecg_syn

sampling_rate = 10000
beats = 3
noise_amplitude = 0.05

ecg_total = np.array([])
for _ in range(beats):
    ecg_wave, _, _ = ecg_syn.ecg(sampling_rate=sampling_rate, var=0.1)
    ecg_total = np.concatenate((ecg_total, ecg_wave))

t = np.arange(0, len(ecg_total)) / sampling_rate

# Add powerline noise (50 Hz).
noise = noise_amplitude * np.sin(50 * (2 * np.pi) * t)
ecg_total += noise

plt.plot(t, ecg_total)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (mV)")
plt.title("Synthetic ECG")
plt.grid(True)
plt.show()

References

[Model03]

Pavol DOLINSKÝ, Imrich ANDRÁŠ, Linus MICHAELI, Domenico GRIMALDI, “MODEL FOR GENERATING SIMPLE SYNTHETIC ECG SIGNALS”, Acta Electrotechnica et Informatica, Vol. 18, No. 3, 2018, 3–8