| 190 | // --------------------------------------------------------------- |
| 191 | |
| 192 | void mel_spectrogram( |
| 193 | const float* magnitude_spec, |
| 194 | const float* mel_filters, |
| 195 | float* out, |
| 196 | int num_frames, |
| 197 | int num_frequency_bins, |
| 198 | int num_mel_filters) |
| 199 | { |
| 200 | // out[f, m] = sum_b( magnitude_spec[f, b] * mel_filters[b, m] ) |
| 201 | for (int f = 0; f < num_frames; ++f) { |
| 202 | const float* spec_row = magnitude_spec + f * num_frequency_bins; |
| 203 | float* out_row = out + f * num_mel_filters; |
| 204 | |
| 205 | for (int m = 0; m < num_mel_filters; ++m) { |
| 206 | float sum = 0.0f; |
| 207 | for (int b = 0; b < num_frequency_bins; ++b) { |
| 208 | sum += spec_row[b] * mel_filters[b * num_mel_filters + m]; |
| 209 | } |
| 210 | out_row[m] = sum; |
| 211 | } |
| 212 | } |
| 213 | } |
| 214 | |
| 215 | // --------------------------------------------------------------- |
| 216 | // Auto-dispatching optimized versions |
no outgoing calls
no test coverage detected