|
发表于 2025-1-13 09:27:49
|
显示全部楼层
建一個 VerilogA model, 如下:
`include "constants.vams"
`include "disciplines.vams"
module ecg_signal_generator(p, n);
electrical p, n; // 定義輸出端口
parameter real amplitude = 1.0; // 最大幅度
parameter real heart_rate = 60.0; // 心率 (每分鐘心跳數)
parameter real t_rise = 0.1; // 上升時間 (秒)
parameter real t_fall = 0.1; // 下降時間 (秒)
parameter real t_qrs = 0.04; // QRS 波群時間 (秒)
parameter real t_cycle = 60.0 / heart_rate; // 每個心跳的週期時間 (秒)
real time_in_cycle;
real ecg_signal;
analog begin
// 計算目前時間在週期中的位置
time_in_cycle = $realtime % t_cycle;
// 模擬簡化的 ECG 波形
if (time_in_cycle < t_rise) begin
// P 波
ecg_signal = (amplitude / 3) * (time_in_cycle / t_rise);
end else if (time_in_cycle < t_rise + t_qrs) begin
// QRS 波群
ecg_signal = amplitude * exp(-((time_in_cycle - t_rise) / t_qrs)**2);
end else if (time_in_cycle < t_cycle - t_fall) begin
// T 波
ecg_signal = (amplitude / 2) * sin(2 * `M_PI * (time_in_cycle - t_rise - t_qrs) / (t_cycle - t_rise - t_qrs - t_fall));
end else begin
// 回到基線
ecg_signal = 0.0;
end
// 將信號輸出到端口
V(p, n) <+ ecg_signal;
end
endmodule
|
|