From 16dc4df3d438142ae378c9c6983585d06e0c6a33 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Mon, 29 Mar 2021 17:14:49 -0400 Subject: refactor common/settings only driver compiles remove accel-base types merge linear + classic move gain cap logic into classic impl, cap is now set in terms of output use cap/limit to determine negation remove weight, add replacement for power mode only remove legacy offset option remove naturalgain mode add legacy mode flag naturalgain -> natural natural -> natural + legacy flag add dpi setting and more accel args + defaults (prep for ips mode) replace output speed cap with input cap --- common/accel-motivity.hpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'common/accel-motivity.hpp') diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp index 246cf37..abeedf1 100644 --- a/common/accel-motivity.hpp +++ b/common/accel-motivity.hpp @@ -2,7 +2,7 @@ #include -#include "accel-base.hpp" +#include "rawaccel-settings.h" #define RA_LOOKUP @@ -16,14 +16,14 @@ namespace rawaccel { }; /// Struct to hold sigmoid (s-shaped) gain implementation. - struct motivity_impl { + struct motivity { double rate; double limit; double midpoint; double subtractive_constant; - motivity_impl(const accel_args& args) : - rate(pow(10,args.accel)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) + motivity(const accel_args& args) : + rate(pow(10,args.accel_motivity)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) { subtractive_constant = limit / 2; } @@ -34,8 +34,6 @@ namespace rawaccel { } - inline double legacy_offset(double speed) const { return operator()(speed); } - inline double apply(si_pair* lookup, double speed) const { si_pair pair = lookup[map(speed)]; @@ -96,6 +94,4 @@ namespace rawaccel { } }; - using accel_motivity = nonadditive_accel; - } -- cgit v1.2.3 From ed0bbc22681681a16b7d45b05133c38a0b82006f Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Mon, 29 Mar 2021 18:01:20 -0400 Subject: formatting + file renames --- common/accel-motivity.hpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'common/accel-motivity.hpp') diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp index abeedf1..a3cb027 100644 --- a/common/accel-motivity.hpp +++ b/common/accel-motivity.hpp @@ -1,8 +1,8 @@ #pragma once -#include +#include "rawaccel-base.hpp" -#include "rawaccel-settings.h" +#include #define RA_LOOKUP @@ -23,24 +23,27 @@ namespace rawaccel { double subtractive_constant; motivity(const accel_args& args) : - rate(pow(10,args.accel_motivity)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) + rate(pow(10,args.accel_motivity)), + limit(2*log10(args.limit)), + midpoint(log10(args.midpoint)) { subtractive_constant = limit / 2; } - inline double operator()(double speed) const { + double operator()(double speed) const + { double log_speed = log10(speed); return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); } - inline double apply(si_pair* lookup, double speed) const + double apply(si_pair* lookup, double speed) const { si_pair pair = lookup[map(speed)]; return pair.slope + pair.intercept / speed; } - inline int map(double speed) const + int map(double speed) const { int index = speed > 0 ? (int)(100 * log10(speed) + 201) : 0; @@ -50,7 +53,7 @@ namespace rawaccel { return index; } - inline void fill(si_pair* lookup) const + void fill(si_pair* lookup) const { double lookup_speed = 0; double integral_interval = 0; -- cgit v1.2.3 From fa3ebfb1eb054ba88824a908c996094bb98e85c5 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 30 Mar 2021 18:27:02 -0400 Subject: refactor lut/motivity --- common/accel-motivity.hpp | 114 ++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 79 deletions(-) (limited to 'common/accel-motivity.hpp') diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp index a3cb027..0c15598 100644 --- a/common/accel-motivity.hpp +++ b/common/accel-motivity.hpp @@ -1,100 +1,56 @@ #pragma once -#include "rawaccel-base.hpp" +#include "accel-lookup.hpp" #include -#define RA_LOOKUP - namespace rawaccel { - constexpr size_t LUT_SIZE = 601; - - struct si_pair { - double slope = 0; - double intercept = 0; - }; - - /// Struct to hold sigmoid (s-shaped) gain implementation. - struct motivity { - double rate; - double limit; + struct sigmoid { + double accel; + double motivity; double midpoint; - double subtractive_constant; - - motivity(const accel_args& args) : - rate(pow(10,args.accel_motivity)), - limit(2*log10(args.limit)), - midpoint(log10(args.midpoint)) - { - subtractive_constant = limit / 2; - } + double constant; - double operator()(double speed) const - { - double log_speed = log10(speed); - return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); + sigmoid(const accel_args& args) : + accel(exp(args.accel_motivity)), + motivity(2 * log(args.motivity)), + midpoint(log(args.midpoint)), + constant(-motivity / 2) {} - } - - double apply(si_pair* lookup, double speed) const + double operator()(double x) const { - si_pair pair = lookup[map(speed)]; - return pair.slope + pair.intercept / speed; + double denom = exp(accel * (midpoint - log(x))) + 1; + return exp(motivity / denom + constant); } + }; - int map(double speed) const - { - int index = speed > 0 ? (int)(100 * log10(speed) + 201) : 0; - - if (index < 0) return 0; - if (index >= LUT_SIZE) return LUT_SIZE - 1; + /// Struct to hold sigmoid (s-shaped) gain implementation. + struct motivity : binlog_lut { - return index; - } + using binlog_lut::operator(); - void fill(si_pair* lookup) const + motivity(const accel_args& args) : + binlog_lut(args) { - 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 += 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) - { - output_prev = output; - gain_integral_speed_prev = gain_integral_speed; - gain_integral_speed += integral_interval; - gain = operator()(gain_integral_speed); - output += gain * integral_interval; + double sum = 0; + double a = 0; + auto sigmoid_sum = [&, sig = sigmoid(args)](double b) mutable { + double interval = (b - a) / args.lut_args.partitions; + for (int i = 1; i <= args.lut_args.partitions; i++) { + sum += sig(a + i * interval) * interval; } - - intercept = output_prev - gain_integral_speed_prev * gain; - - lookup[i] = { gain, intercept }; - } - + a = b; + return sum; + }; + + fill([&](double x) { + double y = sigmoid_sum(x); + if (!this->transfer) y /= x; + return y; + }); } + }; } -- cgit v1.2.3 From 758de1d236f591de1d8b2fba4c58bfd8d5bbd26e Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 6 Apr 2021 18:04:28 -0700 Subject: Rename accelMotivity to growthRate --- common/accel-motivity.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'common/accel-motivity.hpp') diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp index 0c15598..c7ecb13 100644 --- a/common/accel-motivity.hpp +++ b/common/accel-motivity.hpp @@ -13,7 +13,7 @@ namespace rawaccel { double constant; sigmoid(const accel_args& args) : - accel(exp(args.accel_motivity)), + accel(exp(args.growth_rate)), motivity(2 * log(args.motivity)), midpoint(log(args.midpoint)), constant(-motivity / 2) {} -- cgit v1.2.3 From a6926be0e911b7b7637861866f41c3bca31a87a3 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 13 Apr 2021 23:59:21 -0400 Subject: move arbitrary input into settings separate arbitrary mode from spaced modes, arbitrary now deserializes from default settings file --- common/accel-motivity.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'common/accel-motivity.hpp') diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp index c7ecb13..0efe7ea 100644 --- a/common/accel-motivity.hpp +++ b/common/accel-motivity.hpp @@ -36,8 +36,8 @@ namespace rawaccel { double sum = 0; double a = 0; auto sigmoid_sum = [&, sig = sigmoid(args)](double b) mutable { - double interval = (b - a) / args.lut_args.partitions; - for (int i = 1; i <= args.lut_args.partitions; i++) { + double interval = (b - a) / args.spaced_args.partitions; + for (int i = 1; i <= args.spaced_args.partitions; i++) { sum += sig(a + i * interval) * interval; } a = b; -- cgit v1.2.3