Krotos Modules 3
Loading...
Searching...
No Matches
WindowFunctions.cpp
Go to the documentation of this file.
1#pragma once
2#include <cmath>
3
4namespace krotos
5{
6 namespace WindowFunctions
7 {
12 std::vector<float> generateWindow(int sizeInSamples, WindowType windowType)
13 {
14 std::vector<float> window(sizeInSamples, 0.0f);
15
16 switch (windowType)
17 {
19 for (int n = 0; n < sizeInSamples; n++)
20 window[n] = 0.5f * (1.0f - std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
21 float(sizeInSamples - 1)));
22 break;
24 for (int n = 0; n < sizeInSamples; n++)
25 window[n] = 0.54f - 0.46f * std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
26 float(sizeInSamples - 1));
27 break;
29 for (int n = 0; n < sizeInSamples; n++)
30 window[n] = 1.0f;
31 break;
33 for (int n = 0; n < sizeInSamples; n++)
34 window[n] = (0.42323f -
35 (0.49755f * std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
36 float(sizeInSamples - 1))) +
37 0.07922f * std::cosf((2.0f * float(n) * 2.0f * juce::MathConstants<float>::pi) /
38 float(sizeInSamples - 1)));
39 break;
41 for (int n = 0; n < sizeInSamples; n++)
42 window[n] = 1.0f;
43 break;
44 }
45
46 return window;
47 }
48
49 Eigen::VectorXf generateWindowEigen(int sizeInSamples, WindowType windowType)
50 {
51 Eigen::VectorXf window = Eigen::VectorXf::Zero(sizeInSamples);
52
53 switch (windowType)
54 {
56 for (int n = 0; n < sizeInSamples; ++n)
57 window[n] = 0.5f * (1.0f - std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
58 float(sizeInSamples - 1)));
59 break;
61 for (int n = 0; n < sizeInSamples; ++n)
62 window[n] = 0.54f - 0.46f * std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
63 float(sizeInSamples - 1));
64 break;
66 window.setOnes();
67 break;
69 for (int n = 0; n < sizeInSamples; ++n)
70 window[n] = (0.42323f -
71 (0.49755f * std::cosf((float(n) * 2.0f * juce::MathConstants<float>::pi) /
72 float(sizeInSamples - 1))) +
73 0.07922f * std::cosf((2.0f * float(n) * 2.0f * juce::MathConstants<float>::pi) /
74 float(sizeInSamples - 1)));
75 break;
77 window.setOnes();
78 break;
79 }
80
81 return window;
82 }
83
84 float getWindowGainCorrection(int sizeInSamples, WindowType windowType)
85 {
86 float windowGainCorrection = 0.0f;
87
88 auto window = generateWindow(sizeInSamples, windowType);
89
90 for (float value : window)
91 {
92 windowGainCorrection += value;
93 }
94
95 return windowGainCorrection;
96 }
97 } // namespace WindowFunctions
98} // namespace krotos
std::vector< float > generateWindow(int sizeInSamples, WindowType windowType)
Definition WindowFunctions.cpp:12
float getWindowGainCorrection(int sizeInSamples, WindowType windowType)
Definition WindowFunctions.cpp:84
Eigen::VectorXf generateWindowEigen(int sizeInSamples, WindowType windowType)
Definition WindowFunctions.cpp:49
Definition AirAbsorptionFilter.cpp:2
WindowType
Definition WindowFunctions.h:6