14#include "../DspMath.h"
23 if (magnitude <= knee)
25 const T excess = magnitude - knee;
26 const T range = ceiling - knee;
27 return knee + (range * excess) / (excess + range);
32 double negativeKnee)
noexcept
34 const double knee = input >= 0.0 ? positiveKnee : negativeKnee;
40 double negativeKnee)
noexcept
42 const double magnitude = std::abs(input);
43 const double knee = input >= 0.0 ? positiveKnee : negativeKnee;
44 if (magnitude <= knee)
45 return 0.5 * magnitude * magnitude;
46 const double range = 1.0 - knee;
47 const double excess = magnitude - knee;
48 return 0.5 * knee * knee + excess - range * range * std::log((excess + range) / range);
T rationalKneeMagnitude(T magnitude, T knee, T ceiling) noexcept
Positive magnitude of the original Clipper rational soft knee.
double rationalKneeShape(double input, double positiveKnee, double negativeKnee) noexcept
Unit-ceiling curve with independent positive and negative knees.
double rationalKneeIntegral(double input, double positiveKnee, double negativeKnee) noexcept
Antiderivative of the unit-ceiling curve, with F(0) = 0.