22 #ifndef EDSP_FLAT_TOP_HPP 23 #define EDSP_FLAT_TOP_HPP 27 #include <edsp/meta/iterator.hpp> 29 namespace edsp {
namespace windowing {
45 template <
typename OutputIt>
46 constexpr
void flattop(OutputIt first, OutputIt last) {
47 using value_type = meta::value_type_t<OutputIt>;
48 using size_type = meta::diff_type_t<OutputIt>;
49 constexpr
auto a0 =
static_cast<value_type
>(0.21557895);
50 constexpr
auto a1 =
static_cast<value_type
>(0.41663158);
51 constexpr
auto a2 =
static_cast<value_type
>(0.277263158);
52 constexpr
auto a3 =
static_cast<value_type
>(0.083578947);
53 constexpr
auto a4 =
static_cast<value_type
>(0.006947368);
54 const auto size =
static_cast<size_type
>(
std::distance(first, last));
55 const auto factor = constants<value_type>::two_pi /
static_cast<value_type
>(size - 1);
56 for (size_type i = 0; i < size; ++i, ++first) {
57 const value_type tmp = factor * i;
58 *first = a0 - a1 * std::cos(tmp) + a2 * std::cos(2 * tmp) - a3 * std::cos(3 * tmp) + a4 * std::cos(4 * tmp);
64 #endif // EDSP_FLAT_TOP_HPP
constexpr void flattop(OutputIt first, OutputIt last)
Computes a Flat top window of length N and stores the result in the range, beginning at d_first...
Definition: flat_top.hpp:46
constexpr T distance(T x, T y) noexcept
Computes the distance between x and y.
Definition: numeric.hpp:328
Definition: amplifier.hpp:29