Esempio n. 1
0
def hrv_feature_extraction(inputs, fs=512):
    """

    :param inputs: R-R intervals as numpy array
    :param fs: ECG sample freq for regularization
    :return: list contains 9 features, listed as follow.
    """
    # features = {"HR": float,
    #             "SDNN": float,
    #             "RMSSD": float,
    #             "SDSD": float,
    #             "NN50": float,
    #             "PNN50": float,
    #             "LF": float,
    #             "HF": float,
    #             "LFHF": float}
    features = []
    if inputs is []:
        return features
    else:
        # regularization to ms
        inputs = np.true_divide(inputs, fs)
        inputs = np.multiply(inputs, 1000)
        tmp = get_time_domain_features(inputs)
        tmp2 = get_frequency_domain_features(inputs, method='lomb')
        features.append(tmp['mean_hr'])
        features.append(tmp['sdnn'])
        features.append(tmp['rmssd'])
        features.append(tmp['sdsd'])
        features.append(tmp['nni_50'])
        features.append(tmp['pnni_50'])  # in percentage
        features.append(tmp2['lf'])
        features.append(tmp2['hf'])
        features.append(tmp2['lf_hf_ratio'])
        return features
Esempio n. 2
0
    def test_if_time_domain_features_are_correct_for_pnni_as_percent_set_to_false(
            self):
        nn_intervals = load_test_data(TEST_DATA_FILENAME)
        function_time_domain_features = get_time_domain_features(
            nn_intervals=nn_intervals, pnni_as_percent=False)
        real_function_time_domain_features = {
            'mean_nni': 718.248,
            'sdnn': 43.113074968427306,
            'sdsd': 19.519367520775713,
            'nni_50': 24,
            'pnni_50': 2.4,
            'nni_20': 225,
            'pnni_20': 22.5,
            'rmssd': 19.519400785039664,
            'median_nni': 722.5,
            'range_nni': 249,
            'cvsd': 0.027176408127888504,
            'cvnni': 0.060025332431732914,
            'mean_hr': 83.84733227281252,
            'max_hr': 101.69491525423729,
            'min_hr': 71.51370679380214,
            'std_hr': 5.196775370674054
        }

        self.assertAlmostEqual(function_time_domain_features,
                               real_function_time_domain_features)
Esempio n. 3
0
            time_series_lf_hf_ratio.append(0)
            time_series_sd1.append(0)
            time_series_sample_entropy.append(0)

        else:

            temp_RR = temp[:(i + 1)]

            #print(temp_RR)

            # Now find the features and extract the ones we require
            # For time domain we will use Mean,SDNN,RMSSD,SDSD, pNN20, pNN50
            # Frequency domain we will use totalPSD, HF
            # Non linear features we will use SD1/SD2 and sample entropy

            time_domain = get_time_domain_features(temp_RR)

            # Time domain components
            time_series_mean_nni.append(time_domain['mean_nni'])
            time_series_sdnn.append(time_domain['sdnn'])
            time_series_sdsd.append(time_domain['sdsd'])
            time_series_pnni_20.append(time_domain['pnni_20'])
            time_series_pnni_50.append(time_domain['pnni_50'])
            time_series_range_nni.append(time_domain['range_nni'])

            frequency_domain = get_frequency_domain_features(
                temp_RR, 'welch', 360)

            # Frequency domain components
            time_series_total_power.append(frequency_domain['total_power'])
            time_series_hf.append(frequency_domain['hf'])