Crate mel [] [src]

example of using mel to build up a filter matrix that can then be used to repeatedly and very efficiently (blas) used to transform a power spectrum vector to a mel filtered vector of lower dimension: ``` extern crate hertz; extern crate mel;

extern crate ndarray; use ndarray::ArrayBase; use ndarray::blas::AsBlas;

extern crate rblas; use rblas::{Gemv, Matrix, Vector}; use rblas::attribute::Transpose;

fn main() { let sample_rate = 44100; let window_size = 4096; let power_spectrum_size = window_size / 2; let filter_count = 100;

// build up the mel filter matrix
let mut mel_filter_matrix: ArrayBase<Vec<f64>, (usize, usize)> =
    ArrayBase::zeros((filter_count, power_spectrum_size));
for (row, col, coefficient) in mel::enumerate_mel_scaling_matrix(
    sample_rate,
    window_size,
    power_spectrum_size,
    filter_count,
) {
    mel_filter_matrix[(row, col)] = coefficient;
}

let mut power_spectrum_vector: ArrayBase<Vec<f64>, usize> =
    ArrayBase::from_elem(power_spectrum_size, 1.);

let mut mel_vector: ArrayBase<Vec<f64>, usize> =
    ArrayBase::zeros(filter_count);

// mel_vector <- mel_filter_matrix * power_spectrum_vector
Gemv::gemv(
    Transpose::NoTrans,
    &1.,
    &mel_filter_matrix.blas(),
    &power_spectrum_vector.blas(),
    &0.,
    &mut mel_vector.blas());

} ```

Structs

MelScalingMatrixEnumerator

col index changes fastest

Functions

enumerate_mel_scaling_matrix

one filter per row

enumerate_mel_scaling_matrix_base

(or many vectors at once in form of a matrix) to transform that vector into mel space. efficiently rows are mel cols are freq TODO get frequency index pair for nth mel TODO enumerate scaling vector TODO which dimension first

hertz_from_mel
mel_from_hertz