| 105 | |
| 106 | |
| 107 | void STFT::updateWindow(const int new_window_type) |
| 108 | { |
| 109 | window_type = new_window_type; |
| 110 | |
| 111 | switch (window_type) { |
| 112 | case RECTANGULAR: { |
| 113 | for (int sample = 0; sample < fft_size; ++sample) |
| 114 | fft_window[sample] = 1.0f; |
| 115 | break; |
| 116 | } |
| 117 | case BART_LETT: { |
| 118 | for (int sample = 0; sample < fft_size; ++sample) |
| 119 | fft_window[sample] = 1.0f - fabs (2.0f * (float)sample / (float)(fft_size - 1) - 1.0f); |
| 120 | break; |
| 121 | } |
| 122 | case HANN: { |
| 123 | for (int sample = 0; sample < fft_size; ++sample) |
| 124 | fft_window[sample] = 0.5f - 0.5f * cosf (2.0f * M_PI * (float)sample / (float)(fft_size - 1)); |
| 125 | break; |
| 126 | } |
| 127 | case HAMMING: { |
| 128 | for (int sample = 0; sample < fft_size; ++sample) |
| 129 | fft_window[sample] = 0.54f - 0.46f * cosf (2.0f * M_PI * (float)sample / (float)(fft_size - 1)); |
| 130 | break; |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | float window_sum = 0.0f; |
| 135 | for (int sample = 0; sample < fft_size; ++sample) |
| 136 | window_sum += fft_window[sample]; |
| 137 | |
| 138 | window_scale_factor = 0.0f; |
| 139 | if (overlap != 0 && window_sum != 0.0f) |
| 140 | window_scale_factor = 1.0f / (float)overlap / window_sum * (float)fft_size; |
| 141 | } |
| 142 | |
| 143 | |
| 144 |
nothing calls this directly
no outgoing calls
no test coverage detected