use edfplus::{EdfWriter, SignalParam, Result};
fn main() -> Result<()> {
println!("创建测试EDF+文件...");
let mut writer = EdfWriter::create("test_data/test_generated.edf")?;
writer.set_patient_info("TEST001", "M", "01-JAN-1990", "TestPatient")?;
let eeg_signal = SignalParam {
label: "EEG Fp1".to_string(),
samples_in_file: 1000, physical_max: 200.0, physical_min: -200.0, digital_max: 32767, digital_min: -32768, samples_per_record: 256, physical_dimension: "uV".to_string(),
prefilter: "HP:0.1Hz LP:70Hz".to_string(),
transducer: "AgAgCl cup electrodes".to_string(),
};
let ecg_signal = SignalParam {
label: "ECG Lead II".to_string(),
samples_in_file: 1000,
physical_max: 5.0, physical_min: -5.0, digital_max: 32767,
digital_min: -32768,
samples_per_record: 256, physical_dimension: "mV".to_string(),
prefilter: "HP:0.05Hz LP:40Hz".to_string(),
transducer: "Ag/AgCl electrodes".to_string(),
};
writer.add_signal(eeg_signal)?;
writer.add_signal(ecg_signal)?;
let mut eeg_samples = Vec::new();
let mut ecg_samples = Vec::new();
for i in 0..256 {
let t = i as f64 / 256.0;
let eeg_value = 50.0 * (2.0 * std::f64::consts::PI * 10.0 * t).sin()
+ 10.0 * (2.0 * std::f64::consts::PI * 30.0 * t).sin()
+ 5.0 * (i as f64 % 7.0 - 3.0); eeg_samples.push(eeg_value);
let ecg_value = if (t * 60.0) % 1.0 < 0.1 { 2.0 * ((t * 60.0) % 1.0 * 20.0).sin()
} else {
0.1 * (2.0 * std::f64::consts::PI * 5.0 * t).sin()
};
ecg_samples.push(ecg_value);
}
let samples = vec![eeg_samples, ecg_samples];
writer.write_samples(&samples)?;
writer.finalize()?;
println!("测试EDF+文件已生成: test_data/test_generated.edf");
println!("包含 2 个信号,每个 256 个样本");
Ok(())
}