Ejemplo n.º 1
0
    def test_trainSignal(self):
        maxFeatures = 10
        # sig, force, fs, firings = getSignal(1, 30, "./signals/")
        trainSigs = []
        trainFirings = []
        for i in range(10, 17):
            sig, force, fs, firings = getSignal2(
                "002041436" + str(i),
                filePath="../signals/Hamid/00MaHaLI1002041436/")
            trainSigs.append(sig)
            trainFirings.append(firings)
        sig2, force2, fs2, firings2 = getSignal2(
            "00204143607", filePath="../signals/Hamid/00MaHaLI1002041436/")

        # sig2, force2, fs2, firings2 = getSignal(2, 30, "./signals/")

        signalWindow, labelWindow = self.prepareData(trainSigs[0],
                                                     trainFirings[0])
        for index in range(1, len(trainSigs)):
            sig, label = self.prepareData(trainSigs[index],
                                          trainFirings[index])
            signalWindow = np.append(signalWindow, sig, axis=0)
            labelWindow = np.append(labelWindow, label, axis=0)

        signalWindow2, labelWindow2 = self.prepareData(sig2, firings2)

        X_train, X_test, Y_train, Y_test = trainTestSplit(
            signalWindow, labelWindow, 0.75)
        X_train2, X_test2, Y_train2, Y_test2 = trainTestSplit(
            signalWindow2, labelWindow2, 0.75)

        X_train = np.reshape(X_train, [-1, X_train.shape[1], X_train.shape[2]])
        # X_test = np.reshape(X_test, [-1, X_test.shape[1], X_test.shape[2], 1])
        Y_train = np.reshape(Y_train, [-1, Y_train.shape[1], Y_train.shape[2]])
        # y_test = np.reshape(Y_test, [-1, Y_test.shape[1], Y_test.shape[2], 1])

        # Y_train = (Y_train - np.min(Y_train)) / (np.max(Y_train) - np.min(Y_train))
        # X_train = (X_train - np.min(X_train)) / (np.max(X_train) - np.min(X_train))

        cycleGAN = CycleGANModified(Y_train.shape[1], Y_train.shape[2])
        cycleGAN.train(x_train=X_train[:, :, range(Y_train.shape[2])],
                       y_train=Y_train,
                       epochs=100)
Ejemplo n.º 2
0
 def test_train_test_split(self):
     sig, force, fs, firings = getSignal(1, 30, "../signals/")
     preparedFirings = prepareFiringSignal(firings[0], len(sig[0, 0][0]))
     sdSig = calculateSD(sig)
     signalWindow, labelWindow = windowingSig(sdSig, preparedFirings, windowSize=15)
     X_train, X_test, y_train, y_test = trainTestSplit(signalWindow, labelWindow, 0.7)
     TestCase.assertTrue(self, len(X_train) > 0)
     TestCase.assertTrue(self, len(X_test) > 0)
     TestCase.assertTrue(self, len(y_train, ) > 0)
     TestCase.assertTrue(self, len(y_test) > 0)
Ejemplo n.º 3
0
signalWindow, labelWindow = prepareDataWithForce(trainSigs[0], trainTarget[0])
for index in range(1, len(trainSigs)):
    sig, label = prepareDataWithForce(trainSigs[index], trainTarget[index])
    signalWindow = np.append(signalWindow, sig, axis=0)
    labelWindow = np.append(labelWindow, label, axis=0)

signalWindow2, labelWindow2 = prepareDataWithForce(sig2, force2)

# labelWindow[np.where(labelWindow >= 1)] = 1
# labelWindow2[np.where(labelWindow2 >= 1)] = 1
# num_classes = len(np.unique(labelWindow))
# labelWindow2[np.where(labelWindow2 > num_classes)] = num_classes - 1
labelWindow = labelWindow / np.max(labelWindow)
labelWindow2 = labelWindow2 / np.max(labelWindow2)

X_train, X_test, Y_train, Y_test = trainTestSplit(signalWindow, labelWindow,
                                                  0.75)
X_train2, X_test2, Y_train2, Y_test2 = trainTestSplit(signalWindow2,
                                                      labelWindow2, 0.75)

# Y_train = to_categorical(Y_train)
# Y_test = to_categorical(Y_test)
# Y_train2 = to_categorical(Y_train2)
# Y_test2 = to_categorical(Y_test2)

signal_size_row = X_train[0].shape[0]
signal_size_col = X_train[0].shape[1]
components = X_train[0].shape[2]
# X_train = np.reshape(X_train, [-1, signal_size_row, signal_size_col, 1])
# X_test = np.reshape(X_test, [-1, signal_size_row, signal_size_col, 1])
# X_train2 = np.reshape(X_train2, [-1, signal_size_row, signal_size_col, 1])
# X_test2 = np.reshape(X_test2, [-1, signal_size_row, signal_size_col, 1])
Ejemplo n.º 4
0
from keras.layers.advanced_activations import LeakyReLU

import numpy as np

from Utils.SignalUtils import getSignal, calculateSD, prepareFiringSignal, windowingSig, trainTestSplit, \
    calculateCdr, calculateNormalizedOnCorr

sig, force, fs, firings = getSignal(1, 30, "../signals/")
sdSig = calculateSD(sig)
# sdSig = calculateICA(sdSig, 64)
sizeInputSignal = sdSig.shape[1]
preparedFirings = prepareFiringSignal(firings[0], sizeInputSignal)
signalWindow, labelWindow = windowingSig(sdSig, preparedFirings, windowSize=8)  # should be divideable to 4
labelWindow = calculateCdr(labelWindow)
signalWindow = calculateNormalizedOnCorr(signalWindow)
x_train, x_test, y_train, y_test = trainTestSplit(signalWindow, labelWindow, 0.7)
# convert to one-hot vector
# y_train = to_categorical(y_train)
# y_test = to_categorical(y_test)

signal_size_row = x_train[0].shape[0]
signal_size_col = x_train[0].shape[1]
x_train = np.reshape(x_train, [-1, signal_size_row, signal_size_col])
x_test = np.reshape(x_test, [-1, signal_size_row, signal_size_col])
input_shape = (signal_size_row, signal_size_col)

model = Sequential()
model.add(Conv1D(16, 5, padding='same', input_shape=input_shape))
model.add(LeakyReLU())
model.add(Conv1D(8, 10, padding='same'))
model.add(LeakyReLU())
Ejemplo n.º 5
0
    def test_plotForcePredicted(self):
        maxFeatures = 64
        # sig, force, fs, firings = getSignal(1, 30, "../signals/")
        trainSigs = []
        trainTargets = []
        for i in range(1, 3):
            sig, force, fs, firings = getSignal3(str(i))
            trainSigs.append(sig)
            trainTargets.append(force)
        sig2, force2, fs2, firings2 = getSignal3(str(3))

        # sig2, force2, fs2, firings2 = getSignal(2, 30, "./signals/")
        def prepareDataWithForce(sig, force):
            sdSig = calculateSD(sig)
            sdSig = butter_bandpass_filter(sdSig, 20, 450, fs2)
            # sdSig = calculateICA(sdSig, 64)

            signalWindow, labelWindow = windowingSig(
                sdSig, force,
                windowSize=maxFeatures)  # should be divideable to 4

            # signalWindow = calculateFFTOnWindows(signalWindow)
            labelWindow = calculateForceAverage(labelWindow)
            # signalWindow, labelWindow = calculateNormalizedOnCorr(signalWindow, labelWindow)
            # signalWindow, labelWindow = calculateICA(signalWindow, labelWindow, 4)

            # signalWindow = extractPhaseSpace(signalWindow)
            # signalWindow = extractSoundFeatures(signalWindow)

            return signalWindow, labelWindow

        def prepareData(sig, firings):
            sdSig = calculateSD(sig)
            # sdSig = calculateICA(sdSig, 64)
            sdSig = butter_bandpass_filter(sdSig, 20, 450, 2048)
            sizeInputSignal = sdSig.shape[1]
            preparedFirings = prepareFiringSignal(firings[0], sizeInputSignal)
            signalWindow, labelWindow = windowingSig(
                sdSig, preparedFirings,
                windowSize=maxFeatures)  # should be divideable to 4
            # signalWindow = calculateFFTOnWindows(signalWindow)
            labelWindow = calculateCdr(labelWindow)
            # signalWindow, labelWindow = calculateNormalizedOnCorr(signalWindow, labelWindow)
            # signalWindow, labelWindow = calculateICA(signalWindow, labelWindow, 4)

            signalWindow = extractPhaseSpace(signalWindow)
            # signalWindow = extractSoundFeatures(signalWindow)

            return signalWindow, labelWindow

        signalWindow, labelWindow = prepareDataWithForce(
            trainSigs[0], trainTargets[0])
        for index in range(1, len(trainSigs)):
            sig, label = prepareDataWithForce(trainSigs[index],
                                              trainTargets[index])
            signalWindow = np.append(signalWindow, sig, axis=0)
            labelWindow = np.append(labelWindow, label, axis=0)

        signalWindow2, labelWindow2 = prepareDataWithForce(sig2, force2)

        # num_classes = len(np.unique(labelWindow))
        # labelWindow2[np.where(labelWindow2 > num_classes)] = num_classes - 1
        labelWindow = np.abs(labelWindow)
        labelWindow2 = np.abs(labelWindow2)

        labelWindow = (labelWindow - np.min(labelWindow)) / (
            np.max(labelWindow) - np.min(labelWindow))
        labelWindow2 = (labelWindow2 - np.min(labelWindow2)) / (
            np.max(labelWindow2) - np.min(labelWindow2))

        X_train, X_test, Y_train, Y_test = trainTestSplit(signalWindow,
                                                          labelWindow,
                                                          0.95,
                                                          shuffle=False)
        X_train2, X_test2, Y_train2, Y_test2 = trainTestSplit(signalWindow2,
                                                              labelWindow2,
                                                              0.95,
                                                              shuffle=False)

        # Y_train = to_categorical(Y_train)
        # Y_test = to_categorical(Y_test)
        # Y_train2 = to_categorical(Y_train2)
        # Y_test2 = to_categorical(Y_test2)

        signal_size_row = X_train[0].shape[0]
        signal_size_col = X_train[0].shape[1]
        x_train = np.reshape(X_train, [-1, signal_size_row, signal_size_col])
        x_test = np.reshape(X_test, [-1, signal_size_row, signal_size_col])
        X_train2 = np.reshape(X_train2, [-1, signal_size_row, signal_size_col])
        X_test2 = np.reshape(X_test2, [-1, signal_size_row, signal_size_col])
        input_shape = (signal_size_row, signal_size_col)

        model = tf.keras.models.load_model(
            'E:\Workspaces\crDsEMGEstimationPaper\EMGDecompositionDeepLearning\DeepLeraning\ForceEstimation.h5'
        )

        batch_size = 12
        out = model.predict(X_train2, batch_size=batch_size)
        rect_predict = out.ravel()
        plt.plot(labelWindow2)
        plt.plot(rect_predict)
        plt.legend(['Target', 'Estimated'], loc='upper left')
        plt.show()