ECG心电图信号产生函数
时间: 2023-10-18 16:04:17 浏览: 72
好的,以下是一个MATLAB的ECG心电图信号产生函数:
```matlab
function ecg_sig = generate_ecg(fs, duration, hr_mean, hr_std, p_amp, qrs_dur, qrs_amp, t_dur, t_amp)
% fs: 采样频率
% duration: 信号持续时间,单位秒
% hr_mean: 心率平均值,单位bpm
% hr_std: 心率标准差,单位bpm
% p_amp: P波幅值
% qrs_dur: QRS波群持续时间,单位秒
% qrs_amp: QRS波群幅值
% t_dur: T波持续时间,单位秒
% t_amp: T波幅值
% 生成时间序列
t = 0:1/fs:duration;
% 生成心率序列
hr = repmat(hr_mean, size(t));
hr_var = hr_std^2;
for i = 2:length(t)
hr(i) = hr(i-1) + (hr_mean - hr(i-1))*0.1/fs + sqrt(hr_var)*randn(1)*0.1/fs;
end
% 生成P波
p_start = 0.1*duration;
p_end = p_start + 0.1;
p_sig = p_amp*sin(2*pi*10*(t-p_start)).*exp(-(t-p_start)/0.03).*(t>=p_start).*(t<=p_end);
% 生成QRS波群
qrs_start = 0.1*duration;
qrs_end = qrs_start + qrs_dur;
qrs_sig = qrs_amp*(1.25*exp(-0.2*(t-qrs_start)) - 0.25*exp(-0.04*(t-qrs_start))).*(t>=qrs_start).*(t<=qrs_end);
% 生成T波
t_start = qrs_end + 0.04;
t_end = t_start + t_dur;
t_sig = t_amp*sin(2*pi*0.5*(t-t_start)).*exp(-(t-t_start)/0.2).*(t>=t_start).*(t<=t_end);
% 生成心电信号
ecg_sig = p_sig + qrs_sig + t_sig;
% 生成心率变异性
hr_variability = 0.1*hr_std*randn(size(t));
hr = hr + hr_variability;
% 生成R峰位置
r_locs = zeros(1, length(t));
for i = 2:length(t)-1
if ecg_sig(i) > ecg_sig(i-1) && ecg_sig(i) > ecg_sig(i+1) && ecg_sig(i) > 0.5*max(ecg_sig)
r_locs(i) = 1;
end
end
r_locs = find(r_locs);
```
该函数可以根据输入参数生成一段模拟的ECG心电图信号,包含P波、QRS波群和T波,并伴随着心率的变异性。您可以根据需要调整输入参数来生成不同的ECG心电图信号。