我有一个beat detect函数。首先,我用find peaks检测ecg信号中的r峰,并将峰存储在一个数组中。然后,该函数找到在ecg峰范围内的ppg信号的所有峰,并将它们存储在一个数组中。现在,我有几个先证者的几个测量值,其中我的峰将被检测到。我的代码循环所有的测量,并对每个测量逐个执行代码。然后我的程序中断了先证者2的测量3,并出现以下错误消息。Output of the error in the consoleValueError: negative dimensions are not allowed
def beat_detect (ECG, PPG_red_interp, PPG_ir_interp, PPG_red2_interp, PPG_ir2_interp):
ecg_peaks = signal.find_peaks(ECG, height=np.mean(ECG)+2*np.std(ECG), prominence=np.mean(ECG)+np.std(ECG))
ecg_beats = np.zeros((len(ecg_peaks[0]) - 2, 110))
ppg_red_beats = np.zeros((len(ecg_peaks[0]) - 2, 110))
ppg_ir_beats = np.zeros((len(ecg_peaks[0]) - 2, 110))
ppg_red2_beats = np.zeros((len(ecg_peaks[0]) - 2, 110))
ppg_ir2_beats = np.zeros((len(ecg_peaks[0]) - 2, 110))
for i in range(1, len(ecg_peaks[0])-1):
ecg_beats[i-1] = ECG[ecg_peaks[0][i]-55:ecg_peaks[0][i]+55]
ppg_red_beats[i-1] = PPG_red_interp[ecg_peaks[0][i]-55:ecg_peaks[0][i]+55]
ppg_ir_beats[i-1] = PPG_ir_interp[ecg_peaks[0][i]-55:ecg_peaks[0][i]+55]
ppg_red2_beats[i-1] = PPG_red2_interp[ecg_peaks[0][i]-55:ecg_peaks[0][i]+55]
ppg_ir2_beats[i-1] = PPG_ir2_interp[ecg_peaks[0][i]-55:ecg_peaks[0][i]+55]
return ecg_peaks, ecg_beats, ppg_red_beats, ppg_ir_beats, ppg_red2_beats, ppg_ir2_beats
我想这是因为我的find peaks函数在ecg信号中没有找到任何峰值,所以我在数组ecg_peaks中没有值。所以对于出现错误的ecg信号,我用find peaks检测到了峰值。所有峰值都被找到了。之后我交换了我的ecg信号文件,然后proband 7出现了错误,measurement 4.然后我再次更换了ecg信号文件,只有先证者17,measurement 1出现错误,但是再次更换文件并没有带来任何改善,所以不可能是峰值检测或者ecg信号数据的原因。可以吗?我怎样才能解决这个问题,有什么想法吗?
我会很高兴的建议或解决方案。
1条答案
按热度按时间dojqjjoe1#
你指派的
这对输入
.shape
施加了一个约束--它必须有多个峰值条目。所以检查一下:
这将帮助您在数据流中向上追踪问题,以确定未能识别足够ECG峰值的处理阶段。例如,您可能希望以图形方式绘制输入,然后调整
height=
和prominence=
阈值。