Skip to content
Snippets Groups Projects
Select Git revision
2 results Searching

simple.xsd

Blame
  • frequency_power.jl 2.65 KiB
    using Pkg; Pkg.activate(".");
    using FFTW, DSP, Plots, DelimitedFiles
    using REPL.TerminalMenus
    
    function plot_spectrogram(s, n=div(length(s),8), noverlap=div(n,2))
    	n = 80
    	noverlap = n-1 #div(n,2)
    	spec = spectrogram(s, n, noverlap)
    	power = spec.power./sum(spec.power, dims=1)
    	heatmap(spec.time, spec.freq, power)
    end
    function plot_periodogram(s)
    	peri = periodogram(s)
    	plot(peri.freq, peri.power)
    end
    function plot_periodogram(x,y,z)
    	perix = periodogram(x)
    	periy = periodogram(y)
    	periz = periodogram(z)
    	power = max.(perix.power, periy.power, periz.power)
    	plot(perix.freq, power)
    end
    
    function read_data(dataname, sensor)
    	return readdlm("data/$(dataname)_$(sensor).txt", Float64)
    end
    
    read_acc(dataname) = read_data(dataname, "acc")
    read_gyr(dataname) = read_data(dataname, "gyr")
    
    xyz(data) = data[:,2:4]
    getx(data) = data[:,2]
    gety(data) = data[:,3]
    getz(data) = data[:,4]
    ypr(data) = data[:,2:4]
    getyaw(data) = data[:,2]
    getpitch(data) = data[:,3]
    getroll(data) = data[:,4]
    
    normalize_data(A) = sqrt.(sum(A.^2, dims=2)) # TODO squareroot?
    
    decimate(v) = resample(v, 0.1)
    
    mean(v) = sum(v)/length(v)
    detrend(v) = v .- mean(v)
    
    acc_data(dataname) = read_acc(dataname) |> xyz  |> normalize_data |> vec |> decimate |> detrend
    x_data(dataname)   = read_acc(dataname) |> getx |> normalize_data |> vec |> decimate |> detrend
    y_data(dataname)   = read_acc(dataname) |> gety |> normalize_data |> vec |> decimate |> detrend
    z_data(dataname)   = read_acc(dataname) |> getz |> normalize_data |> vec |> decimate |> detrend
    xyz_data(dataname) = (x_data(dataname),y_data(dataname),z_data(dataname))
    acc_spectrogram(dataname) = acc_data(dataname) |> plot_spectrogram
    acc_periodogram(dataname) = acc_data(dataname) |> plot_periodogram
    
    gyr_data(dataname) = read_gyr(dataname)   |> ypr      |> normalize_data |> vec |> decimate |> detrend
    pitch_data(dataname) = read_acc(dataname) |> getpitch |> normalize_data |> vec |> decimate |> detrend
    yaw_data(dataname) = read_acc(dataname)   |> getyaw   |> normalize_data |> vec |> decimate |> detrend
    roll_data(dataname) = read_acc(dataname)  |> getroll  |> normalize_data |> vec |> decimate |> detrend
    gyr_spectrogram(dataname) = gyr_data(dataname) |> plot_spectrogram
    gyr_periodogram(dataname) = gyr_data(dataname) |> plot_periodogram
    
    function menuplot()
    	datasets = ["jogging1", "jogging2", "mix1", "standing1", "walking1", "walking2"]
    	keybindings = [Char('0' + i) for i in 1:length(datasets)]
    	menu = RadioMenu(datasets, pagesize=min(length(datasets), 10), keybindings=keybindings)
    	choice = request("Please choose a dataset (up/down or 1-9):", menu)
    	acc_spectrogram(datasets[choice])
    end
    
    ## FOR THE POWER FUNCTION IN THE TIME DOMAIN
    movmean(x, n) = conv(x, ones(Int64, n))