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 |