├── Data_logging_ and_ Visualization ├── Data Acquisition - User Interface │ ├── Data Acquisition - User Interface │ │ ├── package-lock.json │ │ ├── package.json │ │ └── server.js │ ├── package.json │ └── server.js └── Readme.md ├── Hardware_development └── Readme.md ├── Introduction ├── Readme.md └── Thesis.pdf ├── README.md ├── assests ├── ANN_classification.jpg ├── DAQ.png ├── LSTM_progress.png ├── Parkinson_simulation.png ├── assembly.png ├── cover_pic.png ├── gait_cycle.png ├── hemi_plegic_simulation.png ├── insole_gray.png ├── lstm_ataxic.png ├── lstm_healthy.png ├── lstm_hemiplegic.png ├── lstm_park.png ├── mpu.jpg ├── mpu9250.jpg ├── regionwise.png ├── sensory_ataxic.png ├── setup.png ├── sole.gif ├── sole_1.jpg ├── true_labels.jpg └── ui.png └── src ├── Chapter-4 ├── GA_info.txt ├── info.txt ├── label_data.py └── machine_learning │ ├── classification_model.png │ ├── classification_model.py │ ├── regression_model.png │ ├── regression_model.py │ └── requirements.txt ├── Chapter-5 ├── Gait_Abnormality_ Detection │ ├── Abnormal Gait Detection.ipynb │ ├── GaitModel.h5 │ ├── Mulright_withoutweights.txt │ ├── data.txt │ └── lstm_modes.jpg ├── info.txt └── requirements.txt └── Readme.md /Data_logging_ and_ Visualization/Data Acquisition - User Interface/Data Acquisition - User Interface/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-node", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "2.1.19", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "after": { 17 | "version": "0.8.2", 18 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 19 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 20 | }, 21 | "arguments-extended": { 22 | "version": "0.0.3", 23 | "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", 24 | "integrity": "sha1-YQfkkX0OtvCk3WYyD8Fa/HLvSUY=", 25 | "requires": { 26 | "extended": "0.0.6", 27 | "is-extended": "0.0.10" 28 | } 29 | }, 30 | "array-extended": { 31 | "version": "0.0.11", 32 | "resolved": "https://registry.npmjs.org/array-extended/-/array-extended-0.0.11.tgz", 33 | "integrity": "sha1-1xRK50jek8pybxIQCdv/FibRZL0=", 34 | "requires": { 35 | "arguments-extended": "0.0.3", 36 | "extended": "0.0.6", 37 | "is-extended": "0.0.10" 38 | } 39 | }, 40 | "array-flatten": { 41 | "version": "1.1.1", 42 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 43 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 44 | }, 45 | "arraybuffer.slice": { 46 | "version": "0.0.7", 47 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 48 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 49 | }, 50 | "async-limiter": { 51 | "version": "1.0.0", 52 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 53 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 54 | }, 55 | "backo2": { 56 | "version": "1.0.2", 57 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 58 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 59 | }, 60 | "base64-arraybuffer": { 61 | "version": "0.1.5", 62 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 63 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" 64 | }, 65 | "base64id": { 66 | "version": "1.0.0", 67 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 68 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" 69 | }, 70 | "better-assert": { 71 | "version": "1.0.2", 72 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 73 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 74 | "requires": { 75 | "callsite": "1.0.0" 76 | } 77 | }, 78 | "blob": { 79 | "version": "0.0.4", 80 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", 81 | "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" 82 | }, 83 | "body-parser": { 84 | "version": "1.18.2", 85 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 86 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 87 | "requires": { 88 | "bytes": "3.0.0", 89 | "content-type": "1.0.4", 90 | "debug": "2.6.9", 91 | "depd": "1.1.2", 92 | "http-errors": "1.6.3", 93 | "iconv-lite": "0.4.19", 94 | "on-finished": "2.3.0", 95 | "qs": "6.5.1", 96 | "raw-body": "2.3.2", 97 | "type-is": "1.6.16" 98 | } 99 | }, 100 | "bytes": { 101 | "version": "3.0.0", 102 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 103 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 104 | }, 105 | "callsite": { 106 | "version": "1.0.0", 107 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 108 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 109 | }, 110 | "component-bind": { 111 | "version": "1.0.0", 112 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 113 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 114 | }, 115 | "component-emitter": { 116 | "version": "1.2.1", 117 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 118 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 119 | }, 120 | "component-inherit": { 121 | "version": "0.0.3", 122 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 123 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 124 | }, 125 | "content-disposition": { 126 | "version": "0.5.2", 127 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 128 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 129 | }, 130 | "content-type": { 131 | "version": "1.0.4", 132 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 133 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 134 | }, 135 | "cookie": { 136 | "version": "0.3.1", 137 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 138 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 139 | }, 140 | "cookie-signature": { 141 | "version": "1.0.6", 142 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 143 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 144 | }, 145 | "csv": { 146 | "version": "3.1.0", 147 | "resolved": "https://registry.npmjs.org/csv/-/csv-3.1.0.tgz", 148 | "integrity": "sha512-SfnePMkhjljB7ehvubZESGjgrnM7V/gBe5ubZWKxeKwgmTl/HtVCdfSaGRgH/i/vG7qJaSLMpP0krNbAuunRBg==", 149 | "requires": { 150 | "csv-generate": "2.1.0", 151 | "csv-parse": "2.5.0", 152 | "csv-stringify": "3.1.1", 153 | "stream-transform": "1.0.2" 154 | } 155 | }, 156 | "csv-generate": { 157 | "version": "2.1.0", 158 | "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-2.1.0.tgz", 159 | "integrity": "sha512-avXXdQMta14DhePrX3yvzJHV5VEAhJQwBCwgqcZE7xyNTYGpxcUxmYvOSKQw+CisAjdpfn6/ZUNEJa2W6jDzNg==" 160 | }, 161 | "csv-parse": { 162 | "version": "2.5.0", 163 | "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-2.5.0.tgz", 164 | "integrity": "sha512-4OcjOJQByI0YDU5COYw9HAqjo8/MOLLmT9EKyMCXUzgvh30vS1SlMK+Ho84IH5exN44cSnrYecw/7Zpu2m4lkA==" 165 | }, 166 | "csv-stringify": { 167 | "version": "3.1.1", 168 | "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-3.1.1.tgz", 169 | "integrity": "sha512-Ni9r/BdQM2cGnWzwAP09zp12LVOAMHLJ86azNHGC7s4OUo2WidGfcM3QwYEjD8c4ELCL/a4AzfIsVCzroeys+g==", 170 | "requires": { 171 | "lodash.get": "4.4.2" 172 | } 173 | }, 174 | "date-extended": { 175 | "version": "0.0.6", 176 | "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", 177 | "integrity": "sha1-I4AtV90b94GIE/4MMuhRqG2iZ8k=", 178 | "requires": { 179 | "array-extended": "0.0.11", 180 | "extended": "0.0.6", 181 | "is-extended": "0.0.10" 182 | } 183 | }, 184 | "debug": { 185 | "version": "2.6.9", 186 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 187 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 188 | "requires": { 189 | "ms": "2.0.0" 190 | } 191 | }, 192 | "declare.js": { 193 | "version": "0.0.8", 194 | "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", 195 | "integrity": "sha1-BHit/5VkwAT1Hfc9i8E0AZ0o3N4=" 196 | }, 197 | "depd": { 198 | "version": "1.1.2", 199 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 200 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 201 | }, 202 | "destroy": { 203 | "version": "1.0.4", 204 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 205 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 206 | }, 207 | "ee-first": { 208 | "version": "1.1.1", 209 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 210 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 211 | }, 212 | "encodeurl": { 213 | "version": "1.0.2", 214 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 215 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 216 | }, 217 | "engine.io": { 218 | "version": "3.2.0", 219 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", 220 | "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", 221 | "requires": { 222 | "accepts": "1.3.5", 223 | "base64id": "1.0.0", 224 | "cookie": "0.3.1", 225 | "debug": "3.1.0", 226 | "engine.io-parser": "2.1.2", 227 | "ws": "3.3.3" 228 | }, 229 | "dependencies": { 230 | "debug": { 231 | "version": "3.1.0", 232 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 233 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 234 | "requires": { 235 | "ms": "2.0.0" 236 | } 237 | } 238 | } 239 | }, 240 | "engine.io-client": { 241 | "version": "3.2.1", 242 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", 243 | "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", 244 | "requires": { 245 | "component-emitter": "1.2.1", 246 | "component-inherit": "0.0.3", 247 | "debug": "3.1.0", 248 | "engine.io-parser": "2.1.2", 249 | "has-cors": "1.1.0", 250 | "indexof": "0.0.1", 251 | "parseqs": "0.0.5", 252 | "parseuri": "0.0.5", 253 | "ws": "3.3.3", 254 | "xmlhttprequest-ssl": "1.5.5", 255 | "yeast": "0.1.2" 256 | }, 257 | "dependencies": { 258 | "debug": { 259 | "version": "3.1.0", 260 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 261 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 262 | "requires": { 263 | "ms": "2.0.0" 264 | } 265 | } 266 | } 267 | }, 268 | "engine.io-parser": { 269 | "version": "2.1.2", 270 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", 271 | "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", 272 | "requires": { 273 | "after": "0.8.2", 274 | "arraybuffer.slice": "0.0.7", 275 | "base64-arraybuffer": "0.1.5", 276 | "blob": "0.0.4", 277 | "has-binary2": "1.0.3" 278 | } 279 | }, 280 | "escape-html": { 281 | "version": "1.0.3", 282 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 283 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 284 | }, 285 | "etag": { 286 | "version": "1.8.1", 287 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 288 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 289 | }, 290 | "express": { 291 | "version": "4.16.3", 292 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 293 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 294 | "requires": { 295 | "accepts": "1.3.5", 296 | "array-flatten": "1.1.1", 297 | "body-parser": "1.18.2", 298 | "content-disposition": "0.5.2", 299 | "content-type": "1.0.4", 300 | "cookie": "0.3.1", 301 | "cookie-signature": "1.0.6", 302 | "debug": "2.6.9", 303 | "depd": "1.1.2", 304 | "encodeurl": "1.0.2", 305 | "escape-html": "1.0.3", 306 | "etag": "1.8.1", 307 | "finalhandler": "1.1.1", 308 | "fresh": "0.5.2", 309 | "merge-descriptors": "1.0.1", 310 | "methods": "1.1.2", 311 | "on-finished": "2.3.0", 312 | "parseurl": "1.3.2", 313 | "path-to-regexp": "0.1.7", 314 | "proxy-addr": "2.0.4", 315 | "qs": "6.5.1", 316 | "range-parser": "1.2.0", 317 | "safe-buffer": "5.1.1", 318 | "send": "0.16.2", 319 | "serve-static": "1.13.2", 320 | "setprototypeof": "1.1.0", 321 | "statuses": "1.4.0", 322 | "type-is": "1.6.16", 323 | "utils-merge": "1.0.1", 324 | "vary": "1.1.2" 325 | } 326 | }, 327 | "extended": { 328 | "version": "0.0.6", 329 | "resolved": "https://registry.npmjs.org/extended/-/extended-0.0.6.tgz", 330 | "integrity": "sha1-f7i/e52uOXWG5IVwrP1kLHjlBmk=", 331 | "requires": { 332 | "extender": "0.0.10" 333 | } 334 | }, 335 | "extender": { 336 | "version": "0.0.10", 337 | "resolved": "https://registry.npmjs.org/extender/-/extender-0.0.10.tgz", 338 | "integrity": "sha1-WJwHSCvmGhRgttgfnCSqZ+jzJM0=", 339 | "requires": { 340 | "declare.js": "0.0.8" 341 | } 342 | }, 343 | "fast-csv": { 344 | "version": "2.4.1", 345 | "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-2.4.1.tgz", 346 | "integrity": "sha1-vX3SaDkfcpNntZRFuN0K0CaIGyY=", 347 | "requires": { 348 | "extended": "0.0.6", 349 | "is-extended": "0.0.10", 350 | "object-extended": "0.0.7", 351 | "string-extended": "0.0.8" 352 | } 353 | }, 354 | "finalhandler": { 355 | "version": "1.1.1", 356 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 357 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 358 | "requires": { 359 | "debug": "2.6.9", 360 | "encodeurl": "1.0.2", 361 | "escape-html": "1.0.3", 362 | "on-finished": "2.3.0", 363 | "parseurl": "1.3.2", 364 | "statuses": "1.4.0", 365 | "unpipe": "1.0.0" 366 | } 367 | }, 368 | "forwarded": { 369 | "version": "0.1.2", 370 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 371 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 372 | }, 373 | "fresh": { 374 | "version": "0.5.2", 375 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 376 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 377 | }, 378 | "has-binary2": { 379 | "version": "1.0.3", 380 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 381 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 382 | "requires": { 383 | "isarray": "2.0.1" 384 | } 385 | }, 386 | "has-cors": { 387 | "version": "1.1.0", 388 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 389 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 390 | }, 391 | "http-errors": { 392 | "version": "1.6.3", 393 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 394 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 395 | "requires": { 396 | "depd": "1.1.2", 397 | "inherits": "2.0.3", 398 | "setprototypeof": "1.1.0", 399 | "statuses": "1.4.0" 400 | } 401 | }, 402 | "iconv-lite": { 403 | "version": "0.4.19", 404 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 405 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 406 | }, 407 | "indexof": { 408 | "version": "0.0.1", 409 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 410 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 411 | }, 412 | "inherits": { 413 | "version": "2.0.3", 414 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 415 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 416 | }, 417 | "ipaddr.js": { 418 | "version": "1.8.0", 419 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 420 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 421 | }, 422 | "is-extended": { 423 | "version": "0.0.10", 424 | "resolved": "https://registry.npmjs.org/is-extended/-/is-extended-0.0.10.tgz", 425 | "integrity": "sha1-JE4UDfdbscmjEG9BL/GC+1NKbWI=", 426 | "requires": { 427 | "extended": "0.0.6" 428 | } 429 | }, 430 | "isarray": { 431 | "version": "2.0.1", 432 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 433 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 434 | }, 435 | "lodash.get": { 436 | "version": "4.4.2", 437 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 438 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 439 | }, 440 | "media-typer": { 441 | "version": "0.3.0", 442 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 443 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 444 | }, 445 | "merge-descriptors": { 446 | "version": "1.0.1", 447 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 448 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 449 | }, 450 | "methods": { 451 | "version": "1.1.2", 452 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 453 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 454 | }, 455 | "mime": { 456 | "version": "1.4.1", 457 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 458 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 459 | }, 460 | "mime-db": { 461 | "version": "1.35.0", 462 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", 463 | "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" 464 | }, 465 | "mime-types": { 466 | "version": "2.1.19", 467 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", 468 | "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", 469 | "requires": { 470 | "mime-db": "1.35.0" 471 | } 472 | }, 473 | "ms": { 474 | "version": "2.0.0", 475 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 476 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 477 | }, 478 | "negotiator": { 479 | "version": "0.6.1", 480 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 481 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 482 | }, 483 | "object-component": { 484 | "version": "0.0.3", 485 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 486 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" 487 | }, 488 | "object-extended": { 489 | "version": "0.0.7", 490 | "resolved": "https://registry.npmjs.org/object-extended/-/object-extended-0.0.7.tgz", 491 | "integrity": "sha1-hP0j9WsVWCrrPoiwXLVdJDLWijM=", 492 | "requires": { 493 | "array-extended": "0.0.11", 494 | "extended": "0.0.6", 495 | "is-extended": "0.0.10" 496 | } 497 | }, 498 | "on-finished": { 499 | "version": "2.3.0", 500 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 501 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 502 | "requires": { 503 | "ee-first": "1.1.1" 504 | } 505 | }, 506 | "parseqs": { 507 | "version": "0.0.5", 508 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 509 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 510 | "requires": { 511 | "better-assert": "1.0.2" 512 | } 513 | }, 514 | "parseuri": { 515 | "version": "0.0.5", 516 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 517 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 518 | "requires": { 519 | "better-assert": "1.0.2" 520 | } 521 | }, 522 | "parseurl": { 523 | "version": "1.3.2", 524 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 525 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 526 | }, 527 | "path-to-regexp": { 528 | "version": "0.1.7", 529 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 530 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 531 | }, 532 | "proxy-addr": { 533 | "version": "2.0.4", 534 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 535 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 536 | "requires": { 537 | "forwarded": "0.1.2", 538 | "ipaddr.js": "1.8.0" 539 | } 540 | }, 541 | "qs": { 542 | "version": "6.5.1", 543 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 544 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 545 | }, 546 | "range-parser": { 547 | "version": "1.2.0", 548 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 549 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 550 | }, 551 | "raw-body": { 552 | "version": "2.3.2", 553 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 554 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 555 | "requires": { 556 | "bytes": "3.0.0", 557 | "http-errors": "1.6.2", 558 | "iconv-lite": "0.4.19", 559 | "unpipe": "1.0.0" 560 | }, 561 | "dependencies": { 562 | "depd": { 563 | "version": "1.1.1", 564 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 565 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 566 | }, 567 | "http-errors": { 568 | "version": "1.6.2", 569 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 570 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 571 | "requires": { 572 | "depd": "1.1.1", 573 | "inherits": "2.0.3", 574 | "setprototypeof": "1.0.3", 575 | "statuses": "1.4.0" 576 | } 577 | }, 578 | "setprototypeof": { 579 | "version": "1.0.3", 580 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 581 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 582 | } 583 | } 584 | }, 585 | "safe-buffer": { 586 | "version": "5.1.1", 587 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 588 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 589 | }, 590 | "send": { 591 | "version": "0.16.2", 592 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 593 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 594 | "requires": { 595 | "debug": "2.6.9", 596 | "depd": "1.1.2", 597 | "destroy": "1.0.4", 598 | "encodeurl": "1.0.2", 599 | "escape-html": "1.0.3", 600 | "etag": "1.8.1", 601 | "fresh": "0.5.2", 602 | "http-errors": "1.6.3", 603 | "mime": "1.4.1", 604 | "ms": "2.0.0", 605 | "on-finished": "2.3.0", 606 | "range-parser": "1.2.0", 607 | "statuses": "1.4.0" 608 | } 609 | }, 610 | "serve-static": { 611 | "version": "1.13.2", 612 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 613 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 614 | "requires": { 615 | "encodeurl": "1.0.2", 616 | "escape-html": "1.0.3", 617 | "parseurl": "1.3.2", 618 | "send": "0.16.2" 619 | } 620 | }, 621 | "setprototypeof": { 622 | "version": "1.1.0", 623 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 624 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 625 | }, 626 | "socket.io": { 627 | "version": "2.1.1", 628 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", 629 | "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", 630 | "requires": { 631 | "debug": "3.1.0", 632 | "engine.io": "3.2.0", 633 | "has-binary2": "1.0.3", 634 | "socket.io-adapter": "1.1.1", 635 | "socket.io-client": "2.1.1", 636 | "socket.io-parser": "3.2.0" 637 | }, 638 | "dependencies": { 639 | "debug": { 640 | "version": "3.1.0", 641 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 642 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 643 | "requires": { 644 | "ms": "2.0.0" 645 | } 646 | } 647 | } 648 | }, 649 | "socket.io-adapter": { 650 | "version": "1.1.1", 651 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", 652 | "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" 653 | }, 654 | "socket.io-client": { 655 | "version": "2.1.1", 656 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", 657 | "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", 658 | "requires": { 659 | "backo2": "1.0.2", 660 | "base64-arraybuffer": "0.1.5", 661 | "component-bind": "1.0.0", 662 | "component-emitter": "1.2.1", 663 | "debug": "3.1.0", 664 | "engine.io-client": "3.2.1", 665 | "has-binary2": "1.0.3", 666 | "has-cors": "1.1.0", 667 | "indexof": "0.0.1", 668 | "object-component": "0.0.3", 669 | "parseqs": "0.0.5", 670 | "parseuri": "0.0.5", 671 | "socket.io-parser": "3.2.0", 672 | "to-array": "0.1.4" 673 | }, 674 | "dependencies": { 675 | "debug": { 676 | "version": "3.1.0", 677 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 678 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 679 | "requires": { 680 | "ms": "2.0.0" 681 | } 682 | } 683 | } 684 | }, 685 | "socket.io-parser": { 686 | "version": "3.2.0", 687 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", 688 | "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", 689 | "requires": { 690 | "component-emitter": "1.2.1", 691 | "debug": "3.1.0", 692 | "isarray": "2.0.1" 693 | }, 694 | "dependencies": { 695 | "debug": { 696 | "version": "3.1.0", 697 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 698 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 699 | "requires": { 700 | "ms": "2.0.0" 701 | } 702 | } 703 | } 704 | }, 705 | "statuses": { 706 | "version": "1.4.0", 707 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 708 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 709 | }, 710 | "stream-transform": { 711 | "version": "1.0.2", 712 | "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-1.0.2.tgz", 713 | "integrity": "sha512-LNcZSF01PZ+bM0OqwPY7UHPiKoxSmLGHAcqakvh01DCU98ONEslLORdyBPdmTqjTpZSfCiaYLV4sci9y5M47oA==" 714 | }, 715 | "string-extended": { 716 | "version": "0.0.8", 717 | "resolved": "https://registry.npmjs.org/string-extended/-/string-extended-0.0.8.tgz", 718 | "integrity": "sha1-dBlX3/SHsCcqee7FpE8jnubxfM0=", 719 | "requires": { 720 | "array-extended": "0.0.11", 721 | "date-extended": "0.0.6", 722 | "extended": "0.0.6", 723 | "is-extended": "0.0.10" 724 | } 725 | }, 726 | "to-array": { 727 | "version": "0.1.4", 728 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 729 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 730 | }, 731 | "type-is": { 732 | "version": "1.6.16", 733 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 734 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 735 | "requires": { 736 | "media-typer": "0.3.0", 737 | "mime-types": "2.1.19" 738 | } 739 | }, 740 | "ultron": { 741 | "version": "1.1.1", 742 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 743 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 744 | }, 745 | "unpipe": { 746 | "version": "1.0.0", 747 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 748 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 749 | }, 750 | "utils-merge": { 751 | "version": "1.0.1", 752 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 753 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 754 | }, 755 | "vary": { 756 | "version": "1.1.2", 757 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 758 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 759 | }, 760 | "ws": { 761 | "version": "3.3.3", 762 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 763 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 764 | "requires": { 765 | "async-limiter": "1.0.0", 766 | "safe-buffer": "5.1.1", 767 | "ultron": "1.1.1" 768 | } 769 | }, 770 | "xmlhttprequest-ssl": { 771 | "version": "1.5.5", 772 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 773 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 774 | }, 775 | "yeast": { 776 | "version": "0.1.2", 777 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 778 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 779 | } 780 | } 781 | } 782 | -------------------------------------------------------------------------------- /Data_logging_ and_ Visualization/Data Acquisition - User Interface/Data Acquisition - User Interface/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-node", 3 | "version": "1.0.0", 4 | "main": "server.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "start": "node server.js" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "csv": "^3.1.0", 14 | "express": "^4.16.3", 15 | "fast-csv": "^2.4.1", 16 | "socket.io": "^2.1.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Data_logging_ and_ Visualization/Data Acquisition - User Interface/Data Acquisition - User Interface/server.js: -------------------------------------------------------------------------------- 1 | // Import net module. 2 | var net = require('net'); 3 | var dataToWrite1; 4 | var dataToWrite2; 5 | var dataToWrite3; 6 | var dataToWrite4; 7 | var dataToWrite5; 8 | var dataToWrite6; 9 | var fs1 = require('fs'); 10 | var fs2 = require('fs'); 11 | var fs3 = require('fs'); 12 | var fs4 = require('fs'); 13 | var fs5 = require('fs'); 14 | var fs6 = require('fs'); 15 | var express = require ('express'); 16 | var app = express(); 17 | var Tcp = app.listen(3001); 18 | app.use(express.static('public')); 19 | var socket = require('socket.io'); 20 | var io = socket(Tcp); 21 | 22 | var Filename; 23 | var Endmsg; 24 | var wstream1 = fs1.createWriteStream('_PPL.txt'); 25 | var wstream2 = fs2.createWriteStream('_LT.txt'); 26 | var wstream3 = fs3.createWriteStream('_PPL.txt'); 27 | var wstream4 = fs4.createWriteStream('_LT.txt'); 28 | var wstream5 = fs5.createWriteStream('_PPL.txt'); 29 | var wstream6 = fs6.createWriteStream('_LT.txt'); 30 | 31 | io.sockets.on('connection', newConnection); 32 | 33 | function newConnection(socket) { 34 | console.log('new Connection: '+ socket.id); 35 | socket.on('record1',recordmessage1); 36 | socket.on('record2',recordmessage2); 37 | } 38 | // 39 | function recordmessage1(record_data1) { 40 | Filename = record_data1.name; 41 | console.log(Filename); 42 | if(Filename){ 43 | console.log('name received'); 44 | } 45 | wstream1 = fs1.createWriteStream(Filename + '_RightThigh.txt'); 46 | wstream2 = fs2.createWriteStream(Filename + '_RightShank.txt'); 47 | wstream3 = fs3.createWriteStream(Filename + '_RightInsole.txt'); 48 | wstream4 = fs4.createWriteStream(Filename + '_LeftThigh.txt'); 49 | wstream5 = fs5.createWriteStream(Filename + '_LeftShank.txt'); 50 | wstream6 = fs6.createWriteStream(Filename + '_LeftInsole.txt'); 51 | Storing(Filename); 52 | } 53 | 54 | function recordmessage2(record_data2) { 55 | Endmsg = record_data2.name; 56 | console.log(Endmsg); 57 | if(Endmsg){ 58 | console.log('DataAcq Complete'); 59 | } 60 | setTimeout((function() { 61 | return process.exit(22); 62 | }), 1000); 63 | } 64 | 65 | 66 | function Storing(x) { 67 | 68 | console.log(x); 69 | //////////////////////////////////////////////////////////////////////////////// 70 | ////////////////////////_RightThigh //////////////////////////////////////////// 71 | var option1 = { 72 | host: "192.168.2.34", 73 | port: 2330 74 | } 75 | // Create TCP client. 76 | var client1 = net.createConnection(option1, function() { 77 | //console.log('Connection name : ); 78 | console.log('Connection local address : ' + client1.localAddress + ":" + client1.localPort); 79 | console.log('Connection remote address : ' + client1.remoteAddress + ":" + client1.remotePort); 80 | }); 81 | client1.setTimeout(5); 82 | client1.setEncoding('utf8'); 83 | // When receive server send back data. 84 | client1.on('data', function(data1) { 85 | // if (Endmsg) { 86 | // //console.log('stop1'); 87 | // } 88 | // else { 89 | dataToWrite1 = data1; 90 | //console.log('Plantar Insole Data : ' + dataToWrite5); 91 | //wstream1.write('\n'); 92 | wstream1.write(dataToWrite1); 93 | //} 94 | }); 95 | // When connection disconnected. 96 | client1.on('end', function() { 97 | //console.log('Client socket disconnect. '); 98 | }); 99 | client1.on('timeout', function() { 100 | //console.log('Client connection timeout. '); 101 | }); 102 | client1.on('error', function(err1) { 103 | //console.error(JSON.stringify(err1)); 104 | }); 105 | 106 | //////////////////////////////////////////////////////////////////////////////// 107 | ////////////////////////_RightShank//////////////////////////////////////////// 108 | var option2 = { 109 | host: "192.168.2.35", 110 | port: 2331 111 | } 112 | // Create TCP client. 113 | var client2 = net.createConnection(option2, function() { 114 | //console.log('Connection name : ); 115 | console.log('Connection local address : ' + client2.localAddress + ":" + client2.localPort); 116 | console.log('Connection remote address : ' + client2.remoteAddress + ":" + client2.remotePort); 117 | }); 118 | client2.setTimeout(5); 119 | client2.setEncoding('utf8'); 120 | // When receive server send back data. 121 | client2.on('data', function(data2) { 122 | // if (Endmsg) { 123 | // //console.log('stop2'); 124 | // } 125 | // else { 126 | dataToWrite2 = data2; 127 | //console.log('Plantar Insole Data : ' + dataToWrite2); 128 | //wstream2.write('\n'); 129 | wstream2.write(dataToWrite2); 130 | //} 131 | }); 132 | // When connection disconnected. 133 | client2.on('end', function() { 134 | //console.log('Client socket disconnect. '); 135 | }); 136 | client2.on('timeout', function() { 137 | //console.log('Client connection timeout. '); 138 | }); 139 | client2.on('error', function(err2) { 140 | //console.error(JSON.stringify(err2)); 141 | }); 142 | 143 | 144 | //////////////////////////////////////////////////////////////////////////////// 145 | ////////////////////////_RightInsole//////////////////////////////////////////// 146 | var option3 = { 147 | host: "192.168.2.36", 148 | port: 2332 149 | } 150 | // Create TCP client. 151 | var client3 = net.createConnection(option3, function() { 152 | //console.log('Connection name : ); 153 | console.log('Connection local address : ' + client3.localAddress + ":" + client3.localPort); 154 | console.log('Connection remote address : ' + client3.remoteAddress + ":" + client3.remotePort); 155 | }); 156 | client3.setTimeout(5); 157 | client3.setEncoding('utf8'); 158 | // When receive server send back data. 159 | client3.on('data', function(data3) { 160 | // if (Endmsg) { 161 | // //console.log('stop3'); 162 | // } 163 | // else { 164 | dataToWrite3 = data3; 165 | //console.log('Plantar Insole Data : ' + dataToWrite3); 166 | //wstream3.write('\n'); 167 | wstream3.write(dataToWrite3); 168 | //} 169 | }); 170 | // When connection disconnected. 171 | client3.on('end', function() { 172 | //console.log('Client socket disconnect. '); 173 | }); 174 | client3.on('timeout', function() { 175 | //console.log('Client connection timeout. '); 176 | }); 177 | client3.on('error', function(err3) { 178 | //console.error(JSON.stringify(err3)); 179 | }); 180 | 181 | //////////////////////////////////////////////////////////////////////////////// 182 | ////////////////////////_LeftThigh //////////////////////////////////////////// 183 | var option4 = { 184 | host: "192.168.2.44", 185 | port: 3330 186 | } 187 | // Create TCP client. 188 | var client4 = net.createConnection(option4, function() { 189 | //console.log('Connection name : ); 190 | console.log('Connection local address : ' + client4.localAddress + ":" + client4.localPort); 191 | console.log('Connection remote address : ' + client4.remoteAddress + ":" + client4.remotePort); 192 | }); 193 | client4.setTimeout(5); 194 | client4.setEncoding('utf8'); 195 | // When receive server send back data. 196 | client4.on('data', function(data4) { 197 | // if (Endmsg) { 198 | // //console.log('stop4'); 199 | // } 200 | // else { 201 | dataToWrite4 = data4; 202 | //console.log('Plantar Insole Data : ' + dataToWrite5); 203 | //wstream4.write('\n'); 204 | wstream4.write(dataToWrite4); 205 | // } 206 | }); 207 | // When connection disconnected. 208 | client4.on('end', function() { 209 | //console.log('Client socket disconnect. '); 210 | }); 211 | client4.on('timeout', function() { 212 | //console.log('Client connection timeout. '); 213 | }); 214 | client4.on('error', function(err4) { 215 | //console.error(JSON.stringify(err4)); 216 | }); 217 | 218 | //////////////////////////////////////////////////////////////////////////////// 219 | ////////////////////////_LeftShank//////////////////////////////////////////// 220 | var option5 = { 221 | host: "192.168.2.45", 222 | port: 3331 223 | } 224 | // Create TCP client. 225 | var client5 = net.createConnection(option5, function() { 226 | //console.log('Connection name : ); 227 | console.log('Connection local address : ' + client5.localAddress + ":" + client5.localPort); 228 | console.log('Connection remote address : ' + client5.remoteAddress + ":" + client5.remotePort); 229 | }); 230 | client5.setTimeout(5); 231 | client5.setEncoding('utf8'); 232 | // When receive server send back data. 233 | client5.on('data', function(data5) { 234 | // if (Endmsg) { 235 | // //console.log('stop5'); 236 | // } 237 | // else { 238 | dataToWrite5 = data5; 239 | //console.log('Plantar Insole Data : ' + dataToWrite5); 240 | //wstream5.write('\n'); 241 | wstream5.write(dataToWrite5); 242 | // } 243 | }); 244 | // When connection disconnected. 245 | client5.on('end', function() { 246 | //console.log('Client socket disconnect. '); 247 | }); 248 | client5.on('timeout', function() { 249 | //console.log('Client connection timeout. '); 250 | }); 251 | client5.on('error', function(err5) { 252 | //console.error(JSON.stringify(err5)); 253 | }); 254 | 255 | 256 | //////////////////////////////////////////////////////////////////////////////// 257 | ////////////////////////_LeftInsole//////////////////////////////////////////// 258 | var option6 = { 259 | host: "192.168.2.46", 260 | port: 3332 261 | } 262 | // Create TCP client. 263 | var client6 = net.createConnection(option6, function() { 264 | //console.log('Connection name : ); 265 | console.log('Connection local address : ' + client6.localAddress + ":" + client6.localPort); 266 | console.log('Connection remote address : ' + client6.remoteAddress + ":" + client6.remotePort); 267 | }); 268 | client6.setTimeout(5); 269 | client6.setEncoding('utf8'); 270 | // When receive server send back data. 271 | client6.on('data', function(data6) { 272 | // if (Endmsg) { 273 | // //console.log('stop6'); 274 | // } 275 | // else { 276 | dataToWrite6 = data6; 277 | //console.log('Plantar Insole Data : ' + dataToWrite6); 278 | //wstream6.write('\n'); 279 | wstream6.write(dataToWrite6); 280 | // } 281 | }); 282 | // When connection disconnected. 283 | client6.on('end', function() { 284 | //console.log('Client socket disconnect. '); 285 | }); 286 | client6.on('timeout', function() { 287 | //console.log('Client connection timeout. '); 288 | }); 289 | client6.on('error', function(err6) { 290 | //console.error(JSON.stringify(err6)); 291 | }); 292 | 293 | } 294 | -------------------------------------------------------------------------------- /Data_logging_ and_ Visualization/Data Acquisition - User Interface/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-node", 3 | "version": "1.0.0", 4 | "main": "server.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "start": "node server.js" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "csv": "^3.1.0", 14 | "express": "^4.16.3", 15 | "fast-csv": "^2.4.1", 16 | "socket.io": "^2.1.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Data_logging_ and_ Visualization/Data Acquisition - User Interface/server.js: -------------------------------------------------------------------------------- 1 | // Import net module. 2 | var net = require('net'); 3 | var dataToWrite1; 4 | var dataToWrite2; 5 | var dataToWrite3; 6 | var dataToWrite4; 7 | var dataToWrite5; 8 | var dataToWrite6; 9 | var fs1 = require('fs'); 10 | var fs2 = require('fs'); 11 | var fs3 = require('fs'); 12 | var fs4 = require('fs'); 13 | var fs5 = require('fs'); 14 | var fs6 = require('fs'); 15 | var express = require ('express'); 16 | var app = express(); 17 | var Tcp = app.listen(3001); 18 | app.use(express.static('public')); 19 | var socket = require('socket.io'); 20 | var io = socket(Tcp); 21 | 22 | var Filename; 23 | var Endmsg; 24 | var wstream1 = fs1.createWriteStream('_PPL.txt'); 25 | var wstream2 = fs2.createWriteStream('_LT.txt'); 26 | var wstream3 = fs3.createWriteStream('_PPL.txt'); 27 | var wstream4 = fs4.createWriteStream('_LT.txt'); 28 | var wstream5 = fs5.createWriteStream('_PPL.txt'); 29 | var wstream6 = fs6.createWriteStream('_LT.txt'); 30 | 31 | io.sockets.on('connection', newConnection); 32 | 33 | function newConnection(socket) { 34 | console.log('new Connection: '+ socket.id); 35 | socket.on('record1',recordmessage1); 36 | socket.on('record2',recordmessage2); 37 | } 38 | // 39 | function recordmessage1(record_data1) { 40 | Filename = record_data1.name; 41 | console.log(Filename); 42 | if(Filename){ 43 | console.log('name received'); 44 | } 45 | wstream1 = fs1.createWriteStream(Filename + '_RightThigh.txt'); 46 | wstream2 = fs2.createWriteStream(Filename + '_RightShank.txt'); 47 | wstream3 = fs3.createWriteStream(Filename + '_RightInsole.txt'); 48 | wstream4 = fs4.createWriteStream(Filename + '_LeftThigh.txt'); 49 | wstream5 = fs5.createWriteStream(Filename + '_LeftShank.txt'); 50 | wstream6 = fs6.createWriteStream(Filename + '_LeftInsole.txt'); 51 | Storing(Filename); 52 | } 53 | 54 | function recordmessage2(record_data2) { 55 | Endmsg = record_data2.name; 56 | console.log(Endmsg); 57 | if(Endmsg){ 58 | console.log('DataAcq Complete'); 59 | } 60 | setTimeout((function() { 61 | return process.exit(22); 62 | }), 1000); 63 | } 64 | 65 | 66 | function Storing(x) { 67 | 68 | console.log(x); 69 | //////////////////////////////////////////////////////////////////////////////// 70 | ////////////////////////_RightThigh //////////////////////////////////////////// 71 | var option1 = { 72 | host: "192.168.2.34", 73 | port: 2330 74 | } 75 | // Create TCP client. 76 | var client1 = net.createConnection(option1, function() { 77 | //console.log('Connection name : ); 78 | console.log('Connection local address : ' + client1.localAddress + ":" + client1.localPort); 79 | console.log('Connection remote address : ' + client1.remoteAddress + ":" + client1.remotePort); 80 | }); 81 | client1.setTimeout(5); 82 | client1.setEncoding('utf8'); 83 | // When receive server send back data. 84 | client1.on('data', function(data1) { 85 | // if (Endmsg) { 86 | // //console.log('stop1'); 87 | // } 88 | // else { 89 | dataToWrite1 = data1; 90 | //console.log('Plantar Insole Data : ' + dataToWrite5); 91 | //wstream1.write('\n'); 92 | wstream1.write(dataToWrite1); 93 | //} 94 | }); 95 | // When connection disconnected. 96 | client1.on('end', function() { 97 | //console.log('Client socket disconnect. '); 98 | }); 99 | client1.on('timeout', function() { 100 | //console.log('Client connection timeout. '); 101 | }); 102 | client1.on('error', function(err1) { 103 | //console.error(JSON.stringify(err1)); 104 | }); 105 | 106 | //////////////////////////////////////////////////////////////////////////////// 107 | ////////////////////////_RightShank//////////////////////////////////////////// 108 | var option2 = { 109 | host: "192.168.2.35", 110 | port: 2331 111 | } 112 | // Create TCP client. 113 | var client2 = net.createConnection(option2, function() { 114 | //console.log('Connection name : ); 115 | console.log('Connection local address : ' + client2.localAddress + ":" + client2.localPort); 116 | console.log('Connection remote address : ' + client2.remoteAddress + ":" + client2.remotePort); 117 | }); 118 | client2.setTimeout(5); 119 | client2.setEncoding('utf8'); 120 | // When receive server send back data. 121 | client2.on('data', function(data2) { 122 | // if (Endmsg) { 123 | // //console.log('stop2'); 124 | // } 125 | // else { 126 | dataToWrite2 = data2; 127 | //console.log('Plantar Insole Data : ' + dataToWrite2); 128 | //wstream2.write('\n'); 129 | wstream2.write(dataToWrite2); 130 | //} 131 | }); 132 | // When connection disconnected. 133 | client2.on('end', function() { 134 | //console.log('Client socket disconnect. '); 135 | }); 136 | client2.on('timeout', function() { 137 | //console.log('Client connection timeout. '); 138 | }); 139 | client2.on('error', function(err2) { 140 | //console.error(JSON.stringify(err2)); 141 | }); 142 | 143 | 144 | //////////////////////////////////////////////////////////////////////////////// 145 | ////////////////////////_RightInsole//////////////////////////////////////////// 146 | var option3 = { 147 | host: "192.168.2.36", 148 | port: 2332 149 | } 150 | // Create TCP client. 151 | var client3 = net.createConnection(option3, function() { 152 | //console.log('Connection name : ); 153 | console.log('Connection local address : ' + client3.localAddress + ":" + client3.localPort); 154 | console.log('Connection remote address : ' + client3.remoteAddress + ":" + client3.remotePort); 155 | }); 156 | client3.setTimeout(5); 157 | client3.setEncoding('utf8'); 158 | // When receive server send back data. 159 | client3.on('data', function(data3) { 160 | // if (Endmsg) { 161 | // //console.log('stop3'); 162 | // } 163 | // else { 164 | dataToWrite3 = data3; 165 | //console.log('Plantar Insole Data : ' + dataToWrite3); 166 | //wstream3.write('\n'); 167 | wstream3.write(dataToWrite3); 168 | //} 169 | }); 170 | // When connection disconnected. 171 | client3.on('end', function() { 172 | //console.log('Client socket disconnect. '); 173 | }); 174 | client3.on('timeout', function() { 175 | //console.log('Client connection timeout. '); 176 | }); 177 | client3.on('error', function(err3) { 178 | //console.error(JSON.stringify(err3)); 179 | }); 180 | 181 | //////////////////////////////////////////////////////////////////////////////// 182 | ////////////////////////_LeftThigh //////////////////////////////////////////// 183 | var option4 = { 184 | host: "192.168.2.44", 185 | port: 3330 186 | } 187 | // Create TCP client. 188 | var client4 = net.createConnection(option4, function() { 189 | //console.log('Connection name : ); 190 | console.log('Connection local address : ' + client4.localAddress + ":" + client4.localPort); 191 | console.log('Connection remote address : ' + client4.remoteAddress + ":" + client4.remotePort); 192 | }); 193 | client4.setTimeout(5); 194 | client4.setEncoding('utf8'); 195 | // When receive server send back data. 196 | client4.on('data', function(data4) { 197 | // if (Endmsg) { 198 | // //console.log('stop4'); 199 | // } 200 | // else { 201 | dataToWrite4 = data4; 202 | //console.log('Plantar Insole Data : ' + dataToWrite5); 203 | //wstream4.write('\n'); 204 | wstream4.write(dataToWrite4); 205 | // } 206 | }); 207 | // When connection disconnected. 208 | client4.on('end', function() { 209 | //console.log('Client socket disconnect. '); 210 | }); 211 | client4.on('timeout', function() { 212 | //console.log('Client connection timeout. '); 213 | }); 214 | client4.on('error', function(err4) { 215 | //console.error(JSON.stringify(err4)); 216 | }); 217 | 218 | //////////////////////////////////////////////////////////////////////////////// 219 | ////////////////////////_LeftShank//////////////////////////////////////////// 220 | var option5 = { 221 | host: "192.168.2.45", 222 | port: 3331 223 | } 224 | // Create TCP client. 225 | var client5 = net.createConnection(option5, function() { 226 | //console.log('Connection name : ); 227 | console.log('Connection local address : ' + client5.localAddress + ":" + client5.localPort); 228 | console.log('Connection remote address : ' + client5.remoteAddress + ":" + client5.remotePort); 229 | }); 230 | client5.setTimeout(5); 231 | client5.setEncoding('utf8'); 232 | // When receive server send back data. 233 | client5.on('data', function(data5) { 234 | // if (Endmsg) { 235 | // //console.log('stop5'); 236 | // } 237 | // else { 238 | dataToWrite5 = data5; 239 | //console.log('Plantar Insole Data : ' + dataToWrite5); 240 | //wstream5.write('\n'); 241 | wstream5.write(dataToWrite5); 242 | // } 243 | }); 244 | // When connection disconnected. 245 | client5.on('end', function() { 246 | //console.log('Client socket disconnect. '); 247 | }); 248 | client5.on('timeout', function() { 249 | //console.log('Client connection timeout. '); 250 | }); 251 | client5.on('error', function(err5) { 252 | //console.error(JSON.stringify(err5)); 253 | }); 254 | 255 | 256 | //////////////////////////////////////////////////////////////////////////////// 257 | ////////////////////////_LeftInsole//////////////////////////////////////////// 258 | var option6 = { 259 | host: "192.168.2.46", 260 | port: 3332 261 | } 262 | // Create TCP client. 263 | var client6 = net.createConnection(option6, function() { 264 | //console.log('Connection name : ); 265 | console.log('Connection local address : ' + client6.localAddress + ":" + client6.localPort); 266 | console.log('Connection remote address : ' + client6.remoteAddress + ":" + client6.remotePort); 267 | }); 268 | client6.setTimeout(5); 269 | client6.setEncoding('utf8'); 270 | // When receive server send back data. 271 | client6.on('data', function(data6) { 272 | // if (Endmsg) { 273 | // //console.log('stop6'); 274 | // } 275 | // else { 276 | dataToWrite6 = data6; 277 | //console.log('Plantar Insole Data : ' + dataToWrite6); 278 | //wstream6.write('\n'); 279 | wstream6.write(dataToWrite6); 280 | // } 281 | }); 282 | // When connection disconnected. 283 | client6.on('end', function() { 284 | //console.log('Client socket disconnect. '); 285 | }); 286 | client6.on('timeout', function() { 287 | //console.log('Client connection timeout. '); 288 | }); 289 | client6.on('error', function(err6) { 290 | //console.error(JSON.stringify(err6)); 291 | }); 292 | 293 | } 294 | -------------------------------------------------------------------------------- /Data_logging_ and_ Visualization/Readme.md: -------------------------------------------------------------------------------- 1 | # Data Acquisition 2 | 3 | ## User Interface 4 | 5 | - A User Interface (UI) is built on Java Script to make it independent of platform e.g. Windows, Android, IOS etc. This UI is browser compatible and can be deployed on any of the modern computing devices like smartphones, laptops and PC’s. 6 | 7 | - This UI is browser compatible and can be deployed on any of the modern computing devices like smartphones, laptops and PC’s. 8 | 9 | ![image](../assests/ui.png) 10 | 11 | The data acquisition process consists of four steps; 12 | - The subject’s information such as age, weight and height which have to be entered in the respective fields. The transcribed details are then used for further detailed analysis. 13 | 14 | - A 20 seconds count down timer starts as soon as the user clicks the start button after giving his details. This timer allows the user to prepare himself for the experiment. 15 | 16 | - The user starts performing the activity as soon as the instructions appear on the screen and a timer starts ticking recording the elapsed time of the activity performed. 17 | 18 | The block diagram below depicts wireless data acquisition through TCP/IP protocol 19 | ![image](../assests/DAQ.png) 20 | 21 | **The code will for the UI will be uploaded soon** 22 | 23 | 24 | ## Data Visualization 25 | 26 | - Data collected from individuals was visualized using Processing Environment. You can read more about processing here https://processing.org/ 27 | 28 | - The pressure distributions are unique to each individual and vary based on several factors such as body weight, age and 29 | foot shape. Therefore, the plantar surface of the foot was divided into multiple regions and visualized. 30 | 31 | - 3D visualizations can be seen below 32 | ![image](../assests/regionwise.png) 33 | 34 | - Shown below is the 3D visualization of plantar pressure captured in real time 35 | 36 | ![image](../assests/sole.gif) 37 | -------------------------------------------------------------------------------- /Hardware_development/Readme.md: -------------------------------------------------------------------------------- 1 | ## Hardware system overview 2 | 3 | The backbone of the developed gait analysis system is the hardware system and a low-level user interface written in java script for data acquisition. The Hardware system includes 4 | 5 | - A Plantar Pressure measuring Insole 6 | 7 | - Inertial measurement units to measure the segment orientations of the lower limbs 8 | 9 | ## Plantar Pressure Insole 10 | 11 | - Emphasis was given in designing piezo-resistive based sensorized insoles. A detailed integrated research on the choice of piezo-resistive 12 | materials was carried out prior to this research 13 | 14 | - The assembly and wiring of the insole are show below, here copper electrodes are used which facilitate a matrix structure and the voltage is measured across each node as the resistance in the piezo material changes through a conditional circuit. 15 | 16 | ![image](../assests/assembly.png) 17 | 18 | - The insoles are inserted into a shoe of size EU 43 and the wiring circuit is fabricated as shown below, the complete sensor setup on the subject is shown below 19 | 20 | ## Inertial measurement Units 21 | 22 | - A Motion Processing Unit (MPU) developed by InvenSense was used in this project as IMU’s. This is the smallest 9- axis MPU that combines 3D accelerometers, 3D gyroscope and 3D magnetometer. 23 | 24 | - https://www.invensense.com/products/motion-tracking/9-axis/mpu-9250/ 25 | 26 | ![image](../assests/mpu.jpg) 27 | 28 | ## Sensor Setup on the Subject 29 | 30 | - After calibration and fabrication of the sensors into enclosures the complete setup looks as below 31 | 32 | ![image](../assests/sole_1.jpg) 33 | -------------------------------------------------------------------------------- /Introduction/Readme.md: -------------------------------------------------------------------------------- 1 | 2 | # Introduction to Gait 3 | 4 | 5 | Go through [Chapter 1 and Chapter 2](Thesis.pdf) for Introduction to Gait and Abnormal gait analysis also the important parameters that define the variation between the characteristics of normal and abnormal gait. 6 | -------------------------------------------------------------------------------- /Introduction/Thesis.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/Introduction/Thesis.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deep-Learning-based-Gait-Abnormality-Detection 2 | 3 | Design & Development of a Wearable Sensor Platform used for quantitative analysis using Deep Learning for detecting abnormal characteristics associated with human gait. 4 | 5 | In this research a wearable sensor system is presented, which combines **Plantar pressure measurement unit** and **Inertial Measurement Units (IMU’s)** integrated with a stacked Long short-term memory (LSTM) model to detect human gait abnormalities that are prone to the risk of fall. 6 | 7 | ![image](assests/cover_pic.png) 8 | 9 | The repository is structured as follows: 10 | ## [Introduction](Introduction) 11 | 12 | Provides a clear insight into the fundamentals of gait and the characteristics associated with Normal and Abnormal gait behaviors. 13 | 14 | ## [Hardware development](Hardware_development) 15 | 16 | Showcases the sensor system hardware and software that was designed and developed suitable for the current goal 17 | ![image](assests/insole_gray.png) 18 | 19 | 20 | ## Data Visualization 21 | 22 | ### Visualization of data collected from the developed sensor system 23 | 24 | As pressure distributions are unique to each individual and vary based on several factors such as body weight, age and foot shape visualizing the quantitative data collected from the insole will help further for indepth analysis 25 | 26 | ![image](assests/sole.gif) 27 | 28 | 29 | ## [Abnormal Gait Detection using Deep Learning](src) 30 | 31 | - Abnormal gait data acquisition through simulation of three specific abnormal gait activity 32 | 33 | - Using a stacked LSTM model trained on normal behaviour to compute the error vectors for each of sequences, This error vector is then used as a metric value for detecting abnormality 34 | 35 | - One example shown here is prediction of LSTM against hemiplegic abnormal gait, the prediction error magnitude is 0.25 which indicates the presence of abnormality. 36 | 37 | Gait Simulation |LSTM output 38 | --- |---------| 39 | ![](assests/hemi_plegic_simulation.png) |![](assests/lstm_hemiplegic.png) 40 | 41 | Refer [here](src) to see the LSTM predictions aganist simulated gait activity and a clear comparision with healthy gait vadilates the model output also by computing significant [gait parameters](https://en.wikipedia.org/wiki/Gait_analysis#Factors_and_parameters). 42 | -------------------------------------------------------------------------------- /assests/ANN_classification.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/ANN_classification.jpg -------------------------------------------------------------------------------- /assests/DAQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/DAQ.png -------------------------------------------------------------------------------- /assests/LSTM_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/LSTM_progress.png -------------------------------------------------------------------------------- /assests/Parkinson_simulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/Parkinson_simulation.png -------------------------------------------------------------------------------- /assests/assembly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/assembly.png -------------------------------------------------------------------------------- /assests/cover_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/cover_pic.png -------------------------------------------------------------------------------- /assests/gait_cycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/gait_cycle.png -------------------------------------------------------------------------------- /assests/hemi_plegic_simulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/hemi_plegic_simulation.png -------------------------------------------------------------------------------- /assests/insole_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/insole_gray.png -------------------------------------------------------------------------------- /assests/lstm_ataxic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/lstm_ataxic.png -------------------------------------------------------------------------------- /assests/lstm_healthy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/lstm_healthy.png -------------------------------------------------------------------------------- /assests/lstm_hemiplegic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/lstm_hemiplegic.png -------------------------------------------------------------------------------- /assests/lstm_park.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/lstm_park.png -------------------------------------------------------------------------------- /assests/mpu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/mpu.jpg -------------------------------------------------------------------------------- /assests/mpu9250.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/mpu9250.jpg -------------------------------------------------------------------------------- /assests/regionwise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/regionwise.png -------------------------------------------------------------------------------- /assests/sensory_ataxic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/sensory_ataxic.png -------------------------------------------------------------------------------- /assests/setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/setup.png -------------------------------------------------------------------------------- /assests/sole.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/sole.gif -------------------------------------------------------------------------------- /assests/sole_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/sole_1.jpg -------------------------------------------------------------------------------- /assests/true_labels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/true_labels.jpg -------------------------------------------------------------------------------- /assests/ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/assests/ui.png -------------------------------------------------------------------------------- /src/Chapter-4/GA_info.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/src/Chapter-4/GA_info.txt -------------------------------------------------------------------------------- /src/Chapter-4/info.txt: -------------------------------------------------------------------------------- 1 | 2 | ***************************************************************************************************** 3 | 4 | This folder contains scripts corresponding to Chapter - 4 of the thesis work. The folder is structured as follows: 5 | 6 | 1. genetic_algorithm --> Read through the github repo (https://github.com/harvitronix/neural-network-genetic-algorithm) on how to run the scripts and how to interpret the **log.txt** file. 7 | 8 | 2. machine_learning --> contains scripts for classification model and regression model. The preprocessing and neural network definitions with proper comments are written in the scripts. Most of them are self-explainatory. 9 | 10 | Execution process: 11 | 12 | Dataset --> Select any of the datasets from dataset/applied/Arv_with_weights/LL_B_label.txt 13 | 14 | apply the genetic algorithm as explained in **GA_info.txt** file. Check the **log.txt** file for optimal hyperparameters. Plug the parameters in the **classification_model.py** file and train the neural network. At the end you will find the saved model for inference use. 15 | 16 | **label_data.py ** script is used to label the datasets. A command line interface is also provided. 17 | 18 | ******************************************************************************************************* 19 | -------------------------------------------------------------------------------- /src/Chapter-4/label_data.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from matplotlib import pyplot as plt 3 | import numpy as np 4 | import scipy.interpolate as interpolate 5 | import scipy.signal as signal 6 | from scipy.signal import argrelmax, argrelmin 7 | import peakutils 8 | import argparse 9 | 10 | 11 | def analysis(filename): 12 | 13 | df = pd.read_csv( filename, sep="\t",header=None, index_col= False) 14 | M01 = np.array(df[1]) 15 | M07 = np.array(df[7]) 16 | n, filter_M01 = filter_signal(M01) 17 | m, filter_M07 = filter_signal_1(M07) 18 | a = np.empty(len(df[1]), dtype=object) 19 | l = [x+1 for x in n] 20 | k= [y+1 for y in m] 21 | a[l] = 'Stance' 22 | a[k] = 'Swing' 23 | df[11] = a 24 | f1 = plt.figure() 25 | f2 = plt.figure() 26 | ax1 = f1.add_subplot(111) 27 | ax1.plot(M01, '-gD', markevery=n,linewidth=1.5) 28 | ax1.set_xlabel('Time [ms]',fontsize=16) 29 | ax1.set_ylabel('Plantar Pressure',fontsize=16) 30 | ax1.grid(linestyle='--', linewidth=1.0) 31 | 32 | 33 | 34 | ax2 = f2.add_subplot(111) 35 | ax2.plot(M07, '-bD',markevery=m, linewidth=1.5) 36 | ax2.set_xlabel('Time [ms]',fontsize=16) 37 | ax2.set_ylabel('Plantar Pressure',fontsize=16) 38 | ax2.grid(linestyle='--', linewidth=1.0) 39 | plt.show() 40 | df.to_csv('output'+ filename, sep = "\t", header=False, index = False) 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | def filter_signal(data): 49 | 50 | N = 1 51 | Wn = [0.01 ,0.4] 52 | B,A = signal.butter(N,Wn,btype='band',output='ba') 53 | filter_signal = signal.filtfilt(B,A,data) 54 | ind_max = signal.argrelmax(filter_signal) 55 | ind_min = signal.argrelmin(filter_signal) 56 | 57 | l = [] 58 | for i in range(int(len(ind_max[0][:]))): 59 | if (data[ind_max[0][i]] > 1.45): 60 | j = ind_max[0][i] 61 | l.append(j) 62 | 63 | n = [] 64 | for i in range(len(l)): 65 | 66 | a = np.where(ind_min[0][:] 0): 68 | if(data[ind_min[0][a[0][-1]]] < 1.2): 69 | n.append(ind_min[0][a[0][-1]]) 70 | 71 | # 72 | # 73 | print ("Valleys Extracted :", len(n)) 74 | 75 | return n, filter_signal 76 | 77 | def filter_signal_1(data): 78 | 79 | N=1 80 | Wn = [0.01,0.4] 81 | B,A = signal.butter(N,Wn , btype='band',output='ba') 82 | filter_signal = signal.filtfilt(B,A,data) 83 | ind_max = signal.argrelmax(filter_signal) 84 | ind_min = signal.argrelmin(filter_signal) 85 | 86 | p = [] 87 | 88 | for i in range(int(len(ind_max[0][:]))): 89 | if (data[ind_max[0][i]] > 1.4): 90 | 91 | j = ind_max[0][i] 92 | p.append(j) 93 | print("Peaks Extracted :",len(p)) 94 | return p , filter_signal 95 | 96 | 97 | 98 | 99 | if __name__ == '__main__': 100 | parser = argparse.ArgumentParser(description = 'Dataset dir') 101 | parser.add_argument('filename', type=str, default='', help = 'Name of the Dataset',) 102 | args = parser.parse_args() 103 | analysis(args.filename) 104 | 105 | -------------------------------------------------------------------------------- /src/Chapter-4/machine_learning/classification_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/src/Chapter-4/machine_learning/classification_model.png -------------------------------------------------------------------------------- /src/Chapter-4/machine_learning/classification_model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Wed Sep 12 17:50:53 2018 4 | 5 | @author: Ravuri Srinivas 6 | """ 7 | import pandas as pd 8 | import numpy as np 9 | import matplotlib.pyplot as plt 10 | from sklearn.preprocessing import LabelEncoder 11 | from sklearn.model_selection import train_test_split 12 | from sklearn.preprocessing import MinMaxScaler 13 | from sklearn import metrics 14 | from keras.models import Sequential 15 | from keras.layers import Dropout,Dense,BatchNormalization,LSTM, GaussianNoise 16 | from keras import optimizers 17 | from keras.models import model_from_json 18 | from sklearn.metrics import confusion_matrix 19 | from keras.callbacks import ModelCheckpoint,EarlyStopping 20 | from keras.models import load_model 21 | import seaborn as sns 22 | import keras 23 | 24 | early_stopper = EarlyStopping(patience=5) 25 | 26 | file_name = 'left_leg_Arvind.txt' 27 | seed = 7 28 | np.random.seed(seed) 29 | 30 | ######### Comment the following lines based on number of classes to be classified ############## 31 | 32 | no_class = 2 33 | # no_class = 7 34 | 35 | 36 | ############# Loading the Dataset ################### 37 | 38 | data = pd.read_csv(file_name,sep="\t",header=None, index_col= False) 39 | 40 | Xl = data.iloc[:,1:11].values 41 | yl = data.iloc[:,11].values 42 | 43 | 44 | ######## Normalization of the data ###################### 45 | #scaler = MinMaxScaler(feature_range=(0, 1)) 46 | #scaler = scaler.fit(Xl) 47 | #scaled_X = scaler.transform(X) 48 | #scaler = scaler.fit(Xr) 49 | #scaled_Xr = scaler.transform(Xr) 50 | 51 | ############### Label Encoding ######################## 52 | 53 | encoder = LabelEncoder() 54 | encoder.fit(yl) 55 | 56 | if no_class == 2: 57 | 58 | Yl = encoder.fit_transform(yl) 59 | 60 | if no_class > 2: 61 | 62 | Yl = keras.utils.to_categorical(Yl) 63 | 64 | 65 | ############ Splitting data for Train & Validation ############################### 66 | 67 | Xl_train, Xl_test,Yl_train,Yl_test = train_test_split(Xl,Yl,test_size=0.20,shuffle=False) 68 | 69 | ################## Neural Network Model ######################### 70 | 71 | 72 | model = Sequential() 73 | model.add(Dense(768, input_dim=10 , kernel_initializer="uniform", activation='relu')) 74 | model.add(BatchNormalization()) 75 | model.add(Dropout(0.4)) 76 | model.add(Dense(768, kernel_initializer="uniform",activation='relu')) 77 | model.add(BatchNormalization()) 78 | model.add(Dropout(0.4)) 79 | model.add(Dense(768 , kernel_initializer="uniform",activation='relu')) 80 | model.add(BatchNormalization()) 81 | model.add(Dropout(0.4)) 82 | model.add(Dense(768, kernel_initializer="uniform",activation='relu')) 83 | model.add(BatchNormalization()) 84 | model.add(Dropout(0.4)) 85 | 86 | if no_class == 2: 87 | model.add(Dense(1, activation='sigmoid')) 88 | 89 | if no_class > 2: 90 | model.add(Dense(no_class, activation='softmax')) 91 | 92 | filepath = 'GaitNet.h5' 93 | 94 | model.compile(optimizer='adagrad', loss='binary_crossentropy', metrics=['accuracy']) 95 | 96 | history=model.fit(Xl_train, Yl_train, batch_size=64, epochs=100, verbose=2, validation_data =(Xl_test,Yl_test)) 97 | 98 | score = model.evaluate(Xl_test, Yl_test, verbose=0) 99 | classes = model.predict_classes(Xl_test, batch_size=64) 100 | model.save_weights(filepath) 101 | 102 | print("%s: %.2f%%" % (model.metrics_names[1], score[1]*100)) 103 | plt.figure(figsize=(8,5)) 104 | #plt.plot(history.history['loss'], linewidth=2.0,label='train') 105 | plt.plot(history.history['acc'], linewidth=2.0,label='train_acc') 106 | #plt.plot(history.history['val_loss'], label='validation') 107 | plt.plot(history.history['val_acc'], label='validation') 108 | plt.grid(linestyle='--', linewidth=1.0) 109 | plt.title('Training Progress', fontsize=14) 110 | plt.xlabel('Epochs',fontsize=12) 111 | plt.ylabel('Training Progress (accuracy)',fontsize=12) 112 | plt.legend() 113 | #plt.savefig('DNN.png') 114 | plt.show() 115 | 116 | #print('Gait Net Model Saved') 117 | 118 | 119 | ############# Inference ####################### 120 | 121 | 122 | #model.load_weights("GaitClassNet.h5") 123 | #print("Loaded model from disk") 124 | #score = model.evaluate(Xl_test, Yl_test, verbose=0) 125 | #predictions = model.predict_classes(Xl_test, batch_size=64) 126 | #print("%s: %.2f%%" % (model.metrics_names[1], score[1]*100)) 127 | cnf = confusion_matrix(Yl_test,classes) 128 | # 129 | # 130 | ########## Confusion Matrix #################### 131 | ax= plt.subplot() 132 | sns.heatmap(cnf, annot=True, ax = ax); #annot=True to annotate cells 133 | ax.set_xlabel('Predicted labels');ax.set_ylabel('True labels') 134 | ax.set_title('Confusion Matrix') 135 | ax.xaxis.set_ticklabels(['stance', 'swing']); ax.yaxis.set_ticklabels(['stance', 'swing']) 136 | 137 | -------------------------------------------------------------------------------- /src/Chapter-4/machine_learning/regression_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/src/Chapter-4/machine_learning/regression_model.png -------------------------------------------------------------------------------- /src/Chapter-4/machine_learning/regression_model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Sun Sep 16 21:12:54 2018 4 | 5 | @author: Ravuri Srinivas 6 | """ 7 | 8 | import pandas as pd 9 | import math 10 | import numpy as np 11 | from sklearn.preprocessing import LabelEncoder 12 | from sklearn.preprocessing import MinMaxScaler 13 | from sklearn.model_selection import train_test_split 14 | from keras.models import Sequential 15 | from keras.layers import Dropout,Dense,BatchNormalization,LSTM 16 | import matplotlib.pyplot as plt 17 | from sklearn.metrics import mean_squared_error 18 | import scipy.signal as signal 19 | 20 | 21 | 22 | 23 | filename = 'data.txt' 24 | 25 | 26 | 27 | 28 | ####### convert series to supervised learning ####################### 29 | def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): 30 | n_vars = 1 if type(data) is list else data.shape[1] 31 | df = pd.DataFrame(data) 32 | cols, names = list(), list() 33 | # input sequence (t-n, ... t-1) 34 | for i in range(n_in, 0, -1): 35 | cols.append(df.shift(i)) 36 | names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)] 37 | # forecast sequence (t, t+1, ... t+n) 38 | for i in range(0, n_out): 39 | cols.append(df.shift(-i)) 40 | if i == 0: 41 | names += [('var%d(t)' % (j+1)) for j in range(n_vars)] 42 | else: 43 | names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)] 44 | # put it all together 45 | agg = pd.concat(cols, axis=1) 46 | agg.columns = names 47 | # drop rows with NaN values 48 | if dropnan: 49 | agg.dropna(inplace=True) 50 | return agg 51 | 52 | 53 | 54 | ############## Loading Dataset ############################ 55 | data = pd.read_csv(filename, sep="\t",header=None, index_col= False) 56 | values = data.values 57 | 58 | ############### Preprocessing ############################### 59 | encoder = LabelEncoder() 60 | 61 | N = 1 # Filter order 62 | Wn = [0.02,0.2] # Cutoff frequency 63 | B, A = signal.butter(N, Wn,btype= 'band', output='ba') 64 | filter_shank = signal.filtfilt(B,A,values[:,9] ) 65 | values[:,9] = filter_shank 66 | values[:,11] = encoder.fit_transform(values[:,11]) 67 | 68 | scaler = MinMaxScaler(feature_range=(0, 1)) 69 | scaled = scaler.fit_transform(values) 70 | reframed = series_to_supervised(scaled, 1, 1) 71 | reframed.drop(reframed.columns[[0,5,6,7,8,9,11]], axis=1, inplace=True) 72 | data = reframed.values 73 | #data = scaled 74 | X = data[:,1:9] 75 | Y = data[:,9] 76 | train_X, test_X,train_Y,test_Y = train_test_split(X,Y,test_size=0.30, shuffle = False) 77 | 78 | train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1])) 79 | test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1])) 80 | 81 | print(train_X.shape, train_Y.shape, test_X.shape, test_Y.shape) 82 | 83 | ################# LSTM Network ################################ 84 | 85 | model = Sequential() 86 | model.add(LSTM(100,input_shape=(train_X.shape[1], train_X.shape[2]))) 87 | model.add(Dense(1024, input_dim=8 , kernel_initializer="uniform", activation='relu')) 88 | model.add(Dropout(0.2)) 89 | #model.add(Dense(64, activation='tanh')) 90 | #model.add(Dense(256, kernel_initializer="uniform", activation='relu')) 91 | #model.add(Dropout(0.5)) 92 | #model.add(Dense(512, kernel_initializer="uniform", activation='relu')) 93 | #model.add(Dropout(0.2)) 94 | #model.add(Dense(512, kernel_initializer="uniform", activation='relu')) 95 | #model.add(Dropout(0.2)) 96 | model.add(Dense(128, kernel_initializer="uniform", activation='relu')) 97 | model.add(Dropout(0.2)) 98 | model.add(Dense(1)) 99 | #model.add(Dropout(0.5)) 100 | 101 | model.compile(loss='mean_squared_error', optimizer = 'adam') 102 | history = model.fit(train_X,train_Y, epochs=100, batch_size=64, validation_data=(test_X,test_Y), verbose=2, shuffle=False) 103 | 104 | # plot line graph 105 | # plot history 106 | 107 | plt.plot(history.history['loss'], label='train') 108 | plt.plot(history.history['val_loss'], label='test') 109 | plt.legend() 110 | plt.show() 111 | 112 | 113 | ############### Inference ############################### 114 | 115 | 116 | predict_y = model.predict(test_X) 117 | rmse = math.sqrt(mean_squared_error(test_Y, predict_y)) 118 | filepath = 'RegressionGaitNet.h5' 119 | model.save_weights(filepath) 120 | print('Gait Net Model Saved') 121 | print('Test RMSE:' ,rmse) 122 | plt.figure(figsize=(10,10)) 123 | plt.plot(predict_y[0:100], label='predict') 124 | plt.plot(test_Y[0:100], label='actual') 125 | plt.legend() 126 | plt.grid() 127 | plt.show() 128 | -------------------------------------------------------------------------------- /src/Chapter-4/machine_learning/requirements.txt: -------------------------------------------------------------------------------- 1 | Packages needed to machine learning models 2 | 3 | python 3.x 4 | pandas 5 | numpy 6 | scikitlearn 7 | keras 8 | matplotlib 9 | seaborn 10 | 11 | After installing python along with pip manager, install other libraries using pip install ---- 12 | 13 | For example 14 | 15 | pip install numpy -------------------------------------------------------------------------------- /src/Chapter-5/Gait_Abnormality_ Detection/GaitModel.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/src/Chapter-5/Gait_Abnormality_ Detection/GaitModel.h5 -------------------------------------------------------------------------------- /src/Chapter-5/Gait_Abnormality_ Detection/data.txt: -------------------------------------------------------------------------------- 1 | 0 1.63 1.68 1.68 1.71 1.73 1.72 1.53 1.51 88.58 105.05 Stance TSw 2 | 1 1.6 1.68 1.68 1.72 1.73 1.72 1.55 1.53 93.25 104.84 Stance TSw 3 | 2 1.53 1.68 1.68 1.73 1.74 1.73 1.57 1.55 95.62 107.56 Stance TSw 4 | 3 1.44 1.68 1.68 1.73 1.74 1.73 1.6 1.58 96.84 110.31 Stance TSw 5 | 4 1.33 1.66 1.66 1.74 1.75 1.73 1.62 1.6 96.29 107.49 Stance TSw 6 | 5 1.25 1.63 1.63 1.74 1.75 1.73 1.64 1.61 94.94 104.8 Stance LR 7 | 6 1.22 1.58 1.58 1.74 1.75 1.73 1.65 1.62 94.1 107.38 Stance LR 8 | 7 1.2 1.49 1.49 1.73 1.74 1.73 1.67 1.63 89.05 102.65 Stance LR 9 | 8 1.17 1.33 1.33 1.73 1.74 1.72 1.67 1.64 86.34 95.14 Stance LR 10 | 9 1.14 1.2 1.19 1.71 1.72 1.7 1.68 1.63 79.66 96.75 Stance LR 11 | 10 1.11 1.13 1.12 1.69 1.7 1.68 1.67 1.62 70.95 95.99 Swing MSt 12 | 11 1.11 1.07 1.07 1.67 1.68 1.65 1.65 1.58 68.82 107.36 Swing MSt 13 | 12 1.11 1.03 1.04 1.62 1.65 1.62 1.61 1.54 71.06 117.8 Swing MSt 14 | 13 1.09 1.0 1.01 1.52 1.57 1.53 1.55 1.41 87.52 130.89 Swing MSt 15 | 14 1.26 1.09 1.13 1.4 1.47 1.45 1.36 1.22 101.63 137.11 Swing MSt 16 | 15 1.26 1.12 1.16 1.38 1.46 1.45 1.3 1.15 95.23 124.46 Swing MSt 17 | 16 1.22 1.1 1.15 1.37 1.46 1.44 1.22 1.08 83.65 134.64 Swing MSt 18 | 17 1.23 1.11 1.16 1.36 1.45 1.44 1.19 1.05 80.75 138.96 Swing TSt 19 | 18 1.23 1.11 1.15 1.36 1.45 1.43 1.17 1.04 75.96 141.89 Swing TSt 20 | 19 1.23 1.1 1.15 1.36 1.44 1.43 1.16 1.03 72.61 139.64 Swing TSt 21 | 20 1.23 1.1 1.14 1.35 1.44 1.42 1.15 1.02 76.86 133.56 Swing TSt 22 | 21 1.23 1.1 1.14 1.34 1.43 1.41 1.14 1.01 81.98 116.95 Swing TSt 23 | 22 1.23 1.09 1.14 1.34 1.42 1.41 1.14 1.01 84.08 107.52 Swing TSt 24 | 23 1.22 1.09 1.14 1.34 1.42 1.4 1.13 1.0 79.38 108.23 Swing TSt 25 | 24 1.22 1.09 1.14 1.34 1.42 1.4 1.13 1.0 69.03 107.45 Swing TSt 26 | 25 1.21 1.09 1.14 1.34 1.43 1.41 1.13 1.0 60.37 105.37 Swing TSt 27 | 26 1.21 1.09 1.14 1.34 1.43 1.41 1.13 1.0 55.48 105.35 Stance PSw 28 | 27 1.21 1.09 1.14 1.35 1.44 1.42 1.13 0.99 48.3 114.15 Stance PSw 29 | 28 1.2 1.1 1.15 1.36 1.45 1.44 1.12 0.99 40.45 114.49 Stance PSw 30 | 29 1.2 1.11 1.17 1.37 1.47 1.46 1.1 0.97 37.92 112.29 Stance PSw 31 | 30 1.2 1.12 1.18 1.39 1.49 1.47 1.1 0.97 40.96 96.74 Stance PSw 32 | 31 1.47 1.23 1.3 1.33 1.43 1.42 1.01 0.91 52.49 55.15 Stance PSw 33 | 32 1.62 1.29 1.35 1.33 1.42 1.42 0.98 0.9 73.1 49.85 Stance ISw 34 | 33 1.68 1.38 1.42 1.37 1.46 1.46 0.98 0.92 60.28 106.22 Stance ISw 35 | 34 1.68 1.44 1.48 1.39 1.5 1.5 1.04 0.97 57.51 128.52 Stance ISw 36 | 35 1.67 1.52 1.55 1.51 1.58 1.57 1.17 1.1 106.52 143.61 Stance ISw 37 | 36 1.67 1.57 1.58 1.6 1.62 1.61 1.29 1.26 133.06 117.57 Stance ISw 38 | 37 1.67 1.6 1.61 1.63 1.65 1.63 1.34 1.31 89.46 87.59 Stance MSw 39 | 38 1.66 1.61 1.61 1.65 1.66 1.64 1.36 1.34 81.21 115.92 Stance MSw 40 | 39 1.66 1.62 1.62 1.66 1.67 1.65 1.38 1.36 93.61 124.42 Stance MSw 41 | 40 1.65 1.62 1.62 1.67 1.67 1.66 1.4 1.38 98.05 105.49 Stance MSw 42 | 41 1.64 1.62 1.62 1.67 1.68 1.66 1.42 1.4 94.13 104.28 Stance TSw 43 | 42 1.63 1.62 1.62 1.68 1.68 1.67 1.44 1.42 90.97 111.72 Stance TSw 44 | 43 1.62 1.62 1.62 1.68 1.69 1.67 1.46 1.43 87.8 101.44 Stance TSw 45 | 44 1.61 1.63 1.62 1.69 1.69 1.67 1.48 1.45 84.16 98.77 Stance TSw 46 | 45 1.6 1.63 1.63 1.69 1.7 1.68 1.5 1.48 82.92 106.84 Stance TSw 47 | 46 1.59 1.66 1.65 1.72 1.73 1.71 1.55 1.52 85.94 109.81 Stance TSw 48 | 47 1.53 1.66 1.66 1.73 1.73 1.72 1.58 1.55 90.09 106.07 Stance TSw 49 | 48 1.45 1.66 1.65 1.73 1.74 1.72 1.6 1.57 93.34 104.05 Stance TSw 50 | 49 1.34 1.64 1.64 1.74 1.74 1.73 1.63 1.59 89.31 101.1 Stance TSw 51 | 50 1.26 1.62 1.61 1.74 1.75 1.73 1.64 1.61 87.67 100.45 Stance LR 52 | 51 1.22 1.57 1.56 1.74 1.75 1.73 1.66 1.62 91.65 106.19 Stance LR 53 | 52 1.19 1.47 1.46 1.74 1.74 1.72 1.67 1.63 93.03 102.58 Stance LR 54 | 53 1.15 1.28 1.27 1.73 1.74 1.71 1.68 1.64 89.97 100.81 Stance LR 55 | 54 1.1 1.14 1.13 1.71 1.72 1.7 1.68 1.64 79.32 91.44 Stance LR 56 | 55 1.08 1.06 1.05 1.69 1.7 1.67 1.68 1.62 69.03 92.11 Swing MSt 57 | 56 1.05 1.04 1.03 1.66 1.68 1.65 1.65 1.59 61.34 111.85 Swing MSt 58 | 57 1.05 1.01 1.0 1.63 1.66 1.62 1.62 1.55 69.43 120.24 Swing MSt 59 | 58 1.05 0.96 0.96 1.53 1.58 1.53 1.55 1.45 88.3 130.71 Swing MSt 60 | 59 1.21 1.02 1.06 1.4 1.47 1.44 1.37 1.24 103.31 142.87 Swing MSt 61 | 60 1.27 1.07 1.12 1.36 1.43 1.4 1.26 1.12 87.08 146.17 Swing MSt 62 | 61 1.23 1.07 1.11 1.37 1.44 1.42 1.23 1.08 80.92 108.67 Swing MSt 63 | 62 1.24 1.08 1.12 1.36 1.44 1.42 1.2 1.06 86.95 127.98 Swing TSt 64 | 63 1.24 1.09 1.13 1.36 1.44 1.42 1.17 1.04 81.51 132.53 Swing TSt 65 | 64 1.24 1.08 1.13 1.35 1.43 1.41 1.16 1.03 80.62 136.58 Swing TSt 66 | 65 1.24 1.08 1.13 1.35 1.43 1.41 1.15 1.02 88.55 134.21 Swing TSt 67 | 66 1.23 1.08 1.13 1.35 1.43 1.41 1.14 1.01 90.96 117.85 Swing TSt 68 | 67 1.23 1.08 1.13 1.35 1.43 1.41 1.13 1.0 80.73 107.03 Swing TSt 69 | 68 1.23 1.08 1.13 1.35 1.43 1.41 1.13 1.0 65.5 104.47 Swing TSt 70 | 69 1.22 1.08 1.13 1.35 1.43 1.41 1.12 1.0 58.54 109.53 Swing TSt 71 | 70 1.22 1.08 1.13 1.35 1.44 1.42 1.11 0.99 58.01 112.84 Swing TSt 72 | 71 1.21 1.08 1.13 1.35 1.44 1.43 1.11 0.99 47.81 108.62 Swing TSt 73 | 72 1.21 1.09 1.14 1.37 1.46 1.45 1.1 0.97 38.03 107.9 Stance PSw 74 | 73 1.21 1.11 1.17 1.39 1.49 1.48 1.08 0.96 36.08 112.64 Stance PSw 75 | 74 1.28 1.15 1.21 1.4 1.51 1.49 1.06 0.95 40.34 108.44 Stance PSw 76 | 75 1.55 1.27 1.34 1.34 1.43 1.42 1.02 0.93 57.58 68.49 Stance PSw 77 | 76 1.66 1.29 1.35 1.36 1.45 1.45 1.0 0.93 77.86 54.28 Stance ISw 78 | 77 1.7 1.38 1.43 1.4 1.5 1.5 1.0 0.94 59.27 108.76 Stance ISw 79 | 78 1.7 1.47 1.52 1.45 1.56 1.56 1.06 0.99 64.87 125.74 Stance ISw 80 | 79 1.69 1.55 1.58 1.57 1.62 1.62 1.22 1.16 107.46 142.1 Stance ISw 81 | 80 1.69 1.6 1.61 1.63 1.66 1.65 1.33 1.3 104.29 117.11 Stance ISw 82 | 81 1.69 1.62 1.63 1.65 1.67 1.66 1.37 1.34 83.89 90.35 Stance MSw 83 | 82 1.69 1.63 1.64 1.66 1.68 1.66 1.39 1.36 91.35 106.49 Stance MSw 84 | 83 1.68 1.64 1.64 1.67 1.68 1.67 1.41 1.38 99.08 125.1 Stance MSw 85 | 84 1.68 1.64 1.64 1.68 1.69 1.67 1.42 1.4 92.23 117.13 Stance MSw 86 | 85 1.67 1.64 1.64 1.68 1.69 1.68 1.43 1.41 83.17 96.45 Stance TSw 87 | 86 1.67 1.64 1.64 1.68 1.69 1.68 1.44 1.42 84.67 98.32 Stance TSw 88 | 87 1.67 1.65 1.65 1.69 1.7 1.69 1.46 1.44 88.36 102.93 Stance TSw 89 | 88 1.66 1.65 1.65 1.69 1.71 1.69 1.47 1.45 85.13 96.42 Stance TSw 90 | 89 1.66 1.66 1.66 1.7 1.71 1.7 1.48 1.46 79.43 95.4 Stance TSw 91 | 90 1.64 1.66 1.66 1.71 1.72 1.71 1.51 1.49 80.15 106.59 Stance TSw 92 | 91 1.61 1.67 1.67 1.72 1.73 1.71 1.54 1.52 84.94 107.47 Stance TSw 93 | 92 1.54 1.67 1.67 1.73 1.73 1.72 1.57 1.55 89.8 103.71 Stance TSw 94 | 93 1.44 1.66 1.66 1.74 1.74 1.73 1.6 1.57 91.15 105.52 Stance LR 95 | 94 1.31 1.64 1.63 1.74 1.75 1.73 1.63 1.6 86.2 103.66 Stance LR 96 | 95 1.24 1.59 1.58 1.74 1.75 1.73 1.64 1.61 91.19 99.68 Stance LR 97 | 96 1.21 1.48 1.46 1.74 1.75 1.72 1.66 1.62 91.4 93.97 Stance LR 98 | 97 1.16 1.26 1.24 1.73 1.74 1.71 1.67 1.63 83.65 94.52 Stance LR 99 | 98 1.11 1.11 1.09 1.71 1.72 1.69 1.67 1.62 72.32 92.59 Swing MSt 100 | 99 1.07 1.05 1.03 1.68 1.69 1.66 1.65 1.59 61.92 108.35 Swing MSt 101 | 100 1.06 1.02 1.01 1.65 1.66 1.62 1.61 1.54 66.15 122.16 Swing MSt 102 | 101 1.06 0.96 0.96 1.57 1.6 1.55 1.56 1.45 87.66 130.15 Swing MSt 103 | 102 1.1 0.95 0.97 1.44 1.51 1.47 1.37 1.23 106.65 143.1 Swing MSt 104 | 103 1.25 1.08 1.12 1.38 1.46 1.44 1.24 1.12 90.17 142.31 Swing MSt 105 | 104 1.24 1.08 1.12 1.39 1.46 1.44 1.23 1.08 73.7 112.03 Swing MSt 106 | 105 1.24 1.08 1.12 1.38 1.46 1.44 1.19 1.06 83.62 118.01 Swing TSt 107 | 106 1.25 1.08 1.12 1.37 1.45 1.43 1.17 1.04 81.26 125.57 Swing TSt 108 | 107 1.23 1.07 1.12 1.37 1.45 1.42 1.16 1.02 76.27 131.41 Swing TSt 109 | 108 1.23 1.07 1.11 1.36 1.44 1.41 1.15 1.01 80.97 132.22 Swing TSt 110 | 109 1.23 1.06 1.11 1.35 1.44 1.41 1.14 1.0 87.19 119.51 Swing TSt 111 | 110 1.22 1.06 1.11 1.35 1.44 1.41 1.13 1.0 88.14 109.25 Swing TSt 112 | 111 1.22 1.06 1.11 1.35 1.43 1.41 1.12 0.99 78.07 107.12 Swing TSt 113 | 112 1.22 1.06 1.11 1.35 1.43 1.41 1.11 0.99 62.67 107.6 Swing TSt 114 | 113 1.21 1.06 1.11 1.35 1.43 1.41 1.11 0.98 53.65 108.24 Swing TSt 115 | 114 1.21 1.06 1.11 1.36 1.44 1.42 1.11 0.98 50.17 108.11 Swing TSt 116 | 115 1.2 1.07 1.12 1.37 1.46 1.43 1.11 0.98 42.06 109.82 Swing TSt 117 | 116 1.2 1.08 1.13 1.38 1.48 1.46 1.1 0.97 34.21 103.12 Swing TSt 118 | 117 1.19 1.1 1.16 1.42 1.51 1.49 1.08 0.96 34.88 109.65 Stance PSw 119 | 118 1.19 1.1 1.15 1.43 1.52 1.49 1.06 0.95 41.44 113.36 Stance PSw 120 | 119 1.4 1.18 1.23 1.38 1.48 1.45 1.02 0.93 57.29 64.11 Stance PSw 121 | 120 1.6 1.27 1.33 1.33 1.42 1.41 1.0 0.91 77.94 51.37 Stance PSw 122 | 121 1.68 1.35 1.39 1.38 1.47 1.47 1.0 0.93 63.28 80.71 Stance ISw 123 | 122 1.7 1.49 1.54 1.43 1.54 1.54 1.0 0.94 58.74 128.23 Stance ISw 124 | 123 1.7 1.56 1.59 1.57 1.63 1.63 1.19 1.15 92.52 147.55 Stance ISw 125 | 124 1.69 1.6 1.62 1.63 1.67 1.66 1.3 1.27 129.64 129.92 Stance ISw 126 | 125 1.69 1.62 1.64 1.65 1.68 1.67 1.33 1.3 100.04 83.88 Stance ISw 127 | 126 1.69 1.64 1.65 1.66 1.69 1.67 1.34 1.32 89.16 95.52 Stance MSw 128 | 127 1.69 1.64 1.65 1.67 1.69 1.68 1.35 1.33 95.05 122.83 Stance MSw 129 | 128 1.68 1.64 1.66 1.67 1.7 1.69 1.36 1.35 98.03 113.3 Stance MSw 130 | 129 1.66 1.65 1.66 1.68 1.71 1.7 1.38 1.37 90.91 89.75 Stance MSw 131 | 130 1.65 1.65 1.67 1.69 1.72 1.7 1.41 1.4 86.66 99.21 Stance TSw 132 | 131 1.64 1.66 1.67 1.69 1.72 1.71 1.43 1.42 82.46 105.43 Stance TSw 133 | 132 1.62 1.66 1.68 1.7 1.73 1.72 1.45 1.44 79.62 98.99 Stance TSw 134 | 133 1.61 1.67 1.68 1.71 1.73 1.72 1.48 1.47 79.18 97.43 Stance TSw 135 | 134 1.58 1.67 1.68 1.72 1.74 1.73 1.5 1.49 83.82 100.52 Stance TSw 136 | 135 1.55 1.67 1.69 1.72 1.74 1.73 1.53 1.51 85.85 110.03 Stance TSw 137 | 136 1.52 1.68 1.68 1.73 1.74 1.73 1.55 1.54 88.17 112.15 Stance TSw 138 | 137 1.46 1.68 1.68 1.73 1.75 1.74 1.58 1.56 91.98 107.65 Stance TSw 139 | 138 1.37 1.67 1.68 1.74 1.75 1.74 1.6 1.58 96.33 108.88 Stance TSw 140 | 139 1.27 1.65 1.65 1.74 1.75 1.74 1.62 1.6 99.07 107.89 Stance TSw 141 | 140 1.22 1.62 1.62 1.74 1.75 1.74 1.64 1.61 96.36 106.39 Stance LR 142 | 141 1.19 1.55 1.55 1.74 1.75 1.74 1.66 1.63 92.51 105.8 Stance LR 143 | 142 1.17 1.43 1.43 1.74 1.75 1.73 1.67 1.64 87.79 101.13 Stance LR 144 | 143 1.13 1.23 1.22 1.73 1.74 1.72 1.68 1.64 81.55 96.67 Stance LR 145 | 144 1.09 1.11 1.1 1.71 1.72 1.7 1.68 1.64 74.23 90.58 Swing MSt 146 | 145 1.05 1.04 1.04 1.69 1.7 1.68 1.67 1.62 72.62 100.5 Swing MSt 147 | 146 1.04 1.03 1.02 1.66 1.68 1.65 1.64 1.58 71.15 120.09 Swing MSt 148 | 147 1.05 1.0 0.99 1.62 1.65 1.62 1.61 1.54 78.46 126.76 Swing MSt 149 | 148 1.05 0.95 0.96 1.52 1.57 1.54 1.53 1.42 94.52 137.53 Swing MSt 150 | 149 1.18 1.01 1.06 1.4 1.48 1.45 1.34 1.21 101.2 148.21 Swing MSt 151 | 150 1.25 1.06 1.12 1.37 1.44 1.42 1.26 1.12 87.32 141.48 Swing MSt 152 | 151 1.22 1.06 1.11 1.37 1.45 1.43 1.23 1.08 78.82 129.41 Swing TSt 153 | 152 1.23 1.06 1.11 1.37 1.46 1.44 1.19 1.06 84.61 126.84 Swing TSt 154 | 153 1.23 1.07 1.12 1.36 1.45 1.44 1.17 1.04 77.55 124.59 Swing TSt 155 | 154 1.23 1.07 1.12 1.36 1.45 1.43 1.16 1.02 74.57 129.65 Swing TSt 156 | 155 1.21 1.05 1.1 1.33 1.43 1.41 1.12 1.0 83.37 133.15 Swing TSt 157 | 156 1.21 1.05 1.1 1.33 1.42 1.4 1.11 0.99 92.01 132.52 Swing TSt 158 | 157 1.2 1.04 1.1 1.33 1.42 1.4 1.11 0.98 88.63 124.55 Swing TSt 159 | 158 1.2 1.04 1.1 1.33 1.42 1.4 1.1 0.97 78.02 114.34 Swing TSt 160 | 159 1.19 1.04 1.1 1.32 1.42 1.4 1.09 0.97 68.87 108.79 Swing TSt 161 | 160 1.19 1.04 1.1 1.32 1.41 1.39 1.08 0.96 63.33 113.12 Swing TSt 162 | 161 1.18 1.04 1.1 1.33 1.42 1.4 1.08 0.96 52.8 111.59 Swing TSt 163 | 162 1.17 1.04 1.1 1.34 1.44 1.42 1.07 0.95 39.93 110.56 Swing TSt 164 | 163 1.16 1.06 1.12 1.36 1.46 1.44 1.05 0.93 34.6 102.01 Swing TSt 165 | 164 1.15 1.09 1.16 1.39 1.49 1.47 1.03 0.91 37.75 98.47 Stance PSw 166 | 165 1.36 1.18 1.25 1.38 1.49 1.48 1.02 0.93 47.26 69.48 Stance PSw 167 | 166 1.56 1.28 1.36 1.33 1.42 1.42 1.0 0.92 59.98 56.87 Stance PSw 168 | 167 1.66 1.33 1.38 1.37 1.46 1.46 1.0 0.93 67.46 74.55 Stance ISw 169 | 168 1.69 1.42 1.47 1.4 1.5 1.5 1.01 0.94 56.17 125.57 Stance ISw 170 | 169 1.68 1.53 1.57 1.54 1.62 1.61 1.18 1.14 84.27 137.09 Stance ISw 171 | 170 1.68 1.58 1.6 1.62 1.66 1.65 1.31 1.28 128.05 134.68 Stance ISw 172 | 171 1.68 1.61 1.63 1.65 1.68 1.67 1.37 1.35 108.47 94.12 Stance ISw 173 | 172 1.68 1.63 1.64 1.67 1.69 1.68 1.4 1.38 79.08 90.05 Stance MSw 174 | 173 1.68 1.64 1.65 1.68 1.7 1.69 1.41 1.4 82.8 117.93 Stance MSw 175 | 174 1.67 1.65 1.66 1.69 1.71 1.69 1.43 1.41 91.54 117.77 Stance MSw 176 | 175 1.66 1.65 1.66 1.69 1.71 1.7 1.44 1.43 92.54 97.08 Stance MSw 177 | 176 1.65 1.65 1.66 1.7 1.71 1.7 1.46 1.44 91.88 94.48 Stance TSw 178 | 177 1.65 1.66 1.66 1.7 1.72 1.7 1.47 1.46 88.97 104.26 Stance TSw 179 | 178 1.65 1.66 1.67 1.7 1.72 1.71 1.48 1.47 84.6 99.55 Stance TSw 180 | 179 1.65 1.66 1.67 1.7 1.72 1.71 1.49 1.48 82.16 98.91 Stance TSw 181 | 180 1.64 1.67 1.67 1.71 1.72 1.71 1.51 1.5 85.97 107.04 Stance TSw 182 | 181 1.62 1.67 1.67 1.71 1.73 1.71 1.53 1.51 90.38 108.49 Stance TSw 183 | 182 1.59 1.67 1.68 1.72 1.73 1.72 1.55 1.53 93.78 106.04 Stance TSw 184 | 183 1.53 1.68 1.68 1.73 1.74 1.72 1.57 1.55 95.52 106.46 Stance TSw 185 | 184 1.46 1.67 1.67 1.73 1.74 1.73 1.6 1.57 92.62 108.37 Stance TSw 186 | 185 1.36 1.66 1.66 1.74 1.75 1.73 1.62 1.59 90.77 106.54 Stance TSw 187 | 186 1.27 1.64 1.63 1.74 1.75 1.73 1.64 1.61 92.6 101.58 Stance LR 188 | 187 1.23 1.6 1.6 1.74 1.75 1.73 1.65 1.62 95.49 104.61 Stance LR 189 | 188 1.21 1.54 1.54 1.74 1.75 1.73 1.67 1.63 92.3 102.15 Stance LR 190 | 189 1.18 1.42 1.41 1.73 1.74 1.72 1.68 1.64 88.41 98.17 Stance LR 191 | 190 1.13 1.23 1.22 1.72 1.73 1.71 1.68 1.64 79.25 99.68 Stance LR 192 | 191 1.09 1.1 1.09 1.7 1.71 1.69 1.68 1.63 73.16 87.78 Swing MSt 193 | 192 1.07 1.04 1.03 1.67 1.68 1.66 1.66 1.6 70.27 101.07 Swing MSt 194 | 193 1.05 1.02 1.02 1.64 1.66 1.62 1.62 1.56 70.69 119.28 Swing MSt 195 | 194 1.05 0.98 0.98 1.57 1.61 1.57 1.58 1.49 84.05 129.63 Swing MSt 196 | 195 1.08 0.95 0.96 1.45 1.52 1.49 1.45 1.31 99.36 141.54 Swing MSt 197 | 196 1.29 1.07 1.11 1.36 1.43 1.41 1.27 1.16 97.7 145.63 Swing MSt 198 | 197 1.25 1.07 1.12 1.36 1.44 1.42 1.24 1.1 84.81 136.31 Swing MSt 199 | 198 1.23 1.07 1.12 1.37 1.45 1.43 1.2 1.06 79.86 135.58 Swing TSt 200 | 199 1.24 1.08 1.13 1.36 1.45 1.43 1.17 1.04 81.87 136.64 Swing TSt 201 | 200 1.24 1.08 1.13 1.36 1.45 1.43 1.16 1.03 77.62 132.5 Swing TSt 202 | 201 1.24 1.07 1.12 1.36 1.44 1.42 1.15 1.01 79.07 132.15 Swing TSt 203 | 202 1.23 1.07 1.12 1.35 1.44 1.42 1.13 1.0 85.37 127.35 Swing TSt 204 | 203 1.23 1.07 1.12 1.34 1.43 1.41 1.12 1.0 89.74 119.88 Swing TSt 205 | 204 1.22 1.06 1.12 1.34 1.43 1.41 1.11 0.99 85.76 115.77 Swing TSt 206 | 205 1.21 1.06 1.12 1.33 1.42 1.4 1.1 0.98 74.06 109.91 Swing TSt 207 | 206 1.21 1.07 1.12 1.33 1.43 1.4 1.1 0.97 60.89 103.7 Swing TSt 208 | 207 1.21 1.06 1.12 1.34 1.43 1.41 1.09 0.97 53.29 108.41 Swing TSt 209 | 208 1.2 1.06 1.12 1.34 1.44 1.42 1.09 0.96 44.84 111.74 Swing TSt 210 | 209 1.19 1.07 1.13 1.36 1.47 1.45 1.08 0.95 37.31 108.64 Swing TSt 211 | 210 1.19 1.08 1.15 1.39 1.49 1.47 1.06 0.94 34.83 105.26 Stance PSw 212 | 211 1.29 1.14 1.21 1.39 1.5 1.49 1.04 0.93 40.55 90.85 Stance PSw 213 | 212 1.52 1.25 1.33 1.33 1.43 1.42 1.01 0.92 52.02 58.04 Stance PSw 214 | 213 1.64 1.28 1.34 1.34 1.42 1.42 0.99 0.92 67.94 62.94 Stance PSw 215 | 214 1.68 1.36 1.41 1.38 1.47 1.47 1.0 0.93 58.78 126.69 Stance ISw 216 | 215 1.68 1.48 1.53 1.46 1.56 1.56 1.05 0.97 65.92 125.94 Stance ISw 217 | 216 1.67 1.55 1.58 1.59 1.63 1.62 1.26 1.22 109.17 142.07 Stance ISw 218 | 217 1.67 1.6 1.61 1.64 1.67 1.65 1.36 1.33 122.31 113.19 Stance ISw 219 | 218 1.67 1.63 1.64 1.67 1.68 1.67 1.42 1.39 86.66 92.63 Stance ISw 220 | 219 1.67 1.65 1.65 1.68 1.7 1.68 1.45 1.42 80.96 115.91 Stance MSw 221 | 220 1.67 1.66 1.66 1.69 1.7 1.69 1.47 1.44 92.58 120.27 Stance MSw 222 | 221 1.66 1.66 1.66 1.7 1.71 1.7 1.49 1.46 95.29 106.7 Stance MSw 223 | 222 1.65 1.66 1.66 1.7 1.71 1.7 1.5 1.47 93.06 102.23 Stance MSw 224 | 223 1.63 1.66 1.66 1.7 1.72 1.7 1.51 1.48 90.41 110.74 Stance TSw 225 | 224 1.62 1.66 1.67 1.71 1.72 1.7 1.51 1.49 85.04 106.71 Stance TSw 226 | 225 1.61 1.67 1.67 1.71 1.72 1.71 1.53 1.5 84.31 96.11 Stance TSw 227 | 226 1.6 1.67 1.67 1.72 1.73 1.71 1.54 1.51 87.61 102.12 Stance TSw 228 | 227 1.58 1.67 1.67 1.72 1.73 1.72 1.55 1.53 89.74 110.17 Stance TSw 229 | 228 1.54 1.67 1.67 1.72 1.73 1.72 1.57 1.54 88.5 106.48 Stance TSw 230 | 229 1.5 1.67 1.67 1.73 1.74 1.72 1.58 1.56 88.66 102.96 Stance TSw 231 | 230 1.44 1.67 1.67 1.73 1.74 1.73 1.6 1.58 91.02 107.91 Stance LR 232 | 231 1.35 1.66 1.66 1.74 1.75 1.73 1.62 1.59 91.96 106.86 Stance LR 233 | 232 1.26 1.63 1.63 1.74 1.75 1.73 1.63 1.6 91.59 101.01 Stance LR 234 | 233 1.22 1.59 1.59 1.74 1.75 1.73 1.64 1.61 91.78 104.35 Stance LR 235 | 234 1.19 1.52 1.51 1.74 1.75 1.73 1.66 1.63 88.65 104.08 Stance LR 236 | 235 1.16 1.36 1.36 1.73 1.74 1.72 1.67 1.63 88.52 98.11 Stance LR 237 | 236 1.1 1.18 1.17 1.73 1.73 1.71 1.68 1.64 80.59 88.42 Stance LR 238 | 237 1.07 1.07 1.06 1.7 1.71 1.68 1.68 1.63 72.02 93.74 Swing MSt 239 | 238 1.02 1.04 1.04 1.68 1.69 1.66 1.66 1.6 61.84 111.4 Swing MSt 240 | 239 1.03 1.03 1.02 1.65 1.67 1.63 1.62 1.56 68.9 122.31 Swing MSt 241 | 240 1.03 0.97 0.96 1.58 1.61 1.57 1.57 1.5 87.91 131.2 Swing MSt 242 | 241 1.05 0.93 0.94 1.44 1.51 1.47 1.43 1.29 106.22 149.8 Swing MSt 243 | 242 1.27 1.05 1.1 1.36 1.43 1.41 1.25 1.13 96.42 151.21 Swing MSt 244 | 243 1.23 1.05 1.1 1.37 1.45 1.43 1.22 1.07 81.1 113.95 Swing MSt 245 | 244 1.2 1.05 1.1 1.37 1.46 1.43 1.19 1.05 79.41 91.93 Swing TSt 246 | 245 1.22 1.06 1.11 1.37 1.45 1.43 1.16 1.03 77.37 116.61 Swing TSt 247 | 246 1.22 1.06 1.11 1.36 1.45 1.43 1.15 1.01 75.56 130.05 Swing TSt 248 | 247 1.22 1.06 1.11 1.35 1.44 1.42 1.14 1.01 79.49 127.81 Swing TSt 249 | 248 1.22 1.06 1.11 1.35 1.44 1.42 1.13 1.0 87.91 121.13 Swing TSt 250 | 249 1.21 1.05 1.11 1.35 1.44 1.42 1.12 0.99 90.58 115.41 Swing TSt 251 | 250 1.2 1.05 1.11 1.34 1.43 1.41 1.11 0.98 86.15 110.91 Swing TSt 252 | 251 1.2 1.05 1.11 1.33 1.43 1.4 1.1 0.97 78.46 110.98 Swing TSt 253 | 252 1.19 1.05 1.1 1.33 1.42 1.39 1.09 0.96 66.57 119.36 Swing TSt 254 | 253 1.18 1.04 1.1 1.33 1.42 1.39 1.09 0.96 47.3 116.18 Swing TSt 255 | 254 1.17 1.04 1.1 1.35 1.45 1.43 1.08 0.94 35.16 102.69 Swing TSt 256 | 49232 1.68 1.66 1.68 1.70 1.72 1.72 1.50 1.50 257 | 49262 1.68 1.66 1.68 1.70 1.73 1.72 1.50 1.50 258 | 49292 1.68 1.66 1.68 1.70 1.73 1.72 1.50 1.50 259 | 49322 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 260 | 49352 1.67 1.66 1.68 1.70 1.73 1.72 1.51 1.50 261 | 49382 1.67 1.66 1.68 1.70 1.72 1.72 1.51 1.50 262 | 49412 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 263 | 49442 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 264 | 49472 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 265 | 49502 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 266 | 49532 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 267 | 49562 1.67 1.66 1.68 1.70 1.73 1.72 1.51 1.50 268 | 49592 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 269 | 49622 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 270 | 49652 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 271 | 49682 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 272 | 49712 1.67 1.66 1.68 1.70 1.73 1.72 1.51 1.50 273 | 49742 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 274 | 49772 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 275 | 49802 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 276 | 49832 1.67 1.66 1.68 1.70 1.73 1.72 1.51 1.50 277 | 49862 1.67 1.67 1.68 1.70 1.73 1.72 1.51 1.50 278 | 49892 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 279 | 49922 1.68 1.66 1.68 1.70 1.72 1.72 1.51 1.50 280 | 49952 1.68 1.66 1.68 1.70 1.72 1.72 1.51 1.50 281 | 49982 1.68 1.66 1.68 1.70 1.72 1.72 1.51 1.50 282 | 50012 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 283 | 50042 1.68 1.67 1.68 1.70 1.73 1.72 1.51 1.50 284 | 50072 1.68 1.67 1.68 1.70 1.73 1.72 1.51 1.50 285 | 50102 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 286 | 50132 1.68 1.67 1.68 1.70 1.73 1.72 1.51 1.50 287 | 50162 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 288 | 50192 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 289 | 50222 1.68 1.66 1.68 1.70 1.72 1.72 1.51 1.50 290 | 50252 1.68 1.67 1.68 1.70 1.73 1.72 1.51 1.50 291 | 50282 1.68 1.67 1.68 1.70 1.73 1.72 1.51 1.50 292 | 50312 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 293 | 50342 1.68 1.66 1.68 1.70 1.73 1.72 1.51 1.50 294 | 50372 1.68 1.66 1.68 1.70 1.73 1.72 1.50 1.50 295 | 50402 1.67 1.66 1.68 1.70 1.72 1.72 1.50 1.50 296 | 50432 1.68 1.66 1.68 1.70 1.72 1.72 1.50 1.49 297 | 50462 1.68 1.66 1.68 1.70 1.72 1.72 1.50 1.49 298 | 50492 1.68 1.65 1.67 1.69 1.72 1.72 1.49 1.48 299 | 50522 1.68 1.65 1.67 1.69 1.72 1.71 1.47 1.46 300 | 50552 1.68 1.64 1.67 1.68 1.71 1.71 1.45 1.44 301 | 50582 1.68 1.64 1.66 1.68 1.71 1.70 1.43 1.43 302 | 50612 1.68 1.64 1.66 1.67 1.71 1.70 1.42 1.41 303 | 50642 1.68 1.64 1.66 1.67 1.71 1.70 1.42 1.42 304 | 50672 1.68 1.65 1.67 1.68 1.71 1.70 1.44 1.43 305 | 50702 1.68 1.65 1.67 1.69 1.71 1.71 1.46 1.45 306 | 50732 1.68 1.66 1.68 1.70 1.72 1.72 1.48 1.47 307 | 50762 1.68 1.66 1.68 1.70 1.73 1.72 1.50 1.49 308 | 50792 1.68 1.67 1.69 1.71 1.73 1.72 1.52 1.51 309 | 50822 1.68 1.68 1.69 1.72 1.73 1.73 1.53 1.52 310 | 50852 1.69 1.68 1.69 1.72 1.74 1.73 1.54 1.53 311 | 50882 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 312 | 50912 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 313 | 50942 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 314 | 50972 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 315 | 51002 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 316 | 51032 1.70 1.68 1.69 1.72 1.74 1.73 1.55 1.53 317 | 51062 1.70 1.68 1.69 1.72 1.74 1.73 1.54 1.53 318 | 51092 1.70 1.68 1.69 1.72 1.73 1.73 1.53 1.52 319 | 51122 1.70 1.67 1.69 1.71 1.73 1.73 1.52 1.51 320 | 51152 1.70 1.67 1.68 1.71 1.73 1.72 1.51 1.50 321 | 51182 1.70 1.66 1.68 1.70 1.72 1.72 1.48 1.47 322 | 51212 1.69 1.64 1.66 1.69 1.71 1.71 1.41 1.40 323 | 51242 1.67 1.61 1.64 1.66 1.70 1.69 1.27 1.24 324 | 51272 1.60 1.55 1.59 1.61 1.66 1.65 1.14 1.10 325 | 51302 1.50 1.46 1.51 1.56 1.61 1.59 1.07 1.03 326 | 51332 1.50 1.42 1.47 1.50 1.57 1.54 1.04 0.99 327 | 51362 1.51 1.42 1.48 1.49 1.55 1.53 1.02 0.98 328 | 51392 1.58 1.47 1.52 1.49 1.56 1.54 0.99 0.95 329 | 51422 1.63 1.52 1.56 1.53 1.58 1.56 0.97 0.93 330 | 51452 1.67 1.56 1.59 1.60 1.63 1.61 1.01 0.97 331 | 51482 1.68 1.58 1.61 1.62 1.65 1.63 1.12 1.08 332 | 51512 1.70 1.60 1.62 1.62 1.65 1.64 1.17 1.13 333 | 51542 1.70 1.61 1.63 1.61 1.65 1.64 1.18 1.15 334 | 51572 1.71 1.61 1.64 1.60 1.65 1.64 1.18 1.14 335 | 51602 1.72 1.62 1.65 1.59 1.64 1.63 1.17 1.13 336 | 51632 1.72 1.62 1.65 1.58 1.64 1.63 1.16 1.12 337 | 51662 1.72 1.62 1.65 1.57 1.63 1.62 1.15 1.11 338 | 51692 1.73 1.62 1.65 1.56 1.63 1.62 1.14 1.10 339 | 51722 1.73 1.61 1.65 1.55 1.62 1.61 1.13 1.09 340 | 51752 1.73 1.61 1.65 1.53 1.61 1.60 1.11 1.06 341 | 51782 1.73 1.61 1.65 1.51 1.59 1.59 1.09 1.05 342 | 51812 1.73 1.61 1.65 1.51 1.59 1.59 1.09 1.04 343 | 51842 1.73 1.61 1.65 1.50 1.59 1.59 1.09 1.04 344 | 51872 1.73 1.61 1.65 1.49 1.58 1.58 1.09 1.04 345 | 51902 1.73 1.61 1.65 1.49 1.58 1.58 1.08 1.03 346 | 51932 1.73 1.61 1.65 1.50 1.59 1.59 1.08 1.04 347 | 51962 1.73 1.61 1.65 1.52 1.60 1.60 1.09 1.05 348 | 51992 1.73 1.61 1.65 1.57 1.63 1.62 1.12 1.08 349 | 52022 1.72 1.62 1.65 1.61 1.65 1.65 1.20 1.17 350 | 52052 1.71 1.62 1.65 1.64 1.67 1.66 1.29 1.26 351 | 52082 1.71 1.63 1.65 1.65 1.68 1.67 1.34 1.32 352 | 52112 1.70 1.63 1.65 1.66 1.69 1.68 1.39 1.37 353 | 52142 1.69 1.63 1.65 1.67 1.69 1.69 1.42 1.41 354 | 52172 1.66 1.63 1.65 1.68 1.70 1.69 1.45 1.43 355 | 52202 1.63 1.62 1.64 1.68 1.70 1.69 1.46 1.44 356 | 52232 1.59 1.61 1.64 1.68 1.70 1.70 1.47 1.45 357 | 52262 1.53 1.60 1.62 1.69 1.71 1.70 1.49 1.47 358 | 52292 1.47 1.57 1.60 1.69 1.71 1.70 1.50 1.48 359 | 52322 1.44 1.53 1.56 1.68 1.71 1.70 1.50 1.48 360 | 52352 1.43 1.49 1.52 1.67 1.70 1.68 1.48 1.45 361 | 52382 1.43 1.45 1.48 1.64 1.68 1.66 1.42 1.39 362 | 52412 1.44 1.41 1.45 1.61 1.64 1.62 1.32 1.27 363 | 52442 1.45 1.39 1.44 1.56 1.61 1.58 1.16 1.11 364 | 52472 1.45 1.38 1.43 1.50 1.56 1.53 1.06 1.01 365 | 52502 1.46 1.37 1.43 1.50 1.55 1.52 1.03 0.98 366 | 52532 1.46 1.38 1.43 1.50 1.55 1.53 1.00 0.95 367 | 52562 1.46 1.38 1.43 1.50 1.55 1.52 0.99 0.94 368 | 52592 1.46 1.38 1.43 1.50 1.55 1.52 0.98 0.93 369 | 52622 1.45 1.39 1.44 1.50 1.55 1.52 0.97 0.92 370 | 52652 1.45 1.39 1.45 1.50 1.55 1.52 0.96 0.91 371 | 52682 1.45 1.40 1.45 1.50 1.55 1.53 0.96 0.91 372 | 52712 1.44 1.40 1.46 1.53 1.58 1.55 0.91 0.86 373 | 52742 1.43 1.44 1.49 1.59 1.64 1.61 1.00 0.96 374 | 52772 1.49 1.52 1.55 1.62 1.65 1.64 1.12 1.08 375 | 52802 1.61 1.57 1.60 1.64 1.67 1.65 1.24 1.21 376 | 52832 1.65 1.60 1.62 1.66 1.68 1.67 1.36 1.33 377 | 52862 1.68 1.63 1.64 1.68 1.70 1.68 1.42 1.39 378 | 52892 1.70 1.65 1.66 1.69 1.71 1.70 1.46 1.44 379 | 52922 1.70 1.66 1.67 1.70 1.71 1.70 1.48 1.46 380 | 52952 1.71 1.67 1.68 1.71 1.72 1.71 1.50 1.48 381 | 52983 1.71 1.67 1.68 1.71 1.72 1.71 1.51 1.49 382 | 53012 1.71 1.67 1.68 1.71 1.72 1.71 1.51 1.49 383 | 53042 1.71 1.67 1.68 1.71 1.72 1.71 1.51 1.49 384 | 53072 1.71 1.67 1.68 1.71 1.72 1.71 1.51 1.49 385 | 53102 1.70 1.67 1.68 1.70 1.72 1.71 1.51 1.49 386 | 53132 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.49 387 | 53162 1.69 1.67 1.68 1.70 1.72 1.72 1.51 1.49 388 | 53192 1.69 1.67 1.68 1.70 1.72 1.72 1.51 1.49 389 | 53222 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.49 390 | 53252 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.48 391 | 53282 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.48 392 | 53312 1.68 1.67 1.68 1.70 1.72 1.72 1.50 1.49 393 | 53342 1.66 1.66 1.68 1.70 1.72 1.72 1.51 1.50 394 | 53372 1.63 1.66 1.68 1.70 1.73 1.72 1.52 1.51 395 | 53402 1.57 1.65 1.67 1.70 1.73 1.72 1.53 1.52 396 | 53432 1.51 1.64 1.66 1.71 1.73 1.72 1.54 1.53 397 | 53462 1.45 1.60 1.63 1.71 1.73 1.72 1.55 1.53 398 | 53492 1.42 1.56 1.59 1.70 1.72 1.72 1.54 1.53 399 | 53522 1.40 1.51 1.55 1.68 1.71 1.70 1.53 1.51 400 | 53552 1.40 1.47 1.51 1.66 1.69 1.68 1.50 1.48 401 | 53582 1.40 1.43 1.47 1.63 1.67 1.65 1.45 1.42 402 | 53612 1.41 1.40 1.44 1.61 1.65 1.63 1.38 1.36 403 | 53642 1.41 1.37 1.42 1.58 1.62 1.61 1.30 1.28 404 | 53672 1.42 1.36 1.40 1.55 1.60 1.58 1.21 1.19 405 | 53702 1.42 1.34 1.39 1.53 1.58 1.56 1.15 1.12 406 | 53732 1.43 1.34 1.38 1.51 1.56 1.54 1.11 1.08 407 | 53762 1.44 1.33 1.38 1.51 1.56 1.53 1.06 1.03 408 | 53792 1.44 1.33 1.38 1.51 1.55 1.53 1.04 0.99 409 | 53822 1.44 1.34 1.39 1.51 1.55 1.52 1.02 0.97 410 | 53852 1.44 1.34 1.39 1.51 1.56 1.53 1.02 0.97 411 | 53882 1.44 1.35 1.40 1.51 1.56 1.53 1.01 0.96 412 | 53912 1.44 1.35 1.40 1.51 1.56 1.53 1.00 0.95 413 | 53942 1.43 1.35 1.40 1.51 1.56 1.53 0.99 0.94 414 | 53972 1.43 1.36 1.41 1.51 1.55 1.53 0.98 0.93 415 | 54002 1.42 1.37 1.42 1.52 1.56 1.53 0.97 0.92 416 | 54032 1.42 1.41 1.47 1.57 1.63 1.61 1.03 1.00 417 | 54062 1.41 1.47 1.52 1.62 1.67 1.65 1.31 1.30 418 | 54092 1.50 1.59 1.62 1.67 1.70 1.69 1.45 1.44 419 | 54122 1.60 1.63 1.64 1.70 1.71 1.70 1.51 1.49 420 | 54152 1.63 1.64 1.65 1.70 1.72 1.71 1.53 1.51 421 | 54182 1.67 1.66 1.66 1.71 1.72 1.71 1.53 1.51 422 | 54212 1.69 1.66 1.67 1.71 1.72 1.71 1.54 1.52 423 | 54242 1.69 1.67 1.68 1.72 1.73 1.72 1.55 1.53 424 | 54272 1.69 1.68 1.68 1.72 1.73 1.72 1.55 1.54 425 | 54302 1.70 1.68 1.69 1.72 1.73 1.72 1.56 1.54 426 | 54332 1.70 1.68 1.69 1.72 1.73 1.72 1.56 1.54 427 | 54362 1.70 1.68 1.69 1.72 1.73 1.72 1.56 1.54 428 | 54392 1.70 1.67 1.68 1.72 1.73 1.72 1.55 1.53 429 | 54422 1.69 1.67 1.68 1.72 1.73 1.72 1.54 1.52 430 | 54452 1.69 1.67 1.68 1.71 1.72 1.72 1.53 1.51 431 | 54482 1.70 1.66 1.68 1.71 1.72 1.71 1.52 1.50 432 | 54512 1.70 1.66 1.67 1.70 1.72 1.71 1.51 1.49 433 | 54542 1.70 1.66 1.67 1.70 1.71 1.70 1.49 1.48 434 | 54572 1.70 1.65 1.67 1.69 1.71 1.70 1.48 1.46 435 | 54602 1.70 1.65 1.67 1.69 1.71 1.70 1.48 1.46 436 | 54632 1.69 1.65 1.67 1.69 1.71 1.70 1.49 1.47 437 | 54662 1.68 1.66 1.67 1.69 1.71 1.70 1.50 1.48 438 | 54692 1.67 1.65 1.67 1.70 1.71 1.71 1.51 1.49 439 | 54722 1.65 1.65 1.67 1.70 1.72 1.71 1.52 1.50 440 | 54752 1.63 1.65 1.67 1.70 1.72 1.71 1.52 1.51 441 | 54782 1.60 1.64 1.66 1.70 1.72 1.71 1.53 1.51 442 | 54812 1.56 1.63 1.65 1.70 1.72 1.71 1.53 1.51 443 | 54842 1.50 1.62 1.64 1.70 1.72 1.71 1.53 1.51 444 | 54872 1.46 1.59 1.61 1.70 1.72 1.71 1.53 1.52 445 | 54902 1.43 1.55 1.57 1.70 1.72 1.71 1.53 1.51 446 | 54932 1.42 1.52 1.54 1.69 1.71 1.70 1.53 1.51 447 | 54962 1.41 1.49 1.52 1.67 1.70 1.68 1.52 1.50 448 | 54992 1.41 1.46 1.49 1.65 1.68 1.67 1.50 1.48 449 | 55022 1.41 1.43 1.46 1.64 1.67 1.65 1.46 1.44 450 | 55052 1.41 1.41 1.44 1.64 1.66 1.65 1.42 1.38 451 | 55082 1.41 1.39 1.43 1.63 1.66 1.64 1.35 1.31 452 | 55112 1.42 1.38 1.42 1.61 1.64 1.62 1.23 1.18 453 | 55142 1.42 1.38 1.42 1.56 1.61 1.58 1.14 1.08 454 | 55172 1.43 1.37 1.42 1.52 1.57 1.55 1.07 1.02 455 | 55202 1.44 1.37 1.42 1.50 1.56 1.53 1.04 0.99 456 | 55232 1.44 1.37 1.42 1.51 1.56 1.53 1.02 0.97 457 | 55262 1.43 1.37 1.43 1.51 1.56 1.53 1.01 0.96 458 | 55292 1.43 1.37 1.43 1.51 1.56 1.53 1.01 0.96 459 | 55322 1.43 1.37 1.42 1.51 1.56 1.53 1.00 0.95 460 | 55352 1.43 1.37 1.42 1.50 1.55 1.52 1.00 0.94 461 | 55382 1.43 1.36 1.42 1.51 1.55 1.52 0.99 0.94 462 | 55412 1.42 1.37 1.43 1.52 1.56 1.53 0.98 0.93 463 | 55442 1.40 1.41 1.48 1.52 1.58 1.56 0.95 0.90 464 | 55472 1.58 1.59 1.63 1.63 1.68 1.67 1.20 1.18 465 | 55502 1.66 1.64 1.66 1.68 1.71 1.70 1.41 1.39 466 | 55532 1.66 1.65 1.67 1.70 1.72 1.72 1.49 1.47 467 | 55562 1.68 1.67 1.68 1.71 1.73 1.72 1.52 1.50 468 | 55592 1.69 1.68 1.69 1.71 1.73 1.72 1.53 1.51 469 | 55622 1.70 1.68 1.69 1.72 1.73 1.73 1.53 1.52 470 | 55652 1.70 1.68 1.69 1.72 1.73 1.73 1.54 1.52 471 | 55682 1.70 1.68 1.70 1.72 1.73 1.73 1.54 1.52 472 | 55712 1.70 1.68 1.69 1.72 1.73 1.73 1.53 1.52 473 | 55742 1.70 1.68 1.69 1.71 1.73 1.73 1.53 1.51 474 | 55772 1.70 1.67 1.69 1.71 1.73 1.72 1.52 1.50 475 | 55802 1.70 1.67 1.68 1.71 1.73 1.72 1.51 1.49 476 | 55832 1.70 1.66 1.68 1.70 1.72 1.72 1.49 1.48 477 | 55862 1.70 1.66 1.68 1.69 1.72 1.71 1.48 1.47 478 | 55892 1.70 1.66 1.68 1.68 1.71 1.71 1.46 1.45 479 | 55922 1.70 1.65 1.68 1.68 1.71 1.71 1.45 1.43 480 | 55952 1.70 1.65 1.67 1.67 1.71 1.70 1.44 1.42 481 | 55982 1.70 1.65 1.67 1.67 1.70 1.70 1.43 1.42 482 | 56012 1.70 1.65 1.67 1.67 1.70 1.70 1.44 1.42 483 | 56042 1.70 1.65 1.67 1.68 1.71 1.70 1.45 1.44 484 | 56072 1.69 1.66 1.67 1.68 1.71 1.70 1.46 1.45 485 | 56102 1.69 1.66 1.68 1.69 1.71 1.71 1.48 1.46 486 | 56132 1.68 1.66 1.68 1.69 1.71 1.71 1.49 1.47 487 | 56162 1.67 1.66 1.68 1.69 1.72 1.71 1.50 1.49 488 | 56192 1.66 1.66 1.68 1.70 1.72 1.71 1.51 1.49 489 | 56222 1.64 1.66 1.68 1.70 1.72 1.72 1.52 1.50 490 | 56252 1.60 1.66 1.67 1.70 1.73 1.72 1.53 1.52 491 | 56282 1.54 1.64 1.66 1.71 1.73 1.72 1.54 1.53 492 | 56312 1.47 1.61 1.63 1.71 1.73 1.72 1.55 1.53 493 | 56342 1.44 1.58 1.60 1.71 1.73 1.72 1.56 1.54 494 | 56372 1.41 1.53 1.56 1.70 1.72 1.71 1.56 1.54 495 | 56402 1.39 1.50 1.53 1.69 1.71 1.70 1.55 1.53 496 | 56432 1.38 1.46 1.50 1.67 1.69 1.68 1.53 1.51 497 | 56462 1.38 1.43 1.47 1.65 1.68 1.67 1.49 1.47 498 | 56492 1.38 1.40 1.44 1.63 1.66 1.64 1.41 1.39 499 | 56522 1.40 1.37 1.41 1.60 1.63 1.61 1.23 1.20 500 | 56552 1.41 1.35 1.39 1.56 1.60 1.57 1.10 1.06 501 | 56582 1.41 1.34 1.39 1.53 1.57 1.54 1.06 1.02 502 | 56612 1.42 1.34 1.39 1.53 1.57 1.54 1.03 0.98 503 | 56642 1.42 1.35 1.40 1.54 1.57 1.54 1.01 0.96 504 | 56672 1.42 1.36 1.40 1.54 1.58 1.54 1.00 0.95 505 | 56702 1.42 1.36 1.40 1.54 1.58 1.55 0.99 0.95 506 | 56732 1.42 1.36 1.41 1.54 1.58 1.55 0.98 0.94 507 | 56762 1.42 1.36 1.41 1.54 1.58 1.55 0.98 0.94 508 | 56792 1.42 1.36 1.41 1.54 1.58 1.55 0.97 0.93 509 | 56822 1.42 1.36 1.40 1.54 1.57 1.54 0.97 0.93 510 | 56852 1.42 1.36 1.40 1.54 1.57 1.54 0.97 0.93 511 | 56882 1.42 1.36 1.41 1.53 1.57 1.54 0.97 0.93 512 | 56912 1.42 1.36 1.41 1.54 1.57 1.54 0.96 0.92 513 | 56942 1.42 1.37 1.42 1.54 1.57 1.54 0.96 0.92 514 | 56972 1.41 1.43 1.48 1.57 1.62 1.60 0.92 0.87 515 | 57002 1.60 1.58 1.61 1.64 1.68 1.66 1.14 1.12 516 | 57032 1.65 1.61 1.63 1.68 1.70 1.69 1.36 1.34 517 | 57062 1.66 1.63 1.65 1.70 1.72 1.71 1.47 1.45 518 | 57092 1.68 1.66 1.67 1.71 1.73 1.72 1.51 1.50 519 | 57122 1.69 1.67 1.68 1.72 1.74 1.73 1.54 1.52 520 | 57152 1.69 1.68 1.69 1.73 1.74 1.73 1.56 1.54 521 | 57182 1.69 1.68 1.69 1.73 1.74 1.73 1.56 1.55 522 | 57212 1.69 1.68 1.69 1.73 1.74 1.73 1.57 1.55 523 | 57242 1.69 1.68 1.69 1.73 1.74 1.73 1.57 1.55 524 | 57272 1.68 1.68 1.69 1.73 1.74 1.73 1.57 1.55 525 | 57302 1.68 1.68 1.69 1.73 1.74 1.73 1.56 1.55 526 | 57332 1.68 1.68 1.69 1.73 1.74 1.73 1.56 1.55 527 | 57362 1.67 1.68 1.69 1.73 1.74 1.73 1.56 1.55 528 | 57392 1.66 1.67 1.68 1.73 1.74 1.73 1.56 1.55 529 | 57422 1.65 1.67 1.68 1.73 1.74 1.73 1.56 1.54 530 | 57452 1.66 1.67 1.68 1.72 1.74 1.73 1.56 1.54 531 | 57482 1.66 1.67 1.68 1.72 1.74 1.73 1.56 1.54 532 | 57512 1.66 1.67 1.68 1.72 1.73 1.72 1.56 1.54 533 | 57542 1.66 1.67 1.68 1.71 1.73 1.72 1.56 1.55 534 | 57572 1.67 1.67 1.68 1.71 1.73 1.72 1.56 1.55 535 | 57602 1.67 1.67 1.68 1.71 1.73 1.73 1.56 1.55 536 | 57632 1.67 1.67 1.68 1.71 1.73 1.73 1.56 1.55 537 | 57662 1.66 1.67 1.68 1.72 1.73 1.73 1.56 1.55 538 | 57692 1.66 1.67 1.68 1.72 1.73 1.73 1.56 1.55 539 | 57722 1.65 1.67 1.68 1.72 1.73 1.73 1.56 1.55 540 | 57752 1.63 1.67 1.68 1.72 1.73 1.73 1.56 1.55 541 | 57782 1.60 1.66 1.68 1.72 1.73 1.73 1.56 1.55 542 | 57812 1.56 1.65 1.67 1.72 1.73 1.73 1.57 1.56 543 | 57842 1.50 1.63 1.64 1.72 1.73 1.73 1.57 1.55 544 | 57872 1.45 1.59 1.61 1.72 1.73 1.72 1.57 1.55 545 | 57902 1.42 1.55 1.57 1.71 1.73 1.72 1.56 1.54 546 | 57932 1.41 1.52 1.55 1.70 1.72 1.71 1.56 1.54 547 | 57962 1.40 1.50 1.53 1.69 1.71 1.70 1.55 1.54 548 | 57992 1.39 1.48 1.51 1.68 1.70 1.69 1.55 1.54 549 | 58022 1.38 1.46 1.49 1.67 1.69 1.68 1.55 1.53 550 | 58052 1.38 1.43 1.46 1.66 1.68 1.67 1.53 1.52 551 | 58082 1.38 1.41 1.44 1.65 1.67 1.66 1.51 1.49 552 | 58112 1.38 1.39 1.42 1.64 1.66 1.65 1.48 1.46 553 | 58142 1.39 1.35 1.38 1.63 1.65 1.63 1.41 1.38 554 | 58172 1.39 1.33 1.36 1.62 1.65 1.62 1.26 1.24 555 | 58202 1.40 1.33 1.36 1.60 1.63 1.60 1.13 1.09 556 | 58232 1.40 1.32 1.36 1.58 1.61 1.58 1.07 1.03 557 | 58262 1.41 1.32 1.36 1.57 1.60 1.56 1.03 1.00 558 | 58292 1.41 1.33 1.36 1.57 1.60 1.56 1.02 0.98 559 | 58322 1.42 1.33 1.36 1.57 1.60 1.56 1.01 0.97 560 | 58352 1.42 1.33 1.36 1.57 1.60 1.56 1.00 0.96 561 | 58382 1.42 1.33 1.37 1.57 1.59 1.56 0.99 0.95 562 | 58412 1.42 1.34 1.37 1.57 1.60 1.56 0.99 0.95 563 | 58442 1.42 1.34 1.38 1.57 1.60 1.56 0.99 0.95 564 | 58472 1.42 1.34 1.38 1.57 1.60 1.56 0.98 0.95 565 | 58502 1.42 1.35 1.39 1.57 1.60 1.56 0.98 0.94 566 | 58532 1.41 1.35 1.40 1.57 1.60 1.57 0.98 0.94 567 | 58562 1.40 1.36 1.41 1.58 1.60 1.57 0.97 0.93 568 | 58592 1.38 1.47 1.52 1.63 1.68 1.66 1.05 1.05 569 | 58622 1.45 1.59 1.62 1.69 1.72 1.71 1.40 1.40 570 | 58652 1.59 1.65 1.66 1.72 1.73 1.72 1.53 1.51 571 | 58682 1.60 1.66 1.67 1.73 1.74 1.73 1.57 1.56 572 | 58712 1.62 1.68 1.68 1.74 1.75 1.74 1.60 1.58 573 | 58742 1.63 1.68 1.69 1.74 1.75 1.74 1.61 1.59 574 | 58772 1.65 1.69 1.69 1.74 1.75 1.74 1.61 1.59 575 | 58802 1.66 1.69 1.69 1.74 1.75 1.74 1.60 1.59 576 | 58832 1.66 1.69 1.69 1.74 1.75 1.74 1.60 1.59 577 | 58862 1.67 1.69 1.69 1.74 1.75 1.74 1.60 1.58 578 | 58892 1.67 1.68 1.69 1.74 1.75 1.74 1.59 1.58 579 | 58922 1.67 1.68 1.69 1.74 1.74 1.74 1.58 1.57 580 | 58952 1.68 1.67 1.68 1.73 1.74 1.73 1.57 1.55 581 | 58982 1.68 1.66 1.67 1.73 1.74 1.73 1.55 1.54 582 | 59012 1.68 1.66 1.67 1.72 1.73 1.72 1.54 1.52 583 | 59042 1.68 1.65 1.66 1.71 1.72 1.71 1.51 1.49 584 | 59072 1.68 1.64 1.65 1.70 1.71 1.70 1.48 1.46 585 | 59102 1.69 1.63 1.64 1.68 1.70 1.69 1.43 1.41 586 | 59132 1.69 1.62 1.64 1.67 1.69 1.68 1.40 1.38 587 | 59162 1.69 1.62 1.64 1.65 1.68 1.67 1.37 1.34 588 | 59192 1.70 1.61 1.63 1.64 1.67 1.66 1.35 1.32 589 | 59222 1.70 1.61 1.63 1.65 1.67 1.66 1.34 1.32 590 | 59252 1.70 1.61 1.63 1.65 1.67 1.66 1.35 1.33 591 | 59282 1.69 1.61 1.63 1.65 1.67 1.66 1.36 1.34 592 | 59312 1.69 1.61 1.63 1.66 1.68 1.67 1.37 1.36 593 | 59342 1.69 1.62 1.63 1.66 1.68 1.67 1.38 1.37 594 | 59372 1.69 1.61 1.63 1.66 1.68 1.67 1.38 1.37 595 | 59402 1.69 1.61 1.62 1.66 1.68 1.67 1.37 1.35 596 | 59432 1.68 1.60 1.62 1.66 1.68 1.67 1.36 1.33 597 | 59462 1.67 1.60 1.62 1.66 1.68 1.67 1.36 1.34 598 | 59492 1.66 1.60 1.62 1.67 1.69 1.67 1.39 1.36 599 | 59522 1.64 1.60 1.62 1.67 1.69 1.68 1.41 1.39 600 | 59552 1.60 1.60 1.62 1.68 1.70 1.69 1.43 1.41 601 | 59582 1.56 1.59 1.61 1.68 1.70 1.69 1.45 1.43 602 | 59612 1.51 1.57 1.59 1.68 1.70 1.69 1.46 1.44 603 | 59642 1.47 1.56 1.58 1.69 1.71 1.69 1.47 1.45 604 | 59672 1.45 1.55 1.57 1.69 1.71 1.70 1.49 1.47 605 | 59702 1.42 1.52 1.55 1.69 1.71 1.69 1.49 1.47 606 | 59732 1.40 1.49 1.52 1.68 1.71 1.69 1.50 1.48 607 | 59762 1.38 1.46 1.49 1.67 1.70 1.68 1.50 1.47 608 | 59792 1.38 1.42 1.45 1.66 1.68 1.66 1.48 1.45 609 | 59822 1.38 1.39 1.43 1.64 1.67 1.65 1.44 1.41 610 | 59852 1.39 1.37 1.41 1.62 1.65 1.63 1.36 1.32 611 | 59882 1.40 1.35 1.40 1.58 1.62 1.59 1.21 1.15 612 | 59912 1.41 1.35 1.40 1.54 1.58 1.56 1.11 1.05 613 | 59942 1.41 1.34 1.39 1.52 1.56 1.53 1.05 1.00 614 | 59972 1.42 1.35 1.40 1.52 1.56 1.54 1.03 0.98 615 | 60002 1.42 1.35 1.41 1.52 1.56 1.53 1.00 0.96 616 | 60032 1.42 1.36 1.41 1.51 1.56 1.53 0.99 0.95 617 | 60062 1.42 1.36 1.42 1.52 1.56 1.54 0.98 0.94 618 | 60092 1.42 1.36 1.42 1.52 1.57 1.54 0.98 0.93 619 | 60122 1.42 1.36 1.42 1.52 1.56 1.53 0.97 0.93 620 | 60152 1.41 1.37 1.42 1.52 1.56 1.54 0.97 0.92 621 | 60182 1.41 1.37 1.42 1.53 1.57 1.54 0.96 0.92 622 | 60212 1.38 1.42 1.47 1.55 1.60 1.58 0.93 0.89 623 | 60242 1.53 1.55 1.59 1.63 1.67 1.66 1.15 1.11 624 | 60272 1.65 1.61 1.63 1.67 1.69 1.68 1.32 1.30 625 | 60302 1.68 1.62 1.64 1.69 1.70 1.69 1.40 1.37 626 | 60332 1.70 1.64 1.66 1.69 1.70 1.69 1.42 1.40 627 | 60362 1.71 1.65 1.67 1.69 1.70 1.70 1.43 1.41 628 | 60392 1.72 1.66 1.67 1.69 1.71 1.70 1.43 1.41 629 | 60422 1.72 1.66 1.67 1.69 1.71 1.70 1.44 1.42 630 | 60452 1.72 1.66 1.68 1.70 1.71 1.70 1.44 1.43 631 | 60482 1.72 1.66 1.68 1.70 1.71 1.70 1.45 1.43 632 | 60512 1.72 1.66 1.68 1.70 1.71 1.70 1.45 1.43 633 | 60542 1.72 1.66 1.68 1.69 1.71 1.70 1.45 1.43 634 | 60572 1.72 1.66 1.68 1.69 1.71 1.70 1.44 1.43 635 | 60602 1.71 1.66 1.68 1.69 1.71 1.70 1.44 1.43 636 | 60632 1.72 1.66 1.68 1.69 1.71 1.70 1.44 1.43 637 | 60662 1.71 1.66 1.68 1.68 1.71 1.70 1.44 1.43 638 | 60692 1.71 1.66 1.68 1.68 1.71 1.70 1.43 1.41 639 | 60722 1.72 1.66 1.68 1.68 1.71 1.70 1.41 1.40 640 | 60752 1.72 1.65 1.68 1.67 1.70 1.69 1.40 1.38 641 | 60782 1.72 1.65 1.67 1.66 1.70 1.69 1.38 1.37 642 | 60812 1.72 1.65 1.67 1.66 1.69 1.69 1.38 1.36 643 | 60842 1.72 1.65 1.67 1.66 1.69 1.68 1.37 1.35 644 | 60872 1.72 1.64 1.67 1.66 1.69 1.68 1.38 1.36 645 | 60902 1.71 1.64 1.67 1.66 1.69 1.69 1.38 1.36 646 | 60932 1.71 1.64 1.67 1.66 1.69 1.69 1.38 1.37 647 | 60962 1.71 1.64 1.67 1.67 1.69 1.69 1.39 1.37 648 | 60992 1.71 1.64 1.67 1.67 1.69 1.69 1.40 1.38 649 | 61022 1.71 1.64 1.67 1.67 1.70 1.69 1.40 1.38 650 | 61052 1.70 1.64 1.66 1.67 1.70 1.69 1.40 1.38 651 | 61082 1.69 1.63 1.65 1.67 1.69 1.69 1.40 1.38 652 | 61112 1.67 1.61 1.64 1.66 1.69 1.68 1.38 1.36 653 | 61142 1.64 1.59 1.61 1.65 1.68 1.67 1.36 1.34 654 | 61172 1.59 1.55 1.58 1.64 1.67 1.66 1.33 1.30 655 | 61202 1.53 1.51 1.55 1.63 1.66 1.65 1.28 1.24 656 | 61232 1.49 1.47 1.52 1.60 1.65 1.63 1.22 1.18 657 | 61262 1.47 1.44 1.49 1.59 1.63 1.62 1.18 1.12 658 | 61292 1.47 1.42 1.47 1.57 1.62 1.60 1.14 1.09 659 | 61322 1.47 1.41 1.46 1.54 1.60 1.57 1.11 1.05 660 | 61352 1.47 1.39 1.45 1.51 1.57 1.55 1.07 1.01 661 | 61382 1.47 1.39 1.45 1.47 1.55 1.53 1.03 0.97 662 | 61412 1.47 1.39 1.46 1.45 1.53 1.52 1.02 0.96 663 | 61442 1.47 1.40 1.46 1.45 1.53 1.51 1.01 0.95 664 | 61472 1.47 1.40 1.46 1.45 1.53 1.51 1.01 0.95 665 | 61502 1.47 1.40 1.47 1.45 1.53 1.51 1.00 0.94 666 | 61532 1.47 1.40 1.47 1.45 1.53 1.51 1.00 0.94 667 | 61562 1.47 1.40 1.46 1.46 1.53 1.52 1.00 0.94 668 | 61592 1.47 1.40 1.46 1.46 1.53 1.51 0.99 0.93 669 | 61622 1.47 1.39 1.45 1.46 1.53 1.51 1.00 0.93 670 | 61652 1.46 1.39 1.45 1.46 1.53 1.51 0.99 0.93 671 | 61682 1.46 1.38 1.45 1.46 1.53 1.51 0.99 0.93 672 | 61712 1.46 1.37 1.43 1.47 1.53 1.51 0.97 0.92 673 | 61742 1.46 1.36 1.42 1.46 1.53 1.50 0.97 0.91 674 | 61772 1.46 1.37 1.43 1.47 1.53 1.51 0.97 0.91 675 | 61802 1.46 1.38 1.44 1.48 1.53 1.51 0.97 0.91 676 | 61832 1.45 1.39 1.45 1.48 1.54 1.52 0.94 0.89 677 | 61862 1.49 1.47 1.51 1.57 1.61 1.59 1.03 0.98 678 | 61892 1.57 1.53 1.56 1.60 1.63 1.62 1.11 1.06 679 | 61922 1.61 1.57 1.59 1.64 1.67 1.65 1.27 1.24 680 | 61952 1.65 1.60 1.63 1.68 1.69 1.68 1.41 1.39 681 | 61982 1.67 1.64 1.65 1.70 1.71 1.70 1.48 1.46 682 | 62012 1.68 1.66 1.67 1.71 1.72 1.71 1.52 1.50 683 | 62042 1.69 1.67 1.68 1.72 1.73 1.72 1.54 1.52 684 | 62072 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.53 685 | 62102 1.69 1.68 1.69 1.73 1.74 1.73 1.55 1.54 686 | 62132 1.69 1.68 1.69 1.73 1.74 1.73 1.56 1.54 687 | 62162 1.69 1.68 1.69 1.73 1.74 1.73 1.55 1.54 688 | 62192 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.54 689 | 62222 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.53 690 | 62252 1.69 1.68 1.69 1.72 1.74 1.73 1.55 1.53 691 | 62282 1.68 1.68 1.69 1.72 1.74 1.73 1.55 1.54 692 | 62312 1.68 1.68 1.69 1.72 1.74 1.73 1.55 1.53 693 | 62342 1.68 1.68 1.69 1.72 1.74 1.73 1.54 1.53 694 | 62372 1.69 1.68 1.69 1.71 1.73 1.73 1.53 1.52 695 | 62402 1.69 1.68 1.69 1.71 1.73 1.73 1.53 1.51 696 | 62432 1.69 1.68 1.69 1.71 1.73 1.73 1.52 1.51 697 | 62462 1.69 1.68 1.69 1.71 1.73 1.72 1.52 1.51 698 | 62492 1.69 1.67 1.69 1.71 1.73 1.72 1.51 1.50 699 | 62522 1.69 1.67 1.69 1.70 1.72 1.72 1.50 1.49 700 | 62552 1.69 1.67 1.69 1.70 1.72 1.72 1.49 1.48 701 | 62582 1.69 1.67 1.69 1.70 1.72 1.72 1.50 1.48 702 | 62612 1.68 1.67 1.69 1.70 1.73 1.72 1.51 1.50 703 | 62642 1.66 1.67 1.69 1.71 1.73 1.72 1.52 1.51 704 | 62672 1.64 1.67 1.69 1.71 1.73 1.73 1.54 1.53 705 | 62702 1.61 1.67 1.69 1.71 1.73 1.73 1.55 1.54 706 | 62732 1.58 1.67 1.69 1.72 1.74 1.73 1.55 1.54 707 | 62762 1.53 1.66 1.68 1.72 1.74 1.73 1.56 1.55 708 | 62792 1.46 1.64 1.66 1.72 1.74 1.73 1.56 1.54 709 | 62822 1.42 1.60 1.62 1.71 1.73 1.73 1.55 1.53 710 | 62852 1.39 1.55 1.58 1.69 1.72 1.71 1.53 1.51 711 | 62882 1.39 1.51 1.55 1.67 1.71 1.70 1.48 1.46 712 | 62912 1.39 1.48 1.53 1.63 1.68 1.67 1.41 1.38 713 | 62942 1.40 1.45 1.50 1.59 1.66 1.64 1.31 1.27 714 | 62972 1.40 1.41 1.47 1.55 1.62 1.60 1.20 1.15 715 | 63002 1.41 1.39 1.45 1.51 1.57 1.55 1.11 1.06 716 | 63032 1.42 1.37 1.44 1.49 1.55 1.53 1.06 1.01 717 | 63062 1.42 1.37 1.43 1.49 1.55 1.53 1.03 0.98 718 | 63092 1.42 1.37 1.43 1.49 1.55 1.53 1.02 0.97 719 | 63122 1.42 1.37 1.43 1.49 1.55 1.52 1.01 0.96 720 | 63152 1.42 1.37 1.44 1.49 1.55 1.53 1.00 0.96 721 | 63182 1.43 1.38 1.44 1.49 1.55 1.53 1.00 0.96 722 | 63212 1.42 1.37 1.44 1.49 1.55 1.53 1.00 0.95 723 | 63242 1.42 1.37 1.43 1.49 1.54 1.52 1.00 0.95 724 | 63272 1.42 1.37 1.43 1.49 1.55 1.52 0.99 0.94 725 | 63302 1.42 1.37 1.44 1.49 1.55 1.52 0.99 0.95 726 | 63332 1.42 1.37 1.44 1.49 1.55 1.53 0.99 0.94 727 | 63362 1.42 1.37 1.43 1.49 1.55 1.52 0.99 0.93 728 | 63392 1.42 1.36 1.42 1.50 1.55 1.52 0.98 0.93 729 | 63422 1.42 1.36 1.42 1.50 1.55 1.53 0.98 0.93 730 | 63452 1.42 1.35 1.42 1.51 1.56 1.53 0.97 0.92 731 | 63482 1.42 1.44 1.49 1.58 1.62 1.60 1.01 0.95 732 | 63512 1.64 1.57 1.60 1.62 1.65 1.64 1.15 1.12 733 | 63542 1.65 1.59 1.61 1.65 1.68 1.67 1.29 1.27 734 | 63572 1.69 1.62 1.64 1.67 1.69 1.68 1.37 1.35 735 | 63602 1.71 1.64 1.66 1.68 1.70 1.69 1.40 1.39 736 | 63632 1.72 1.65 1.67 1.69 1.70 1.69 1.41 1.39 737 | 63662 1.72 1.66 1.67 1.69 1.70 1.69 1.41 1.40 738 | 63692 1.72 1.66 1.68 1.68 1.70 1.69 1.40 1.39 739 | 63722 1.73 1.66 1.68 1.68 1.70 1.69 1.39 1.38 740 | 63752 1.73 1.66 1.68 1.67 1.70 1.69 1.39 1.37 741 | 63782 1.73 1.66 1.68 1.67 1.70 1.69 1.39 1.38 742 | 63812 1.73 1.66 1.68 1.67 1.70 1.69 1.39 1.38 743 | 63842 1.73 1.66 1.68 1.67 1.70 1.69 1.39 1.38 744 | 63872 1.72 1.66 1.68 1.67 1.70 1.69 1.40 1.39 745 | 63902 1.72 1.66 1.68 1.67 1.70 1.69 1.41 1.39 746 | 63932 1.72 1.66 1.68 1.68 1.70 1.70 1.42 1.41 747 | 63962 1.72 1.66 1.68 1.68 1.71 1.70 1.43 1.42 748 | 63992 1.71 1.66 1.68 1.68 1.71 1.71 1.44 1.43 749 | 64022 1.71 1.66 1.68 1.68 1.71 1.71 1.45 1.44 750 | 64052 1.70 1.66 1.68 1.69 1.71 1.71 1.46 1.45 751 | 64082 1.70 1.66 1.68 1.69 1.72 1.71 1.47 1.45 752 | 64112 1.70 1.66 1.68 1.69 1.72 1.71 1.47 1.46 753 | 64142 1.69 1.67 1.68 1.69 1.72 1.71 1.48 1.47 754 | 64172 1.69 1.67 1.69 1.69 1.72 1.71 1.49 1.47 755 | 64202 1.69 1.67 1.68 1.70 1.72 1.71 1.49 1.48 756 | 64232 1.69 1.67 1.69 1.70 1.72 1.71 1.50 1.48 757 | 64262 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.48 758 | 64292 1.69 1.67 1.68 1.70 1.72 1.72 1.50 1.48 759 | 64322 1.68 1.66 1.68 1.70 1.72 1.72 1.50 1.49 760 | 64352 1.67 1.66 1.68 1.70 1.72 1.72 1.50 1.49 761 | 64382 1.65 1.66 1.68 1.70 1.72 1.72 1.50 1.49 762 | 64412 1.63 1.66 1.68 1.70 1.72 1.72 1.50 1.49 763 | 64442 1.60 1.65 1.67 1.70 1.72 1.72 1.51 1.49 764 | 64472 1.56 1.64 1.66 1.70 1.72 1.71 1.51 1.50 765 | 64502 1.50 1.62 1.64 1.70 1.72 1.71 1.52 1.50 766 | 64532 1.45 1.59 1.61 1.70 1.72 1.71 1.52 1.50 767 | 64562 1.42 1.56 1.59 1.70 1.72 1.71 1.52 1.50 768 | 64592 1.41 1.53 1.56 1.69 1.71 1.70 1.52 1.50 769 | 64622 1.40 1.49 1.53 1.68 1.70 1.69 1.51 1.49 770 | 64652 1.39 1.45 1.49 1.65 1.68 1.67 1.48 1.45 771 | 64682 1.39 1.42 1.46 1.64 1.67 1.65 1.43 1.39 772 | 64712 1.40 1.39 1.43 1.61 1.64 1.62 1.33 1.29 773 | 64742 1.41 1.36 1.41 1.58 1.61 1.59 1.18 1.13 774 | 64772 1.42 1.36 1.41 1.52 1.57 1.54 1.06 1.01 775 | 64802 1.43 1.37 1.42 1.49 1.55 1.53 1.03 0.98 776 | 64832 1.43 1.39 1.45 1.50 1.56 1.54 1.01 0.96 777 | 64862 1.43 1.40 1.46 1.48 1.56 1.54 1.01 0.96 778 | 64892 1.43 1.41 1.47 1.48 1.56 1.54 1.00 0.95 779 | 64922 1.43 1.41 1.47 1.48 1.56 1.54 0.99 0.95 780 | 64952 1.43 1.41 1.47 1.48 1.56 1.54 0.98 0.93 781 | 64982 1.43 1.41 1.47 1.48 1.56 1.54 0.98 0.93 782 | 65012 1.43 1.41 1.47 1.48 1.56 1.54 0.98 0.93 783 | 65042 1.43 1.40 1.46 1.48 1.55 1.53 0.97 0.93 784 | 65072 1.43 1.40 1.47 1.48 1.56 1.53 0.97 0.92 785 | 65102 1.43 1.40 1.47 1.49 1.56 1.54 0.97 0.92 786 | 65132 1.43 1.40 1.47 1.49 1.56 1.54 0.97 0.92 787 | 65162 1.41 1.41 1.48 1.50 1.57 1.56 0.94 0.90 788 | 65192 1.41 1.50 1.55 1.60 1.65 1.64 1.08 1.07 789 | 65222 1.66 1.60 1.63 1.63 1.67 1.66 1.21 1.20 790 | 65252 1.67 1.61 1.63 1.65 1.67 1.66 1.27 1.26 791 | 65282 1.69 1.63 1.64 1.67 1.69 1.67 1.33 1.31 792 | 65312 1.71 1.65 1.66 1.68 1.70 1.68 1.36 1.35 793 | 65342 1.72 1.66 1.67 1.68 1.70 1.69 1.38 1.36 794 | 65372 1.72 1.66 1.68 1.68 1.70 1.69 1.38 1.37 795 | 65402 1.73 1.66 1.68 1.67 1.70 1.69 1.37 1.36 796 | 65432 1.73 1.66 1.68 1.67 1.70 1.69 1.35 1.34 797 | 65462 1.73 1.66 1.68 1.66 1.69 1.69 1.34 1.32 798 | 65492 1.73 1.65 1.68 1.66 1.69 1.68 1.33 1.31 799 | 65522 1.73 1.65 1.68 1.65 1.69 1.68 1.32 1.31 800 | 65552 1.73 1.65 1.68 1.65 1.68 1.68 1.32 1.30 801 | 65582 1.73 1.65 1.67 1.65 1.68 1.68 1.32 1.31 802 | 65612 1.73 1.65 1.67 1.65 1.68 1.68 1.32 1.30 803 | 65642 1.72 1.64 1.67 1.65 1.68 1.67 1.32 1.31 804 | 65672 1.72 1.64 1.67 1.64 1.68 1.67 1.33 1.31 805 | 65702 1.72 1.64 1.66 1.64 1.68 1.67 1.32 1.30 806 | 65732 1.72 1.64 1.66 1.64 1.68 1.67 1.33 1.31 807 | 65762 1.72 1.64 1.66 1.64 1.68 1.67 1.33 1.32 808 | 65792 1.72 1.64 1.66 1.65 1.68 1.67 1.34 1.33 809 | 65822 1.71 1.64 1.66 1.65 1.68 1.67 1.35 1.33 810 | 65852 1.71 1.64 1.66 1.65 1.68 1.67 1.34 1.32 811 | 65882 1.71 1.63 1.66 1.64 1.67 1.67 1.32 1.31 812 | 65912 1.71 1.63 1.66 1.63 1.67 1.67 1.31 1.29 813 | 65942 1.71 1.63 1.65 1.63 1.67 1.66 1.30 1.28 814 | 65972 1.71 1.63 1.65 1.63 1.67 1.66 1.30 1.28 815 | 66002 1.71 1.62 1.65 1.63 1.67 1.66 1.30 1.28 816 | 66032 1.70 1.62 1.65 1.63 1.67 1.66 1.30 1.28 817 | 66062 1.70 1.62 1.65 1.63 1.67 1.66 1.30 1.29 818 | 66092 1.69 1.62 1.65 1.64 1.67 1.66 1.32 1.30 819 | 66122 1.68 1.62 1.65 1.64 1.67 1.67 1.34 1.32 820 | 66152 1.66 1.62 1.64 1.65 1.68 1.67 1.35 1.33 821 | 66182 1.64 1.61 1.64 1.65 1.68 1.67 1.36 1.35 822 | 66212 1.61 1.61 1.64 1.66 1.69 1.68 1.38 1.36 823 | 66242 1.57 1.61 1.63 1.66 1.69 1.68 1.40 1.38 824 | 66272 1.51 1.59 1.63 1.67 1.69 1.69 1.41 1.40 825 | 66302 1.45 1.56 1.60 1.66 1.70 1.69 1.42 1.40 826 | 66332 1.43 1.52 1.56 1.65 1.69 1.68 1.40 1.39 827 | 66362 1.42 1.49 1.54 1.62 1.68 1.67 1.36 1.34 828 | 66392 1.43 1.46 1.52 1.58 1.65 1.64 1.28 1.25 829 | 66422 1.43 1.44 1.51 1.53 1.62 1.61 1.19 1.14 830 | 66452 1.44 1.41 1.48 1.48 1.57 1.56 1.10 1.04 831 | 66482 1.45 1.38 1.45 1.44 1.53 1.51 1.05 0.99 832 | 66512 1.45 1.38 1.45 1.44 1.53 1.51 1.03 0.97 833 | 66542 1.45 1.38 1.45 1.44 1.53 1.51 1.03 0.96 834 | -------------------------------------------------------------------------------- /src/Chapter-5/Gait_Abnormality_ Detection/lstm_modes.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/srinivas-6/Deep-Learning-based-Gait-Abnormality-Detection/8f8128c4e96656e22c4480ebf731c2c603738653/src/Chapter-5/Gait_Abnormality_ Detection/lstm_modes.jpg -------------------------------------------------------------------------------- /src/Chapter-5/info.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ************************************************************************************************************************************************************** 4 | 5 | 6 | This folder contains scripts corresponding to Chapter - 5 of the thesis report . Chapter -5 explains about Abnormal gait detection using LSTM reccurent neural networks. A self explainatory tutorial describing each step is written in the jupyter notebook titled (Abnormal Gait Detection.ipynb) 7 | 8 | The data sets used for this task are present in ./dataset/abnormal/*.rar 9 | 10 | Example: 11 | 12 | training data - dataset/applied/Arv_with_weights/LL_B_label.txt 13 | inference data - dataset/abnormal/*.rar/Abnormal2_NaN_NaN_NaN_NaN_RightInsole.txt 14 | 15 | samples from [500 : 2000] correspond to Hemiplegic gait 16 | samples from [2000: 4500] correspond to Parkinson gait 17 | samples form [4500: 5300] correspond to sensory ataxic gait 18 | 19 | Slicing of the samples is similar to all other datasets in the mentioned directory. 20 | 21 | 22 | *************************************************************************************************************************************************************** -------------------------------------------------------------------------------- /src/Chapter-5/requirements.txt: -------------------------------------------------------------------------------- 1 | Packages needed to run the juypter notebook tutorial 2 | 3 | python 3.x 4 | jupyter notebook 5 | pandas 6 | numpy 7 | scikitlearn 8 | keras 9 | matplotlib 10 | scipy 11 | 12 | After installing python along with pip manager, install other libraries using pip install ---- 13 | 14 | For example 15 | 16 | pip install numpy -------------------------------------------------------------------------------- /src/Readme.md: -------------------------------------------------------------------------------- 1 | ## Gait Analysis using Long Short Term Memory Networks 2 | 3 | - Abnormal gait is characterized as a behavior that deviates from normal gait due to different kinds of abnormalities / disorders. Abnormal gait is devoid of many significant gait functions like sensation, strength, coordination which are observed in a healthy(normal) 4 | gait. 5 | 6 | - a methodology to detect abnormal gait by utilizing the 7 | characteristics of normal gait data analyzed 8 | 9 | - Natural gait data from first group containing 7 participants was collected, the procedure 10 | of the experiment was first explained to the participants and two inertial sensors are 11 | attached on the thigh and shank on both limbs, the pressure sensing insole was placed 12 | into respective foot wear 13 | 14 | - Second group of participants were asked to simulate three specific gait abnormalities 15 | involving spastic gait, parkinson’s gait and sensory ataxic gait 16 | 17 | - A stacked Long Short-Term Memory (LSTM) Network is 18 | trained using the dataset of the first group to predict the next 19 | subsequent sample in the time series 20 | 21 | - The prediction model learns to predict l values; here 22 | l=1 for N of the input variables. The training sequences 23 | (normal data) are divided into three sets: normal train (tn), 24 | normal validate (nv) and normal test (nt). The abnormal data is 25 | also segmented into abnormal validate (av) and abnormal test 26 | (at). 27 | 28 | ## Training progress 29 | ![image](../assests/LSTM_progress.png) 30 | 31 | ## LSTM Error Predictions on Healthy Gait 32 | 33 | ![image](../assests/lstm_healthy.png) 34 | 35 | ## LSTM Error Predictions on Simulated Abnormal Gaits 36 | 37 | Gait Simulation |LSTM output 38 | --- |---------| 39 | ![](../assests/Parkinson_simulation.png) |![](../assests/lstm_park.png) 40 | ![](../assests/sensory_ataxic.png) |![](../assests/lstm_ataxic.png) 41 | 42 | ## Summary 43 | The proposed stacked LSTM recurrent neural network demonstrates how abnormal gait behavior can be detected considering the characteristics of the error predictions, For normal gait the LSTM error predictions are in the order of 0.02 but for the simulated abnormal gaits error predictions vary from 0.20 to 0.25, The abnormalities have different levels of difficulty as far 44 | as detection is concerned. Error characteristics are also subjective and vary from each type of abnormality. Also, to validate the model output and to differentiate gait characteristics significant gait parameters were calculated that show contrasting difference between normal and abnormal behaviors. 45 | 46 | ### Refer [here](../Introduction/Thesis.pdf) for more information 47 | --------------------------------------------------------------------------------