ref #27 -new gradle and sdk version
- added faster bpm estimation by using multiple windows now - implemented a simple z score based outlier detection - some ugly heuristics to prefend to many -1 on the screen NOTE: this is a very unstable version of the code, very protoype
This commit is contained in:
@@ -41,9 +41,9 @@
|
||||
%measurements = dlmread('../measurements/wearR/recording_180bpm_4-4_177064915.csv', ';'); *
|
||||
|
||||
|
||||
%files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
|
||||
files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
|
||||
%files = dir(fullfile('../../measurements/wearR/', '*.csv'));
|
||||
files = dir(fullfile('../../measurements/peter_failed/', '*.csv'));
|
||||
%files = dir(fullfile('../../measurements/peter_failed/', '*.csv'));
|
||||
|
||||
for file = files'
|
||||
|
||||
@@ -52,7 +52,7 @@ for file = files'
|
||||
|
||||
%draw the raw acc data
|
||||
m_idx = [];
|
||||
m_idx = (measurements(:,2)==10);
|
||||
m_idx = (measurements(:,2)==2); %Android App: 10, Normal Data: 2
|
||||
m = measurements(m_idx, :);
|
||||
|
||||
%Interpolate to generate a constant sample rate to 250hz (4ms per sample)
|
||||
@@ -71,13 +71,19 @@ for file = files'
|
||||
legend("x", "location", "eastoutside");
|
||||
|
||||
figure(2);
|
||||
plot(m(:,1),m(:,4)) %y
|
||||
plot(m(:,1),m(:,4)) %yt
|
||||
legend("y", "location", "eastoutside");
|
||||
|
||||
figure(3);
|
||||
plot(m(:,1),m(:,5)) %z
|
||||
legend("z", "location", "eastoutside");
|
||||
|
||||
%magnitude
|
||||
magnitude = sqrt(sum(m(:,3:5).^2,2));
|
||||
figure(5);
|
||||
plot(m(:,1), magnitude);
|
||||
legend("magnitude", "location", "eastoutside");
|
||||
|
||||
waitforbuttonpress();
|
||||
|
||||
%save timestamps
|
||||
@@ -98,26 +104,39 @@ for file = files'
|
||||
[corr_x, lag_x] = xcov(m(i-window_size:i,3), (window_size/4), "coeff");
|
||||
[corr_y, lag_y] = xcov(m(i-window_size:i,4), (window_size/4), "coeff");
|
||||
[corr_z, lag_z] = xcov(m(i-window_size:i,5), (window_size/4), "coeff");
|
||||
[corr_mag, lag_mag] = xcov(magnitude(i-window_size:i), (window_size/4), "coeff");
|
||||
|
||||
|
||||
%autocorrelation of the autocorrelation?!
|
||||
%[corr_corr_x, lag_lag_x] = xcov(corr_x, length(corr_x), "coeff");
|
||||
%[corr_corr_y, lag_lag_y] = xcov(corr_y, length(corr_x), "coeff");
|
||||
%[corr_corr_z, lag_lag_z] = xcov(corr_z, length(corr_x), "coeff");
|
||||
|
||||
|
||||
corr_x_pos = corr_x;
|
||||
corr_y_pos = corr_y;
|
||||
corr_z_pos = corr_z;
|
||||
corr_mag_pos = corr_mag;
|
||||
|
||||
corr_x_pos(corr_x_pos<0)=0;
|
||||
corr_y_pos(corr_y_pos<0)=0;
|
||||
corr_z_pos(corr_z_pos<0)=0;
|
||||
corr_mag_pos(corr_mag_pos<0)=0;
|
||||
|
||||
[peak_x, idx_x_raw] = findpeaks(corr_x_pos, 'MinPeakHeight', 0.1,'MinPeakDistance', 50, 'MinPeakProminence', 0.1);
|
||||
[peak_y, idx_y_raw] = findpeaks(corr_y_pos, 'MinPeakHeight', 0.1,'MinPeakDistance', 50, 'MinPeakProminence', 0.1);
|
||||
[peak_z, idx_z_raw] = findpeaks(corr_z_pos, 'MinPeakHeight', 0.1,'MinPeakDistance', 50, 'MinPeakProminence', 0.1);
|
||||
[peak_mag, idx_mag_raw] = findpeaks(corr_mag_pos, 'MinPeakHeight', 0.1,'MinPeakDistance', 50, 'MinPeakProminence', 0.1);
|
||||
|
||||
idx_x_raw = sort(idx_x_raw);
|
||||
idx_y_raw = sort(idx_y_raw);
|
||||
idx_z_raw = sort(idx_z_raw);
|
||||
idx_mag_raw = sort(idx_mag_raw);
|
||||
|
||||
idx_x = findFalseDetectedPeaks(idx_x_raw, lag_x, corr_x);
|
||||
idx_y = findFalseDetectedPeaks(idx_y_raw, lag_y, corr_y);
|
||||
idx_z = findFalseDetectedPeaks(idx_z_raw, lag_z, corr_z);
|
||||
idx_mag = findFalseDetectedPeaks(idx_mag_raw, lag_mag, corr_mag);
|
||||
|
||||
Xwindow = m(i-window_size:i,3);
|
||||
Xwindow_mean_ts_diff = mean(diff(lag_x(idx_x) * sample_rate_ms)); %2.5 ms is the time between two samples at 400hz
|
||||
@@ -155,6 +174,20 @@ for file = files'
|
||||
title(strcat(" ", m_label_ms, " ", m_label_bpm));
|
||||
hold ("off");
|
||||
|
||||
%magnitude
|
||||
Mwindow = magnitude(i-window_size:i);
|
||||
Mwindow_mean_ts_diff = mean(diff(lag_mag(idx_mag)* sample_rate_ms));
|
||||
Mwindow_mean_bpm = (60000 / (Mwindow_mean_ts_diff));
|
||||
|
||||
figure(14);
|
||||
plot(lag_mag, corr_mag, lag_mag(idx_mag), corr_mag(idx_mag), 'r*', lag_mag(idx_mag_raw), corr_mag(idx_mag_raw), 'g*') %z
|
||||
hold ("on")
|
||||
m_label_ms = strcat(" mean ms: ", num2str(Mwindow_mean_ts_diff));
|
||||
m_label_bpm = strcat(" mean bpm: ", num2str(Mwindow_mean_bpm));
|
||||
title(strcat(" ", m_label_ms, " ", m_label_bpm));
|
||||
hold ("off");
|
||||
|
||||
|
||||
|
||||
%breakpoints dummy for testing
|
||||
if(length(idx_x) > length(idx_x_raw))
|
||||
|
||||
Reference in New Issue
Block a user