70 lines
2.0 KiB
C++
70 lines
2.0 KiB
C++
#include <iostream>
|
||
#include <vector>
|
||
#include <chrono>
|
||
#include <random>
|
||
|
||
// État du rythme cardiaque
|
||
enum class HeartRateState {
|
||
NORMAL,
|
||
BRADYCARDIA,
|
||
TACHYCARDIA
|
||
};
|
||
|
||
// Fonction pour générer un signal de battement cardiaque
|
||
std::vector<float> generateHeartbeatSignal(HeartRateState state, int durationSeconds = 10, int sampleRate = 1000) {
|
||
int bpm;
|
||
switch (state) {
|
||
case HeartRateState::BRADYCARDIA:
|
||
bpm = 40 + rand() % 15; // 40-55 BPM
|
||
break;
|
||
case HeartRateState::TACHYCARDIA:
|
||
bpm = 110 + rand() % 30; // 110-140 BPM
|
||
break;
|
||
default:
|
||
bpm = 60 + rand() % 40; // 60-100 BPM
|
||
break;
|
||
}
|
||
|
||
int totalSamples = durationSeconds * sampleRate;
|
||
int samplesPerBeat = (60.0 / bpm) * sampleRate;
|
||
|
||
std::vector<float> signal(totalSamples, 0.0f);
|
||
|
||
for (int i = 0; i < totalSamples; i += samplesPerBeat) {
|
||
if (i < totalSamples) signal[i] = 1.0f; // Pic R
|
||
if (i + 1 < totalSamples) signal[i + 1] = 0.5f;
|
||
if (i + 2 < totalSamples) signal[i + 2] = 0.2f;
|
||
}
|
||
|
||
return signal;
|
||
}
|
||
|
||
// Pause active sans utiliser thread
|
||
void waitMilliseconds(int ms) {
|
||
auto start = std::chrono::high_resolution_clock::now();
|
||
while (std::chrono::duration_cast<std::chrono::milliseconds>(
|
||
std::chrono::high_resolution_clock::now() - start).count() < ms) {
|
||
// boucle vide
|
||
}
|
||
}
|
||
|
||
// Affichage du signal
|
||
void printSignal(const std::vector<float>& signal, int sampleRate) {
|
||
for (size_t i = 0; i < signal.size(); ++i) {
|
||
std::cout << signal[i] << "\n";
|
||
waitMilliseconds(1000 / sampleRate);
|
||
}
|
||
}
|
||
|
||
// ----------- FONCTION PRINCIPALE ------------
|
||
int main() {
|
||
std::cout << "Simulation d’un signal de battement cardiaque\n";
|
||
|
||
// Tu peux changer ici : NORMAL / BRADYCARDIA / TACHYCARDIA
|
||
HeartRateState state = HeartRateState::TACHYCARDIA;
|
||
|
||
std::vector<float> signal = generateHeartbeatSignal(state, 5, 100); // 5 secondes, 100 Hz
|
||
printSignal(signal, 100);
|
||
|
||
return 0;
|
||
} |