9std::vector<double>
hann(
size_t n)
15 std::vector<double> w(n);
16 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
17 for (
size_t i = 0; i < n; ++i)
18 w[i] = 0.5 * (1.0 - std::cos(
scale *
static_cast<double>(i)));
28 std::vector<double> w(n);
29 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
30 for (
size_t i = 0; i < n; ++i)
31 w[i] = 0.54 - 0.46 * std::cos(
scale *
static_cast<double>(i));
41 std::vector<double> w(n);
42 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
43 for (
size_t i = 0; i < n; ++i) {
44 const double x =
scale *
static_cast<double>(i);
45 w[i] = 0.42 - 0.5 * std::cos(x) + 0.08 * std::cos(2.0 * x);
52 return std::vector<double>(n, 1.0);
55std::vector<double>
trapezoid(
size_t n,
size_t fade_len)
61 std::vector<double> w(n, 1.0);
62 const size_t ramp = std::min(fade_len, n / 2);
63 for (
size_t i = 0; i < ramp; ++i) {
64 const double r =
static_cast<double>(i) /
static_cast<double>(ramp);
75void apply_taper(std::span<double> data, std::span<const double> taper)
noexcept
77 if (data.empty() || taper.empty())
79 const size_t n = data.size();
80 const size_t tn = taper.size();
82 for (
size_t i = 0; i < n; ++i)
85 for (
size_t i = 0; i < n; ++i)
86 data[i] *= taper[i % tn];
92 const size_t n = data.size();
95 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
96 for (
size_t i = 0; i < n; ++i)
97 data[i] *= 0.5 * (1.0 - std::cos(
scale *
static_cast<double>(i)));
102 const size_t n = data.size();
105 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
106 for (
size_t i = 0; i < n; ++i)
107 data[i] *= 0.54 - 0.46 * std::cos(
scale *
static_cast<double>(i));
112 const size_t n = data.size();
115 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
116 for (
size_t i = 0; i < n; ++i) {
117 const double x =
scale *
static_cast<double>(i);
118 data[i] *= 0.42 - 0.5 * std::cos(x) + 0.08 * std::cos(2.0 * x);
124 const size_t n = data.size();
127 const size_t ramp = std::min(fade_len, n / 2);
128 for (
size_t i = 0; i < ramp; ++i) {
129 const double r =
static_cast<double>(i) /
static_cast<double>(ramp);
131 data[n - 1 - i] *= r;
Discrete taper (window) coefficient generation and in-place application for MayaFlux::Kinesis.
std::vector< double > blackman(size_t n)
Blackman taper coefficients.
void apply_blackman(std::span< double > data) noexcept
Apply a Blackman taper in-place without materialising coefficients.
std::vector< double > rectangular(size_t n)
Rectangular (unity) taper coefficients.
std::vector< double > hamming(size_t n)
Hamming taper coefficients.
void apply_hann(std::span< double > data) noexcept
Apply a Hann taper in-place without materialising coefficients.
void apply_hamming(std::span< double > data) noexcept
Apply a Hamming taper in-place without materialising coefficients.
void apply_trapezoid(std::span< double > data, size_t fade_len) noexcept
Apply a trapezoid taper in-place without materialising coefficients.
std::vector< double > hann(size_t n)
Hann (raised cosine) taper coefficients.
void apply_taper(std::span< double > data, std::span< const double > taper) noexcept
Multiply data element-wise by a precomputed taper.
std::vector< double > trapezoid(size_t n, size_t fade_len)
Trapezoid taper coefficients with configurable flat region.
Tendency< D, float > scale(const Tendency< D, float > &t, float factor)
Uniform scaling of a scalar-output tendency.