// 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;