/* Some little helpers Copyright 2018 Ahmet Inan */ #pragma once #include "const.hh" namespace DSP { template int signum(TYPE v) { return (v > TYPE(0)) - (v < TYPE(0)); } template AB lerp(AB a, AB b, X x) { return (X(1) - x) * a + x * b; } template TYPE clamp(TYPE x, TYPE a, TYPE b) { return x < a ? a : x > b ? b : x; } template TYPE normal_pdf(TYPE x, TYPE m, TYPE s) { return exp(-pow((x - m) / s, TYPE(2)) / TYPE(2)) / (Const::SqrtTwoPi() * s); } template TYPE sinc(TYPE x) { return TYPE(0) == x ? TYPE(1) : sin(Const::Pi() * x) / (Const::Pi() * x); } template TYPE delta(TYPE x) { return TYPE(0) == x ? TYPE(1) : TYPE(0); } }