How to Generate ECG Waveforms
Function/Arbitrary Waveform Generator
This video shows how to generate an ECG waveform using the LeCroy WaveStation 2012.
Digilent Analog Discovery Waveform Generator
The following script can be used to generate an ECG waveform on a Digilent Analog Discovery:
// Constants for waveforms
var A_P = 0.2; // P-wave amplitude (increased for realism)
var mu_P = 0.15; // P-wave center (earlier position)
var sigma_P = 0.03; // P-wave width
var A_Q = -0.2; // Q-wave amplitude (swapped with S)
var mu_Q = 0.45; // Q-wave center
var sigma_Q = 0.015; // Q-wave width
var A_R = 1.0; // R-wave amplitude (unchanged)
var mu_R = 0.5; // R-wave center
var sigma_R = 0.02; // R-wave width
var A_S = -0.3; // S-wave amplitude (swapped with Q)
var mu_S = 0.55; // S-wave center
var sigma_S = 0.015; // S-wave width
var A_T = 0.4; // T-wave amplitude (increased for realism)
var mu_T = 0.95; // T-wave center (further shifted to extend ST segment)
var sigma_T = 0.05; // T-wave width
// Euler's number (approximation)
var E = 2.71828;
// P-wave
var P_wave = A_P * pow(E, -pow((X - mu_P), 2) / (2 * pow(sigma_P, 2)));
// QRS complex as a combination of Q, R, and S waves
var Q_wave = A_Q * pow(E, -pow((X - mu_Q), 2) / (2 * pow(sigma_Q, 2)));
var R_wave = A_R * pow(E, -pow((X - mu_R), 2) / (2 * pow(sigma_R, 2)));
var S_wave = A_S * pow(E, -pow((X - mu_S), 2) / (2 * pow(sigma_S, 2)));
var QRS_wave = Q_wave + R_wave + S_wave;
// T-wave (shifted later for realistic ST segment)
var T_wave = A_T * pow(E, -pow((X - mu_T), 2) / (2 * pow(sigma_T, 2)));
// Noise
var noise = 0.1 * (random() - 0.5); // Noise in range [-0.05, 0.05]
// Combine components
P_wave + QRS_wave + T_wave;