summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2021-01-20 00:30:50 -0800
committerJacob Palecki <[email protected]>2021-01-20 00:30:50 -0800
commit9c2be5743fb44e8a68084ac0bd15c02f6cce637a (patch)
treec0b09b75f7974a50ae6959fe385c1ec768fc7c83 /common
parentfurther tweaks (diff)
downloadrawaccel-9c2be5743fb44e8a68084ac0bd15c02f6cce637a.tar.xz
rawaccel-9c2be5743fb44e8a68084ac0bd15c02f6cce637a.zip
Final graph fidelity tweaks and fixes
Diffstat (limited to 'common')
-rw-r--r--common/accel-motivity.hpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp
index f88320b..246cf37 100644
--- a/common/accel-motivity.hpp
+++ b/common/accel-motivity.hpp
@@ -55,28 +55,40 @@ namespace rawaccel {
inline void fill(si_pair* lookup) const
{
double lookup_speed = 0;
+ double integral_interval = 0;
double gain_integral_speed = 0;
+ double gain_integral_speed_prev = 0;
double gain = 0;
double intercept = 0;
double output = 0;
+ double output_prev = 0;
double x = -2;
+ double logarithm_interval = 0.01;
+ double integral_intervals_per_speed = 10;
+ double integral_interval_factor = pow(10, logarithm_interval) / integral_intervals_per_speed;
+
lookup[0] = {};
for (size_t i = 1; i < LUT_SIZE; i++)
{
- x += 0.01;
+ x += logarithm_interval;
+ // Each lookup speed will be 10^0.01 = 2.33% higher than the previous
+ // To get 10 integral intervals per speed, set interval to 0.233%
lookup_speed = pow(10, x);
+ integral_interval = lookup_speed * integral_interval_factor;
while (gain_integral_speed < lookup_speed)
{
- gain_integral_speed += 0.001;
+ output_prev = output;
+ gain_integral_speed_prev = gain_integral_speed;
+ gain_integral_speed += integral_interval;
gain = operator()(gain_integral_speed);
- output += gain * 0.001;
+ output += gain * integral_interval;
}
- intercept = output - gain * lookup_speed;
+ intercept = output_prev - gain_integral_speed_prev * gain;
lookup[i] = { gain, intercept };
}