def test_threshold_filter(self): fake_rri = RRi([810, 830, 860, 865, 804, 1100, 800], time=[0, 1, 2, 3, 4, 5, 6]) rri_filt = threshold_filter(fake_rri, threshold=250) expected_rri = [810, 830, 860, 865, 804, 748.40625, 800] expected_time = [0, 1, 2, 3, 4, 5, 6] assert isinstance(rri_filt, RRi) np.testing.assert_almost_equal(rri_filt.values, expected_rri, decimal=2) np.testing.assert_almost_equal(rri_filt.time, expected_time, decimal=2)
def test_threshold_filter_noise_in_the_beginning(self): fake_rri = RRi([810, 500, 860, 865, 804, 810, 800], time=[0, 1, 2, 3, 4, 5, 6]) rri_filt = threshold_filter(fake_rri, threshold=250) expected_rri = [810, 814.34375, 860, 865, 804, 810, 800] expected_time = [0, 1, 2, 3, 4, 5, 6] assert isinstance(rri_filt, RRi) np.testing.assert_almost_equal(rri_filt.values, expected_rri, decimal=2) np.testing.assert_almost_equal(rri_filt.time, expected_time, decimal=2)
def test_threshold_filter_string_threshold(self): fake_rri = RRi([810, 650, 860, 865, 804, 810, 800], time=[0, 1, 2, 3, 4, 5, 6]) rri_filt = threshold_filter(fake_rri, threshold="strong") expected_rri = [810, 814.34375, 860, 865, 804, 810, 800] expected_time = [0, 1, 2, 3, 4, 5, 6] assert isinstance(rri_filt, RRi) np.testing.assert_almost_equal(rri_filt.values, expected_rri, decimal=2) np.testing.assert_almost_equal(rri_filt.time, expected_time, decimal=2)
def preprocess_hr_signal(raw_signal, fs, sig_len, desired_fs: int = 1, interval: int = 1): """ correct sampling bias by making a frequency shift, moving average filter and threshold LPF :param raw_signal: signal to be preprocessed :param fs: the raw_signal's sampling frequency :param sig_len: raw signal's number of samples :param desired_fs: desired sampling frequency :param interval: window for moving average filter :return: processed signal """ # interval in hours signal = Waveforms.frequency_shift(raw_signal, sig_len, fs, desired_fs) signal = pos_sig(signal) if np.isnan(signal).all(): return np.nan signal = RRi(signal) window = desired_fs * interval * 3600 return threshold_filter(moving_average(signal, window), threshold='strong')