11std::vector<double>
hann(
size_t n)
17 std::vector<double> w(n);
18 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
19 for (
size_t i = 0; i < n; ++i)
20 w[i] = 0.5 * (1.0 - std::cos(
scale *
static_cast<double>(i)));
30 std::vector<double> w(n);
31 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
32 for (
size_t i = 0; i < n; ++i)
33 w[i] = 0.54 - 0.46 * std::cos(
scale *
static_cast<double>(i));
43 std::vector<double> w(n);
44 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
45 for (
size_t i = 0; i < n; ++i) {
46 const double x =
scale *
static_cast<double>(i);
47 w[i] = 0.42 - 0.5 * std::cos(x) + 0.08 * std::cos(2.0 * x);
54 std::vector<double> w(n, 0.0);
55 const size_t start = std::min(
offset, n);
56 const size_t end = std::min(start + support, n);
57 for (
size_t i = start; i < end; ++i)
62std::vector<double>
trapezoid(
size_t n,
size_t fade_len)
68 std::vector<double> w(n, 1.0);
69 const size_t ramp = std::min(fade_len, n / 2);
70 for (
size_t i = 0; i < ramp; ++i) {
71 const double r =
static_cast<double>(i) /
static_cast<double>(ramp);
82void apply_taper(std::span<double> data, std::span<const double> taper)
noexcept
84 if (data.empty() || taper.empty())
86 const size_t n = data.size();
87 const size_t tn = taper.size();
89 for (
size_t i = 0; i < n; ++i)
92 for (
size_t i = 0; i < n; ++i)
93 data[i] *= taper[i % tn];
99 const size_t n = data.size();
102 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
103 for (
size_t i = 0; i < n; ++i)
104 data[i] *= 0.5 * (1.0 - std::cos(
scale *
static_cast<double>(i)));
109 const size_t n = data.size();
112 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
113 for (
size_t i = 0; i < n; ++i)
114 data[i] *= 0.54 - 0.46 * std::cos(
scale *
static_cast<double>(i));
119 const size_t n = data.size();
122 const double scale = std::numbers::pi * 2.0 /
static_cast<double>(n - 1);
123 for (
size_t i = 0; i < n; ++i) {
124 const double x =
scale *
static_cast<double>(i);
125 data[i] *= 0.42 - 0.5 * std::cos(x) + 0.08 * std::cos(2.0 * x);
131 const size_t n = data.size();
132 if (n == 0 || support == 0) {
133 std::ranges::fill(data, 0.0);
137 const size_t start = std::min(
offset, n);
138 const size_t end = std::min(start + support, n);
140 for (
size_t i = 0; i < start; ++i)
142 for (
size_t i = end; i < n; ++i)
148 const size_t n = data.size();
151 const size_t ramp = std::min(fade_len, n / 2);
152 for (
size_t i = 0; i < ramp; ++i) {
153 const double r =
static_cast<double>(i) /
static_cast<double>(ramp);
155 data[n - 1 - i] *= r;
Discrete taper (window) coefficient generation and in-place application for MayaFlux::Kinesis.
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.
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.
void apply_taper(std::span< double > data, std::span< const double > taper) noexcept
Multiply data element-wise by a precomputed taper.
std::vector< double > rectangular(size_t n, size_t support, size_t offset)
Rectangular (boxcar) taper coefficients.
std::vector< double > trapezoid(size_t n, size_t fade_len)
Trapezoid taper coefficients with configurable flat region.
void apply_hann(std::span< double > data) noexcept
Apply a Hann taper in-place without materialising coefficients.
std::vector< double > hamming(size_t n)
Hamming taper coefficients.
void apply_hamming(std::span< double > data) noexcept
Apply a Hamming taper in-place without materialising coefficients.
void apply_rectangular(std::span< double > data, size_t support, size_t offset) noexcept
Apply a rectangular taper in-place without materialising coefficients.