#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 && sprout::math::less_equal(x, tau1) ? 3 * sprout::detail::pow2(x / tau1) - 2 * sprout::detail::pow3(x / tau1) : sprout::math::greater(x, tau1) && sprout::math::less_equal(x, tau1 + tau2) ? 1 - sprout::detail::pow2((x - tau1) / tau2) : 0 ; } } // namespace compost } // namespace sprout #endif // #ifndef SPROUT_COMPOST_UTILITY_ROSENBERG_HPP