.gitattributes CHANGED
@@ -34,4 +34,3 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  .DS_Store
37
- har_cnn.keras filter=lfs diff=lfs merge=lfs -text
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  .DS_Store
 
.gitignore CHANGED
@@ -1,2 +1,4 @@
 
 
1
  __pycache__/
2
  .DS_Store
 
1
+ model.keras
2
+ *.keras
3
  __pycache__/
4
  .DS_Store
data/norm_params.json DELETED
@@ -1,2807 +0,0 @@
1
- {
2
- "0": {
3
- "name": "tBodyAcc-mean()-X",
4
- "min": -0.26328375721874997,
5
- "max": 0.14887772203125
6
- },
7
- "1": {
8
- "name": "tBodyAcc-mean()-Y",
9
- "min": -0.51552368046875,
10
- "max": 0.5335020421875001
11
- },
12
- "2": {
13
- "name": "tBodyAcc-mean()-Z",
14
- "min": -0.2945620638046875,
15
- "max": 0.36611885703125
16
- },
17
- "3": {
18
- "name": "tBodyAcc-std()-X",
19
- "min": 0.0014130360727270753,
20
- "max": 0.6486752398611967
21
- },
22
- "4": {
23
- "name": "tBodyAcc-std()-Y",
24
- "min": 0.0017484061445967643,
25
- "max": 0.32779607930200255
26
- },
27
- "5": {
28
- "name": "tBodyAcc-std()-Z",
29
- "min": 0.0030140865219084917,
30
- "max": 0.361280316931005
31
- },
32
- "6": {
33
- "name": "tBodyAcc-mad()-X",
34
- "min": 0.0007622752,
35
- "max": 0.4913942
36
- },
37
- "7": {
38
- "name": "tBodyAcc-mad()-Y",
39
- "min": 0.00075304705,
40
- "max": 0.2845459
41
- },
42
- "8": {
43
- "name": "tBodyAcc-mad()-Z",
44
- "min": 0.0017515994999999997,
45
- "max": 0.2565268
46
- },
47
- "9": {
48
- "name": "tBodyAcc-max()-X",
49
- "min": -0.03268312,
50
- "max": 1.299912
51
- },
52
- "10": {
53
- "name": "tBodyAcc-max()-Y",
54
- "min": -0.2556468,
55
- "max": 0.9759764
56
- },
57
- "11": {
58
- "name": "tBodyAcc-max()-Z",
59
- "min": -0.09262088,
60
- "max": 1.066916
61
- },
62
- "12": {
63
- "name": "tBodyAcc-min()-X",
64
- "min": -1.232238,
65
- "max": 0.0931572
66
- },
67
- "13": {
68
- "name": "tBodyAcc-min()-Y",
69
- "min": -1.345267,
70
- "max": 0.2357287
71
- },
72
- "14": {
73
- "name": "tBodyAcc-min()-Z",
74
- "min": -1.364707,
75
- "max": 0.1033281
76
- },
77
- "15": {
78
- "name": "tBodyAcc-sma()",
79
- "min": 0.006008519311421875,
80
- "max": 1.0142895522164062
81
- },
82
- "16": {
83
- "name": "tBodyAcc-energy()-X",
84
- "min": 2.119730400936263e-06,
85
- "max": 0.42191341785731845
86
- },
87
- "17": {
88
- "name": "tBodyAcc-energy()-Y",
89
- "min": 3.202494110011995e-06,
90
- "max": 0.30543704882344747
91
- },
92
- "18": {
93
- "name": "tBodyAcc-energy()-Z",
94
- "min": 9.685525503281969e-06,
95
- "max": 0.14802888465653852
96
- },
97
- "19": {
98
- "name": "tBodyAcc-iqr()-X",
99
- "min": 0.0015028268,
100
- "max": 1.1469399249999999
101
- },
102
- "20": {
103
- "name": "tBodyAcc-iqr()-Y",
104
- "min": 0.0016611282,
105
- "max": 0.5951065242499999
106
- },
107
- "21": {
108
- "name": "tBodyAcc-iqr()-Z",
109
- "min": 0.00355178375,
110
- "max": 0.490158875
111
- },
112
- "22": {
113
- "name": "tBodyAcc-entropy()-X",
114
- "min": 3.7216257856553203,
115
- "max": 4.840268802919563
116
- },
117
- "23": {
118
- "name": "tBodyAcc-entropy()-Y",
119
- "min": 3.6298565656953534,
120
- "max": 4.8355848412115945
121
- },
122
- "24": {
123
- "name": "tBodyAcc-entropy()-Z",
124
- "min": 3.8145793878806193,
125
- "max": 4.8419277434672185
126
- },
127
- "25": {
128
- "name": "tBodyAcc-arCoeff()-X,1",
129
- "min": -3.993485622860005,
130
- "max": -0.3394885347301381
131
- },
132
- "26": {
133
- "name": "tBodyAcc-arCoeff()-X,2",
134
- "min": 0.31649056458097735,
135
- "max": 5.986018636485488
136
- },
137
- "27": {
138
- "name": "tBodyAcc-arCoeff()-X,3",
139
- "min": -3.991569852380895,
140
- "max": -0.2701889871512978
141
- },
142
- "28": {
143
- "name": "tBodyAcc-arCoeff()-X,4",
144
- "min": 0.20912282817914155,
145
- "max": 0.9990403448501645
146
- },
147
- "29": {
148
- "name": "tBodyAcc-arCoeff()-Y,1",
149
- "min": -3.995020949658737,
150
- "max": -1.1410620277909262
151
- },
152
- "30": {
153
- "name": "tBodyAcc-arCoeff()-Y,2",
154
- "min": 1.2319710058230748,
155
- "max": 5.989246476027023
156
- },
157
- "31": {
158
- "name": "tBodyAcc-arCoeff()-Y,3",
159
- "min": -3.9934240253358753,
160
- "max": -0.8615864222697873
161
- },
162
- "32": {
163
- "name": "tBodyAcc-arCoeff()-Y,4",
164
- "min": 0.4102282450773689,
165
- "max": 0.9992004313678645
166
- },
167
- "33": {
168
- "name": "tBodyAcc-arCoeff()-Z,1",
169
- "min": -3.9930481774187205,
170
- "max": -1.1624118930088911
171
- },
172
- "34": {
173
- "name": "tBodyAcc-arCoeff()-Z,2",
174
- "min": 1.2063447595003167,
175
- "max": 5.985102379631272
176
- },
177
- "35": {
178
- "name": "tBodyAcc-arCoeff()-Z,3",
179
- "min": -3.9910483595252626,
180
- "max": -0.9242658262195567
181
- },
182
- "36": {
183
- "name": "tBodyAcc-arCoeff()-Z,4",
184
- "min": 0.4786925494143609,
185
- "max": 0.998998103868109
186
- },
187
- "37": {
188
- "name": "tBodyAcc-correlation()-X,Y",
189
- "min": -0.9899168729927267,
190
- "max": 0.9934255399246379
191
- },
192
- "38": {
193
- "name": "tBodyAcc-correlation()-X,Z",
194
- "min": -0.993908428951397,
195
- "max": 0.9951540664616219
196
- },
197
- "39": {
198
- "name": "tBodyAcc-correlation()-Y,Z",
199
- "min": -0.9692581007123172,
200
- "max": 0.9956962839779167
201
- },
202
- "40": {
203
- "name": "tGravityAcc-mean()-X",
204
- "min": -0.371501310515625,
205
- "max": 1.0369460061578126
206
- },
207
- "41": {
208
- "name": "tGravityAcc-mean()-Y",
209
- "min": -0.5164919773225782,
210
- "max": 1.0167949543984374
211
- },
212
- "42": {
213
- "name": "tGravityAcc-mean()-Z",
214
- "min": -0.9882489759494532,
215
- "max": 0.9772000942300001
216
- },
217
- "43": {
218
- "name": "tGravityAcc-std()-X",
219
- "min": 3.060002014324046e-05,
220
- "max": 0.3130987538523641
221
- },
222
- "44": {
223
- "name": "tGravityAcc-std()-Y",
224
- "min": 6.003551975513042e-05,
225
- "max": 0.3776578143048425
226
- },
227
- "45": {
228
- "name": "tGravityAcc-std()-Z",
229
- "min": 6.533989564774268e-05,
230
- "max": 0.29410472753228395
231
- },
232
- "46": {
233
- "name": "tGravityAcc-mad()-X",
234
- "min": 1.7369749999995854e-05,
235
- "max": 0.24027378
236
- },
237
- "47": {
238
- "name": "tGravityAcc-mad()-Y",
239
- "min": 1.93661500000053e-05,
240
- "max": 0.3295304
241
- },
242
- "48": {
243
- "name": "tGravityAcc-mad()-Z",
244
- "min": 3.8968600000022224e-05,
245
- "max": 0.2670156
246
- },
247
- "49": {
248
- "name": "tGravityAcc-max()-X",
249
- "min": -0.32487018100000004,
250
- "max": 1.0962998499999999
251
- },
252
- "50": {
253
- "name": "tGravityAcc-max()-Y",
254
- "min": -0.460470783,
255
- "max": 1.03974953
256
- },
257
- "51": {
258
- "name": "tGravityAcc-max()-Z",
259
- "min": -0.9872988607,
260
- "max": 0.99061575
261
- },
262
- "52": {
263
- "name": "tGravityAcc-min()-X",
264
- "min": -0.4171418,
265
- "max": 1.0289508
266
- },
267
- "53": {
268
- "name": "tGravityAcc-min()-Y",
269
- "min": -0.58493626,
270
- "max": 1.0044006570000001
271
- },
272
- "54": {
273
- "name": "tGravityAcc-min()-Z",
274
- "min": -0.991391457,
275
- "max": 0.975067418
276
- },
277
- "55": {
278
- "name": "tGravityAcc-sma()",
279
- "min": 1.0177961049515625,
280
- "max": 1.7533490645414063
281
- },
282
- "56": {
283
- "name": "tGravityAcc-energy()-X",
284
- "min": 3.370129847819226e-07,
285
- "max": 1.0759641995980522
286
- },
287
- "57": {
288
- "name": "tGravityAcc-energy()-Y",
289
- "min": 6.293435010833708e-07,
290
- "max": 1.0341274035640655
291
- },
292
- "58": {
293
- "name": "tGravityAcc-energy()-Z",
294
- "min": 9.037239560199109e-07,
295
- "max": 0.9766369442673355
296
- },
297
- "59": {
298
- "name": "tGravityAcc-iqr()-X",
299
- "min": 4.104815000016693e-05,
300
- "max": 0.5521512974999999
301
- },
302
- "60": {
303
- "name": "tGravityAcc-iqr()-Y",
304
- "min": 5.7063725000000565e-05,
305
- "max": 0.6839043250000001
306
- },
307
- "61": {
308
- "name": "tGravityAcc-iqr()-Z",
309
- "min": 8.918567499999197e-05,
310
- "max": 0.53238375
311
- },
312
- "62": {
313
- "name": "tGravityAcc-entropy()-X",
314
- "min": 4.095769562775941,
315
- "max": 4.8520302634661325
316
- },
317
- "63": {
318
- "name": "tGravityAcc-entropy()-Y",
319
- "min": 4.1189823350554855,
320
- "max": 4.852030261789325
321
- },
322
- "64": {
323
- "name": "tGravityAcc-entropy()-Z",
324
- "min": 3.9104714368797984,
325
- "max": 4.852030261000339
326
- },
327
- "65": {
328
- "name": "tGravityAcc-arCoeff()-X,1",
329
- "min": -3.997517509197459,
330
- "max": -2.6786762479677377
331
- },
332
- "66": {
333
- "name": "tGravityAcc-arCoeff()-X,2",
334
- "min": 2.22240127863673,
335
- "max": 5.994528870294291
336
- },
337
- "67": {
338
- "name": "tGravityAcc-arCoeff()-X,3",
339
- "min": -3.996503668194519,
340
- "max": -0.40658829951531256
341
- },
342
- "68": {
343
- "name": "tGravityAcc-arCoeff()-X,4",
344
- "min": -0.13700578688020462,
345
- "max": 0.9995130586163395
346
- },
347
- "69": {
348
- "name": "tGravityAcc-arCoeff()-Y,1",
349
- "min": -3.9975754065094593,
350
- "max": -2.75151515689737
351
- },
352
- "70": {
353
- "name": "tGravityAcc-arCoeff()-Y,2",
354
- "min": 2.3993039546282047,
355
- "max": 5.994640274808031
356
- },
357
- "71": {
358
- "name": "tGravityAcc-arCoeff()-Y,3",
359
- "min": -3.9966558041429368,
360
- "max": -0.5410452033342692
361
- },
362
- "72": {
363
- "name": "tGravityAcc-arCoeff()-Y,4",
364
- "min": -0.10659177470350766,
365
- "max": 0.999570254289037
366
- },
367
- "73": {
368
- "name": "tGravityAcc-arCoeff()-Z,1",
369
- "min": -3.9975252063090396,
370
- "max": -2.9540628399692226
371
- },
372
- "74": {
373
- "name": "tGravityAcc-arCoeff()-Z,2",
374
- "min": 2.9023066376296422,
375
- "max": 5.994560751158174
376
- },
377
- "75": {
378
- "name": "tGravityAcc-arCoeff()-Z,3",
379
- "min": -3.9965443504768046,
380
- "max": -0.9404635774112333
381
- },
382
- "76": {
383
- "name": "tGravityAcc-arCoeff()-Z,4",
384
- "min": -0.007746887156580264,
385
- "max": 0.9995092485555561
386
- },
387
- "77": {
388
- "name": "tGravityAcc-correlation()-X,Y",
389
- "min": -0.9998796586301408,
390
- "max": 0.9999334236237624
391
- },
392
- "78": {
393
- "name": "tGravityAcc-correlation()-X,Z",
394
- "min": -0.9998012062235743,
395
- "max": 0.9999633759168632
396
- },
397
- "79": {
398
- "name": "tGravityAcc-correlation()-Y,Z",
399
- "min": -0.9999470944838733,
400
- "max": 0.9999465778808375
401
- },
402
- "80": {
403
- "name": "tBodyAccJerk-mean()-X",
404
- "min": -0.664351102362205,
405
- "max": 0.5905879133858268
406
- },
407
- "81": {
408
- "name": "tBodyAccJerk-mean()-Y",
409
- "min": -0.42587149606299196,
410
- "max": 0.37388566929133865
411
- },
412
- "82": {
413
- "name": "tBodyAccJerk-mean()-Z",
414
- "min": -0.4020321653543307,
415
- "max": 0.36802818897637796
416
- },
417
- "83": {
418
- "name": "tBodyAccJerk-std()-X",
419
- "min": 0.051917231930881096,
420
- "max": 15.10910846593158
421
- },
422
- "84": {
423
- "name": "tBodyAccJerk-std()-Y",
424
- "min": 0.04991529510131894,
425
- "max": 9.566204872175952
426
- },
427
- "85": {
428
- "name": "tBodyAccJerk-std()-Z",
429
- "min": 0.1012348175672919,
430
- "max": 13.67553489076389
431
- },
432
- "86": {
433
- "name": "tBodyAccJerk-mad()-X",
434
- "min": 0.029742779999999986,
435
- "max": 8.679515500000004
436
- },
437
- "87": {
438
- "name": "tBodyAccJerk-mad()-Y",
439
- "min": 0.02713259000000001,
440
- "max": 6.16240595
441
- },
442
- "88": {
443
- "name": "tBodyAccJerk-mad()-Z",
444
- "min": 0.05727944499999998,
445
- "max": 6.829492
446
- },
447
- "89": {
448
- "name": "tBodyAccJerk-max()-X",
449
- "min": 0.12742757,
450
- "max": 50.12208999999999
451
- },
452
- "90": {
453
- "name": "tBodyAccJerk-max()-Y",
454
- "min": 0.13674969,
455
- "max": 40.250945
456
- },
457
- "91": {
458
- "name": "tBodyAccJerk-max()-Z",
459
- "min": 0.21645255000000002,
460
- "max": 55.524165
461
- },
462
- "92": {
463
- "name": "tBodyAccJerk-min()-X",
464
- "min": -45.141071,
465
- "max": -0.109377335
466
- },
467
- "93": {
468
- "name": "tBodyAccJerk-min()-Y",
469
- "min": -36.389145,
470
- "max": -0.1361658
471
- },
472
- "94": {
473
- "name": "tBodyAccJerk-min()-Z",
474
- "min": -41.313185000000004,
475
- "max": -0.21453255000000002
476
- },
477
- "95": {
478
- "name": "tBodyAccJerk-sma()",
479
- "min": 0.186100263023622,
480
- "max": 26.449461048031495
481
- },
482
- "96": {
483
- "name": "tBodyAccJerk-energy()-X",
484
- "min": 0.0026965126167414794,
485
- "max": 228.72652102249518
486
- },
487
- "97": {
488
- "name": "tBodyAccJerk-energy()-Y",
489
- "min": 0.0024915477203061066,
490
- "max": 91.51388175389465
491
- },
492
- "98": {
493
- "name": "tBodyAccJerk-energy()-Z",
494
- "min": 0.010251549360765702,
495
- "max": 187.0202573289124
496
- },
497
- "99": {
498
- "name": "tBodyAccJerk-iqr()-X",
499
- "min": 0.0598230815,
500
- "max": 15.417539999999999
501
- },
502
- "100": {
503
- "name": "tBodyAccJerk-iqr()-Y",
504
- "min": 0.04945395000000001,
505
- "max": 12.676634
506
- },
507
- "101": {
508
- "name": "tBodyAccJerk-iqr()-Z",
509
- "min": 0.11869906499999995,
510
- "max": 13.52269725
511
- },
512
- "102": {
513
- "name": "tBodyAccJerk-entropy()-X",
514
- "min": 3.292845009401012,
515
- "max": 4.665878660682823
516
- },
517
- "103": {
518
- "name": "tBodyAccJerk-entropy()-Y",
519
- "min": 3.66717574028378,
520
- "max": 4.646608162452824
521
- },
522
- "104": {
523
- "name": "tBodyAccJerk-entropy()-Z",
524
- "min": 3.6879037834153934,
525
- "max": 4.643337385461986
526
- },
527
- "105": {
528
- "name": "tBodyAccJerk-arCoeff()-X,1",
529
- "min": -2.932098690050769,
530
- "max": 0.09845930281333523
531
- },
532
- "106": {
533
- "name": "tBodyAccJerk-arCoeff()-X,2",
534
- "min": -0.12382582818226293,
535
- "max": 3.8896958808200353
536
- },
537
- "107": {
538
- "name": "tBodyAccJerk-arCoeff()-X,3",
539
- "min": -2.702881732259516,
540
- "max": 0.26119719312840634
541
- },
542
- "108": {
543
- "name": "tBodyAccJerk-arCoeff()-X,4",
544
- "min": -0.3682595025337308,
545
- "max": 0.8359972917691323
546
- },
547
- "109": {
548
- "name": "tBodyAccJerk-arCoeff()-Y,1",
549
- "min": -3.116988805297518,
550
- "max": 0.13927924904101033
551
- },
552
- "110": {
553
- "name": "tBodyAccJerk-arCoeff()-Y,2",
554
- "min": -0.1484686109127366,
555
- "max": 4.229391357049273
556
- },
557
- "111": {
558
- "name": "tBodyAccJerk-arCoeff()-Y,3",
559
- "min": -2.913943692512708,
560
- "max": 0.6497990285692828
561
- },
562
- "112": {
563
- "name": "tBodyAccJerk-arCoeff()-Y,4",
564
- "min": -0.5921850640839303,
565
- "max": 0.8648162148511046
566
- },
567
- "113": {
568
- "name": "tBodyAccJerk-arCoeff()-Z,1",
569
- "min": -2.513797379360826,
570
- "max": -0.057460899808418134
571
- },
572
- "114": {
573
- "name": "tBodyAccJerk-arCoeff()-Z,2",
574
- "min": -0.06456727499600057,
575
- "max": 3.1619288127612863
576
- },
577
- "115": {
578
- "name": "tBodyAccJerk-arCoeff()-Z,3",
579
- "min": -2.1755548687139807,
580
- "max": 0.3466068230816849
581
- },
582
- "116": {
583
- "name": "tBodyAccJerk-arCoeff()-Z,4",
584
- "min": -0.47655595696262465,
585
- "max": 0.748461403302116
586
- },
587
- "117": {
588
- "name": "tBodyAccJerk-correlation()-X,Y",
589
- "min": -0.8287148840635836,
590
- "max": 0.7000102664588659
591
- },
592
- "118": {
593
- "name": "tBodyAccJerk-correlation()-X,Z",
594
- "min": -0.9264473808825381,
595
- "max": 0.5718665695775615
596
- },
597
- "119": {
598
- "name": "tBodyAccJerk-correlation()-Y,Z",
599
- "min": -0.771552493592412,
600
- "max": 0.8041884489803837
601
- },
602
- "120": {
603
- "name": "tBodyGyro-mean()-X",
604
- "min": -0.9141614453125,
605
- "max": 0.7906608800468751
606
- },
607
- "121": {
608
- "name": "tBodyGyro-mean()-Y",
609
- "min": -0.3510968166015625,
610
- "max": 0.485057559375
611
- },
612
- "122": {
613
- "name": "tBodyGyro-mean()-Z",
614
- "min": -0.4378068751484375,
615
- "max": 0.40438009296875
616
- },
617
- "123": {
618
- "name": "tBodyGyro-std()-X",
619
- "min": 0.0016922260111185436,
620
- "max": 1.736491006957507
621
- },
622
- "124": {
623
- "name": "tBodyGyro-std()-Y",
624
- "min": 0.002003253470538887,
625
- "max": 1.5270449141577516
626
- },
627
- "125": {
628
- "name": "tBodyGyro-std()-Z",
629
- "min": 0.0021838172840389553,
630
- "max": 0.9667912516003004
631
- },
632
- "126": {
633
- "name": "tBodyGyro-mad()-X",
634
- "min": 0.001053572,
635
- "max": 1.2321353
636
- },
637
- "127": {
638
- "name": "tBodyGyro-mad()-Y",
639
- "min": 0.0012376295,
640
- "max": 1.154000935
641
- },
642
- "128": {
643
- "name": "tBodyGyro-mad()-Z",
644
- "min": 0.00128438235,
645
- "max": 0.81080785
646
- },
647
- "129": {
648
- "name": "tBodyGyro-max()-X",
649
- "min": -0.2417764,
650
- "max": 4.155473
651
- },
652
- "130": {
653
- "name": "tBodyGyro-max()-Y",
654
- "min": -0.11351,
655
- "max": 5.746062
656
- },
657
- "131": {
658
- "name": "tBodyGyro-max()-Z",
659
- "min": -0.2397656,
660
- "max": 2.365982
661
- },
662
- "132": {
663
- "name": "tBodyGyro-min()-X",
664
- "min": -4.733656,
665
- "max": 0.387086
666
- },
667
- "133": {
668
- "name": "tBodyGyro-min()-Y",
669
- "min": -5.97433,
670
- "max": 0.2560976
671
- },
672
- "134": {
673
- "name": "tBodyGyro-min()-Z",
674
- "min": -2.763014,
675
- "max": 0.2477599
676
- },
677
- "135": {
678
- "name": "tBodyGyro-sma()",
679
- "min": 0.006204816558296874,
680
- "max": 2.8441347265312498
681
- },
682
- "136": {
683
- "name": "tBodyGyro-energy()-X",
684
- "min": 3.863115303707746e-06,
685
- "max": 3.3178601746819814
686
- },
687
- "137": {
688
- "name": "tBodyGyro-energy()-Y",
689
- "min": 4.105321542015138e-06,
690
- "max": 2.37121709970025
691
- },
692
- "138": {
693
- "name": "tBodyGyro-energy()-Z",
694
- "min": 4.840127377581405e-06,
695
- "max": 1.0154306881262514
696
- },
697
- "139": {
698
- "name": "tBodyGyro-iqr()-X",
699
- "min": 0.0020302520225,
700
- "max": 2.485016375
701
- },
702
- "140": {
703
- "name": "tBodyGyro-iqr()-Y",
704
- "min": 0.0024258175,
705
- "max": 2.27983475
706
- },
707
- "141": {
708
- "name": "tBodyGyro-iqr()-Z",
709
- "min": 0.0026128333,
710
- "max": 1.617129475
711
- },
712
- "142": {
713
- "name": "tBodyGyro-entropy()-X",
714
- "min": 3.2051100428736348,
715
- "max": 4.84632806976598
716
- },
717
- "143": {
718
- "name": "tBodyGyro-entropy()-Y",
719
- "min": 3.0259441948359997,
720
- "max": 4.8387648869372075
721
- },
722
- "144": {
723
- "name": "tBodyGyro-entropy()-Z",
724
- "min": 3.0137460931893565,
725
- "max": 4.846136195807563
726
- },
727
- "145": {
728
- "name": "tBodyGyro-arCoeff()-X,1",
729
- "min": -3.9942285768748014,
730
- "max": -0.5499415195258505
731
- },
732
- "146": {
733
- "name": "tBodyGyro-arCoeff()-X,2",
734
- "min": 0.5217543626347261,
735
- "max": 5.987462557788201
736
- },
737
- "147": {
738
- "name": "tBodyGyro-arCoeff()-X,3",
739
- "min": -3.9922310851017047,
740
- "max": -0.4286808346234274
741
- },
742
- "148": {
743
- "name": "tBodyGyro-arCoeff()-X,4",
744
- "min": 0.2927376341696726,
745
- "max": 0.9989996644992987
746
- },
747
- "149": {
748
- "name": "tBodyGyro-arCoeff()-Y,1",
749
- "min": -3.9900531816461795,
750
- "max": -0.6185528838931388
751
- },
752
- "150": {
753
- "name": "tBodyGyro-arCoeff()-Y,2",
754
- "min": 0.5489793720440668,
755
- "max": 5.978714612062834
756
- },
757
- "151": {
758
- "name": "tBodyGyro-arCoeff()-Y,3",
759
- "min": -3.9872451998793124,
760
- "max": -0.40709185146205895
761
- },
762
- "152": {
763
- "name": "tBodyGyro-arCoeff()-Y,4",
764
- "min": 0.24345550963650936,
765
- "max": 0.99859201834582
766
- },
767
- "153": {
768
- "name": "tBodyGyro-arCoeff()-Z,1",
769
- "min": -3.9946433699601465,
770
- "max": -1.2449695815902668
771
- },
772
- "154": {
773
- "name": "tBodyGyro-arCoeff()-Z,2",
774
- "min": 1.3074890410221043,
775
- "max": 5.988413601742325
776
- },
777
- "155": {
778
- "name": "tBodyGyro-arCoeff()-Z,3",
779
- "min": -3.9928899532773277,
780
- "max": -0.9965123641150018
781
- },
782
- "156": {
783
- "name": "tBodyGyro-arCoeff()-Z,4",
784
- "min": 0.5013647510609228,
785
- "max": 0.9991219860711787
786
- },
787
- "157": {
788
- "name": "tBodyGyro-correlation()-X,Y",
789
- "min": -0.9908029505413216,
790
- "max": 0.9895135571519915
791
- },
792
- "158": {
793
- "name": "tBodyGyro-correlation()-X,Z",
794
- "min": -0.9873342598711831,
795
- "max": 0.9960575140526013
796
- },
797
- "159": {
798
- "name": "tBodyGyro-correlation()-Y,Z",
799
- "min": -0.990136236018121,
800
- "max": 0.9931736105461424
801
- },
802
- "160": {
803
- "name": "tBodyGyroJerk-mean()-X",
804
- "min": -1.6592816141732283,
805
- "max": 2.013248818897637
806
- },
807
- "161": {
808
- "name": "tBodyGyroJerk-mean()-Y",
809
- "min": -1.6457193700787398,
810
- "max": 1.6168899606299212
811
- },
812
- "162": {
813
- "name": "tBodyGyroJerk-mean()-Z",
814
- "min": -1.0980803149606297,
815
- "max": 1.1703807086614175
816
- },
817
- "163": {
818
- "name": "tBodyGyroJerk-std()-X",
819
- "min": 0.06929558346261355,
820
- "max": 33.74331528814421
821
- },
822
- "164": {
823
- "name": "tBodyGyroJerk-std()-Y",
824
- "min": 0.07245960213986785,
825
- "max": 60.16471883217185
826
- },
827
- "165": {
828
- "name": "tBodyGyroJerk-std()-Z",
829
- "min": 0.07838493412307453,
830
- "max": 27.32717749581885
831
- },
832
- "166": {
833
- "name": "tBodyGyroJerk-mad()-X",
834
- "min": 0.03484355,
835
- "max": 19.555299999999995
836
- },
837
- "167": {
838
- "name": "tBodyGyroJerk-mad()-Y",
839
- "min": 0.043890950000000005,
840
- "max": 36.561184999999995
841
- },
842
- "168": {
843
- "name": "tBodyGyroJerk-mad()-Z",
844
- "min": 0.05136109999999997,
845
- "max": 16.650260000000003
846
- },
847
- "169": {
848
- "name": "tBodyGyroJerk-max()-X",
849
- "min": 0.1614925,
850
- "max": 100.94581
851
- },
852
- "170": {
853
- "name": "tBodyGyroJerk-max()-Y",
854
- "min": 0.181581265,
855
- "max": 215.306335
856
- },
857
- "171": {
858
- "name": "tBodyGyroJerk-max()-Z",
859
- "min": 0.15593000000000135,
860
- "max": 79.167395
861
- },
862
- "172": {
863
- "name": "tBodyGyroJerk-min()-X",
864
- "min": -112.5145,
865
- "max": -0.1507297
866
- },
867
- "173": {
868
- "name": "tBodyGyroJerk-min()-Y",
869
- "min": -238.50659000000002,
870
- "max": -0.18334175
871
- },
872
- "174": {
873
- "name": "tBodyGyroJerk-min()-Z",
874
- "min": -96.08938,
875
- "max": -0.17956540000000001
876
- },
877
- "175": {
878
- "name": "tBodyGyroJerk-sma()",
879
- "min": 0.2075397469763779,
880
- "max": 92.26371167874015
881
- },
882
- "176": {
883
- "name": "tBodyGyroJerk-energy()-X",
884
- "min": 0.004802159532839166,
885
- "max": 1138.614594737907
886
- },
887
- "177": {
888
- "name": "tBodyGyroJerk-energy()-Y",
889
- "min": 0.005251358132581393,
890
- "max": 3620.656853303606
891
- },
892
- "178": {
893
- "name": "tBodyGyroJerk-energy()-Z",
894
- "min": 0.006144543126360509,
895
- "max": 746.7860401228261
896
- },
897
- "179": {
898
- "name": "tBodyGyroJerk-iqr()-X",
899
- "min": 0.0722756675,
900
- "max": 39.5734875
901
- },
902
- "180": {
903
- "name": "tBodyGyroJerk-iqr()-Y",
904
- "min": 0.08480017675000001,
905
- "max": 72.62820249999997
906
- },
907
- "181": {
908
- "name": "tBodyGyroJerk-iqr()-Z",
909
- "min": 0.101009085,
910
- "max": 34.16415
911
- },
912
- "182": {
913
- "name": "tBodyGyroJerk-entropy()-X",
914
- "min": 3.279826061930519,
915
- "max": 4.651005994419531
916
- },
917
- "183": {
918
- "name": "tBodyGyroJerk-entropy()-Y",
919
- "min": 3.2398880599466557,
920
- "max": 4.644767529978027
921
- },
922
- "184": {
923
- "name": "tBodyGyroJerk-entropy()-Z",
924
- "min": 3.5101636935988636,
925
- "max": 4.658434741934869
926
- },
927
- "185": {
928
- "name": "tBodyGyroJerk-arCoeff()-X,1",
929
- "min": -3.5332647912905553,
930
- "max": 0.1121762434280636
931
- },
932
- "186": {
933
- "name": "tBodyGyroJerk-arCoeff()-X,2",
934
- "min": -0.18573483289764886,
935
- "max": 5.0337143781470886
936
- },
937
- "187": {
938
- "name": "tBodyGyroJerk-arCoeff()-X,3",
939
- "min": -3.4142010428314467,
940
- "max": 0.6674469935567561
941
- },
942
- "188": {
943
- "name": "tBodyGyroJerk-arCoeff()-X,4",
944
- "min": -0.6486217531635373,
945
- "max": 0.9313578118866611
946
- },
947
- "189": {
948
- "name": "tBodyGyroJerk-arCoeff()-Y,1",
949
- "min": -2.9534150536396644,
950
- "max": 0.21543787794111927
951
- },
952
- "190": {
953
- "name": "tBodyGyroJerk-arCoeff()-Y,2",
954
- "min": -0.2487132324717461,
955
- "max": 3.9226650239435523
956
- },
957
- "191": {
958
- "name": "tBodyGyroJerk-arCoeff()-Y,3",
959
- "min": -2.7153299897184873,
960
- "max": 0.7250058267134856
961
- },
962
- "192": {
963
- "name": "tBodyGyroJerk-arCoeff()-Y,4",
964
- "min": -0.7507952464884488,
965
- "max": 0.8316122597908868
966
- },
967
- "193": {
968
- "name": "tBodyGyroJerk-arCoeff()-Z,1",
969
- "min": -3.2260947635064063,
970
- "max": -0.004932322364492885
971
- },
972
- "194": {
973
- "name": "tBodyGyroJerk-arCoeff()-Z,2",
974
- "min": -0.2406562328727275,
975
- "max": 4.434757423232501
976
- },
977
- "195": {
978
- "name": "tBodyGyroJerk-arCoeff()-Z,3",
979
- "min": -3.0439575635832203,
980
- "max": 0.6421587632422695
981
- },
982
- "196": {
983
- "name": "tBodyGyroJerk-arCoeff()-Z,4",
984
- "min": -0.6590818491876634,
985
- "max": 0.8833894286429035
986
- },
987
- "197": {
988
- "name": "tBodyGyroJerk-correlation()-X,Y",
989
- "min": -0.8661755976781939,
990
- "max": 0.863466755874589
991
- },
992
- "198": {
993
- "name": "tBodyGyroJerk-correlation()-X,Z",
994
- "min": -0.9162208396562964,
995
- "max": 0.8241548052505725
996
- },
997
- "199": {
998
- "name": "tBodyGyroJerk-correlation()-Y,Z",
999
- "min": -0.9220307456982642,
1000
- "max": 0.8796814062351181
1001
- },
1002
- "200": {
1003
- "name": "tBodyAccMag-mean()",
1004
- "min": 0.0042358725852490895,
1005
- "max": 0.685718928971917
1006
- },
1007
- "201": {
1008
- "name": "tBodyAccMag-std()",
1009
- "min": 0.0018899899032512415,
1010
- "max": 0.36857196640438245
1011
- },
1012
- "202": {
1013
- "name": "tBodyAccMag-mad()",
1014
- "min": 0.000961093406528989,
1015
- "max": 0.25435480593073734
1016
- },
1017
- "203": {
1018
- "name": "tBodyAccMag-max()",
1019
- "min": 0.008321346420900948,
1020
- "max": 1.8063824308000673
1021
- },
1022
- "204": {
1023
- "name": "tBodyAccMag-min()",
1024
- "min": 0.00010956880663646237,
1025
- "max": 0.363554788462686
1026
- },
1027
- "205": {
1028
- "name": "tBodyAccMag-sma()",
1029
- "min": 0.0042358725852490895,
1030
- "max": 0.685718928971917
1031
- },
1032
- "206": {
1033
- "name": "tBodyAccMag-energy()",
1034
- "min": 2.3342858290785044e-05,
1035
- "max": 0.5610773244303215
1036
- },
1037
- "207": {
1038
- "name": "tBodyAccMag-iqr()",
1039
- "min": 0.001971957450518559,
1040
- "max": 0.6205653805818798
1041
- },
1042
- "208": {
1043
- "name": "tBodyAccMag-entropy()",
1044
- "min": 4.004544840198892,
1045
- "max": 4.847603177482406
1046
- },
1047
- "209": {
1048
- "name": "tBodyAccMag-arCoeff()1",
1049
- "min": -3.994599440691333,
1050
- "max": -0.4364555635617239
1051
- },
1052
- "210": {
1053
- "name": "tBodyAccMag-arCoeff()2",
1054
- "min": 0.40894443331229874,
1055
- "max": 5.988422147999353
1056
- },
1057
- "211": {
1058
- "name": "tBodyAccMag-arCoeff()3",
1059
- "min": -3.9930387463904533,
1060
- "max": -0.3433927805241726
1061
- },
1062
- "212": {
1063
- "name": "tBodyAccMag-arCoeff()4",
1064
- "min": 0.24810919010523594,
1065
- "max": 0.9992184548169805
1066
- },
1067
- "213": {
1068
- "name": "tGravityAccMag-mean()",
1069
- "min": 0.9383601089346918,
1070
- "max": 1.0621249705292954
1071
- },
1072
- "214": {
1073
- "name": "tGravityAccMag-std()",
1074
- "min": 3.2226071953373116e-05,
1075
- "max": 0.05979793068265951
1076
- },
1077
- "215": {
1078
- "name": "tGravityAccMag-mad()",
1079
- "min": 1.1123388664158185e-05,
1080
- "max": 0.05244003254722712
1081
- },
1082
- "216": {
1083
- "name": "tGravityAccMag-max()",
1084
- "min": 0.9673725997751309,
1085
- "max": 1.1090412194205113
1086
- },
1087
- "217": {
1088
- "name": "tGravityAccMag-min()",
1089
- "min": 0.901711185186227,
1090
- "max": 1.0425294186208138
1091
- },
1092
- "218": {
1093
- "name": "tGravityAccMag-sma()",
1094
- "min": 0.9383601089346918,
1095
- "max": 1.0621249705292954
1096
- },
1097
- "219": {
1098
- "name": "tGravityAccMag-energy()",
1099
- "min": 0.8809216626281566,
1100
- "max": 1.1287077639830705
1101
- },
1102
- "220": {
1103
- "name": "tGravityAccMag-iqr()",
1104
- "min": 2.6498303128175138e-05,
1105
- "max": 0.12110995479273079
1106
- },
1107
- "221": {
1108
- "name": "tGravityAccMag-entropy()",
1109
- "min": 4.85020074049171,
1110
- "max": 4.852030263427388
1111
- },
1112
- "222": {
1113
- "name": "tGravityAccMag-arCoeff()1",
1114
- "min": -3.9948300933421033,
1115
- "max": -2.5886022865057314
1116
- },
1117
- "223": {
1118
- "name": "tGravityAccMag-arCoeff()2",
1119
- "min": 2.016871002811165,
1120
- "max": 5.988519001305418
1121
- },
1122
- "224": {
1123
- "name": "tGravityAccMag-arCoeff()3",
1124
- "min": -3.99254107138926,
1125
- "max": -0.2643712763277447
1126
- },
1127
- "225": {
1128
- "name": "tGravityAccMag-arCoeff()4",
1129
- "min": -0.16364169238349452,
1130
- "max": 0.998853949177669
1131
- },
1132
- "226": {
1133
- "name": "tBodyAccJerkMag-mean()",
1134
- "min": 0.1255243696702924,
1135
- "max": 18.126123530930997
1136
- },
1137
- "227": {
1138
- "name": "tBodyAccJerkMag-std()",
1139
- "min": 0.06222617452368327,
1140
- "max": 11.363430959729174
1141
- },
1142
- "228": {
1143
- "name": "tBodyAccJerkMag-mad()",
1144
- "min": 0.036864429950027755,
1145
- "max": 8.05181498114102
1146
- },
1147
- "229": {
1148
- "name": "tBodyAccJerkMag-max()",
1149
- "min": 0.320158544455194,
1150
- "max": 60.90614806866397
1151
- },
1152
- "230": {
1153
- "name": "tBodyAccJerkMag-min()",
1154
- "min": 0.0027386966972403107,
1155
- "max": 3.448654463669273
1156
- },
1157
- "231": {
1158
- "name": "tBodyAccJerkMag-sma()",
1159
- "min": 0.1255243696702924,
1160
- "max": 18.126123530930997
1161
- },
1162
- "232": {
1163
- "name": "tBodyAccJerkMag-energy()",
1164
- "min": 0.019628464176976113,
1165
- "max": 443.9358449184374
1166
- },
1167
- "233": {
1168
- "name": "tBodyAccJerkMag-iqr()",
1169
- "min": 0.07630130152276793,
1170
- "max": 17.082789343637366
1171
- },
1172
- "234": {
1173
- "name": "tBodyAccJerkMag-entropy()",
1174
- "min": 3.9330832306958956,
1175
- "max": 4.76552637309154
1176
- },
1177
- "235": {
1178
- "name": "tBodyAccJerkMag-arCoeff()1",
1179
- "min": -3.319109553292475,
1180
- "max": 0.04551375880398564
1181
- },
1182
- "236": {
1183
- "name": "tBodyAccJerkMag-arCoeff()2",
1184
- "min": -0.06258445254069486,
1185
- "max": 4.613236205731036
1186
- },
1187
- "237": {
1188
- "name": "tBodyAccJerkMag-arCoeff()3",
1189
- "min": -3.1555221221670333,
1190
- "max": 0.065099561596612
1191
- },
1192
- "238": {
1193
- "name": "tBodyAccJerkMag-arCoeff()4",
1194
- "min": -0.06734481355387803,
1195
- "max": 0.9063225958475319
1196
- },
1197
- "239": {
1198
- "name": "tBodyGyroMag-mean()",
1199
- "min": 0.004128067427194935,
1200
- "max": 1.9359035531458741
1201
- },
1202
- "240": {
1203
- "name": "tBodyGyroMag-std()",
1204
- "min": 0.0018826768623940626,
1205
- "max": 1.065254823937547
1206
- },
1207
- "241": {
1208
- "name": "tBodyGyroMag-mad()",
1209
- "min": 0.0011850359911818533,
1210
- "max": 0.6646476717122016
1211
- },
1212
- "242": {
1213
- "name": "tBodyGyroMag-max()",
1214
- "min": 0.010594028103109034,
1215
- "max": 6.042246673775695
1216
- },
1217
- "243": {
1218
- "name": "tBodyGyroMag-min()",
1219
- "min": 0.00024317714410044872,
1220
- "max": 0.5423309241385835
1221
- },
1222
- "244": {
1223
- "name": "tBodyGyroMag-sma()",
1224
- "min": 0.004128067427194935,
1225
- "max": 1.9359035531458741
1226
- },
1227
- "245": {
1228
- "name": "tBodyGyroMag-energy()",
1229
- "min": 2.1551005519112505e-05,
1230
- "max": 4.418768568938004
1231
- },
1232
- "246": {
1233
- "name": "tBodyGyroMag-iqr()",
1234
- "min": 0.002408431927549769,
1235
- "max": 1.3438494255581315
1236
- },
1237
- "247": {
1238
- "name": "tBodyGyroMag-entropy()",
1239
- "min": 3.3362895895377966,
1240
- "max": 4.847122056791179
1241
- },
1242
- "248": {
1243
- "name": "tBodyGyroMag-arCoeff()1",
1244
- "min": -3.9947507531688653,
1245
- "max": -0.3359072120099569
1246
- },
1247
- "249": {
1248
- "name": "tBodyGyroMag-arCoeff()2",
1249
- "min": 0.3097135858487371,
1250
- "max": 5.988600693200239
1251
- },
1252
- "250": {
1253
- "name": "tBodyGyroMag-arCoeff()3",
1254
- "min": -3.992942260376584,
1255
- "max": -0.27437346219417547
1256
- },
1257
- "251": {
1258
- "name": "tBodyGyroMag-arCoeff()4",
1259
- "min": 0.21442536668861495,
1260
- "max": 0.9991539863247585
1261
- },
1262
- "252": {
1263
- "name": "tBodyGyroJerkMag-mean()",
1264
- "min": 0.1403115865422672,
1265
- "max": 62.07602056892374
1266
- },
1267
- "253": {
1268
- "name": "tBodyGyroJerkMag-std()",
1269
- "min": 0.06471966181666673,
1270
- "max": 42.86777378667186
1271
- },
1272
- "254": {
1273
- "name": "tBodyGyroJerkMag-mad()",
1274
- "min": 0.03835238310385612,
1275
- "max": 25.880578764993693
1276
- },
1277
- "255": {
1278
- "name": "tBodyGyroJerkMag-max()",
1279
- "min": 0.3243723022092053,
1280
- "max": 242.35611226476342
1281
- },
1282
- "256": {
1283
- "name": "tBodyGyroJerkMag-min()",
1284
- "min": 0.0007116355317155123,
1285
- "max": 9.424757397117709
1286
- },
1287
- "257": {
1288
- "name": "tBodyGyroJerkMag-sma()",
1289
- "min": 0.1403115865422672,
1290
- "max": 62.07602056892374
1291
- },
1292
- "258": {
1293
- "name": "tBodyGyroJerkMag-energy()",
1294
- "min": 0.024413434146474674,
1295
- "max": 5485.88640461513
1296
- },
1297
- "259": {
1298
- "name": "tBodyGyroJerkMag-iqr()",
1299
- "min": 0.07939490031284152,
1300
- "max": 55.68709605754883
1301
- },
1302
- "260": {
1303
- "name": "tBodyGyroJerkMag-entropy()",
1304
- "min": 3.598188748898203,
1305
- "max": 4.779595188725109
1306
- },
1307
- "261": {
1308
- "name": "tBodyGyroJerkMag-arCoeff()1",
1309
- "min": -3.5578113153489372,
1310
- "max": 0.02671902371115397
1311
- },
1312
- "262": {
1313
- "name": "tBodyGyroJerkMag-arCoeff()2",
1314
- "min": -0.025307717449186466,
1315
- "max": 5.082911720536158
1316
- },
1317
- "263": {
1318
- "name": "tBodyGyroJerkMag-arCoeff()3",
1319
- "min": -3.4443852940382653,
1320
- "max": 0.034846174202294265
1321
- },
1322
- "264": {
1323
- "name": "tBodyGyroJerkMag-arCoeff()4",
1324
- "min": -0.03553247840818885,
1325
- "max": 0.9351353013411847
1326
- },
1327
- "265": {
1328
- "name": "fBodyAcc-mean()-X",
1329
- "min": 0.01237202527171472,
1330
- "max": 3.9550492481178674
1331
- },
1332
- "266": {
1333
- "name": "fBodyAcc-mean()-Y",
1334
- "min": 0.013518167394674752,
1335
- "max": 2.3190958596131037
1336
- },
1337
- "267": {
1338
- "name": "fBodyAcc-mean()-Z",
1339
- "min": 0.02621992969619822,
1340
- "max": 2.6359581036313102
1341
- },
1342
- "268": {
1343
- "name": "fBodyAcc-std()-X",
1344
- "min": 0.011448813900416592,
1345
- "max": 6.204875264918844
1346
- },
1347
- "269": {
1348
- "name": "fBodyAcc-std()-Y",
1349
- "min": 0.014058108218901008,
1350
- "max": 8.565574535508444
1351
- },
1352
- "270": {
1353
- "name": "fBodyAcc-std()-Z",
1354
- "min": 0.022705999333689893,
1355
- "max": 5.908300713917718
1356
- },
1357
- "271": {
1358
- "name": "fBodyAcc-mad()-X",
1359
- "min": 0.004243113407778255,
1360
- "max": 1.5540556846610636
1361
- },
1362
- "272": {
1363
- "name": "fBodyAcc-mad()-Y",
1364
- "min": 0.0054972038332809885,
1365
- "max": 1.002076272484623
1366
- },
1367
- "273": {
1368
- "name": "fBodyAcc-mad()-Z",
1369
- "min": 0.008715628687791709,
1370
- "max": 1.3181088437622168
1371
- },
1372
- "274": {
1373
- "name": "fBodyAcc-max()-X",
1374
- "min": 0.043341548266239774,
1375
- "max": 44.96954582227482
1376
- },
1377
- "275": {
1378
- "name": "fBodyAcc-max()-Y",
1379
- "min": 0.04932299113688046,
1380
- "max": 68.28826140000001
1381
- },
1382
- "276": {
1383
- "name": "fBodyAcc-max()-Z",
1384
- "min": 0.0905469535517963,
1385
- "max": 46.8632137
1386
- },
1387
- "277": {
1388
- "name": "fBodyAcc-min()-X",
1389
- "min": 3.8032809200282565e-06,
1390
- "max": 0.49425421787520635
1391
- },
1392
- "278": {
1393
- "name": "fBodyAcc-min()-Y",
1394
- "min": 8.43651789674675e-06,
1395
- "max": 0.42677440846776216
1396
- },
1397
- "279": {
1398
- "name": "fBodyAcc-min()-Z",
1399
- "min": 1.7830702208081442e-07,
1400
- "max": 0.5091322678922322
1401
- },
1402
- "280": {
1403
- "name": "fBodyAcc-sma()",
1404
- "min": 0.06299726335260841,
1405
- "max": 7.753584254858914
1406
- },
1407
- "281": {
1408
- "name": "fBodyAcc-energy()-X",
1409
- "min": 0.0002870378517315017,
1410
- "max": 54.142891608239395
1411
- },
1412
- "282": {
1413
- "name": "fBodyAcc-energy()-Y",
1414
- "min": 0.00042636139128670946,
1415
- "max": 75.52786809281902
1416
- },
1417
- "283": {
1418
- "name": "fBodyAcc-energy()-Z",
1419
- "min": 0.0012395613304968848,
1420
- "max": 36.10516976376592
1421
- },
1422
- "284": {
1423
- "name": "fBodyAcc-iqr()-X",
1424
- "min": 0.010230336694165646,
1425
- "max": 4.067090773647032
1426
- },
1427
- "285": {
1428
- "name": "fBodyAcc-iqr()-Y",
1429
- "min": 0.01442748833067542,
1430
- "max": 3.3090199205780624
1431
- },
1432
- "286": {
1433
- "name": "fBodyAcc-iqr()-Z",
1434
- "min": 0.020036820959327326,
1435
- "max": 3.591815338636069
1436
- },
1437
- "287": {
1438
- "name": "fBodyAcc-entropy()-X",
1439
- "min": 1.650898899610382,
1440
- "max": 3.9805109901418376
1441
- },
1442
- "288": {
1443
- "name": "fBodyAcc-entropy()-Y",
1444
- "min": 1.1801921926950236,
1445
- "max": 4.004133214479681
1446
- },
1447
- "289": {
1448
- "name": "fBodyAcc-entropy()-Z",
1449
- "min": 1.4520145201009442,
1450
- "max": 3.9334853995663392
1451
- },
1452
- "290": {
1453
- "name": "fBodyAcc-maxInds-X",
1454
- "min": 1.0,
1455
- "max": 33.0
1456
- },
1457
- "291": {
1458
- "name": "fBodyAcc-maxInds-Y",
1459
- "min": 1.0,
1460
- "max": 32.0
1461
- },
1462
- "292": {
1463
- "name": "fBodyAcc-maxInds-Z",
1464
- "min": 1.0,
1465
- "max": 27.0
1466
- },
1467
- "293": {
1468
- "name": "fBodyAcc-meanFreq()-X",
1469
- "min": 4.828120705849306,
1470
- "max": 28.121365806711083
1471
- },
1472
- "294": {
1473
- "name": "fBodyAcc-meanFreq()-Y",
1474
- "min": 2.576677434383746,
1475
- "max": 24.66492977423453
1476
- },
1477
- "295": {
1478
- "name": "fBodyAcc-meanFreq()-Z",
1479
- "min": 3.8565853265560843,
1480
- "max": 23.782521555449975
1481
- },
1482
- "296": {
1483
- "name": "fBodyAcc-skewness()-X",
1484
- "min": 0.059479337892321606,
1485
- "max": 7.710274185186048
1486
- },
1487
- "297": {
1488
- "name": "fBodyAcc-kurtosis()-X",
1489
- "min": -1.1856719277588446,
1490
- "max": 57.95972993893258
1491
- },
1492
- "298": {
1493
- "name": "fBodyAcc-skewness()-Y",
1494
- "min": 0.5336178439398402,
1495
- "max": 7.723650370852476
1496
- },
1497
- "299": {
1498
- "name": "fBodyAcc-kurtosis()-Y",
1499
- "min": -1.0028745964215782,
1500
- "max": 58.1113345233398
1501
- },
1502
- "300": {
1503
- "name": "fBodyAcc-skewness()-Z",
1504
- "min": 0.5499524238335283,
1505
- "max": 7.716056448347672
1506
- },
1507
- "301": {
1508
- "name": "fBodyAcc-kurtosis()-Z",
1509
- "min": -0.9042972807891978,
1510
- "max": 58.00399921088198
1511
- },
1512
- "302": {
1513
- "name": "fBodyAcc-bandsEnergy()-1,8",
1514
- "min": 0.004071649018614799,
1515
- "max": 2441.7728029982527
1516
- },
1517
- "303": {
1518
- "name": "fBodyAcc-bandsEnergy()-9,16",
1519
- "min": 0.0025959183130582755,
1520
- "max": 917.6976803754808
1521
- },
1522
- "304": {
1523
- "name": "fBodyAcc-bandsEnergy()-17,24",
1524
- "min": 0.0013799890597189358,
1525
- "max": 246.27430929468565
1526
- },
1527
- "305": {
1528
- "name": "fBodyAcc-bandsEnergy()-25,32",
1529
- "min": 0.000541266070963658,
1530
- "max": 98.76465244989758
1531
- },
1532
- "306": {
1533
- "name": "fBodyAcc-bandsEnergy()-33,40",
1534
- "min": 0.0002816407340464972,
1535
- "max": 34.86174793411658
1536
- },
1537
- "307": {
1538
- "name": "fBodyAcc-bandsEnergy()-41,48",
1539
- "min": 0.00013045796137692474,
1540
- "max": 22.783224926917384
1541
- },
1542
- "308": {
1543
- "name": "fBodyAcc-bandsEnergy()-49,56",
1544
- "min": 4.005382520952431e-05,
1545
- "max": 13.948985648863097
1546
- },
1547
- "309": {
1548
- "name": "fBodyAcc-bandsEnergy()-57,64",
1549
- "min": 2.9250560541035117e-09,
1550
- "max": 7.566251392364055
1551
- },
1552
- "310": {
1553
- "name": "fBodyAcc-bandsEnergy()-1,16",
1554
- "min": 0.010484339632580351,
1555
- "max": 3066.9057780572894
1556
- },
1557
- "311": {
1558
- "name": "fBodyAcc-bandsEnergy()-17,32",
1559
- "min": 0.0036501022421142177,
1560
- "max": 320.3696406578141
1561
- },
1562
- "312": {
1563
- "name": "fBodyAcc-bandsEnergy()-33,48",
1564
- "min": 0.0007113124077480072,
1565
- "max": 56.35440717099074
1566
- },
1567
- "313": {
1568
- "name": "fBodyAcc-bandsEnergy()-49,64",
1569
- "min": 5.0659451091580556e-05,
1570
- "max": 21.515237041227152
1571
- },
1572
- "314": {
1573
- "name": "fBodyAcc-bandsEnergy()-1,24",
1574
- "min": 0.014754190974556432,
1575
- "max": 3313.1800873519755
1576
- },
1577
- "315": {
1578
- "name": "fBodyAcc-bandsEnergy()-25,48",
1579
- "min": 0.001701552820289688,
1580
- "max": 130.44973853411918
1581
- },
1582
- "316": {
1583
- "name": "fBodyAcc-bandsEnergy()-1,8",
1584
- "min": 0.005406430450198294,
1585
- "max": 4832.795560246551
1586
- },
1587
- "317": {
1588
- "name": "fBodyAcc-bandsEnergy()-9,16",
1589
- "min": 0.0028402732594171413,
1590
- "max": 446.3996656316805
1591
- },
1592
- "318": {
1593
- "name": "fBodyAcc-bandsEnergy()-17,24",
1594
- "min": 0.002311350804377598,
1595
- "max": 170.00174588156742
1596
- },
1597
- "319": {
1598
- "name": "fBodyAcc-bandsEnergy()-25,32",
1599
- "min": 0.0007621336161870941,
1600
- "max": 49.945008505147854
1601
- },
1602
- "320": {
1603
- "name": "fBodyAcc-bandsEnergy()-33,40",
1604
- "min": 0.00027154637838153043,
1605
- "max": 17.703680468095268
1606
- },
1607
- "321": {
1608
- "name": "fBodyAcc-bandsEnergy()-41,48",
1609
- "min": 0.00021060361707929442,
1610
- "max": 7.458339509466047
1611
- },
1612
- "322": {
1613
- "name": "fBodyAcc-bandsEnergy()-49,56",
1614
- "min": 5.0156957134404054e-05,
1615
- "max": 4.511654470054515
1616
- },
1617
- "323": {
1618
- "name": "fBodyAcc-bandsEnergy()-57,64",
1619
- "min": 3.9759845449131736e-08,
1620
- "max": 2.815808177370262
1621
- },
1622
- "324": {
1623
- "name": "fBodyAcc-bandsEnergy()-1,16",
1624
- "min": 0.016247916088730857,
1625
- "max": 4833.3940438876025
1626
- },
1627
- "325": {
1628
- "name": "fBodyAcc-bandsEnergy()-17,32",
1629
- "min": 0.0034251055691045095,
1630
- "max": 178.65563339954895
1631
- },
1632
- "326": {
1633
- "name": "fBodyAcc-bandsEnergy()-33,48",
1634
- "min": 0.0008199850612541953,
1635
- "max": 21.74570025493538
1636
- },
1637
- "327": {
1638
- "name": "fBodyAcc-bandsEnergy()-49,64",
1639
- "min": 7.770167079909225e-05,
1640
- "max": 6.968003230416617
1641
- },
1642
- "328": {
1643
- "name": "fBodyAcc-bandsEnergy()-1,24",
1644
- "min": 0.022542711990611124,
1645
- "max": 4833.66936541378
1646
- },
1647
- "329": {
1648
- "name": "fBodyAcc-bandsEnergy()-25,48",
1649
- "min": 0.0020918370756561125,
1650
- "max": 71.69070876008323
1651
- },
1652
- "330": {
1653
- "name": "fBodyAcc-bandsEnergy()-1,8",
1654
- "min": 0.017419743314532048,
1655
- "max": 2309.379473829486
1656
- },
1657
- "331": {
1658
- "name": "fBodyAcc-bandsEnergy()-9,16",
1659
- "min": 0.00870006619228687,
1660
- "max": 361.7939391691087
1661
- },
1662
- "332": {
1663
- "name": "fBodyAcc-bandsEnergy()-17,24",
1664
- "min": 0.0038523868222955053,
1665
- "max": 214.16320517252393
1666
- },
1667
- "333": {
1668
- "name": "fBodyAcc-bandsEnergy()-25,32",
1669
- "min": 0.0017157232273768326,
1670
- "max": 120.29449560794177
1671
- },
1672
- "334": {
1673
- "name": "fBodyAcc-bandsEnergy()-33,40",
1674
- "min": 0.0006008624258766215,
1675
- "max": 41.69746881815616
1676
- },
1677
- "335": {
1678
- "name": "fBodyAcc-bandsEnergy()-41,48",
1679
- "min": 0.00038682378870926544,
1680
- "max": 12.912369033221323
1681
- },
1682
- "336": {
1683
- "name": "fBodyAcc-bandsEnergy()-49,56",
1684
- "min": 0.00015397547444222123,
1685
- "max": 6.453276020916135
1686
- },
1687
- "337": {
1688
- "name": "fBodyAcc-bandsEnergy()-57,64",
1689
- "min": 2.4225124354171243e-08,
1690
- "max": 2.226122352587876
1691
- },
1692
- "338": {
1693
- "name": "fBodyAcc-bandsEnergy()-1,16",
1694
- "min": 0.03864675888532582,
1695
- "max": 2310.2168667513306
1696
- },
1697
- "339": {
1698
- "name": "fBodyAcc-bandsEnergy()-17,32",
1699
- "min": 0.011479547806034792,
1700
- "max": 334.45770078046564
1701
- },
1702
- "340": {
1703
- "name": "fBodyAcc-bandsEnergy()-33,48",
1704
- "min": 0.002288417818395397,
1705
- "max": 54.36013099542112
1706
- },
1707
- "341": {
1708
- "name": "fBodyAcc-bandsEnergy()-49,64",
1709
- "min": 0.00015432691466135193,
1710
- "max": 7.379874064435473
1711
- },
1712
- "342": {
1713
- "name": "fBodyAcc-bandsEnergy()-1,24",
1714
- "min": 0.05715269187124267,
1715
- "max": 2310.387131518508
1716
- },
1717
- "343": {
1718
- "name": "fBodyAcc-bandsEnergy()-25,48",
1719
- "min": 0.006803746657778421,
1720
- "max": 174.65462660336289
1721
- },
1722
- "344": {
1723
- "name": "fBodyAccJerk-mean()-X",
1724
- "min": 0.4628367911411038,
1725
- "max": 130.90326989985402
1726
- },
1727
- "345": {
1728
- "name": "fBodyAccJerk-mean()-Y",
1729
- "min": 0.45444765605611215,
1730
- "max": 75.72698207648175
1731
- },
1732
- "346": {
1733
- "name": "fBodyAccJerk-mean()-Z",
1734
- "min": 0.8726057602060784,
1735
- "max": 105.56986129546289
1736
- },
1737
- "347": {
1738
- "name": "fBodyAccJerk-std()-X",
1739
- "min": 0.3275499539821552,
1740
- "max": 120.76837351175024
1741
- },
1742
- "348": {
1743
- "name": "fBodyAccJerk-std()-Y",
1744
- "min": 0.3277700358612746,
1745
- "max": 82.92956914931888
1746
- },
1747
- "349": {
1748
- "name": "fBodyAccJerk-std()-Z",
1749
- "min": 0.6129111098448281,
1750
- "max": 111.44962205235908
1751
- },
1752
- "350": {
1753
- "name": "fBodyAccJerk-mad()-X",
1754
- "min": 0.24481413446484218,
1755
- "max": 67.66401503164244
1756
- },
1757
- "351": {
1758
- "name": "fBodyAccJerk-mad()-Y",
1759
- "min": 0.25490192039854254,
1760
- "max": 48.37408853773491
1761
- },
1762
- "352": {
1763
- "name": "fBodyAccJerk-mad()-Z",
1764
- "min": 0.3653792793244242,
1765
- "max": 64.40328252861148
1766
- },
1767
- "353": {
1768
- "name": "fBodyAccJerk-max()-X",
1769
- "min": 1.335856096602167,
1770
- "max": 686.8009029215207
1771
- },
1772
- "354": {
1773
- "name": "fBodyAccJerk-max()-Y",
1774
- "min": 1.4134065132783362,
1775
- "max": 457.5129638665394
1776
- },
1777
- "355": {
1778
- "name": "fBodyAccJerk-max()-Z",
1779
- "min": 2.248117591917168,
1780
- "max": 559.5396843602708
1781
- },
1782
- "356": {
1783
- "name": "fBodyAccJerk-min()-X",
1784
- "min": 7.165000000006194e-05,
1785
- "max": 21.803468320235307
1786
- },
1787
- "357": {
1788
- "name": "fBodyAccJerk-min()-Y",
1789
- "min": 5.449999999712629e-06,
1790
- "max": 16.102625680765506
1791
- },
1792
- "358": {
1793
- "name": "fBodyAccJerk-min()-Z",
1794
- "min": 0.00018599999999935335,
1795
- "max": 15.340776451655199
1796
- },
1797
- "359": {
1798
- "name": "fBodyAccJerk-sma()",
1799
- "min": 2.0945724355015907,
1800
- "max": 277.2991815929879
1801
- },
1802
- "360": {
1803
- "name": "fBodyAccJerk-energy()-X",
1804
- "min": 0.33992198423204834,
1805
- "max": 28876.94368371198
1806
- },
1807
- "361": {
1808
- "name": "fBodyAccJerk-energy()-Y",
1809
- "min": 0.31395586850339563,
1810
- "max": 11531.666434018478
1811
- },
1812
- "362": {
1813
- "name": "fBodyAccJerk-energy()-Z",
1814
- "min": 1.2921610287837284,
1815
- "max": 23566.013869556955
1816
- },
1817
- "363": {
1818
- "name": "fBodyAccJerk-iqr()-X",
1819
- "min": 0.45183153905796114,
1820
- "max": 136.72301462623955
1821
- },
1822
- "364": {
1823
- "name": "fBodyAccJerk-iqr()-Y",
1824
- "min": 0.5106198040351102,
1825
- "max": 107.2065696669863
1826
- },
1827
- "365": {
1828
- "name": "fBodyAccJerk-iqr()-Z",
1829
- "min": 0.7318347145478054,
1830
- "max": 116.7984330328269
1831
- },
1832
- "366": {
1833
- "name": "fBodyAccJerk-entropy()-X",
1834
- "min": 3.416490853619734,
1835
- "max": 4.032164334579004
1836
- },
1837
- "367": {
1838
- "name": "fBodyAccJerk-entropy()-Y",
1839
- "min": 3.43511032542208,
1840
- "max": 4.038468849166367
1841
- },
1842
- "368": {
1843
- "name": "fBodyAccJerk-entropy()-Z",
1844
- "min": 3.4494441750253193,
1845
- "max": 4.033533167437243
1846
- },
1847
- "369": {
1848
- "name": "fBodyAccJerk-maxInds-X",
1849
- "min": 1.0,
1850
- "max": 51.0
1851
- },
1852
- "370": {
1853
- "name": "fBodyAccJerk-maxInds-Y",
1854
- "min": 1.0,
1855
- "max": 51.0
1856
- },
1857
- "371": {
1858
- "name": "fBodyAccJerk-maxInds-Z",
1859
- "min": 1.0,
1860
- "max": 51.0
1861
- },
1862
- "372": {
1863
- "name": "fBodyAccJerk-meanFreq()-X",
1864
- "min": 17.35567462820525,
1865
- "max": 33.279343932003584
1866
- },
1867
- "373": {
1868
- "name": "fBodyAccJerk-meanFreq()-Y",
1869
- "min": 16.014576920586485,
1870
- "max": 34.13569874912843
1871
- },
1872
- "374": {
1873
- "name": "fBodyAccJerk-meanFreq()-Z",
1874
- "min": 19.14880573147533,
1875
- "max": 31.23328007953361
1876
- },
1877
- "375": {
1878
- "name": "fBodyAccJerk-skewness()-X",
1879
- "min": -0.15911069873758898,
1880
- "max": 4.217935841088276
1881
- },
1882
- "376": {
1883
- "name": "fBodyAccJerk-kurtosis()-X",
1884
- "min": -1.6864192389665331,
1885
- "max": 22.01325033659963
1886
- },
1887
- "377": {
1888
- "name": "fBodyAccJerk-skewness()-Y",
1889
- "min": -0.4169935777951699,
1890
- "max": 5.542537853284935
1891
- },
1892
- "378": {
1893
- "name": "fBodyAccJerk-kurtosis()-Y",
1894
- "min": -1.3490236843763141,
1895
- "max": 35.50536963012938
1896
- },
1897
- "379": {
1898
- "name": "fBodyAccJerk-skewness()-Z",
1899
- "min": -0.09487574920519555,
1900
- "max": 4.431310110202496
1901
- },
1902
- "380": {
1903
- "name": "fBodyAccJerk-kurtosis()-Z",
1904
- "min": -1.2616100517735551,
1905
- "max": 23.446776096573945
1906
- },
1907
- "381": {
1908
- "name": "fBodyAccJerk-bandsEnergy()-1,8",
1909
- "min": 0.19634314108697953,
1910
- "max": 487959.10271620407
1911
- },
1912
- "382": {
1913
- "name": "fBodyAccJerk-bandsEnergy()-9,16",
1914
- "min": 2.2226025622666734,
1915
- "max": 681705.6823304204
1916
- },
1917
- "383": {
1918
- "name": "fBodyAccJerk-bandsEnergy()-17,24",
1919
- "min": 2.214949652059473,
1920
- "max": 451677.21619104553
1921
- },
1922
- "384": {
1923
- "name": "fBodyAccJerk-bandsEnergy()-25,32",
1924
- "min": 2.2693892151081467,
1925
- "max": 352789.0929182987
1926
- },
1927
- "385": {
1928
- "name": "fBodyAccJerk-bandsEnergy()-33,40",
1929
- "min": 1.5350959145555498,
1930
- "max": 138868.5799731129
1931
- },
1932
- "386": {
1933
- "name": "fBodyAccJerk-bandsEnergy()-41,48",
1934
- "min": 0.6033198721101419,
1935
- "max": 113210.46923657591
1936
- },
1937
- "387": {
1938
- "name": "fBodyAccJerk-bandsEnergy()-49,56",
1939
- "min": 0.30619202705847737,
1940
- "max": 91793.54734930322
1941
- },
1942
- "388": {
1943
- "name": "fBodyAccJerk-bandsEnergy()-57,64",
1944
- "min": 5.8918965009400135e-05,
1945
- "max": 8523.270103438279
1946
- },
1947
- "389": {
1948
- "name": "fBodyAccJerk-bandsEnergy()-1,16",
1949
- "min": 3.2614884551153485,
1950
- "max": 1112682.5422150625
1951
- },
1952
- "390": {
1953
- "name": "fBodyAccJerk-bandsEnergy()-17,32",
1954
- "min": 9.171077029678896,
1955
- "max": 655883.3897515865
1956
- },
1957
- "391": {
1958
- "name": "fBodyAccJerk-bandsEnergy()-33,48",
1959
- "min": 4.2239450594924675,
1960
- "max": 252079.04920968882
1961
- },
1962
- "392": {
1963
- "name": "fBodyAccJerk-bandsEnergy()-49,64",
1964
- "min": 0.33760645135606987,
1965
- "max": 92199.24100462561
1966
- },
1967
- "393": {
1968
- "name": "fBodyAccJerk-bandsEnergy()-1,24",
1969
- "min": 9.021749459917444,
1970
- "max": 1354177.1966499668
1971
- },
1972
- "394": {
1973
- "name": "fBodyAccJerk-bandsEnergy()-25,48",
1974
- "min": 8.967502546368557,
1975
- "max": 451382.88088563905
1976
- },
1977
- "395": {
1978
- "name": "fBodyAccJerk-bandsEnergy()-1,8",
1979
- "min": 0.3445267354801653,
1980
- "max": 89802.969052987
1981
- },
1982
- "396": {
1983
- "name": "fBodyAccJerk-bandsEnergy()-9,16",
1984
- "min": 1.3886563334579907,
1985
- "max": 389740.9836707453
1986
- },
1987
- "397": {
1988
- "name": "fBodyAccJerk-bandsEnergy()-17,24",
1989
- "min": 4.624237133713184,
1990
- "max": 300653.2201528965
1991
- },
1992
- "398": {
1993
- "name": "fBodyAccJerk-bandsEnergy()-25,32",
1994
- "min": 2.732913069058874,
1995
- "max": 147915.52688097768
1996
- },
1997
- "399": {
1998
- "name": "fBodyAccJerk-bandsEnergy()-33,40",
1999
- "min": 1.2504066034951786,
2000
- "max": 76954.03292481464
2001
- },
2002
- "400": {
2003
- "name": "fBodyAccJerk-bandsEnergy()-41,48",
2004
- "min": 1.5848737040075767,
2005
- "max": 51932.054115492036
2006
- },
2007
- "401": {
2008
- "name": "fBodyAccJerk-bandsEnergy()-49,56",
2009
- "min": 0.42434971595016885,
2010
- "max": 31803.248321812385
2011
- },
2012
- "402": {
2013
- "name": "fBodyAccJerk-bandsEnergy()-57,64",
2014
- "min": 2.1861275657521006e-05,
2015
- "max": 5136.260225532653
2016
- },
2017
- "403": {
2018
- "name": "fBodyAccJerk-bandsEnergy()-1,16",
2019
- "min": 2.765846221178636,
2020
- "max": 432256.5011325866
2021
- },
2022
- "404": {
2023
- "name": "fBodyAccJerk-bandsEnergy()-17,32",
2024
- "min": 7.806077690740377,
2025
- "max": 374017.16369594214
2026
- },
2027
- "405": {
2028
- "name": "fBodyAccJerk-bandsEnergy()-33,48",
2029
- "min": 5.427992591674114,
2030
- "max": 121249.24426093763
2031
- },
2032
- "406": {
2033
- "name": "fBodyAccJerk-bandsEnergy()-49,64",
2034
- "min": 0.4311665031819857,
2035
- "max": 33388.91468520344
2036
- },
2037
- "407": {
2038
- "name": "fBodyAccJerk-bandsEnergy()-1,24",
2039
- "min": 8.270324465439757,
2040
- "max": 604706.0116090263
2041
- },
2042
- "408": {
2043
- "name": "fBodyAccJerk-bandsEnergy()-25,48",
2044
- "min": 11.106609008419923,
2045
- "max": 250876.27342138632
2046
- },
2047
- "409": {
2048
- "name": "fBodyAccJerk-bandsEnergy()-1,8",
2049
- "min": 0.4965488935801202,
2050
- "max": 90129.70232146455
2051
- },
2052
- "410": {
2053
- "name": "fBodyAccJerk-bandsEnergy()-9,16",
2054
- "min": 6.966425533189531,
2055
- "max": 209850.60657258285
2056
- },
2057
- "411": {
2058
- "name": "fBodyAccJerk-bandsEnergy()-17,24",
2059
- "min": 9.349601148410397,
2060
- "max": 481762.22962454817
2061
- },
2062
- "412": {
2063
- "name": "fBodyAccJerk-bandsEnergy()-25,32",
2064
- "min": 6.24936384606945,
2065
- "max": 451950.967853051
2066
- },
2067
- "413": {
2068
- "name": "fBodyAccJerk-bandsEnergy()-33,40",
2069
- "min": 5.3183544266302185,
2070
- "max": 248753.7243771523
2071
- },
2072
- "414": {
2073
- "name": "fBodyAccJerk-bandsEnergy()-41,48",
2074
- "min": 3.0288260450020026,
2075
- "max": 92528.81756266626
2076
- },
2077
- "415": {
2078
- "name": "fBodyAccJerk-bandsEnergy()-49,56",
2079
- "min": 0.7967681104465839,
2080
- "max": 57971.24133144367
2081
- },
2082
- "416": {
2083
- "name": "fBodyAccJerk-bandsEnergy()-57,64",
2084
- "min": 0.00010023773310129967,
2085
- "max": 9506.028711612198
2086
- },
2087
- "417": {
2088
- "name": "fBodyAccJerk-bandsEnergy()-1,16",
2089
- "min": 10.760270052800498,
2090
- "max": 269302.58504333126
2091
- },
2092
- "418": {
2093
- "name": "fBodyAccJerk-bandsEnergy()-17,32",
2094
- "min": 30.067438885857403,
2095
- "max": 933713.1974775991
2096
- },
2097
- "419": {
2098
- "name": "fBodyAccJerk-bandsEnergy()-33,48",
2099
- "min": 13.446232916603478,
2100
- "max": 328936.0412518716
2101
- },
2102
- "420": {
2103
- "name": "fBodyAccJerk-bandsEnergy()-49,64",
2104
- "min": 0.8077064056071276,
2105
- "max": 58036.93778245307
2106
- },
2107
- "421": {
2108
- "name": "fBodyAccJerk-bandsEnergy()-1,24",
2109
- "min": 35.3649026636445,
2110
- "max": 708265.5203267524
2111
- },
2112
- "422": {
2113
- "name": "fBodyAccJerk-bandsEnergy()-25,48",
2114
- "min": 25.165532711715667,
2115
- "max": 780887.0091049226
2116
- },
2117
- "423": {
2118
- "name": "fBodyGyro-mean()-X",
2119
- "min": 0.016314320626294655,
2120
- "max": 9.422155819754993
2121
- },
2122
- "424": {
2123
- "name": "fBodyGyro-mean()-Y",
2124
- "min": 0.017308432722376386,
2125
- "max": 11.00466097339114
2126
- },
2127
- "425": {
2128
- "name": "fBodyGyro-mean()-Z",
2129
- "min": 0.018407064527380917,
2130
- "max": 5.82837341478685
2131
- },
2132
- "426": {
2133
- "name": "fBodyGyro-std()-X",
2134
- "min": 0.015245481941087468,
2135
- "max": 19.46593178626173
2136
- },
2137
- "427": {
2138
- "name": "fBodyGyro-std()-Y",
2139
- "min": 0.015073089162351231,
2140
- "max": 13.723720351005777
2141
- },
2142
- "428": {
2143
- "name": "fBodyGyro-std()-Z",
2144
- "min": 0.017023551688804858,
2145
- "max": 11.076054588341252
2146
- },
2147
- "429": {
2148
- "name": "fBodyGyro-mad()-X",
2149
- "min": 0.005636999892928657,
2150
- "max": 3.6349889438621736
2151
- },
2152
- "430": {
2153
- "name": "fBodyGyro-mad()-Y",
2154
- "min": 0.005921797361361499,
2155
- "max": 6.785559270447114
2156
- },
2157
- "431": {
2158
- "name": "fBodyGyro-mad()-Z",
2159
- "min": 0.007597671784425804,
2160
- "max": 2.9914552023711765
2161
- },
2162
- "432": {
2163
- "name": "fBodyGyro-max()-X",
2164
- "min": 0.06607816321,
2165
- "max": 117.012665
2166
- },
2167
- "433": {
2168
- "name": "fBodyGyro-max()-Y",
2169
- "min": 0.0533851005760631,
2170
- "max": 92.28196159099338
2171
- },
2172
- "434": {
2173
- "name": "fBodyGyro-max()-Z",
2174
- "min": 0.0665115154644795,
2175
- "max": 76.96565781747961
2176
- },
2177
- "435": {
2178
- "name": "fBodyGyro-min()-X",
2179
- "min": 4.827285153041225e-06,
2180
- "max": 1.5661257894586067
2181
- },
2182
- "436": {
2183
- "name": "fBodyGyro-min()-Y",
2184
- "min": 1.2346961989128442e-05,
2185
- "max": 1.3141493927496437
2186
- },
2187
- "437": {
2188
- "name": "fBodyGyro-min()-Z",
2189
- "min": 7.854520340317124e-06,
2190
- "max": 1.0660006431405662
2191
- },
2192
- "438": {
2193
- "name": "fBodyGyro-sma()",
2194
- "min": 0.06258657698041892,
2195
- "max": 25.07732440364832
2196
- },
2197
- "439": {
2198
- "name": "fBodyGyro-energy()-X",
2199
- "min": 0.0005245311551547874,
2200
- "max": 463.4007637095542
2201
- },
2202
- "440": {
2203
- "name": "fBodyGyro-energy()-Y",
2204
- "min": 0.0005267798602012197,
2205
- "max": 308.54688634914567
2206
- },
2207
- "441": {
2208
- "name": "fBodyGyro-energy()-Z",
2209
- "min": 0.0006286213366165755,
2210
- "max": 140.31053252912236
2211
- },
2212
- "442": {
2213
- "name": "fBodyGyro-iqr()-X",
2214
- "min": 0.01371117989424013,
2215
- "max": 9.417859284004836
2216
- },
2217
- "443": {
2218
- "name": "fBodyGyro-iqr()-Y",
2219
- "min": 0.016964481270246187,
2220
- "max": 14.613290116907585
2221
- },
2222
- "444": {
2223
- "name": "fBodyGyro-iqr()-Z",
2224
- "min": 0.016511494136773903,
2225
- "max": 6.963030628511725
2226
- },
2227
- "445": {
2228
- "name": "fBodyGyro-entropy()-X",
2229
- "min": 1.2357520757706306,
2230
- "max": 4.042275132483958
2231
- },
2232
- "446": {
2233
- "name": "fBodyGyro-entropy()-Y",
2234
- "min": 1.5552691644338834,
2235
- "max": 3.99336444235346
2236
- },
2237
- "447": {
2238
- "name": "fBodyGyro-entropy()-Z",
2239
- "min": 1.275806532628427,
2240
- "max": 3.9716034061903462
2241
- },
2242
- "448": {
2243
- "name": "fBodyGyro-maxInds-X",
2244
- "min": 1.0,
2245
- "max": 32.0
2246
- },
2247
- "449": {
2248
- "name": "fBodyGyro-maxInds-Y",
2249
- "min": 1.0,
2250
- "max": 29.0
2251
- },
2252
- "450": {
2253
- "name": "fBodyGyro-maxInds-Z",
2254
- "min": 1.0,
2255
- "max": 26.0
2256
- },
2257
- "451": {
2258
- "name": "fBodyGyro-meanFreq()-X",
2259
- "min": 3.2379469244937384,
2260
- "max": 26.490646686720936
2261
- },
2262
- "452": {
2263
- "name": "fBodyGyro-meanFreq()-Y",
2264
- "min": 4.019356153745302,
2265
- "max": 24.88615102986705
2266
- },
2267
- "453": {
2268
- "name": "fBodyGyro-meanFreq()-Z",
2269
- "min": 3.0748864873616606,
2270
- "max": 23.672419273191743
2271
- },
2272
- "454": {
2273
- "name": "fBodyGyro-skewness()-X",
2274
- "min": 0.23290704873180104,
2275
- "max": 7.763214970332133
2276
- },
2277
- "455": {
2278
- "name": "fBodyGyro-kurtosis()-X",
2279
- "min": -0.9985662308732359,
2280
- "max": 58.51422168797056
2281
- },
2282
- "456": {
2283
- "name": "fBodyGyro-skewness()-Y",
2284
- "min": -0.2090170461083047,
2285
- "max": 7.706652293551183
2286
- },
2287
- "457": {
2288
- "name": "fBodyGyro-kurtosis()-Y",
2289
- "min": -1.53895997788601,
2290
- "max": 57.918617604593415
2291
- },
2292
- "458": {
2293
- "name": "fBodyGyro-skewness()-Z",
2294
- "min": 0.5161176580027725,
2295
- "max": 7.769740771737564
2296
- },
2297
- "459": {
2298
- "name": "fBodyGyro-kurtosis()-Z",
2299
- "min": -1.2080010166999977,
2300
- "max": 58.58436612370891
2301
- },
2302
- "460": {
2303
- "name": "fBodyGyro-bandsEnergy()-1,8",
2304
- "min": 0.009094987230944214,
2305
- "max": 27356.76971954018
2306
- },
2307
- "461": {
2308
- "name": "fBodyGyro-bandsEnergy()-9,16",
2309
- "min": 0.004171170044938749,
2310
- "max": 3730.612606431678
2311
- },
2312
- "462": {
2313
- "name": "fBodyGyro-bandsEnergy()-17,24",
2314
- "min": 0.0019930712939066064,
2315
- "max": 1338.3684439773233
2316
- },
2317
- "463": {
2318
- "name": "fBodyGyro-bandsEnergy()-25,32",
2319
- "min": 0.0009770849952446799,
2320
- "max": 741.1687027456685
2321
- },
2322
- "464": {
2323
- "name": "fBodyGyro-bandsEnergy()-33,40",
2324
- "min": 0.00042375348817032997,
2325
- "max": 197.9386888360205
2326
- },
2327
- "465": {
2328
- "name": "fBodyGyro-bandsEnergy()-41,48",
2329
- "min": 0.00015749782589132602,
2330
- "max": 111.8306296056
2331
- },
2332
- "466": {
2333
- "name": "fBodyGyro-bandsEnergy()-49,56",
2334
- "min": 8.146879234643517e-05,
2335
- "max": 76.74530782711977
2336
- },
2337
- "467": {
2338
- "name": "fBodyGyro-bandsEnergy()-57,64",
2339
- "min": 2.495010030832153e-08,
2340
- "max": 56.863067544755445
2341
- },
2342
- "468": {
2343
- "name": "fBodyGyro-bandsEnergy()-1,16",
2344
- "min": 0.02373028538298916,
2345
- "max": 28868.491484954542
2346
- },
2347
- "469": {
2348
- "name": "fBodyGyro-bandsEnergy()-17,32",
2349
- "min": 0.004722286812640953,
2350
- "max": 1665.4164657167285
2351
- },
2352
- "470": {
2353
- "name": "fBodyGyro-bandsEnergy()-33,48",
2354
- "min": 0.001360803200703357,
2355
- "max": 286.4064783759284
2356
- },
2357
- "471": {
2358
- "name": "fBodyGyro-bandsEnergy()-49,64",
2359
- "min": 9.354830478070986e-05,
2360
- "max": 133.60837537187524
2361
- },
2362
- "472": {
2363
- "name": "fBodyGyro-bandsEnergy()-1,24",
2364
- "min": 0.02882703178700683,
2365
- "max": 29515.00035839448
2366
- },
2367
- "473": {
2368
- "name": "fBodyGyro-bandsEnergy()-25,48",
2369
- "min": 0.0032073932552019215,
2370
- "max": 1027.5751811215969
2371
- },
2372
- "474": {
2373
- "name": "fBodyGyro-bandsEnergy()-1,8",
2374
- "min": 0.006737175490407506,
2375
- "max": 10662.317637021766
2376
- },
2377
- "475": {
2378
- "name": "fBodyGyro-bandsEnergy()-9,16",
2379
- "min": 0.005294895188508087,
2380
- "max": 10428.934324060729
2381
- },
2382
- "476": {
2383
- "name": "fBodyGyro-bandsEnergy()-17,24",
2384
- "min": 0.003310262743222727,
2385
- "max": 8571.455398683449
2386
- },
2387
- "477": {
2388
- "name": "fBodyGyro-bandsEnergy()-25,32",
2389
- "min": 0.0013022023450892932,
2390
- "max": 2666.35221307885
2391
- },
2392
- "478": {
2393
- "name": "fBodyGyro-bandsEnergy()-33,40",
2394
- "min": 0.0006849660999934517,
2395
- "max": 928.3144805209527
2396
- },
2397
- "479": {
2398
- "name": "fBodyGyro-bandsEnergy()-41,48",
2399
- "min": 0.0003007047394871467,
2400
- "max": 229.62115921506023
2401
- },
2402
- "480": {
2403
- "name": "fBodyGyro-bandsEnergy()-49,56",
2404
- "min": 0.00017849011972244486,
2405
- "max": 93.29140002514505
2406
- },
2407
- "481": {
2408
- "name": "fBodyGyro-bandsEnergy()-57,64",
2409
- "min": 5.817040544932034e-08,
2410
- "max": 48.79796880216024
2411
- },
2412
- "482": {
2413
- "name": "fBodyGyro-bandsEnergy()-1,16",
2414
- "min": 0.016615803694764626,
2415
- "max": 16048.56858855874
2416
- },
2417
- "483": {
2418
- "name": "fBodyGyro-bandsEnergy()-17,32",
2419
- "min": 0.005795107287563859,
2420
- "max": 9114.222287974902
2421
- },
2422
- "484": {
2423
- "name": "fBodyGyro-bandsEnergy()-33,48",
2424
- "min": 0.00111964323655206,
2425
- "max": 1144.7663870653257
2426
- },
2427
- "485": {
2428
- "name": "fBodyGyro-bandsEnergy()-49,64",
2429
- "min": 0.00018523944914305512,
2430
- "max": 113.76692654518531
2431
- },
2432
- "486": {
2433
- "name": "fBodyGyro-bandsEnergy()-1,24",
2434
- "min": 0.02794651350834082,
2435
- "max": 17363.900197610405
2436
- },
2437
- "487": {
2438
- "name": "fBodyGyro-bandsEnergy()-25,48",
2439
- "min": 0.0035343446357684596,
2440
- "max": 3491.309669449439
2441
- },
2442
- "488": {
2443
- "name": "fBodyGyro-bandsEnergy()-1,8",
2444
- "min": 0.0072634765534291094,
2445
- "max": 8562.695968456674
2446
- },
2447
- "489": {
2448
- "name": "fBodyGyro-bandsEnergy()-9,16",
2449
- "min": 0.007121895190174638,
2450
- "max": 2555.0696718404633
2451
- },
2452
- "490": {
2453
- "name": "fBodyGyro-bandsEnergy()-17,24",
2454
- "min": 0.002158364816173335,
2455
- "max": 1170.0299732721128
2456
- },
2457
- "491": {
2458
- "name": "fBodyGyro-bandsEnergy()-25,32",
2459
- "min": 0.0012766166295392644,
2460
- "max": 499.7603550570554
2461
- },
2462
- "492": {
2463
- "name": "fBodyGyro-bandsEnergy()-33,40",
2464
- "min": 0.0006805472797776749,
2465
- "max": 223.78292988258377
2466
- },
2467
- "493": {
2468
- "name": "fBodyGyro-bandsEnergy()-41,48",
2469
- "min": 0.00017640189200608577,
2470
- "max": 73.46010766682528
2471
- },
2472
- "494": {
2473
- "name": "fBodyGyro-bandsEnergy()-49,56",
2474
- "min": 0.00010398419526083536,
2475
- "max": 22.67069071572638
2476
- },
2477
- "495": {
2478
- "name": "fBodyGyro-bandsEnergy()-57,64",
2479
- "min": 2.017859923812237e-07,
2480
- "max": 17.751019872095753
2481
- },
2482
- "496": {
2483
- "name": "fBodyGyro-bandsEnergy()-1,16",
2484
- "min": 0.024537744640541044,
2485
- "max": 8932.614551347204
2486
- },
2487
- "497": {
2488
- "name": "fBodyGyro-bandsEnergy()-17,32",
2489
- "min": 0.007125166885141811,
2490
- "max": 1241.5102277598644
2491
- },
2492
- "498": {
2493
- "name": "fBodyGyro-bandsEnergy()-33,48",
2494
- "min": 0.0018050466002682017,
2495
- "max": 289.11337567939347
2496
- },
2497
- "499": {
2498
- "name": "fBodyGyro-bandsEnergy()-49,64",
2499
- "min": 0.00010823181127660029,
2500
- "max": 40.42171058782213
2501
- },
2502
- "500": {
2503
- "name": "fBodyGyro-bandsEnergy()-1,24",
2504
- "min": 0.03369028112738488,
2505
- "max": 8969.766691073819
2506
- },
2507
- "501": {
2508
- "name": "fBodyGyro-bandsEnergy()-25,48",
2509
- "min": 0.003867269583824559,
2510
- "max": 783.7574154195805
2511
- },
2512
- "502": {
2513
- "name": "fBodyAccMag-mean()",
2514
- "min": 0.02680749699787196,
2515
- "max": 3.9551395414163233
2516
- },
2517
- "503": {
2518
- "name": "fBodyAccMag-std()",
2519
- "min": 0.06624383333822732,
2520
- "max": 10.81348219785095
2521
- },
2522
- "504": {
2523
- "name": "fBodyAccMag-mad()",
2524
- "min": 0.005379004524554695,
2525
- "max": 1.2778227143489536
2526
- },
2527
- "505": {
2528
- "name": "fBodyAccMag-max()",
2529
- "min": 0.5421916909118834,
2530
- "max": 87.77202290840538
2531
- },
2532
- "506": {
2533
- "name": "fBodyAccMag-min()",
2534
- "min": 3.1388124252401924e-05,
2535
- "max": 0.5184860239484557
2536
- },
2537
- "507": {
2538
- "name": "fBodyAccMag-sma()",
2539
- "min": 0.02680749699787196,
2540
- "max": 3.9551395414163233
2541
- },
2542
- "508": {
2543
- "name": "fBodyAccMag-energy()",
2544
- "min": 0.005311476142537404,
2545
- "max": 132.00464580599308
2546
- },
2547
- "509": {
2548
- "name": "fBodyAccMag-iqr()",
2549
- "min": 0.011989119718243596,
2550
- "max": 3.5391195673447386
2551
- },
2552
- "510": {
2553
- "name": "fBodyAccMag-entropy()",
2554
- "min": 1.0293285948538355,
2555
- "max": 3.6893347353791763
2556
- },
2557
- "511": {
2558
- "name": "fBodyAccMag-maxInds",
2559
- "min": 1.0,
2560
- "max": 1.0
2561
- },
2562
- "512": {
2563
- "name": "fBodyAccMag-meanFreq()",
2564
- "min": 2.9290279792959133,
2565
- "max": 22.940301114288896
2566
- },
2567
- "513": {
2568
- "name": "fBodyAccMag-skewness()",
2569
- "min": 3.792148850191923,
2570
- "max": 7.776766533941913
2571
- },
2572
- "514": {
2573
- "name": "fBodyAccMag-kurtosis()",
2574
- "min": 16.020318882235326,
2575
- "max": 58.65807478581257
2576
- },
2577
- "515": {
2578
- "name": "fBodyBodyAccJerkMag-mean()",
2579
- "min": 0.8557950819817379,
2580
- "max": 129.1131674431919
2581
- },
2582
- "516": {
2583
- "name": "fBodyBodyAccJerkMag-std()",
2584
- "min": 1.9303833810860112,
2585
- "max": 284.0912483953395
2586
- },
2587
- "517": {
2588
- "name": "fBodyBodyAccJerkMag-mad()",
2589
- "min": 0.19932218423831533,
2590
- "max": 38.82025582952414
2591
- },
2592
- "518": {
2593
- "name": "fBodyBodyAccJerkMag-max()",
2594
- "min": 15.941594948127134,
2595
- "max": 2302.017688428236
2596
- },
2597
- "519": {
2598
- "name": "fBodyBodyAccJerkMag-min()",
2599
- "min": 0.0033601493941307465,
2600
- "max": 21.493937520942193
2601
- },
2602
- "520": {
2603
- "name": "fBodyBodyAccJerkMag-sma()",
2604
- "min": 0.8557950819817379,
2605
- "max": 129.1131674431919
2606
- },
2607
- "521": {
2608
- "name": "fBodyBodyAccJerkMag-energy()",
2609
- "min": 4.45876522031719,
2610
- "max": 95607.68764769277
2611
- },
2612
- "522": {
2613
- "name": "fBodyBodyAccJerkMag-iqr()",
2614
- "min": 0.39955822966655435,
2615
- "max": 83.84422488373852
2616
- },
2617
- "523": {
2618
- "name": "fBodyBodyAccJerkMag-entropy()",
2619
- "min": 3.1517916114310935,
2620
- "max": 3.857529358482581
2621
- },
2622
- "524": {
2623
- "name": "fBodyBodyAccJerkMag-maxInds",
2624
- "min": 1.0,
2625
- "max": 1.0
2626
- },
2627
- "525": {
2628
- "name": "fBodyBodyAccJerkMag-meanFreq()",
2629
- "min": 13.448312191376981,
2630
- "max": 24.550908936173027
2631
- },
2632
- "526": {
2633
- "name": "fBodyBodyAccJerkMag-skewness()",
2634
- "min": 2.8940049083485673,
2635
- "max": 7.620183610601216
2636
- },
2637
- "527": {
2638
- "name": "fBodyBodyAccJerkMag-kurtosis()",
2639
- "min": 10.860014896384403,
2640
- "max": 57.05847044058592
2641
- },
2642
- "528": {
2643
- "name": "fBodyBodyGyroMag-mean()",
2644
- "min": 0.026278419794193035,
2645
- "max": 11.456083974120057
2646
- },
2647
- "529": {
2648
- "name": "fBodyBodyGyroMag-std()",
2649
- "min": 0.06452001082578006,
2650
- "max": 30.222913970830337
2651
- },
2652
- "530": {
2653
- "name": "fBodyBodyGyroMag-mad()",
2654
- "min": 0.005918658165523781,
2655
- "max": 3.610106590035792
2656
- },
2657
- "531": {
2658
- "name": "fBodyBodyGyroMag-max()",
2659
- "min": 0.5283926306809517,
2660
- "max": 247.79565480267192
2661
- },
2662
- "532": {
2663
- "name": "fBodyBodyGyroMag-min()",
2664
- "min": 5.347162508886825e-05,
2665
- "max": 1.2553463754790897
2666
- },
2667
- "533": {
2668
- "name": "fBodyBodyGyroMag-sma()",
2669
- "min": 0.026278419794193035,
2670
- "max": 11.456083974120057
2671
- },
2672
- "534": {
2673
- "name": "fBodyBodyGyroMag-energy()",
2674
- "min": 0.004939196601034788,
2675
- "max": 1044.666388910302
2676
- },
2677
- "535": {
2678
- "name": "fBodyBodyGyroMag-iqr()",
2679
- "min": 0.01398634448462046,
2680
- "max": 8.705845967295334
2681
- },
2682
- "536": {
2683
- "name": "fBodyBodyGyroMag-entropy()",
2684
- "min": 1.1430647555007023,
2685
- "max": 3.909315800800602
2686
- },
2687
- "537": {
2688
- "name": "fBodyBodyGyroMag-maxInds",
2689
- "min": 1.0,
2690
- "max": 1.0
2691
- },
2692
- "538": {
2693
- "name": "fBodyBodyGyroMag-meanFreq()",
2694
- "min": 3.3273513360826588,
2695
- "max": 23.37855718077422
2696
- },
2697
- "539": {
2698
- "name": "fBodyBodyGyroMag-skewness()",
2699
- "min": 2.349072596994333,
2700
- "max": 7.7671815498214425
2701
- },
2702
- "540": {
2703
- "name": "fBodyBodyGyroMag-kurtosis()",
2704
- "min": 5.331232841102512,
2705
- "max": 58.55674980655295
2706
- },
2707
- "541": {
2708
- "name": "fBodyBodyGyroJerkMag-mean()",
2709
- "min": 0.92556598225241,
2710
- "max": 489.6624743201612
2711
- },
2712
- "542": {
2713
- "name": "fBodyBodyGyroJerkMag-std()",
2714
- "min": 2.168033638652841,
2715
- "max": 976.0134050428912
2716
- },
2717
- "543": {
2718
- "name": "fBodyBodyGyroJerkMag-mad()",
2719
- "min": 0.17451701638424091,
2720
- "max": 127.23532153273048
2721
- },
2722
- "544": {
2723
- "name": "fBodyBodyGyroJerkMag-max()",
2724
- "min": 17.819571490867933,
2725
- "max": 7883.654612253318
2726
- },
2727
- "545": {
2728
- "name": "fBodyBodyGyroJerkMag-min()",
2729
- "min": 0.0021022455958009086,
2730
- "max": 54.08506129799475
2731
- },
2732
- "546": {
2733
- "name": "fBodyBodyGyroJerkMag-sma()",
2734
- "min": 0.92556598225241,
2735
- "max": 489.6624743201612
2736
- },
2737
- "547": {
2738
- "name": "fBodyBodyGyroJerkMag-energy()",
2739
- "min": 5.557042245833149,
2740
- "max": 1176827.1239479724
2741
- },
2742
- "548": {
2743
- "name": "fBodyBodyGyroJerkMag-iqr()",
2744
- "min": 0.3981284982958495,
2745
- "max": 287.3131508716929
2746
- },
2747
- "549": {
2748
- "name": "fBodyBodyGyroJerkMag-entropy()",
2749
- "min": 3.080396163312534,
2750
- "max": 3.8726150126528016
2751
- },
2752
- "550": {
2753
- "name": "fBodyBodyGyroJerkMag-maxInds",
2754
- "min": 1.0,
2755
- "max": 1.0
2756
- },
2757
- "551": {
2758
- "name": "fBodyBodyGyroJerkMag-meanFreq()",
2759
- "min": 12.3877846810103,
2760
- "max": 25.181312775275515
2761
- },
2762
- "552": {
2763
- "name": "fBodyBodyGyroJerkMag-skewness()",
2764
- "min": 2.0634497813112325,
2765
- "max": 7.6502566004961485
2766
- },
2767
- "553": {
2768
- "name": "fBodyBodyGyroJerkMag-kurtosis()",
2769
- "min": 4.6343499328124045,
2770
- "max": 57.36750813293581
2771
- },
2772
- "554": {
2773
- "name": "angle(tBodyAccMean,gravity)",
2774
- "min": 0.03867344557044592,
2775
- "max": 3.119822768812346
2776
- },
2777
- "555": {
2778
- "name": "angle(tBodyAccJerkMean),gravityMean)",
2779
- "min": 0.02039567460261523,
2780
- "max": 3.1207880552139895
2781
- },
2782
- "556": {
2783
- "name": "angle(tBodyGyroMean,gravityMean)",
2784
- "min": 0.003262846088150804,
2785
- "max": 3.1346980802948465
2786
- },
2787
- "557": {
2788
- "name": "angle(tBodyGyroJerkMean,gravityMean)",
2789
- "min": 0.010409743954799154,
2790
- "max": 3.132722940686013
2791
- },
2792
- "558": {
2793
- "name": "angle(X,gravityMean)",
2794
- "min": 0.0028986038760071575,
2795
- "max": 1.972033249755388
2796
- },
2797
- "559": {
2798
- "name": "angle(Y,gravityMean)",
2799
- "min": 0.007190985205403231,
2800
- "max": 2.1154456997791735
2801
- },
2802
- "560": {
2803
- "name": "angle(Z,gravityMean)",
2804
- "min": 0.1742479452264304,
2805
- "max": 2.9184235521275985
2806
- }
2807
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
har_cnn.keras DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:974c4a0507c5ae78f0d98c8aacbc3aad5419863e22bd130f00beea756fba573b
3
- size 2163544
 
 
 
 
src/model_def.py CHANGED
@@ -1,7 +1,7 @@
1
- """Model classes required for deserializing .keras files.
2
 
3
- Must be imported before tf.keras.models.load_model() so that keras
4
- can resolve the registered custom classes.
5
  """
6
 
7
  import keras
@@ -63,90 +63,3 @@ class FeedForwardNetwork(tf.keras.Model):
63
  "dropout_rate": self._dropout_rate,
64
  })
65
  return config
66
-
67
-
68
- @keras.saving.register_keras_serializable()
69
- class Conv1DNetwork(tf.keras.Model):
70
- """1D-CNN for classification on pre-computed feature vectors.
71
-
72
- Architecture: Reshape(561, 1)
73
- β†’ Conv1D(64, k=5) β†’ BN β†’ ReLU β†’ MaxPool(2) β†’ Dropout(0.3)
74
- β†’ Conv1D(128, k=5) β†’ BN β†’ ReLU β†’ MaxPool(2) β†’ Dropout(0.3)
75
- β†’ Conv1D(256, k=3) β†’ BN β†’ ReLU β†’ GlobalAvgPool1D
76
- β†’ Dense(128) β†’ BN β†’ ReLU β†’ Dropout(0.5)
77
- β†’ Dense(6, softmax)
78
- """
79
-
80
- def __init__(
81
- self,
82
- num_features,
83
- num_classes,
84
- dropout_rate=0.3,
85
- **kwargs,
86
- ):
87
- super().__init__(**kwargs)
88
- self._num_features = num_features
89
- self._num_classes = num_classes
90
- self._dropout_rate = dropout_rate
91
-
92
- self.reshape = tf.keras.layers.Reshape((num_features, 1))
93
-
94
- self.conv1 = tf.keras.layers.Conv1D(64, kernel_size=5, padding="same", use_bias=False)
95
- self.bn1 = tf.keras.layers.BatchNormalization()
96
- self.relu1 = tf.keras.layers.ReLU()
97
- self.pool1 = tf.keras.layers.MaxPooling1D(pool_size=2)
98
- self.drop1 = tf.keras.layers.Dropout(dropout_rate)
99
-
100
- self.conv2 = tf.keras.layers.Conv1D(128, kernel_size=5, padding="same", use_bias=False)
101
- self.bn2 = tf.keras.layers.BatchNormalization()
102
- self.relu2 = tf.keras.layers.ReLU()
103
- self.pool2 = tf.keras.layers.MaxPooling1D(pool_size=2)
104
- self.drop2 = tf.keras.layers.Dropout(dropout_rate)
105
-
106
- self.conv3 = tf.keras.layers.Conv1D(256, kernel_size=3, padding="same", use_bias=False)
107
- self.bn3 = tf.keras.layers.BatchNormalization()
108
- self.relu3 = tf.keras.layers.ReLU()
109
- self.gap = tf.keras.layers.GlobalAveragePooling1D()
110
-
111
- self.dense1 = tf.keras.layers.Dense(128, use_bias=False)
112
- self.bn_fc = tf.keras.layers.BatchNormalization()
113
- self.relu_fc = tf.keras.layers.ReLU()
114
- self.drop_fc = tf.keras.layers.Dropout(0.5)
115
-
116
- self.output_layer = tf.keras.layers.Dense(num_classes, activation="softmax")
117
-
118
- def call(self, inputs, training=False):
119
- x = self.reshape(inputs)
120
-
121
- x = self.conv1(x)
122
- x = self.bn1(x, training=training)
123
- x = self.relu1(x)
124
- x = self.pool1(x)
125
- x = self.drop1(x, training=training)
126
-
127
- x = self.conv2(x)
128
- x = self.bn2(x, training=training)
129
- x = self.relu2(x)
130
- x = self.pool2(x)
131
- x = self.drop2(x, training=training)
132
-
133
- x = self.conv3(x)
134
- x = self.bn3(x, training=training)
135
- x = self.relu3(x)
136
- x = self.gap(x)
137
-
138
- x = self.dense1(x)
139
- x = self.bn_fc(x, training=training)
140
- x = self.relu_fc(x)
141
- x = self.drop_fc(x, training=training)
142
-
143
- return self.output_layer(x)
144
-
145
- def get_config(self):
146
- config = super().get_config()
147
- config.update({
148
- "num_features": self._num_features,
149
- "num_classes": self._num_classes,
150
- "dropout_rate": self._dropout_rate,
151
- })
152
- return config
 
1
+ """FeedForwardNetwork definition required for deserializing model.keras.
2
 
3
+ This must be imported before tf.keras.models.load_model() is called so
4
+ that keras can resolve the registered custom class.
5
  """
6
 
7
  import keras
 
63
  "dropout_rate": self._dropout_rate,
64
  })
65
  return config
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/phyphox_app_block.py DELETED
@@ -1,260 +0,0 @@
1
- """Streamlit UI block for Tab 2: Phyphox live sensor upload.
2
-
3
- Call from streamlit_app.py:
4
-
5
- from phyphox_app_block import render_phyphox_tab
6
- with tab2:
7
- render_phyphox_tab(ffn_model, ffn_status, cnn_model, cnn_status)
8
- """
9
-
10
- import json
11
- import os
12
-
13
- import numpy as np
14
- import pandas as pd
15
- import streamlit as st
16
-
17
- from phyphox_pipeline import process_phyphox_files, FS, WINDOW, STEP
18
-
19
- LABEL_MAP = {
20
- 0: "WALKING",
21
- 1: "WALKING_UPSTAIRS",
22
- 2: "WALKING_DOWNSTAIRS",
23
- 3: "SITTING",
24
- 4: "STANDING",
25
- 5: "LAYING",
26
- }
27
-
28
- EXPLANATIONS = {
29
- "LAYING": "Minimal movement detected across all axes: consistent with a stationary horizontal posture.",
30
- "SITTING": "Low dynamic acceleration with stable gravity: stationary upright posture.",
31
- "STANDING": "Similar to sitting with slight postural micro-movements.",
32
- "WALKING": "Rhythmic periodic acceleration on the vertical axis: level walking at normal cadence.",
33
- "WALKING_DOWNSTAIRS": "Downward gravitational shift with higher impact peaks: descending stairs.",
34
- "WALKING_UPSTAIRS": "Elevated vertical acceleration effort: climbing stairs.",
35
- }
36
-
37
- @st.cache_resource
38
- def _load_norm_params(norm_path: str):
39
- """Load per-feature min/max from norm_params.json (keys are string indices 0-560)."""
40
- with open(norm_path) as f:
41
- d = json.load(f)
42
- min_vals = np.array([d[str(i)]["min"] for i in range(561)], dtype=np.float32)
43
- max_vals = np.array([d[str(i)]["max"] for i in range(561)], dtype=np.float32)
44
- return min_vals, max_vals
45
-
46
-
47
- def _normalize(features: np.ndarray, min_vals: np.ndarray, max_vals: np.ndarray) -> np.ndarray:
48
- """Best-effort feature-level min-max scaling to [-1, 1].
49
-
50
- Uses per-feature min/max observed in the UCI HAR training set. This is
51
- an approximation: the UCI pipeline normalises raw signals before feature
52
- extraction, so physical-unit features may fall outside the training range.
53
- Values are clipped before scaling to keep outputs bounded.
54
- """
55
- rng = max_vals - min_vals
56
- rng = np.where(rng < 1e-8, 1.0, rng) # avoid div-by-zero
57
- clipped = np.clip(features, min_vals, max_vals)
58
- return 2.0 * (clipped - min_vals) / rng - 1.0
59
-
60
-
61
- def render_phyphox_tab(
62
- ffn_model, ffn_status: str,
63
- cnn_model, cnn_status: str,
64
- norm_params_path: str,
65
- ) -> None:
66
- st.subheader("Upload Phyphox sensor recording")
67
- with st.expander("How to record and export your data - step by step", expanded=True):
68
- st.markdown("""
69
- **Step 1 - Install Phyphox**
70
- Download the free [Phyphox](https://phyphox.org/) app from the Play Store (Android) or App Store (iOS).
71
-
72
- **Step 2 - Create a new experiment**
73
- - Open the app and tap the **+** icon in the top-right corner
74
- - Select **Add simple experiment**
75
- - In the active sensors list, add **Accelerometer** and **Gyroscope**
76
- - Set the **sensor rate to 50** (Hz) for both
77
- - Give the experiment a title (e.g. "Walking") then tap **Proceed**
78
-
79
- **Step 3 - Configure a timed run**
80
- - Tap the **three-dot menu** in the top-right corner and select **Timed run**
81
- - Set a **recording duration** (15-20 seconds recommended)
82
- - Optionally set a **start delay** (e.g. 5 seconds) so you have time to get into position before recording begins
83
-
84
- **Step 4 - Position the device**
85
- Place your phone in your **trouser pocket** or attach it at your **waist**. This mirrors how the original UCI dataset was collected and gives the most accurate results.
86
-
87
- **Step 5 - Record one activity**
88
- - Press the **play button** to start
89
- - Perform a **single activity continuously** - do not stop and restart mid-recording
90
- - Stay in steady motion for the full duration before stopping
91
-
92
- **Step 6 - Export the data**
93
- - After the recording ends, tap the **three-dot menu** and select **Export data**
94
- - Choose **CSV (comma separated values)** and confirm
95
- - You will receive a **.zip file** - unzip it to find separate CSV files for the **Accelerometer** and **Gyroscope**
96
-
97
- **Step 7 - Upload below**
98
- Upload each CSV file into its corresponding field below, then the pipeline will extract features and classify your activity.
99
-
100
- > ⚠️ **Important:** Each export is a fresh experiment. Do not reuse an old experiment - it will contain data from previous recordings stitched together, which will confuse the classifier.
101
- """)
102
-
103
- if "phyphox_run" not in st.session_state:
104
- st.session_state.phyphox_run = 0
105
-
106
- col1, col2 = st.columns(2)
107
- with col1:
108
- acc_file = st.file_uploader(
109
- "Accelerometer CSV",
110
- type=["csv"],
111
- key=f"acc_upload_{st.session_state.phyphox_run}",
112
- help="Columns: Time (s), X (m/sΒ²), Y (m/sΒ²), Z (m/sΒ²)",
113
- )
114
- with col2:
115
- gyro_file = st.file_uploader(
116
- "Gyroscope CSV",
117
- type=["csv"],
118
- key=f"gyro_upload_{st.session_state.phyphox_run}",
119
- help="Columns: Time (s), X (rad/s), Y (rad/s), Z (rad/s)",
120
- )
121
-
122
- if acc_file is not None or gyro_file is not None:
123
- if st.button("Clear / new recording"):
124
- st.session_state.phyphox_run += 1
125
- st.rerun()
126
-
127
- if acc_file is None or gyro_file is None:
128
- st.info("Upload both files to continue.")
129
- return
130
-
131
- try:
132
- import io as _io
133
- _raw = acc_file.read()
134
- acc_file.seek(0)
135
- _df = pd.read_csv(_io.StringIO(_raw.decode("utf-8") if isinstance(_raw, bytes) else _raw))
136
- _df.columns = [c.strip('"').strip() for c in _df.columns]
137
- _num_cols = [c for c in _df.columns if c != "Time (s)"]
138
- _mag = float((_df[_num_cols].apply(pd.to_numeric, errors="coerce") ** 2).sum(axis=1).mean() ** 0.5)
139
- if _mag < 3.0:
140
- st.error(
141
- f"Mean accelerometer magnitude is only {_mag:.2f} m/sΒ² β€” this looks like "
142
- "'Acceleration **without** g'. Please re-record using **'Acceleration (with g)'** "
143
- "so gravity is included in the signal."
144
- )
145
- return
146
- else:
147
- st.caption(f"Signal check: mean magnitude = {_mag:.2f} m/sΒ² (gravity present)")
148
-
149
- # Detect Phyphox pause/resume sessions: large gaps in the time column
150
- # mean different activities were stitched together in one CSV.
151
- _t = pd.to_numeric(_df["Time (s)"], errors="coerce").dropna().values
152
- _gaps = np.diff(_t)
153
- _expected_dt = np.median(_gaps)
154
- _session_breaks = int(np.sum(_gaps > _expected_dt * 20))
155
- if _session_breaks > 0:
156
- st.warning(
157
- f"**{_session_breaks} session break(s) detected** in this recording. "
158
- "Phyphox accumulates data across pause/resume cycles β€” your CSV contains "
159
- f"{_session_breaks + 1} separate recordings stitched together. "
160
- "Only windows from a single activity will predict correctly. "
161
- "To fix: tap the **trash icon** in Phyphox to clear data before each new recording."
162
- )
163
- except Exception:
164
- pass
165
-
166
- try:
167
- with st.spinner("Extracting 561 features from sensor data…"):
168
- features, pipeline_warnings = process_phyphox_files(acc_file, gyro_file)
169
- except ValueError as err:
170
- st.error(str(err))
171
- return
172
- except Exception as err:
173
- st.error(f"Unexpected error during feature extraction: {err}")
174
- return
175
-
176
- for w in pipeline_warnings:
177
- st.warning(w)
178
-
179
- n_windows = len(features)
180
- duration_s = (n_windows - 1) * (STEP / FS) + (WINDOW / FS)
181
-
182
- c1, c2, c3 = st.columns(3)
183
- c1.metric("Windows extracted", n_windows)
184
- c2.metric("Approx. duration", f"{duration_s:.1f} s")
185
- c3.metric("Features per window", 561)
186
- st.caption(
187
- f"Each window = {WINDOW / FS:.2f} s at {FS} Hz Β· "
188
- f"50% overlap ({STEP / FS:.2f} s hop)"
189
- )
190
-
191
- if os.path.exists(norm_params_path):
192
- min_vals, max_vals = _load_norm_params(norm_params_path)
193
- features = _normalize(features, min_vals, max_vals)
194
- st.caption(
195
- "Accelerometer converted from m/sΒ² to g units to match UCI training data. "
196
- "Features scaled to [βˆ’1, 1] using physical-unit min/max computed from the "
197
- "UCI HAR training set raw inertial signals."
198
- )
199
- else:
200
- st.warning(
201
- "norm_params.json not found: features are in physical units. "
202
- "Predictions will be unreliable until normalisation is applied."
203
- )
204
-
205
- if ffn_status != "ready" and cnn_status != "ready":
206
- st.warning("Models not loaded: cannot predict yet.")
207
- return
208
-
209
- st.markdown("---")
210
- st.subheader("Model comparison")
211
-
212
- left, right = st.columns(2)
213
-
214
- def _render_model_col(col, model, status, name):
215
- with col:
216
- st.markdown(f"#### {name}")
217
- if status != "ready":
218
- st.error(f"Model not loaded: {status}")
219
- return
220
-
221
- probs_all = model.predict(features, verbose=0) # (n_windows, 6)
222
- pred_labels = [LABEL_MAP[int(np.argmax(p))] for p in probs_all]
223
-
224
- from collections import Counter
225
- # Skip first and last window for the final vote: these are typically
226
- # contaminated by recording start/stop transients (person not yet
227
- # in full motion, or the gravity filter still warming up).
228
- core = probs_all[1:-1] if n_windows > 3 else probs_all
229
- core_labels = [LABEL_MAP[int(np.argmax(p))] for p in core]
230
- vote = Counter(core_labels).most_common(1)[0][0]
231
- avg_conf = float(np.mean(np.max(core, axis=1))) * 100
232
-
233
- st.success(f"**{vote}** Β· {avg_conf:.1f}% avg confidence")
234
- st.markdown(f"_{EXPLANATIONS[vote]}_")
235
-
236
- if n_windows > 1:
237
- with st.expander(f"Per-window breakdown ({n_windows} windows)"):
238
- rows = []
239
- for i, (p, label) in enumerate(zip(probs_all, pred_labels)):
240
- t_start = i * STEP / FS
241
- is_edge = (i == 0 or i == n_windows - 1) and n_windows > 3
242
- rows.append({
243
- "Window": i + 1,
244
- "Time (s)": f"{t_start:.1f}–{t_start + WINDOW/FS:.1f}",
245
- "Prediction": label + (" *" if is_edge else ""),
246
- "Confidence": f"{float(np.max(p))*100:.1f}%",
247
- })
248
- st.dataframe(pd.DataFrame(rows), use_container_width=True)
249
- if n_windows > 3:
250
- st.caption("* Edge windows excluded from overall vote (recording start/stop transient).")
251
-
252
- mean_probs = core.mean(axis=0)
253
- st.markdown("**Average confidence across all classes**")
254
- st.bar_chart(pd.DataFrame(
255
- {"Confidence (%)": [float(mean_probs[i]) * 100 for i in range(6)]},
256
- index=[LABEL_MAP[i] for i in range(6)],
257
- ))
258
-
259
- _render_model_col(left, ffn_model, ffn_status, "Feedforward Network")
260
- _render_model_col(right, cnn_model, cnn_status, "1D Convolutional Network")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/phyphox_pipeline.py DELETED
@@ -1,514 +0,0 @@
1
- """Phyphox sensor pipeline for Human Activity Recognition.
2
-
3
- Converts raw Phyphox accelerometer + gyroscope CSV exports into the
4
- 561-feature vector expected by the UCI HAR classifier.
5
-
6
- Feature order matches features.txt exactly:
7
- 1-200 : time-domain 3-axis signals (5 signals Γ— 40 features)
8
- 201-265 : time-domain magnitudes (5 signals Γ— 13 features)
9
- 266-502 : frequency-domain 3-axis (3 signals Γ— 79 features)
10
- 503-554 : frequency-domain magnitudes (4 signals Γ— 13 features)
11
- 555-561 : angle features (7 features)
12
- """
13
-
14
- import io
15
- import numpy as np
16
- import pandas as pd
17
- from scipy import signal as sp_signal
18
- from scipy.stats import skew, kurtosis as sp_kurtosis
19
-
20
- FS = 50 # target sampling rate Hz
21
- WINDOW = 128 # samples per window (2.56 s)
22
- STEP = 64 # hop size β€” 50% overlap
23
- AR_ORDER = 4 # Burg AR model order
24
-
25
- # 14 frequency band pairs (1-indexed, inclusive) applied per axis
26
- BANDS = [
27
- (1, 8), (9, 16), (17, 24), (25, 32), (33, 40), (41, 48),
28
- (49, 56), (57, 64), (1, 16), (17, 32), (33, 48), (49, 64),
29
- (1, 24), (25, 48),
30
- ]
31
-
32
- ACC_COLS = ["Time (s)", "X (m/s^2)", "Y (m/s^2)", "Z (m/s^2)"]
33
- GYRO_COLS = ["Time (s)", "X (rad/s)", "Y (rad/s)", "Z (rad/s)"]
34
-
35
-
36
- def _parse_csv(file_obj, expected_cols: list) -> pd.DataFrame:
37
- """Parse a Phyphox CSV export and validate required columns.
38
-
39
- Args:
40
- file_obj: file-like object (bytes or str) from Phyphox export
41
- expected_cols: list of required column names
42
-
43
- Returns:
44
- DataFrame with numeric data, NaN rows dropped
45
-
46
- Raises:
47
- ValueError: if columns are missing or file cannot be parsed
48
- """
49
- try:
50
- raw = file_obj.read()
51
- if isinstance(raw, bytes):
52
- raw = raw.decode("utf-8")
53
- df = pd.read_csv(io.StringIO(raw), float_precision="high")
54
- except Exception as exc:
55
- raise ValueError(f"Cannot parse CSV: {exc}") from exc
56
-
57
- df.columns = [c.strip('"').strip() for c in df.columns]
58
- missing = [c for c in expected_cols if c not in df.columns]
59
- if missing:
60
- raise ValueError(
61
- f"Missing columns {missing}. Found: {list(df.columns)}. "
62
- "Check you uploaded the correct Phyphox CSV (Accelerometer or Gyroscope)."
63
- )
64
- return df[expected_cols].apply(pd.to_numeric, errors="coerce").dropna()
65
-
66
-
67
- def _butter_lp(data: np.ndarray, cutoff: float, fs: float = FS, order: int = 3) -> np.ndarray:
68
- """Zero-phase Butterworth low-pass filter applied along axis 0.
69
-
70
- Args:
71
- data: 1-D or 2-D array
72
- cutoff: cutoff frequency in Hz
73
- fs: sampling rate in Hz
74
- order: filter order
75
-
76
- Returns:
77
- Filtered array, same shape as input
78
- """
79
- b, a = sp_signal.butter(order, cutoff / (fs / 2.0), btype="low")
80
- # Use maximum safe padding β€” critical for low cutoffs (e.g. 0.3 Hz needs
81
- # ~167 samples to settle; scipy's default 9-sample pad is far too short).
82
- padlen = min(len(data) - 1, max(3 * int(fs / cutoff), 9))
83
- if data.ndim == 1:
84
- return sp_signal.filtfilt(b, a, data, padlen=padlen)
85
- return np.column_stack(
86
- [sp_signal.filtfilt(b, a, data[:, i], padlen=padlen) for i in range(data.shape[1])]
87
- )
88
-
89
-
90
- def _median_filt(data: np.ndarray, k: int = 3) -> np.ndarray:
91
- """Median filter applied along axis 0.
92
-
93
- Args:
94
- data: 1-D or 2-D array
95
- k: kernel size (must be odd)
96
-
97
- Returns:
98
- Filtered array, same shape as input
99
- """
100
- if data.ndim == 1:
101
- return sp_signal.medfilt(data, kernel_size=k)
102
- return np.column_stack(
103
- [sp_signal.medfilt(data[:, i], kernel_size=k) for i in range(data.shape[1])]
104
- )
105
-
106
-
107
- def _burg_ar(x: np.ndarray, order: int = AR_ORDER) -> np.ndarray:
108
- """Burg method autoregressive coefficients.
109
-
110
- Implements the standard Burg recursion with Levinson-Durbin update.
111
- Mean-centres the signal before fitting.
112
-
113
- Args:
114
- x: 1-D signal array
115
- order: AR model order
116
-
117
- Returns:
118
- Array of `order` AR coefficients [a1, a2, ..., ap]
119
- """
120
- x = np.asarray(x, dtype=np.float64)
121
- x = x - x.mean()
122
- N = len(x)
123
- ef = x.copy()
124
- eb = x.copy()
125
- a = np.zeros(order)
126
-
127
- for m in range(1, order + 1):
128
- f = ef[m:].copy()
129
- b = eb[m - 1: N - 1].copy()
130
-
131
- denom = np.dot(f, f) + np.dot(b, b) + 1e-12
132
- km = -2.0 * np.dot(f, b) / denom
133
-
134
- # Levinson-Durbin update of AR polynomial
135
- a_prev = a[:m - 1].copy()
136
- for j in range(m - 1):
137
- a[j] = a_prev[j] + km * a_prev[m - 2 - j]
138
- a[m - 1] = km
139
-
140
- # Update forward/backward prediction errors
141
- ef[m:] = f + km * b
142
- eb[m - 1: N - 1] = b + km * f
143
-
144
- return a
145
-
146
-
147
- def _entropy(x: np.ndarray) -> float:
148
- """Normalised signal entropy via absolute-value probability distribution.
149
-
150
- Args:
151
- x: 1-D array
152
-
153
- Returns:
154
- Entropy value (>= 0)
155
- """
156
- total = np.abs(x).sum()
157
- if total < 1e-12:
158
- return 0.0
159
- p = np.abs(x) / total
160
- p = p[p > 0]
161
- return float(-np.sum(p * np.log(p)))
162
-
163
-
164
- def _bands_energy(fft_mag: np.ndarray) -> np.ndarray:
165
- """Energy in each of the 14 UCI HAR frequency bands (1-indexed, inclusive).
166
-
167
- Args:
168
- fft_mag: FFT magnitude array, must contain at least 64 values
169
-
170
- Returns:
171
- Array of 14 energy values
172
- """
173
- m = fft_mag[:64]
174
- return np.array([float(np.sum(m[s - 1: e] ** 2)) for s, e in BANDS])
175
-
176
-
177
- def _safe_corr(a: np.ndarray, b: np.ndarray) -> float:
178
- """Pearson correlation, returns 0.0 if either signal is constant.
179
-
180
- Args:
181
- a: first 1-D array
182
- b: second 1-D array
183
-
184
- Returns:
185
- Correlation coefficient in [-1, 1]
186
- """
187
- if a.std() < 1e-10 or b.std() < 1e-10:
188
- return 0.0
189
- r = np.corrcoef(a, b)[0, 1]
190
- return 0.0 if not np.isfinite(r) else float(r)
191
-
192
-
193
- def _angle(u: np.ndarray, v: np.ndarray) -> float:
194
- """Angle in radians between two 3-D vectors.
195
-
196
- Args:
197
- u: first vector, shape (3,)
198
- v: second vector, shape (3,)
199
-
200
- Returns:
201
- Angle in radians, or 0.0 if either vector is zero
202
- """
203
- un, vn = np.linalg.norm(u), np.linalg.norm(v)
204
- if un < 1e-10 or vn < 1e-10:
205
- return 0.0
206
- return float(np.arccos(np.clip(np.dot(u, v) / (un * vn), -1.0, 1.0)))
207
-
208
-
209
- def _t3ax(sig: np.ndarray) -> np.ndarray:
210
- """40 time-domain features from a 3-axis signal (N, 3).
211
-
212
- Order: meanΓ—3, stdΓ—3, madΓ—3, maxΓ—3, minΓ—3, sma,
213
- energyΓ—3, iqrΓ—3, entropyΓ—3, arCoeffΓ—12, correlationΓ—3
214
- """
215
- N = len(sig)
216
- x, y, z = sig[:, 0], sig[:, 1], sig[:, 2]
217
- out = []
218
-
219
- out += [x.mean(), y.mean(), z.mean()]
220
- out += [x.std(), y.std(), z.std()]
221
- out += [
222
- float(np.median(np.abs(x - np.median(x)))),
223
- float(np.median(np.abs(y - np.median(y)))),
224
- float(np.median(np.abs(z - np.median(z)))),
225
- ]
226
- out += [x.max(), y.max(), z.max()]
227
- out += [x.min(), y.min(), z.min()]
228
- out += [float((np.abs(x) + np.abs(y) + np.abs(z)).sum() / N)] # sma
229
- out += [float(np.sum(x ** 2) / N), float(np.sum(y ** 2) / N), float(np.sum(z ** 2) / N)]
230
- out += [
231
- float(np.percentile(x, 75) - np.percentile(x, 25)),
232
- float(np.percentile(y, 75) - np.percentile(y, 25)),
233
- float(np.percentile(z, 75) - np.percentile(z, 25)),
234
- ]
235
- out += [_entropy(x), _entropy(y), _entropy(z)]
236
- out += _burg_ar(x).tolist()
237
- out += _burg_ar(y).tolist()
238
- out += _burg_ar(z).tolist()
239
- out += [_safe_corr(x, y), _safe_corr(x, z), _safe_corr(y, z)]
240
-
241
- return np.array(out, dtype=np.float64) # 40 values
242
-
243
-
244
- def _tmag(sig: np.ndarray) -> np.ndarray:
245
- """13 time-domain features from a 1-D magnitude signal.
246
-
247
- Order: mean, std, mad, max, min, sma, energy, iqr, entropy, arCoeffΓ—4
248
- """
249
- N = len(sig)
250
- out = [
251
- float(sig.mean()),
252
- float(sig.std()),
253
- float(np.median(np.abs(sig - np.median(sig)))),
254
- float(sig.max()),
255
- float(sig.min()),
256
- float(np.abs(sig).sum() / N), # sma (1-D)
257
- float(np.sum(sig ** 2) / N), # energy
258
- float(np.percentile(sig, 75) - np.percentile(sig, 25)),
259
- _entropy(sig),
260
- ]
261
- out += _burg_ar(sig).tolist()
262
- return np.array(out, dtype=np.float64) # 13 values
263
-
264
-
265
- def _f3ax(sig: np.ndarray) -> np.ndarray:
266
- """79 frequency-domain features from a 3-axis signal (N, 3).
267
-
268
- Order: meanΓ—3, stdΓ—3, madΓ—3, maxΓ—3, minΓ—3, sma,
269
- energyΓ—3, iqrΓ—3, entropyΓ—3,
270
- maxIndsΓ—3, meanFreqΓ—3,
271
- (skewness, kurtosis)Γ—3 interleaved,
272
- bandsEnergyΓ—14 per axis (Γ—3 axes = 42)
273
- """
274
- x, y, z = sig[:, 0], sig[:, 1], sig[:, 2]
275
-
276
- def _fft(s):
277
- return np.abs(np.fft.rfft(s))[:64]
278
-
279
- fx, fy, fz = _fft(x), _fft(y), _fft(z)
280
- bins = np.arange(1, 65, dtype=np.float64) # 1-indexed bin numbers
281
-
282
- def _mfreq(fm):
283
- t = fm.sum()
284
- return float(np.dot(bins[:len(fm)], fm) / t) if t > 1e-12 else 0.0
285
-
286
- def _maxinds(fm):
287
- return float(np.argmax(fm) + 1) # 1-indexed
288
-
289
- out = []
290
- out += [fx.mean(), fy.mean(), fz.mean()]
291
- out += [fx.std(), fy.std(), fz.std()]
292
- out += [
293
- float(np.median(np.abs(fx - np.median(fx)))),
294
- float(np.median(np.abs(fy - np.median(fy)))),
295
- float(np.median(np.abs(fz - np.median(fz)))),
296
- ]
297
- out += [fx.max(), fy.max(), fz.max()]
298
- out += [fx.min(), fy.min(), fz.min()]
299
- n = len(fx)
300
- out += [float((fx + fy + fz).sum() / n)] # sma of FFT mags
301
- out += [float(np.sum(fx ** 2) / n), float(np.sum(fy ** 2) / n), float(np.sum(fz ** 2) / n)]
302
- out += [
303
- float(np.percentile(fx, 75) - np.percentile(fx, 25)),
304
- float(np.percentile(fy, 75) - np.percentile(fy, 25)),
305
- float(np.percentile(fz, 75) - np.percentile(fz, 25)),
306
- ]
307
- out += [_entropy(fx), _entropy(fy), _entropy(fz)]
308
- out += [_maxinds(fx), _maxinds(fy), _maxinds(fz)]
309
- out += [_mfreq(fx), _mfreq(fy), _mfreq(fz)]
310
- # skewness/kurtosis interleaved per axis (skX,kurX, skY,kurY, skZ,kurZ)
311
- out += [float(skew(fx)), float(sp_kurtosis(fx))]
312
- out += [float(skew(fy)), float(sp_kurtosis(fy))]
313
- out += [float(skew(fz)), float(sp_kurtosis(fz))]
314
- out += _bands_energy(fx).tolist()
315
- out += _bands_energy(fy).tolist()
316
- out += _bands_energy(fz).tolist()
317
-
318
- return np.array(out, dtype=np.float64) # 79 values
319
-
320
-
321
- def _fmag(sig: np.ndarray) -> np.ndarray:
322
- """13 frequency-domain features from a 1-D magnitude signal.
323
-
324
- Order: mean, std, mad, max, min, sma, energy, iqr, entropy,
325
- maxInds, meanFreq, skewness, kurtosis
326
- """
327
- fm = np.abs(np.fft.rfft(sig))[:64]
328
- n = len(fm)
329
- bins = np.arange(1, n + 1, dtype=np.float64)
330
- total = fm.sum()
331
- out = [
332
- float(fm.mean()),
333
- float(fm.std()),
334
- float(np.median(np.abs(fm - np.median(fm)))),
335
- float(fm.max()),
336
- float(fm.min()),
337
- float(np.abs(fm).sum() / n),
338
- float(np.sum(fm ** 2) / n),
339
- float(np.percentile(fm, 75) - np.percentile(fm, 25)),
340
- _entropy(fm),
341
- float(np.argmax(fm) + 1), # maxInds (1-indexed)
342
- float(np.dot(bins, fm) / total) if total > 1e-12 else 0.0, # meanFreq
343
- float(skew(fm)),
344
- float(sp_kurtosis(fm)),
345
- ]
346
- return np.array(out, dtype=np.float64) # 13 values
347
-
348
-
349
- def _window_features(
350
- body_acc: np.ndarray,
351
- grav_acc: np.ndarray,
352
- body_jerk: np.ndarray,
353
- gyro: np.ndarray,
354
- gyro_jerk: np.ndarray,
355
- ) -> np.ndarray:
356
- """Extract all 561 features from one pre-processed window.
357
-
358
- Args:
359
- body_acc: body linear acceleration (128, 3) m/sΒ²
360
- grav_acc: gravity component (128, 3) m/sΒ²
361
- body_jerk: body jerk (127, 3) m/sΒ³
362
- gyro: angular velocity (128, 3) rad/s
363
- gyro_jerk: gyro jerk (127, 3) rad/sΒ²
364
-
365
- Returns:
366
- 1-D array of 561 features
367
- """
368
- # Magnitudes
369
- ba_mag = np.linalg.norm(body_acc, axis=1)
370
- ga_mag = np.linalg.norm(grav_acc, axis=1)
371
- bj_mag = np.linalg.norm(body_jerk, axis=1)
372
- gy_mag = np.linalg.norm(gyro, axis=1)
373
- gj_mag = np.linalg.norm(gyro_jerk, axis=1)
374
-
375
- parts = []
376
-
377
- # Time 3-axis (5 Γ— 40 = 200)
378
- for sig in [body_acc, grav_acc, body_jerk, gyro, gyro_jerk]:
379
- parts.append(_t3ax(sig))
380
-
381
- # Time magnitudes (5 Γ— 13 = 65)
382
- for mag in [ba_mag, ga_mag, bj_mag, gy_mag, gj_mag]:
383
- parts.append(_tmag(mag))
384
-
385
- # Freq 3-axis (3 Γ— 79 = 237)
386
- for sig in [body_acc, body_jerk, gyro]:
387
- parts.append(_f3ax(sig))
388
-
389
- # Freq magnitudes (4 Γ— 13 = 52)
390
- for mag in [ba_mag, bj_mag, gy_mag, gj_mag]:
391
- parts.append(_fmag(mag))
392
-
393
- # Angle features (7)
394
- ba_mean = body_acc.mean(axis=0)
395
- ga_mean = grav_acc.mean(axis=0)
396
- bj_mean = body_jerk.mean(axis=0)
397
- gy_mean = gyro.mean(axis=0)
398
- gj_mean = gyro_jerk.mean(axis=0)
399
-
400
- parts.append(np.array([
401
- _angle(ba_mean, ga_mean),
402
- _angle(bj_mean, ga_mean),
403
- _angle(gy_mean, ga_mean),
404
- _angle(gj_mean, ga_mean),
405
- _angle(np.array([1.0, 0.0, 0.0]), ga_mean),
406
- _angle(np.array([0.0, 1.0, 0.0]), ga_mean),
407
- _angle(np.array([0.0, 0.0, 1.0]), ga_mean),
408
- ]))
409
-
410
- result = np.concatenate(parts)
411
- assert result.shape == (561,), f"Feature count error: got {result.shape[0]}, expected 561"
412
- return result
413
-
414
-
415
- def process_phyphox_files(
416
- acc_file,
417
- gyro_file,
418
- ) -> tuple:
419
- """Convert Phyphox CSV exports to (n_windows, 561) feature array.
420
-
421
- Pipeline:
422
- 1. Parse + validate both CSVs
423
- 2. Convert accelerometer from m/sΒ² to g (Γ· 9.80665) to match UCI training units
424
- 3. Interpolate onto common 50 Hz grid
425
- 4. Segment: 128-sample windows, 64-sample hop (50% overlap)
426
- 5. Per window: median filter β†’ 20 Hz Butterworth β†’ gravity separation
427
- at 0.3 Hz β†’ jerk β†’ magnitudes β†’ 561 features
428
-
429
- Args:
430
- acc_file: file-like object β€” Phyphox Accelerometer CSV
431
- (columns: Time (s), X (m/s^2), Y (m/s^2), Z (m/s^2))
432
- gyro_file: file-like object β€” Phyphox Gyroscope CSV
433
- (columns: Time (s), X (rad/s), Y (rad/s), Z (rad/s))
434
-
435
- Returns:
436
- Tuple of:
437
- np.ndarray shape (n_windows, 561) β€” raw (un-normalised) features
438
- list[str] β€” warning messages
439
-
440
- Raises:
441
- ValueError: invalid format, wrong columns, or < 3 s of data
442
- """
443
- warnings: list = []
444
-
445
- acc_df = _parse_csv(acc_file, ACC_COLS)
446
- gyro_df = _parse_csv(gyro_file, GYRO_COLS)
447
-
448
- acc_t = acc_df["Time (s)"].values
449
- acc_xyz = acc_df[["X (m/s^2)", "Y (m/s^2)", "Z (m/s^2)"]].values / 9.80665 # m/sΒ² β†’ g
450
- gyro_t = gyro_df["Time (s)"].values
451
- gyro_xyz = gyro_df[["X (rad/s)", "Y (rad/s)", "Z (rad/s)"]].values
452
-
453
- t0 = max(acc_t[0], gyro_t[0])
454
- t1 = min(acc_t[-1], gyro_t[-1])
455
- duration = t1 - t0
456
-
457
- if duration < 3.0:
458
- raise ValueError(
459
- f"Recording is {duration:.2f} s β€” minimum 3 seconds required. "
460
- "Hold the phone still or walk for at least 3 seconds before exporting."
461
- )
462
-
463
- t_grid = np.arange(t0, t1, 1.0 / FS)
464
- am = (acc_t >= t0) & (acc_t <= t1)
465
- gm = (gyro_t >= t0) & (gyro_t <= t1)
466
-
467
- acc_50 = np.column_stack(
468
- [np.interp(t_grid, acc_t[am], acc_xyz[am, i]) for i in range(3)]
469
- )
470
- gyro_50 = np.column_stack(
471
- [np.interp(t_grid, gyro_t[gm], gyro_xyz[gm, i]) for i in range(3)]
472
- )
473
-
474
- n = min(len(acc_50), len(gyro_50))
475
- acc_50, gyro_50 = acc_50[:n], gyro_50[:n]
476
-
477
- n_windows = max(0, (n - WINDOW) // STEP + 1)
478
- if n_windows == 0:
479
- raise ValueError(
480
- f"Only {n} samples ({n / FS:.1f} s) after alignment β€” "
481
- f"need at least {WINDOW} samples ({WINDOW / FS:.1f} s)."
482
- )
483
-
484
- if duration > 60:
485
- warnings.append(f"Long recording ({duration:.0f} s) β€” {n_windows} windows extracted.")
486
-
487
- # Apply noise filters to the full signal before windowing.
488
- acc_50 = _butter_lp(_median_filt(acc_50), cutoff=20.0)
489
- gyro_50 = _butter_lp(_median_filt(gyro_50), cutoff=20.0)
490
-
491
- all_features = []
492
- dt = 1.0 / FS
493
-
494
- for start in range(0, n - WINDOW + 1, STEP):
495
- end = start + WINDOW
496
- aw = acc_50[start:end] # (128, 3)
497
- gw = gyro_50[start:end] # (128, 3)
498
-
499
- # Gravity separation: window mean as gravity estimate.
500
- # The UCI pipeline used a 0.3 Hz LP on a full continuous recording.
501
- # That filter needs ~167 samples to settle; a 10-second clip gives only
502
- # ~500 samples total, so the filter corrupts all but the central window.
503
- # The window mean is equivalent for symmetric activities (oscillations
504
- # cancel over a stride cycle) and exact for static activities.
505
- grav = np.tile(aw.mean(axis=0), (WINDOW, 1))
506
- body = aw - grav
507
-
508
- # Jerk: finite difference β†’ (127, 3)
509
- body_jerk = np.diff(body, axis=0) / dt
510
- gyro_jerk = np.diff(gw, axis=0) / dt
511
-
512
- all_features.append(_window_features(body, grav, body_jerk, gw, gyro_jerk))
513
-
514
- return np.array(all_features), warnings
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/streamlit_app.py CHANGED
@@ -1,13 +1,8 @@
1
- import os
2
  import streamlit as st
3
  import numpy as np
4
  import pandas as pd
5
 
6
- # Paths anchored to the repo root regardless of working directory
7
- _SRC_DIR = os.path.dirname(os.path.abspath(__file__))
8
- _REPO_ROOT = os.path.dirname(_SRC_DIR)
9
- _SAMPLES_PATH = os.path.join(_REPO_ROOT, "data", "samples.csv")
10
- _NORM_PATH = os.path.join(_REPO_ROOT, "data", "norm_params.json")
11
 
12
  LABEL_MAP = {
13
  0: "WALKING",
@@ -19,41 +14,35 @@ LABEL_MAP = {
19
  }
20
 
21
  EXPLANATIONS = {
22
- "LAYING": "Minimal movement detected across all axes with low acceleration magnitude: consistent with a stationary horizontal posture.",
23
  "SITTING": "Low dynamic acceleration with a stable gravity component suggests a stationary upright posture with little body movement.",
24
  "STANDING": "Similar to sitting but with slight postural micro-movements. This class is often the hardest to distinguish from sitting.",
25
- "WALKING": "Rhythmic periodic acceleration with peaks on the vertical axis: consistent with level walking at normal cadence.",
26
  "WALKING_DOWNSTAIRS": "Downward gravitational shift with higher impact peaks characteristic of descending a staircase.",
27
- "WALKING_UPSTAIRS": "Elevated vertical acceleration effort with upward body displacement: consistent with climbing stairs.",
28
  }
29
 
 
 
30
  @st.cache_resource
31
- def load_model(filename: str):
32
  try:
33
- from huggingface_hub import hf_hub_download
34
  import tensorflow as tf
35
- from model_def import FeedForwardNetwork, Conv1DNetwork # noqa: F401
36
-
37
- model_path = hf_hub_download(
38
- repo_id="Group3DActRecog/actRecog",
39
- filename=filename,
40
- repo_type="space",
41
- )
42
  model = tf.keras.models.load_model(
43
- model_path,
44
- custom_objects={
45
- "FeedForwardNetwork": FeedForwardNetwork,
46
- "Conv1DNetwork": Conv1DNetwork,
47
- },
48
  )
49
  return model, "ready"
50
  except Exception as e:
51
  return None, f"error: {e}"
52
 
 
 
53
  st.set_page_config(
54
  page_title="Human Activity Recognition",
55
  page_icon="πŸƒ",
56
- layout="wide",
57
  )
58
 
59
  st.title("Human Activity Recognition")
@@ -63,6 +52,8 @@ st.markdown(
63
  "Classifies six daily activities from accelerometer and gyroscope readings."
64
  )
65
 
 
 
66
  with st.sidebar:
67
  st.header("About")
68
  st.markdown("""
@@ -74,29 +65,25 @@ with st.sidebar:
74
  **Classes:** 6 activities of daily living
75
  """)
76
  st.markdown("---")
77
- st.markdown("**Models**")
78
- st.markdown("""
79
- **FFN**: Feedforward Network
80
- Dense(512) β†’ Dense(256) β†’ Dense(128)
81
- BatchNorm + Dropout(0.3) per layer
82
-
83
- **CNN**: 1D Convolutional Network
84
- Conv1D(64) β†’ Conv1D(128) β†’ Conv1D(256)
85
- GlobalAvgPool β†’ Dense(128)
86
- """)
87
  st.markdown("---")
 
 
 
88
 
89
- ffn_model, ffn_status = load_model("model.keras")
90
- cnn_model, cnn_status = load_model("har_cnn.keras")
91
 
92
- if ffn_status != "ready" or cnn_status != "ready":
93
- if ffn_status != "ready":
94
- st.warning(f"FFN not loaded: {ffn_status}")
95
- if cnn_status != "ready":
96
- st.warning(f"CNN not loaded: {cnn_status}")
97
 
98
  tab1, tab2 = st.tabs(["Select a Sample", "Upload Phyphox CSV"])
99
 
 
 
100
  with tab1:
101
  st.subheader("Select a pre-loaded test sample")
102
  st.caption(
@@ -105,11 +92,14 @@ with tab1:
105
  )
106
 
107
  try:
108
- samples_df = pd.read_csv(_SAMPLES_PATH)
109
- feature_cols = [c for c in samples_df.columns if c not in ["Activity", "subject"]]
 
 
 
110
 
111
  sample_labels = [
112
- f"Sample {i+1} : {row['Activity']}"
113
  for i, (_, row) in enumerate(samples_df.iterrows())
114
  ]
115
 
@@ -126,57 +116,73 @@ with tab1:
126
  st.metric("Feature count", len(feature_vector))
127
 
128
  if st.button("Classify this sample", type="primary"):
129
- if ffn_status != "ready" or cnn_status != "ready":
130
- st.error("One or both models not loaded: cannot predict yet.")
131
  else:
132
  arr = feature_vector.reshape(1, -1)
 
 
 
 
 
133
 
134
- ffn_probs = ffn_model.predict(arr, verbose=0)[0]
135
- cnn_probs = cnn_model.predict(arr, verbose=0)[0]
136
 
137
- ffn_idx = int(np.argmax(ffn_probs))
138
- cnn_idx = int(np.argmax(cnn_probs))
139
- ffn_label = LABEL_MAP[ffn_idx]
140
- cnn_label = LABEL_MAP[cnn_idx]
141
- ffn_conf = float(ffn_probs[ffn_idx]) * 100
142
- cnn_conf = float(cnn_probs[cnn_idx]) * 100
 
 
 
143
 
144
- st.markdown("---")
145
- st.subheader("Model comparison")
146
-
147
- left, right = st.columns(2)
148
-
149
- with left:
150
- st.markdown("#### Feedforward Network")
151
- if ffn_label == true_label:
152
- st.success(f"**{ffn_label}** Β· {ffn_conf:.1f}% confidence Β· βœ“ Correct")
153
- else:
154
- st.error(f"**{ffn_label}** Β· {ffn_conf:.1f}% confidence Β· βœ— Incorrect (true: {true_label})")
155
-
156
- st.markdown(f"_{EXPLANATIONS[ffn_label]}_")
157
- st.markdown("**Confidence across all classes**")
158
- st.bar_chart(pd.DataFrame(
159
- {"Confidence (%)": [float(ffn_probs[i]) * 100 for i in range(6)]},
160
- index=[LABEL_MAP[i] for i in range(6)]
161
- ))
162
-
163
- with right:
164
- st.markdown("#### 1D Convolutional Network")
165
- if cnn_label == true_label:
166
- st.success(f"**{cnn_label}** Β· {cnn_conf:.1f}% confidence Β· βœ“ Correct")
167
- else:
168
- st.error(f"**{cnn_label}** Β· {cnn_conf:.1f}% confidence Β· βœ— Incorrect (true: {true_label})")
169
-
170
- st.markdown(f"_{EXPLANATIONS[cnn_label]}_")
171
- st.markdown("**Confidence across all classes**")
172
- st.bar_chart(pd.DataFrame(
173
- {"Confidence (%)": [float(cnn_probs[i]) * 100 for i in range(6)]},
174
- index=[LABEL_MAP[i] for i in range(6)]
175
- ))
176
 
177
  except FileNotFoundError:
178
  st.error("Sample data file not found. Add `data/samples.csv` to the repo.")
179
 
 
 
180
  with tab2:
181
- from phyphox_app_block import render_phyphox_tab
182
- render_phyphox_tab(ffn_model, ffn_status, cnn_model, cnn_status, _NORM_PATH)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import numpy as np
3
  import pandas as pd
4
 
5
+ # ── Constants ──────────────────────────────────────────────────────────────
 
 
 
 
6
 
7
  LABEL_MAP = {
8
  0: "WALKING",
 
14
  }
15
 
16
  EXPLANATIONS = {
17
+ "LAYING": "Minimal movement detected across all axes with low acceleration magnitude β€” consistent with a stationary horizontal posture.",
18
  "SITTING": "Low dynamic acceleration with a stable gravity component suggests a stationary upright posture with little body movement.",
19
  "STANDING": "Similar to sitting but with slight postural micro-movements. This class is often the hardest to distinguish from sitting.",
20
+ "WALKING": "Rhythmic periodic acceleration with peaks on the vertical axis β€” consistent with level walking at normal cadence.",
21
  "WALKING_DOWNSTAIRS": "Downward gravitational shift with higher impact peaks characteristic of descending a staircase.",
22
+ "WALKING_UPSTAIRS": "Elevated vertical acceleration effort with upward body displacement β€” consistent with climbing stairs.",
23
  }
24
 
25
+ # ── Model loader ────────────────────────────────────────────────────────────
26
+
27
  @st.cache_resource
28
+ def load_model():
29
  try:
 
30
  import tensorflow as tf
31
+ from model_def import FeedForwardNetwork
 
 
 
 
 
 
32
  model = tf.keras.models.load_model(
33
+ "model.keras",
34
+ custom_objects={"FeedForwardNetwork": FeedForwardNetwork},
 
 
 
35
  )
36
  return model, "ready"
37
  except Exception as e:
38
  return None, f"error: {e}"
39
 
40
+ # ── Page config ─────────────────────────────────────────────────────────────
41
+
42
  st.set_page_config(
43
  page_title="Human Activity Recognition",
44
  page_icon="πŸƒ",
45
+ layout="centered"
46
  )
47
 
48
  st.title("Human Activity Recognition")
 
52
  "Classifies six daily activities from accelerometer and gyroscope readings."
53
  )
54
 
55
+ # ── Sidebar ──────────────────────────────────────────────────────────────────
56
+
57
  with st.sidebar:
58
  st.header("About")
59
  st.markdown("""
 
65
  **Classes:** 6 activities of daily living
66
  """)
67
  st.markdown("---")
68
+ st.markdown("**Model performance on test set**")
69
+ st.metric("Architecture", "FFN 512β†’256β†’128")
70
+ st.metric("Status", "FFN live Β· CNN pending")
 
 
 
 
 
 
 
71
  st.markdown("---")
72
+ st.caption("DAT606 Group Assignment Β· Pan-Atlantic University")
73
+
74
+ # ── Model status ─────────────────────────────────────────────────────────────
75
 
76
+ model, model_status = load_model()
 
77
 
78
+ if model_status != "ready":
79
+ st.warning(f"Model not loaded β€” {model_status}")
80
+
81
+ # ── Tabs ─────────────────────────────────────────────────────────────────────
 
82
 
83
  tab1, tab2 = st.tabs(["Select a Sample", "Upload Phyphox CSV"])
84
 
85
+ # ── Tab 1: Sample selector ───────────────────────────────────────────────────
86
+
87
  with tab1:
88
  st.subheader("Select a pre-loaded test sample")
89
  st.caption(
 
92
  )
93
 
94
  try:
95
+ samples_df = pd.read_csv("data/samples.csv")
96
+ feature_cols = [
97
+ c for c in samples_df.columns
98
+ if c not in ["Activity", "subject"]
99
+ ]
100
 
101
  sample_labels = [
102
+ f"Sample {i+1} β€” {row['Activity']}"
103
  for i, (_, row) in enumerate(samples_df.iterrows())
104
  ]
105
 
 
116
  st.metric("Feature count", len(feature_vector))
117
 
118
  if st.button("Classify this sample", type="primary"):
119
+ if model_status == "no_model":
120
+ st.error("Model not loaded β€” cannot predict yet.")
121
  else:
122
  arr = feature_vector.reshape(1, -1)
123
+ probs = model.predict(arr, verbose=0)[0]
124
+ pred_idx = int(np.argmax(probs))
125
+ pred_label = LABEL_MAP[pred_idx]
126
+ confidence = float(probs[pred_idx]) * 100
127
+ correct = pred_label == true_label
128
 
129
+ st.markdown("---")
130
+ st.subheader("Result")
131
 
132
+ if correct:
133
+ st.success(
134
+ f"**{pred_label}** Β· {confidence:.1f}% confidence Β· βœ“ Correct"
135
+ )
136
+ else:
137
+ st.error(
138
+ f"**{pred_label}** Β· {confidence:.1f}% confidence Β· "
139
+ f"βœ— Incorrect (true: {true_label})"
140
+ )
141
 
142
+ st.markdown(f"_{EXPLANATIONS[pred_label]}_")
143
+ st.markdown("**Confidence across all classes**")
144
+
145
+ chart_data = pd.DataFrame({
146
+ "Confidence (%)": [
147
+ float(probs[i]) * 100 for i in range(6)
148
+ ]
149
+ }, index=[LABEL_MAP[i] for i in range(6)])
150
+
151
+ st.bar_chart(chart_data)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
 
153
  except FileNotFoundError:
154
  st.error("Sample data file not found. Add `data/samples.csv` to the repo.")
155
 
156
+ # ── Tab 2: Phyphox upload (placeholder) ────────��────────────────────────────
157
+
158
  with tab2:
159
+ st.subheader("Upload Phyphox sensor recording")
160
+ st.markdown("""
161
+ **How to record your own data:**
162
+ 1. Install [Phyphox](https://phyphox.org/) on your phone
163
+ 2. Open the **Acceleration (without g)** and **Gyroscope** experiments
164
+ 3. Record at least 3 seconds of a single activity
165
+ 4. Export as CSV and upload below
166
+ """)
167
+
168
+ uploaded_file = st.file_uploader(
169
+ "Upload Phyphox CSV export",
170
+ type=["csv"],
171
+ help="Export from Phyphox as CSV β€” must contain accelerometer and gyroscope columns"
172
+ )
173
+
174
+ if uploaded_file is not None:
175
+ st.info(
176
+ "Phyphox pipeline coming soon. "
177
+ "Feature extraction from raw sensor readings "
178
+ "(filtering β†’ jerk β†’ FFT β†’ 561 features) is under development."
179
+ )
180
+ try:
181
+ preview = pd.read_csv(uploaded_file)
182
+ st.markdown("**File preview:**")
183
+ st.dataframe(preview.head(10))
184
+ st.caption(
185
+ f"{len(preview)} rows Β· {len(preview.columns)} columns detected"
186
+ )
187
+ except Exception as e:
188
+ st.error(f"Could not read file: {e}")