Exemple #1
0
def extract_mel_chroma_first_fft_feature(X):
    X = X.astype(float)
    stft = np.abs(librosa.stft(X))
    chroma = np.mean(librosa.feature.chroma_stft(S=stft, sr=SAMPLE_RATE).T,
                     axis=0)
    mel = np.mean(librosa.feature.melspectrogram(X, sr=SAMPLE_RATE).T, axis=0)
    fft = np.fft.fft(X) / len(X)
    fft = np.abs(fft[:len(X) // 7])
    fft = [fft[0]]
    welch = nk.signal_psd(X,
                          method="welch",
                          min_frequency=1,
                          max_frequency=20,
                          show=True)["Power"]
    multitaper = nk.signal_psd(X,
                               method="multitapers",
                               max_frequency=20,
                               show=True)["Power"]
    lomb = nk.signal_psd(X,
                         method="lomb",
                         min_frequency=1,
                         max_frequency=20,
                         show=True)["Power"]
    welch = np.array(welch)
    multitaper = np.array(multitaper)
    cor = np.corrcoef(X, X)
    cor = np.array([cor[0][1], cor[1][0]])
    return chroma, mel, fft, welch, multitaper, cor
def extract_multitaper(X):
    multitaper = nk.signal_psd(X,
                               method="multitapers",
                               max_frequency=20,
                               show=False)["Power"]
    multitaper = np.array(multitaper)
    return multitaper
def extract_welch(X):
    X = X.astype(float)
    welch = nk.signal_psd(X,
                          method="welch",
                          min_frequency=1,
                          max_frequency=20,
                          show=False)["Power"]
    welch = np.array(welch)
    return welch
Exemple #4
0
def test_signal_psd(recwarn):
    warnings.simplefilter("always")

    data = nk.data("bio_eventrelated_100hz")
    out = nk.signal_psd(data["ECG"], sampling_rate=100)

    assert list(out.columns) == ["Frequency", "Power"]

    assert len(recwarn) == 1
    assert recwarn.pop(nk.misc.NeuroKitWarning)
def extract_burg(X):
    X = X.astype(float)
    burg = nk.signal_psd(X,
                         method="burg",
                         min_frequency=1,
                         max_frequency=20,
                         order=10,
                         show=False)["Power"]
    burg = np.array(burg)
    return burg
fig.savefig("README_decomposition.png", dpi=300, h_pad=3)

# =============================================================================
# Signal Power Spectrum Density
# =============================================================================

# Generate complex signal
signal = nk.signal_simulate(duration=20,
                            frequency=[0.5, 5, 10, 15],
                            amplitude=[2, 1.5, 0.5, 0.3],
                            noise=0.025)

# Get the PSD using different methods
welch = nk.signal_psd(signal,
                      method="welch",
                      min_frequency=1,
                      max_frequency=20,
                      show=True)
multitaper = nk.signal_psd(signal,
                           method="multitapers",
                           max_frequency=20,
                           show=True)
lomb = nk.signal_psd(signal,
                     method="lomb",
                     min_frequency=1,
                     max_frequency=20,
                     show=True)
burg = nk.signal_psd(signal,
                     method="burg",
                     min_frequency=1,
                     max_frequency=20,
def get_band(X, method):
    fft = np.fft.fft(X) / len(X)
    fft = np.abs(fft[:len(X) // 7])
    psd_average = []
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=1,
                          max_frequency=3,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=4,
                          max_frequency=7,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=8,
                          max_frequency=12,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=13,
                          max_frequency=22,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=23,
                          max_frequency=34,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=35,
                          max_frequency=45,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=56,
                          max_frequency=95,
                          show=False)["Power"]))
    psd_average.append(y)
    y = np.mean(
        np.array(
            nk.signal_psd(fft,
                          method=method,
                          min_frequency=105,
                          max_frequency=195,
                          show=False)["Power"]))
    psd_average.append(y)
    return psd_average
Exemple #8
0
    for database in np.unique(file["Database"]):

        print(str(database))
        data = file[file["Database"] == database]

        for participant in np.unique(data["Participant"]):

            data_participant = data[data["Participant"] == participant]
            sampling_rate = np.unique(data_participant["Sampling_Rate"])[0]
            rpeaks = data_participant["Rpeaks"].values

            # Interpolate
            rri = np.diff(rpeaks) / sampling_rate * 1000
            desired_length = int(
                np.rint(rpeaks[-1] / sampling_rate * sampling_rate))
            rri = nk.signal_interpolate(rpeaks[1:],
                                        rri,
                                        x_new=np.arange(desired_length))

            # Get PSD
            psd = nk.signal_psd(rri, sampling_rate=sampling_rate)
#
#            results = nk.hrv_frequency(rpeaks, sampling_rate=sampling_rate)
#            results["Participant"] = participant
#            results["Database"] = database
#            results["Recording_Length"] = rpeaks[-1] / sampling_rate / 60
#
#            all_results = pd.concat([all_results, results], axis=0)
#
#all_results.to_csv("data.csv", index=False)