#ifndef SPROUT_COMPOST_UTILITY_ROSENBERG_HPP #define SPROUT_COMPOST_UTILITY_ROSENBERG_HPP #include #include #include #include namespace sprout { namespace compost { // // rosenberg_value // Rosenberg 波は,声門開大期と閉小期が周期の40%,16%となる非対称形の波形であり,τ1 が開大期,τ2が閉小期を示す. // template inline SPROUT_CONSTEXPR typename sprout::float_promote::type rosenberg_value(T x, T tau1, T tau2) { typedef typename sprout::float_promote::type type; return x >= 0 && x <= tau1 ? 3 * sprout::detail::pow2(x / tau1) - 2 * sprout::detail::pow3(x / tau1) : x > tau1 && x <= tau1 + tau2 ? 1 - sprout::detail::pow2((x - tau1) / tau2) : 0 ; } } // namespace compost } // namespace sprout #endif // #ifndef SPROUT_COMPOST_UTILITY_ROSENBERG_HPP