53 if (&w ==
this)
return *
this;
61 void cut(T *src)
const {
cut(src, src); }
62 void cut(T *src, T *dst)
const {
63 for (
int i = 0; i <
m_size; ++i) dst[i] = src[i] *
m_cache[i];
94 for (i = 0; i < n; ++i) mult[i] = 1.0;
99 for (i = 0; i < n; ++i) {
105 for (i = 0; i < n/2; ++i) {
106 mult[i] *= (i / T(n/2));
107 mult[i + n/2] *= (1.0 - (i / T(n/2)));
112 cosinewin(mult, 0.54, 0.46, 0.0, 0.0);
116 cosinewin(mult, 0.50, 0.50, 0.0, 0.0);
120 cosinewin(mult, 0.42, 0.50, 0.08, 0.0);
124 for (i = 0; i < n; ++i) {
125 mult[i] *= pow(2, - pow((i - (n-1)/2.0) / ((n-1)/2.0 / 3), 2));
132 for (i = 0; i < N/4; ++i) {
133 T m = 2 * pow(1.0 - (T(N)/2 - i) / (T(N)/2), 3);
137 for (i = N/4; i <= N/2; ++i) {
139 T m = 1.0 - 6 * pow(wn / (T(N)/2), 2) * (1.0 - abs(wn) / (T(N)/2));
147 cosinewin(mult, 0.3635819, 0.4891775, 0.1365995, 0.0106411);
151 cosinewin(mult, 0.35875, 0.48829, 0.14128, 0.01168);
158 for (
int i = 0; i < n; ++i) {
159 m_area += m_cache[i];
164 template <
typename T>
167 const int n = m_size;
168 for (
int i = 0; i < n; ++i) {
170 - a1 * cos((2 * M_PI * i) / n)
171 + a2 * cos((4 * M_PI * i) / n)
172 - a3 * cos((6 * M_PI * i) / n));
176 template <
typename T>
192 std::cerr <<
"WARNING: Window::getNameForType: unknown type " 193 << type << std::endl;
198 template <
typename T>
212 std::cerr <<
"WARNING: Window::getTypeForName: unknown name \"" 213 << name <<
"\", defaulting to \"hanning\"" << std::endl;
static std::string getNameForType(WindowType type)
static WindowType getTypeForName(std::string name)
Window & operator=(const Window &w)
void cut(T *src, T *dst) const
void cosinewin(T *, T, T, T, T)
Window(WindowType type, int size)
Construct a windower of the given type and size.
WindowType getType() const