22 #ifndef EDSP_HANNING_HPP 23 #define EDSP_HANNING_HPP 26 #include <edsp/meta/iterator.hpp> 29 namespace edsp {
namespace windowing {
45 template <
typename OutputIt>
46 constexpr
void hanning(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.5);
50 constexpr
auto a1 =
static_cast<value_type
>(0.5);
51 const auto size =
static_cast<size_type
>(
std::distance(first, last));
52 const auto factor = constants<value_type>::two_pi /
static_cast<value_type
>(size - 1);
53 for (size_type i = 0; i < size; ++i, ++first) {
54 const value_type tmp = factor * i;
55 *first = a0 - a1 * std::cos(tmp);
60 #endif // EDSP_HANNING_HPP constexpr void hanning(OutputIt first, OutputIt last)
Computes a Hann window of length N and stores the result in the range, beginning at d_first...
Definition: hanning.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