https://github.com/ab4377/dream-project
Raw File
Tip revision: 8e64d9628355fde264b6481f9955478fed995fe5 authored by Avinash Bukkittu on 04 October 2017, 22:20:26 UTC
Merge branch 'master' of https://github.com/ab4377/dream-project
Tip revision: 8e64d96
GetStatistics.py
import Utilities as utilities
import StepStrideFrequencyModuleConstants
import pickle
import matplotlib.pyplot as plt
import numpy as np
import math
import sys

def main():
    X, recordIds = utilities.load_full_data()
    print "Computing Fourier transform and power spectrum..."
    X1 = []
    Y1 = []
    Z1 = []
    for x in X:
        (fx, x1) = utilities.fourier_transform(x["x"])
        (fy, y1) = utilities.fourier_transform(x["y"])
        (fz, z1) = utilities.fourier_transform(x["z"])
        # a[0] = 0
        x1 = utilities.remove_noise(x1, 0.5)
        y1 = utilities.remove_noise(y1, 0.5)
        z1 = utilities.remove_noise(z1, 0.5)
        # interpolate
        (fx, x1) = utilities.interpolate_data(fx, x1)
        (fy, y1) = utilities.interpolate_data(fy, y1)
        (fz, z1) = utilities.interpolate_data(fz, z1)
        x1 = utilities.squared_signal(x1)
        y1 = utilities.squared_signal(y1)
        z1 = utilities.squared_signal(z1)
        X1.append(x1)
        Y1.append(y1)
        Z1.append(z1)

    print "Estimating the quantities in X-axis..."
    half_energies = []
    amplitudes = []
    frequencies = []
    j = 1
    for z in X1:
        f = StepStrideFrequencyModuleConstants.F
        start_index = next(x[0] for x in enumerate(f) if x[1] > 0.5)
        end_index = next(x[0] for x in enumerate(f) if x[1] > 2.5)
        print start_index
        print end_index
        with open("z.pkl", "w") as file:
            pickle.dump(z, file)
        diff = z - max(z)
        if np.any(diff):
            indices = utilities.get_peaks_between(z, start_index=start_index, end_index=end_index, thres=0.3,
                                                  min_dist=1)
            print "Done till this point."
            for i in range(len(indices)):
                left_idx = indices[i - 1] if i - 1 >= 0 else 0
                right_idx = indices[i + 1] if i + 1 < len(indices) else len(f) - 1
                half_energies.append(utilities.get_half_energy(z, f, indices[i], left_idx, right_idx))
                a = np.sqrt(z)
                amplitudes.append(a[indices[i]])
                frequencies.append(f[indices[i]])
        print "Done " + str(j) + "!"
        j = j + 1

    with open("half-energies_x.pkl","w") as f:
        pickle.dump(half_energies,f)

    with open("amplitudes_x.pkl","w") as f:
        pickle.dump(amplitudes,f)

    with open("frequencies_x.pkl","w") as f:
        pickle.dump(frequencies,f)

    print "----Energy----"
    print np.mean(np.array(half_energies))
    print np.std(np.array(half_energies))
    print "--------------"

    print "----Amp-------"
    print np.mean(np.array(amplitudes))
    print np.std(np.array(amplitudes))
    print "--------------"

    print "-----Freq-----"
    print np.mean(np.array(frequencies))
    print np.std(np.array(frequencies))
    print "--------------"

    print "Estimating the quantities in Y-axis..."
    half_energies = []
    amplitudes = []
    frequencies = []
    j = 1
    for z in Y1:
        f = StepStrideFrequencyModuleConstants.F
        start_index = next(x[0] for x in enumerate(f) if x[1] > 0.5)
        end_index = next(x[0] for x in enumerate(f) if x[1] > 2.5)
        print start_index
        print end_index
        with open("z.pkl", "w") as file:
            pickle.dump(z, file)
        diff = z - max(z)
        if np.any(diff):
            indices = utilities.get_peaks_between(z, start_index=start_index, end_index=end_index, thres=0.3,
                                                  min_dist=1)
            print "Done till this point."
            for i in range(len(indices)):
                left_idx = indices[i - 1] if i - 1 >= 0 else 0
                right_idx = indices[i + 1] if i + 1 < len(indices) else len(f) - 1
                half_energies.append(utilities.get_half_energy(z, f, indices[i], left_idx, right_idx))
                a = np.sqrt(z)
                amplitudes.append(a[indices[i]])
                frequencies.append(f[indices[i]])
        print "Done " + str(j) + "!"
        j = j + 1

    with open("half-energies_y.pkl","w") as f:
        pickle.dump(half_energies,f)

    with open("amplitudes_y.pkl","w") as f:
        pickle.dump(amplitudes,f)

    with open("frequencies_y.pkl","w") as f:
        pickle.dump(frequencies,f)

    print "----Energy----"
    print np.mean(np.array(half_energies))
    print np.std(np.array(half_energies))
    print "--------------"

    print "----Amp-------"
    print np.mean(np.array(amplitudes))
    print np.std(np.array(amplitudes))
    print "--------------"

    print "-----Freq-----"
    print np.mean(np.array(frequencies))
    print np.std(np.array(frequencies))
    print "--------------"

    print "Estimating the quantities in Z-axis..."
    half_energies = []
    amplitudes = []
    frequencies = []
    j = 1
    for z in Z1:
        f = StepStrideFrequencyModuleConstants.F
        start_index = next(x[0] for x in enumerate(f) if x[1] > 0.5)
        end_index = next(x[0] for x in enumerate(f) if x[1] > 2.5)
        print start_index
        print end_index
        with open("z.pkl","w") as file:
            pickle.dump(z,file)
        diff = z - max(z)
        if np.any(diff):
            indices = utilities.get_peaks_between(z,start_index=start_index,end_index=end_index,thres=0.3,min_dist=1)
            print "Done till this point."
            for i in range(len(indices)):
                left_idx = indices[i - 1] if i - 1 >= 0 else 0
                right_idx = indices[i + 1] if i + 1 < len(indices) else len(f) - 1
                half_energies.append(utilities.get_half_energy(z, f, indices[i], left_idx, right_idx))
                a = np.sqrt(z)
                amplitudes.append(a[indices[i]])
                frequencies.append(f[indices[i]])
        print "Done " + str(j) + "!"
        j = j + 1

    with open("half-energies_z.pkl","w") as f:
        pickle.dump(half_energies,f)

    with open("amplitudes_z.pkl","w") as f:
        pickle.dump(amplitudes,f)

    with open("frequencies_z.pkl","w") as f:
        pickle.dump(frequencies,f)

    print "----Energy----"
    print np.mean(np.array(half_energies))
    print np.std(np.array(half_energies))
    print "--------------"

    print "----Amp-------"
    print np.mean(np.array(amplitudes))
    print np.std(np.array(amplitudes))
    print "--------------"

    print "-----Freq-----"
    print np.mean(np.array(frequencies))
    print np.std(np.array(frequencies))
    print "--------------"

    sys.exit()
    plt.subplot(3,1,1)
    plt.hist(np.array(half_energies), bins='auto')
    plt.title("Energy distribution")
    plt.xlim((0,1000))

    plt.subplot(3,1,2)
    plt.hist(np.array(amplitudes),bins='auto')
    plt.title("Amplitudes")

    plt.subplot(3,1,3)
    plt.hist(np.array(frequencies),bins='auto')
    plt.title("Frequencies")
    plt.show()

    with open('half-energies.pkl','w') as f:
        pickle.dump(half_energies,f)

if __name__ == "__main__":
    main()
back to top