心冲击信号特征提取的代码
时间: 2023-10-21 22:05:40 浏览: 57
心冲击信号是一种非常重要的生理信号,其特征提取对于心脏疾病的诊断和治疗具有重要的意义。以下是一份基于Python的心冲击信号特征提取代码示例:
```python
import numpy as np
import scipy.signal as signal
# 读取心冲击信号
ecg_signal = np.loadtxt('ecg_signal.txt')
# 预处理信号
filtered_signal = signal.detrend(ecg_signal) # 去趋势
filtered_signal = signal.medfilt(filtered_signal, kernel_size=5) # 中值滤波
filtered_signal = signal.resample(filtered_signal, int(len(filtered_signal) / 2)) # 降采样
# 计算心冲击信号的R波峰位置
peaks, _ = signal.find_peaks(filtered_signal, distance=200)
# 计算心率
heart_rate = len(peaks) / (len(filtered_signal) / 1000)
# 计算R-R间期
rr_intervals = np.diff(peaks) / 1000 # 转化为秒
# 计算R波峰到T波峰的时间间隔
t_wave_peaks, _ = signal.find_peaks(filtered_signal[peaks[0]:peaks[-1]], prominence=0.3)
rr_intervals_t_peak = np.diff(t_wave_peaks) / 1000 # 转化为秒
# 计算ST段的特征
st_segment_start = peaks + int(0.1 * rr_intervals) # ST段起点
st_segment_end = peaks + int(0.4 * rr_intervals) # ST段终点
st_segment = filtered_signal[st_segment_start[0]:st_segment_end[-1]] # 获取ST段信号
st_segment_mean = np.mean(st_segment) # ST段信号的均值
st_segment_std = np.std(st_segment) # ST段信号的标准差
st_segment_slope, _ = signal.linregress(np.arange(len(st_segment)), st_segment)[:2] # ST段信号的斜率
# 输出心率和特征
print('Heart rate: ', heart_rate, 'bpm')
print('RR intervals: ', rr_intervals)
print('RR intervals (T peak): ', rr_intervals_t_peak)
print('ST segment mean: ', st_segment_mean)
print('ST segment std: ', st_segment_std)
print('ST segment slope: ', st_segment_slope)
```
其中,假设心冲击信号已经保存在一个名为`ecg_signal.txt`的文件中,每行一个采样点,代码首先读取信号并进行预处理,包括去趋势、中值滤波和降采样等。然后,使用`signal.find_peaks`函数计算出信号中的R波峰位置,并根据R波峰位置计算出心率和R-R间期。接着,使用`signal.find_peaks`函数计算出R波峰到T波峰的时间间隔。最后,计算ST段的特征,包括ST段信号的均值、标准差和斜率,并输出结果。
需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行修改和调整。