智能手环数据研究1——系统响应时延简易评估

概述

智能手环是一种穿戴式智能设备。通过这款手环,用户可以记录日常生活中的锻炼、睡眠、部分还有饮食等实时数据,并将这些数据与手机、平板、ipod touch同步,起到通过数据指导健康生活的作用。通过智能手环取得的数据,可以开展多方面的研究工作。此后笔者就将更新此系列内容。

目前已有的部分内容为

  • 设备系统响应延迟研究
  • 设备数据准确性研究
  • 设备传感器研究

需要取得智能手环的原始数据(raw data)。需要考察数据的质量,我们考虑从数据采样率,数据的准确性,设备系统时延三个方面进行评估。

当然为研究数据,能取得原始数据是首要的前提,我们耗时近半年,联系了全球各厂商,考察了大部分市面上的手环产品,仅筛选出两款raw data符合我们需要的产品:Microsoft Band2, Fitbit。最后因为种种原因,我们无奈自己去做了手环设备Sens。这里不再详细展开,否则就跑题了,我们的这个系列也基于三款产品进行分析和研究。

Fitbit

Microsoft Band2

Sens

 

场景介绍

此篇文章分析的目的为,设想我们遇到这一种情况。现在老板要求分析各设备的数据质量。老板也不想看一大堆的质检报告——每一个设备生产厂商都会提供看似合理正规的各种文书,然后它们对于实际分析并没有什么用。那么我们如何在有限的条件下,有理有据的分析数据,取得让老板信服的结果。此篇文章对手环的系统响应时延展提供一种简易有效的评估方法。

 

实验过程

实验设计阶段

实验条件:三款手环设备,能够取得和分析数据的电脑一台(就这么多)

试验过程:

将三款手环尽量佩戴在一起,以确保三款手环产品的输入尽量为同一输入。

为保证公平性,隔一段时间内,交替各设备佩戴的位置。交替间隔保持一致。

当实验者有剧烈活动时记录时间。

佩戴2天取得数据。

 

分析过程

设置参照系

三个设备在时间轴对齐后时域信号的平均值。

 

思路及基本假设

思路:在统一的冲激信号 下,经过三个不同的系统 , , 。现得到输出 ,估计系统时延,即

估计

基本假设:参照系统 , , 是平稳的系统,满足线性。

故为满足假设条件,采取截短的方式使得系统在局部平稳;

对窗口内的各时间序列做归一化满足激励条件;

最后对所有截短窗延迟估计进行平均。

 

使用方法

GCC是时延估计算法中最经典的一种。总体的思路核心是做卷积寻找互相关的最大值点估计系统延迟。

此外笔者还提供一些其他的分析方法:

The popular Time delay estimation (TDE) algorithms mainly include the classical generalized cross correlation (GCC), the adaptive least mean square (LMS), the subspace based eigenvalue decom position (EVD) and the acoustic transfer functions ratio (ATF-s ratio) method, etc.

 

流程:

加窗法将数据进行截短,在窗口范围进行分别分析:归一化处理,xcorr相关性卷积,最后再做均值或者中位数的处理。

GCC算法:

生成数据

x1 = [1,2,3,7,9,8,3,7]';

x2 = circshift(x1, 2); % 位移2位

智能手环数据研究1——系统响应时延简易评估_第1张图片

智能手环数据研究1——系统响应时延简易评估_第2张图片

计算

xc = xcorr(x1,x2,'biased'); % 计算循环卷积,输入位置顺序x1,x2不可变

智能手环数据研究1——系统响应时延简易评估_第3张图片

Max = 6, Lag = Max – N = -2

结果

提前位移为2与生成数据条件相符。

 

整体伪代码:

Input: 设备系统响应时间序列 ,平均系统响应序列

1. 对各序列加窗

 

 

 

2. While 遍历窗口

    1)分别归一化窗口序列

    2)卷积

    3)求各卷积系列最大值点,即相关性最大点。

    4)相关性最大位置减去序列长度得到延迟点

end

3. 计算各平均延迟

 

结果与结论

结果:

结论:

以三个设备的平均响应系统为参照下,以GCC算法分析(一个序列从另一个序列的开始至结束时刻逐点滑动,逐次点积。寻找相关性最大点即为重合点,再减去序列长度,即为延迟点),Sens的系统响应最优,先于参照系统0.2秒,Microsoft延迟于参照0.4s,Fitbit延迟于参照1.8s。

 

最后贴出整个过程的MATLAB代码

%% GCC
% MATLAB CODE FOR TDE STUDYING. 
% USING GCC ALGORITHMS
% Written by Sixing Liu 

%% Load data
load comdata
X = X(1:1000, :); % first 1000 data points
x1 = X(:, 1); % FitBit
x2 = X(:, 2); % Micsoft
x3 = X(:, 3); % Sens
y = X(:, 4); % Baseline

%% Windows
winLen = 10;
x1 = reshape(x1, winLen, []);
x2 = reshape(x2, winLen, []);
x3 = reshape(x3, winLen, []);
y = reshape(y, winLen, []);

l1 = zeros(length(y), 1);
l2 = zeros(length(y), 1);
l3 = zeros(length(y), 1);
for i = 1: length(y)
% gcc in a windows    
N = winLen;
% Normlization
yi = mapminmax(y(:, i)', 0, 1);
x1i = mapminmax(x1(:, i)', 0, 1);
x2i = mapminmax(x2(:, i)', 0, 1);
x3i = mapminmax(x3(:, i)', 0, 1);

% gcc analysis
[xc1, lag1] = xcorr(yi,x1i,'biased'); [k1,ind1] = max(xc1); % GCC Algor: higher version sub by  [tau,R,lag] = gccphat(x1,x2) 
[xc2, lag2] = xcorr(yi,x2i,'biased'); [k2,ind2] = max(xc2); % GCC Algor: higher version sub by  [tau,R,lag] = gccphat(x1,x2) 
[xc3, lag3] = xcorr(yi,x3i,'biased'); [k3,ind3] = max(xc3); % GCC Algor: higher version sub by  [tau,R,lag] = gccphat(x1,x2)

% calc delay
l1(i) = ind1 - N;
l2(i) = ind2 - N;
l3(i) = ind3 - N;

end

% calc mean
a = mean(l1)*10;
mic = mean(l2)*10;
sens = mean(l3)*10;

你可能感兴趣的:(Wearable,系统延迟评估,智能手环,数据分析)