human-modelling-framework
Version:
Human sensorimotor control modelling framework based on Markkula et al's paper (DOI: 10.1007/s00422-017-0743-9)
61 lines (53 loc) • 1.31 kB
text/typescript
import { MotorPrimitives } from "./MotorPrimitives";
export class Pp {
value: number;
prevValue: number = 0;
dt: number; // simulation time step
G: number[];
tau_p: number; // perceptual delay [s]
tau_m: number; //motoristic delay [s]
constructor(dt?: number, tau_p?: number, tau_m?: number) {
if (dt != undefined) {
this.dt = dt;
} else {
this.dt = 0.01;
}
if (tau_p != undefined) {
this.tau_p = tau_p;
} else {
this.tau_p = 0.05;
}
if (tau_m != undefined) {
this.tau_m = tau_m;
} else {
this.tau_m = 0.1; //[s]
}
this.value = 0;
let G = new MotorPrimitives(1);
G.duration = 30; // Generate a G profile 30-s long and store it
G.solve();
this.G = G.getValues(); // note that the first index corresponds to the initial condition step (i.e. t=0)
}
update(epsilon: number, t: number) {
if (!isFinite(epsilon)) {
this.value = 0;
} else {
this.value = epsilon * this.H(t) + this.prevValue;
}
}
H(t: number) {
let h: number;
if (t < this.tau_m + this.tau_p) {
h = 1;
} else {
h = 1 - this.G[Math.round((t - (this.tau_m + this.tau_p)) / this.dt)];
}
return h;
}
getValue() {
return this.value;
}
reset() {
this.value = 0;
}
}