Select Git revision
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))