CMSIS-DSP: MFCC F32

MFCC F32 implementation
MFCC F32 tests
MFCC F32 in Python wrapper
Python wrapper structure updated to support submodule like
cmsisdsp.mfcc and cmsisdsp.fixedpoint
PythonWrapper tests updated to use the new fixedpoint
cmsisdsp.mfcc is used to generate the mel filter, dct and window coefficients.
pull/19/head
Christophe Favergeon 4 years ago
parent 9f36d99a0b
commit 3d264cfabb

2
.gitignore vendored

@ -1,6 +1,7 @@
DSP_Lib_TestSuite/build/
PythonWrapper/build/
PythonWrapper/cmsisdsp.cp36-win_amd64.pyd
PythonWrapper/internal.cp36-win_amd64.pyd
PythonWrapper/*.so
PythonWrapper/rec_2.dat
*.pickle
@ -15,3 +16,4 @@ Projects/ARM/IntermediateFiles/
.ipynb_checkpoints
Examples/ARM/*/RTE/
Examples/ARM/*/MTICoverageOut.cov
CMSISDSP.egg-info/

@ -584,6 +584,57 @@ arm_status arm_rfft_fast_init_f32 (
q15_t * pInlineBuffer);
/**
* @brief Instance structure for the Floating-point MFCC function.
*/
typedef struct
{
const float32_t *dctCoefs; /**< Internal DCT coefficients */
const float32_t *filterCoefs; /**< Internal Mel filter coefficients */
const float32_t *windowCoefs; /**< Windowing coefficients */
const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */
const uint32_t *filterLengths; /**< Internal Mel filter lengths */
uint32_t fftLen; /**< FFT length */
uint32_t nbMelFilters; /**< Number of Mel filters */
uint32_t nbDctOutputs; /**< Number of DCT outputs */
#if defined(ARM_MFCC_CFFT_BASED)
/* Implementation of the MFCC is using a CFFT */
arm_cfft_instance_f32 cfft; /**< Internal CFFT instance */
#else
/* Implementation of the MFCC is using a RFFT (default) */
arm_rfft_fast_instance_f32 rfft;
#endif
} arm_mfcc_instance_f32 ;
arm_status arm_mfcc_init_f32(
arm_mfcc_instance_f32 * S,
uint32_t fftLen,
uint32_t nbMelFilters,
uint32_t nbDctOutputs,
const float32_t *dctCoefs,
const uint32_t *filterPos,
const uint32_t *filterLengths,
const float32_t *filterCoefs,
const float32_t *windowCoefs
);
/**
@brief MFCC F32
@param[in] S points to the mfcc instance structure
@param[in] pSrc points to the input samples
@param[out] pDst points to the output MFCC values
@param[inout] pTmp points to a temporary buffer of complex
@return none
*/
void arm_mfcc_f32(
arm_mfcc_instance_f32 * S,
float32_t *pSrc,
float32_t *pDst,
float32_t *pTmp
);
#ifdef __cplusplus
}

@ -219,6 +219,17 @@ Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE
Note that the example file
## Submodules
The Python wrapper is containing two submodules : fixedpoint and mfcc
fixedpoint is proving some tools to help generating the fixedpoint values expected
by CMSIS-DSP.
mfcc is generating some tools to generate the MEL filters, DCT and window coefficients
expected by the CMSIS-DSP MFCC implemetation.
MEL filters are represented as 3 arrays to encode a sparse array.
# LIMITATIONS

@ -0,0 +1,2 @@
from internal import *

@ -0,0 +1,65 @@
import numpy as np
def frequencyToMelSpace(freq):
return 1127.0 * np.log(1.0 + freq / 700.0)
def melSpaceToFrequency(mels):
return 700.0 * (np.exp(mels / 1127.0) - 1.0)
def melFilterMatrix(fmin, fmax, numOfMelFilters,fs,FFTSize):
filters = np.zeros((numOfMelFilters,int(FFTSize/2+1)))
zeros = np.zeros(int(FFTSize // 2 ))
fmin_mel = frequencyToMelSpace(fmin)
fmax_mel = frequencyToMelSpace(fmax)
mels = np.linspace(fmin_mel, fmax_mel, num=numOfMelFilters+2)
linearfreqs = np.linspace( 0, fs/2.0, int(FFTSize // 2 + 1) )
spectrogrammels = frequencyToMelSpace(linearfreqs)[1:]
filtPos=[]
filtLen=[]
totalLen = 0
packedFilters = []
for n in range(numOfMelFilters):
upper = (spectrogrammels - mels[n])/(mels[n+1]-mels[n])
lower = (mels[n+2] - spectrogrammels)/(mels[n+2]-mels[n+1])
filters[n, :] = np.hstack([0,np.maximum(zeros,np.minimum(upper,lower))])
nb = 0
startFound = False
for sample in filters[n, :]:
if not startFound and sample != 0.0:
startFound = True
startPos = nb
if startFound and sample == 0.0:
endPos = nb - 1
break
nb = nb + 1
filtLen.append(endPos - startPos+1)
totalLen += endPos - startPos + 1
filtPos.append(startPos)
packedFilters += list(filters[n, startPos:endPos+1])
return filtLen,filtPos,totalLen,packedFilters,filters
def dctMatrix(numOfDctOutputs, numOfMelFilters):
result = np.zeros((numOfDctOutputs,numOfMelFilters))
s=(np.linspace(1,numOfMelFilters,numOfMelFilters) - 0.5)/numOfMelFilters
for i in range(0, numOfDctOutputs):
result[i,:]=np.cos(i * np.pi*s) * np.sqrt(2.0/numOfMelFilters)
return result.reshape(numOfDctOutputs*numOfMelFilters)

@ -41,8 +41,8 @@
#ifdef CMSISDSP
#include "arm_math.h"
#define MODNAME "cmsisdsp"
#define MODINITNAME cmsisdsp
#define MODNAME "internal"
#define MODINITNAME internal
#endif
#include <numpy/arrayobject.h>

@ -5676,6 +5676,90 @@ static PyMethodDef arm_fir_sparse_instance_q7_methods[] = {
MLTYPE(arm_fir_sparse_instance_q7,arm_fir_sparse_instance_q7_new,arm_fir_sparse_instance_q7_dealloc,arm_fir_sparse_instance_q7_init,arm_fir_sparse_instance_q7_methods);
typedef struct {
PyObject_HEAD
arm_mfcc_instance_f32 *instance;
} ml_arm_mfcc_instance_f32Object;
static void
arm_mfcc_instance_f32_dealloc(ml_arm_mfcc_instance_f32Object* self)
{
//printf("Dealloc called\n");
if (self->instance)
{
PyMem_Free(self->instance);
}
Py_TYPE(self)->tp_free((PyObject*)self);
}
static PyObject *
arm_mfcc_instance_f32_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
ml_arm_mfcc_instance_f32Object *self;
//printf("New called\n");
self = (ml_arm_mfcc_instance_f32Object *)type->tp_alloc(type, 0);
//printf("alloc called\n");
if (self != NULL) {
self->instance = PyMem_Malloc(sizeof(arm_mfcc_instance_f32));
self->instance->dctCoefs = NULL;
self->instance->filterCoefs = NULL;
self->instance->windowCoefs = NULL;
self->instance->filterPos = NULL;
self->instance->filterLengths = NULL;
}
return (PyObject *)self;
}
static int
arm_mfcc_instance_f32_init(ml_arm_mfcc_instance_f32Object *self, PyObject *args, PyObject *kwds)
{
PyObject *pTwiddle=NULL;
PyObject *pBitRevTable=NULL;
char *kwlist[] = {
"fftLen","nbMelFilters","nbDctOutputs",NULL
};
if (PyArg_ParseTupleAndKeywords(args, kwds, "|iii", kwlist,&self->instance->fftLen
,&self->instance->nbMelFilters,&self->instance->nbDctOutputs
))
{
}
return 0;
}
GETFIELD(arm_mfcc_instance_f32,fftLen,"i");
GETFIELD(arm_mfcc_instance_f32,nbMelFilters,"i");
GETFIELD(arm_mfcc_instance_f32,nbDctOutputs,"i");
static PyMethodDef arm_mfcc_instance_f32_methods[] = {
{"fftLen", (PyCFunction) Method_arm_mfcc_instance_f32_fftLen,METH_NOARGS,"fftLen"},
{"nbMelFilters", (PyCFunction) Method_arm_mfcc_instance_f32_nbMelFilters,METH_NOARGS,"nbMelFilters"},
{"nbDctOutputs", (PyCFunction) Method_arm_mfcc_instance_f32_nbDctOutputs,METH_NOARGS,"nbDctOutputs"},
{NULL} /* Sentinel */
};
MLTYPE(arm_mfcc_instance_f32,arm_mfcc_instance_f32_new,arm_mfcc_instance_f32_dealloc,arm_mfcc_instance_f32_init,arm_mfcc_instance_f32_methods);
void typeRegistration(PyObject *module) {
@ -5740,7 +5824,7 @@ void typeRegistration(PyObject *module) {
ADDTYPE(arm_fir_sparse_instance_q31);
ADDTYPE(arm_fir_sparse_instance_q15);
ADDTYPE(arm_fir_sparse_instance_q7);
ADDTYPE(arm_mfcc_instance_f32);
}
@ -14803,6 +14887,33 @@ cmsis_arm_sqrt_q31(PyObject *obj, PyObject *args)
return(NULL);
}
static PyObject *
cmsis_arm_divide_q15(PyObject *obj, PyObject *args)
{
q15_t num,den; // input
q15_t pOut,shift; // output
if (PyArg_ParseTuple(args,"hh",&num,&den))
{
arm_status returnValue = arm_divide_q15(num,den,&pOut,&shift);
PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
PyObject* pOutOBJ=Py_BuildValue("h",pOut);
PyObject* pShiftOBJ=Py_BuildValue("i",shift);
PyObject *pythonResult = Py_BuildValue("OOO",theReturnOBJ,pOutOBJ,pShiftOBJ);
Py_DECREF(theReturnOBJ);
Py_DECREF(pOutOBJ);
Py_DECREF(pShiftOBJ);
return(pythonResult);
}
return(NULL);
}
static PyObject *
cmsis_arm_sqrt_q15(PyObject *obj, PyObject *args)
@ -16884,6 +16995,102 @@ cmsis_arm_bilinear_interp_q7(PyObject *obj, PyObject *args)
return(NULL);
}
/*
MFCC
*/
static PyObject *
cmsis_arm_mfcc_init_f32(PyObject *obj, PyObject *args)
{
PyObject *S=NULL; // input
uint32_t fftLen,nbMelFilters,nbDctOutputs; // input
PyObject *pdctCoefs=NULL; // input
float32_t *pdctCoefs_converted=NULL; // input
PyObject *pfilterCoefs=NULL; // input
float32_t *pfilterCoefs_converted=NULL; // input
PyObject *pwindowCoefs=NULL; // input
float32_t *pwindowCoefs_converted=NULL; // input
PyObject *pfilterPos=NULL; // input
uint32_t *pfilterPos_converted=NULL; // input
PyObject *pfilterLengths=NULL; // input
uint32_t *pfilterLengths_converted=NULL; // input
if (PyArg_ParseTuple(args,"OiiiOOOOO",&S,&fftLen,&nbMelFilters,&nbDctOutputs,
&pdctCoefs,&pfilterPos,&pfilterLengths,&pfilterCoefs,&pwindowCoefs))
{
ml_arm_mfcc_instance_f32Object *selfS = (ml_arm_mfcc_instance_f32Object *)S;
GETARGUMENT(pdctCoefs,NPY_DOUBLE,double,float32_t);
GETARGUMENT(pfilterPos,NPY_UINT32,uint32_t,uint32_t);
GETARGUMENT(pfilterLengths,NPY_UINT32,uint32_t,uint32_t);
GETARGUMENT(pfilterCoefs,NPY_DOUBLE,double,float32_t);
GETARGUMENT(pwindowCoefs,NPY_DOUBLE,double,float32_t);
arm_status returnValue = arm_mfcc_init_f32(selfS->instance,
fftLen,nbMelFilters,nbDctOutputs,
pdctCoefs_converted,
pfilterPos_converted,pfilterLengths_converted,pfilterCoefs_converted,
pwindowCoefs_converted);
PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
PyObject *pythonResult = Py_BuildValue("O",theReturnOBJ);
Py_DECREF(theReturnOBJ);
return(pythonResult);
}
return(NULL);
}
static PyObject *
cmsis_arm_mfcc_f32(PyObject *obj, PyObject *args)
{
PyObject *S=NULL; // input
PyObject *p1=NULL; // input
float32_t *p1_converted=NULL; // input
PyObject *tmp=NULL; // input
float32_t *tmp_converted=NULL; // input
float32_t *pDst;
if (PyArg_ParseTuple(args,"OOO",&S,&p1,&tmp))
{
ml_arm_mfcc_instance_f32Object *selfS = (ml_arm_mfcc_instance_f32Object *)S;
GETARGUMENT(p1,NPY_DOUBLE,double,float32_t);
GETARGUMENT(tmp,NPY_DOUBLE,double,float32_t);
pDst=PyMem_Malloc(sizeof(float32_t)*selfS->instance->nbDctOutputs);
arm_mfcc_f32(selfS->instance,p1_converted,pDst,tmp_converted);
FLOATARRAY1(pDstOBJ,selfS->instance->nbDctOutputs,pDst);
PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
Py_DECREF(pDstOBJ);
FREEARGUMENT(p1_converted);
FREEARGUMENT(tmp_converted);
return(pythonResult);
}
return(NULL);
}
static PyMethodDef CMSISMLMethods[] = {
@ -17139,6 +17346,7 @@ static PyMethodDef CMSISMLMethods[] = {
{"arm_sqrt_f32", cmsis_arm_sqrt_f32, METH_VARARGS,""},
{"arm_sqrt_q31", cmsis_arm_sqrt_q31, METH_VARARGS,""},
{"arm_sqrt_q15", cmsis_arm_sqrt_q15, METH_VARARGS,""},
{"arm_divide_q15", cmsis_arm_divide_q15, METH_VARARGS,""},
{"arm_circularWrite_f32", cmsis_arm_circularWrite_f32, METH_VARARGS,""},
{"arm_circularWrite_q15", cmsis_arm_circularWrite_q15, METH_VARARGS,""},
{"arm_circularWrite_q7", cmsis_arm_circularWrite_q7, METH_VARARGS,""},
@ -17247,6 +17455,8 @@ static PyMethodDef CMSISMLMethods[] = {
{"arm_jensenshannon_distance_f32",cmsis_arm_jensenshannon_distance_f32, METH_VARARGS,""},
{"arm_minkowski_distance_f32",cmsis_arm_minkowski_distance_f32, METH_VARARGS,""},
#endif
{"arm_mfcc_init_f32", cmsis_arm_mfcc_init_f32, METH_VARARGS,""},
{"arm_mfcc_f32", cmsis_arm_mfcc_f32, METH_VARARGS,""},
{"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
{NULL, NULL, 0, NULL} /* Sentinel */

@ -5,7 +5,7 @@ ROOT=".."
config = CMSISDSP
if config == CMSISDSP:
extensionName = 'cmsisdsp'
extensionName = 'internal'
setupName = 'CMSISDSP'
setupDescription = 'CMSIS-DSP Python API'
cflags="-DCMSISDSP"

@ -97,6 +97,7 @@ module1 = Extension(config.extensionName,
setup (name = config.setupName,
version = '1.0.0',
packages=['cmsisdsp'],
description = config.setupDescription,
ext_modules = [module1],
author = 'Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.',

@ -2,7 +2,7 @@ import cmsisdsp as dsp
import numpy as np
from scipy import signal
from scipy.fftpack import dct
import fixedpoint as f
import cmsisdsp.fixedpoint as f
from pyquaternion import Quaternion
import colorama

@ -1,6 +1,6 @@
import cmsisdsp as dsp
import numpy as np
import fixedpoint as f
import cmsisdsp.fixedpoint as f
# Test vlog q31 and q15
x = np.array([0.9,0.5,2**-16])

@ -0,0 +1,91 @@
import cmsisdsp as dsp
import numpy as np
import cmsisdsp.fixedpoint as f
import cmsisdsp.mfcc as mfcc
import scipy.signal as sig
debug=np.array([ 0.65507051 ,-0.94647589 ,0.00627239 ,0.14151286 ,-0.10863318 ,-0.36370327
,0.05777126 ,-0.11915792 ,0.50183546 ,-0.31461335 ,0.66440771 ,0.05389963
,0.39690544 ,0.25424852 ,-0.17045277 ,0.09649268 ,0.87357385 ,-0.44666372
,-0.02637822 ,-0.10055151 ,-0.14610252 ,-0.05981251 ,-0.02999124 ,0.60923213
,0.10530095 ,0.35684248 ,0.21845946 ,0.47845017 ,-0.60206979 ,0.25186908
,-0.27410056 ,-0.07080467 ,-0.05109539 ,-0.2666572 ,0.25483105 ,-0.86459185
,0.07733397 ,-0.58535444 ,0.06230904 ,-0.04161475 ,-0.17467296 ,0.77721125
,-0.01728161 ,-0.32141218 ,0.36674466 ,-0.17932843 ,0.78486115 ,0.12469579
,-0.94796877 ,0.05536031 ,0.32627676 ,0.46628512 ,-0.02585836 ,-0.51439834
,0.21387904 ,0.16319442 ,-0.01020818 ,-0.77161183 ,0.07754634 ,-0.24970455
,0.2368003 ,0.35167963 ,0.14620137 ,-0.02415204 ,0.91086167 ,-0.02434647
,-0.3968239 ,-0.04703925 ,-0.43905103 ,-0.34834965 ,0.33728158 ,0.15138992
,-0.43218885 ,0.26619718 ,0.07177906 ,0.33393581 ,-0.50306915 ,-0.63101084
,-0.08128395 ,-0.06569788 ,0.84232797 ,-0.32436751 ,0.02528537 ,-0.3498329
,0.41859931 ,0.07794887 ,0.4571989 ,0.24290963 ,0.08437417 ,-0.01371585
,-0.00103008 ,0.83978697 ,-0.29001237 ,0.14438743 ,0.11943318 ,-0.25576402
,0.25151083 ,0.07886626 ,0.11565781 ,-0.01582203 ,0.1310246 ,-0.5553611
,-0.37950665 ,0.44179691 ,0.08460877 ,0.30646419 ,0.48927934 ,-0.21240309
,0.36844264 ,0.49686615 ,-0.81617664 ,0.52221472 ,-0.05188992 ,-0.03929655
,-0.47674501 ,-0.54506781 ,0.30711148 ,0.10049337 ,-0.47549213 ,0.59106713
,-0.62276051 ,-0.35182917 ,0.14612027 ,0.56142168 ,-0.01053732 ,0.35782179
,-0.27220781 ,-0.03672346 ,-0.11282222 ,0.3364912 ,-0.22352515 ,-0.04245287
,0.56968605 ,-0.14023724 ,-0.82982905 ,0.00860008 ,0.37920345 ,-0.53749318
,-0.12761215 ,0.08567603 ,0.47020765 ,-0.28794812 ,-0.33888971 ,0.01850441
,0.66848233 ,-0.26532759 ,-0.20777571 ,-0.68342729 ,-0.41498696 ,0.00593224
,0.02229368 ,0.75596329 ,0.29447568 ,-0.1106449 ,0.24181939 ,0.05807497
,-0.14343857 ,0.304988 ,0.00689148 ,-0.06264758 ,0.25864714 ,-0.22252155
,0.28621689 ,0.17031599 ,-0.34694027 ,-0.01625718 ,0.39834181 ,0.01259659
,-0.28022716 ,-0.02506168 ,-0.10276881 ,0.31733924 ,0.02787068 ,-0.09824124
,0.45147797 ,0.14451518 ,0.17996395 ,-0.70594978 ,-0.92943177 ,0.13649282
,-0.5938426 ,0.50289928 ,0.19635269 ,0.16811504 ,0.05803999 ,0.0037204
,0.13847419 ,0.30568038 ,0.3700732 ,0.21257548 ,-0.31151753 ,-0.28836886
,0.68743932 ,-0.11084429 ,-0.4673766 ,0.16637754 ,-0.38992572 ,0.16505578
,-0.07499844 ,0.04226538 ,-0.11042177 ,0.0704542 ,-0.632819 ,-0.54898472
,0.26498649 ,-0.59380386 ,0.93387213 ,0.06526726 ,-0.23223558 ,0.07941394
,0.14325166 ,0.26914661 ,0.00925575 ,-0.34282161 ,-0.51418231 ,-0.12011075
,-0.26676314 ,-0.09999028 ,0.03027513 ,0.22846503 ,-0.08930338 ,-0.1867156
,0.66297846 ,0.32220769 ,-0.06015469 ,0.04034043 ,0.09595597 ,-1.
,-0.42933352 ,0.25069376 ,-0.26030918 ,-0.28511861 ,-0.19931228 ,0.24408572
,-0.3231952 ,0.45688981 ,-0.07354078 ,0.25669449 ,-0.44202722 ,0.11928406
,-0.32826109 ,0.52660984 ,0.03067858 ,0.11095242 ,0.19933679 ,0.03042371
,-0.34768682 ,0.09108447 ,0.61234556 ,0.1854931 ,0.19680502 ,0.27617564
,0.33381827 ,-0.47358967 ,0.28714328 ,-0.27495982])
ref = [ 1.6844872e+01, -3.8865981e+00, -3.4971607e-01, -4.1598725e-01,
-1.9625235e-01, -1.5887988e-01, -7.7221274e-02, 2.0610046e-01,
1.3069814e-01, 1.1363924e-02, 4.9844027e-02, -5.6932509e-02,
-1.6958869e-01]
mfccf32=dsp.arm_mfcc_instance_f32()
sample_rate = 16000
FFTSize = 256
numOfDctOutputs = 13
freq_min = 64
freq_high = sample_rate / 2
numOfMelFilters = 20
window = sig.hamming(FFTSize, sym=False)
filtLen,filtPos,totalLen,packedFilters,_ = mfcc.melFilterMatrix(freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize)
dctMatrixFilters = mfcc.dctMatrix(numOfDctOutputs, numOfMelFilters)
status=dsp.arm_mfcc_init_f32(mfccf32,256,20,13,dctMatrixFilters,
filtPos,filtLen,packedFilters,window)
print(status)
tmp=np.zeros(FFTSize + 2)
res=dsp.arm_mfcc_f32(mfccf32,debug,tmp)
print(res)
print(ref)
print(mfccf32.fftLen())
print(mfccf32.nbMelFilters())
print(mfccf32.nbDctOutputs())

@ -0,0 +1,67 @@
###########################################
# Project: CMSIS DSP Library
# Title: GenMFCCDataForCPP.py
# Description: Generation of MFCC arrays for the MFCC function
#
# $Date: 07 September 2021
# $Revision: V1.10.0
#
# Target Processor: Cortex-M and Cortex-A cores
# -------------------------------------------------------------------- */
#
# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################################
#########################
#
# This script is generating arrays required by the MFCC implementation:
# DCT coefficients and Mel filters
# Those arrays must be used with the arm_mfcc_init functions
# The configuration is done through a yaml file describing the values for the
# MFCC and the type
#
import argparse
import yaml
import mfccdata
import os.path
parser = argparse.ArgumentParser(description='Generate MFCC Data for CPP')
parser.add_argument('-n', nargs='?',type = str, default="mfccdata", help="mfcc file name")
parser.add_argument('-d', nargs='?',type = str, default="Testing/Source/Tests", help="mfcc c file directory")
parser.add_argument('-i', nargs='?',type = str, default="Testing/Include/Tests", help="mfcc h file directory")
parser.add_argument('others', nargs=argparse.REMAINDER)
args = parser.parse_args()
if args.n and args.d and args.others:
cpath=os.path.join(args.d,args.n + ".c")
hpath=os.path.join(args.i,args.n + ".h")
with open(args.others[0],"r") as f:
configs=yaml.safe_load(f)
mfccdata.prepareDctconfig(configs["dct"])
mfccdata.prepareMelconfig(configs["melfilter"])
mfccdata.prepareWindowConfig(configs["window"])
with open(hpath,"w") as h:
mfccdata.genMfccHeader(h,configs,args.n)
with open(cpath,"w") as c:
mfccdata.genMfccInit(c,configs,args.n)

@ -0,0 +1,46 @@
dct:
config1:
melFilters: 20
dctOutputs: 13
type: "f32"
melfilter:
config1:
fftlength: 1024
fmin: 64
fmax: 8000
samplingRate : 16000
melFilters: 20
type: "f32"
config2:
fftlength: 512
fmin: 64
fmax: 8000
samplingRate : 16000
melFilters: 20
type: "f32"
config3 :
fftlength: 256
fmin: 64
fmax: 8000
samplingRate : 16000
melFilters: 20
type: "f32"
window:
config1:
fftlength: 1024
type: "f32"
win: "hamming"
config2:
fftlength: 512
type: "f32"
win: "hamming"
config3:
fftlength: 256
type: "f32"
win: "hamming"

@ -0,0 +1,231 @@
###########################################
# Project: CMSIS DSP Library
# Title: mfccdata.py
# Description: Generation of MFCC arays for the MFCC C init function
#
# $Date: 07 September 2021
# $Revision: V1.10.0
#
# Target Processor: Cortex-M and Cortex-A cores
# -------------------------------------------------------------------- */
#
# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################################
import numpy as np
from jinja2 import Environment, PackageLoader, select_autoescape,FileSystemLoader
import os.path
import struct
import scipy.signal as sig
def to_q31(v):
r = int(round(v * 2**31))
if (r > 0x07FFFFFFF):
r = 0x07FFFFFFF
if (r < -0x080000000):
r = -0x080000000
return ("0x%s" % format(struct.unpack('<I', struct.pack('<i', r))[0],'08X'))
def to_q15(v):
r = int(round(v * 2**15))
if (r > 0x07FFF):
r = 0x07FFF
if (r < -0x08000):
r = -0x08000
return ("0x%s" % format(struct.unpack('<H', struct.pack('<h', r))[0],'04X'))
def to_f16(v):
return("(float16_t)%f" % struct.unpack('<e',struct.pack('<e',v)))
def to_f32(v):
return("%ff" % struct.unpack('<f',struct.pack('<f',v)))
class ConvertArray:
def __init__(self,theType):
self._cvt = lambda x : x
if theType=="f32":
self._cvt = to_f32
if theType=="f16":
self._cvt = to_f16
if theType=="q31":
self._cvt = to_q31
if theType=="q15":
self._cvt = to_q15
def getArrayContent(self,samples):
nb = 0
res=""
res += "{\n"
for sample in samples:
res += str(self._cvt(sample))
res += ","
nb = nb + 1
if nb == 10:
res += "\n"
nb = 0
res += "}"
return(res)
def frequencyToMelSpace(freq):
return 1127.0 * np.log(1.0 + freq / 700.0)
def melSpaceToFrequency(mels):
return 700.0 * (np.exp(mels / 1127.0) - 1.0)
def melFilterMatrix(fmin, fmax, numOfMelFilters,fs,FFTSize):
filters = np.zeros((numOfMelFilters,int(FFTSize/2+1)))
zeros = np.zeros(int(FFTSize // 2 ))
fmin_mel = frequencyToMelSpace(fmin)
fmax_mel = frequencyToMelSpace(fmax)
mels = np.linspace(fmin_mel, fmax_mel, num=numOfMelFilters+2)
linearfreqs = np.linspace( 0, fs/2.0, int(FFTSize // 2 + 1) )
spectrogrammels = frequencyToMelSpace(linearfreqs)[1:]
filtPos=[]
filtLen=[]
totalLen = 0
packedFilters = []
for n in range(numOfMelFilters):
upper = (spectrogrammels - mels[n])/(mels[n+1]-mels[n])
lower = (mels[n+2] - spectrogrammels)/(mels[n+2]-mels[n+1])
filters[n, :] = np.hstack([0,np.maximum(zeros,np.minimum(upper,lower))])
nb = 0
startFound = False
for sample in filters[n, :]:
if not startFound and sample != 0.0:
startFound = True
startPos = nb
if startFound and sample == 0.0:
endPos = nb - 1
break
nb = nb + 1
filtLen.append(endPos - startPos+1)
totalLen += endPos - startPos + 1
filtPos.append(startPos)
packedFilters += list(filters[n, startPos:endPos+1])
return filtLen,filtPos,totalLen,packedFilters,filters
def dctMatrix(numOfDctOutputs, numOfMelFilters):
result = np.zeros((numOfDctOutputs,numOfMelFilters))
s=(np.linspace(1,numOfMelFilters,numOfMelFilters) - 0.5)/numOfMelFilters
for i in range(0, numOfDctOutputs):
result[i,:]=np.cos(i * np.pi*s) * np.sqrt(2.0/numOfMelFilters)
return result
def ctype(s):
if s == "f64":
return("float64_t")
if s == "f32":
return("float32_t")
if s == "f16":
return("float16_t")
if s == "q31":
return("q31_t")
if s == "q15":
return("q15_t")
def typeext(s):
if s == "f64":
return("_f64")
if s == "f32":
return("_f32")
if s == "f16":
return("_f16")
if s == "q31":
return("_q31")
if s == "q15":
return("_q15")
def prepareWindowConfig(configs):
# sig.hamming(FFTSize, sym=False)
for config in configs:
c=configs[config]
if c["win"] == "hamming":
win = sig.hamming(c["fftlength"], sym=False)
if c["win"] == "hanning":
win = sig.hann(c["fftlength"], sym=False)
cvt=ConvertArray(c["type"])
c["ctype"]=ctype(c["type"])
c["ext"]=typeext(c["type"])
c["winSamples"] = cvt.getArrayContent(win)
def prepareMelconfig(configs):
for config in configs:
c=configs[config]
cvt=ConvertArray(c["type"])
cvtInt=ConvertArray(None)
c["ctype"]=ctype(c["type"])
c["ext"]=typeext(c["type"])
filtLen,filtPos,totalLen,packedFilters,filters = melFilterMatrix(c["fmin"], c["fmax"], c["melFilters"],c["samplingRate"],c["fftlength"])
c["filtLenArray"]=cvtInt.getArrayContent(filtLen)
c["filtPosArray"]=cvtInt.getArrayContent(filtPos)
c["totalLen"]=totalLen
c["filters"]=cvt.getArrayContent(packedFilters)
def prepareDctconfig(configs):
for config in configs:
c=configs[config]
cvt=ConvertArray(c["type"])
c["ctype"]=ctype(c["type"])
c["ext"]=typeext(c["type"])
c["dctMatrixLength"]=c["dctOutputs"] * c["melFilters"]
dctMat = dctMatrix(c["dctOutputs"],c["melFilters"])
dctMat=dctMat.reshape(c["dctMatrixLength"])
c["dctMatrix"]=cvt.getArrayContent(dctMat)
#print(configs)
env = Environment(
loader=PackageLoader("mfccdata","mfcctemplates"),
autoescape=select_autoescape(),
trim_blocks=True
)
ctemplate = env.get_template("mfccdata.c")
htemplate = env.get_template("mfccdata.h")
def genMfccHeader(f,configs,filename):
print(htemplate.render(configs=configs,filename=filename),file=f)
def genMfccInit(f,configs,filename):
print(ctemplate.render(configs=configs,filename=filename),file=f)

@ -0,0 +1,23 @@
#include "{{filename}}.h"
{% for config in configs["dct"] %}
const {{configs["dct"][config]["ctype"]}} mfcc_dct_coefs_{{config}}[NB_MFCC_DCT_COEFS_{{config.upper()}}]={{configs["dct"][config]["dctMatrix"]}};
{% endfor %}
{% for config in configs["window"] %}
const {{configs["window"][config]["ctype"]}} mfcc_window_coefs_{{config}}[NB_MFCC_WIN_COEFS_{{config.upper()}}]={{configs["window"][config]["winSamples"]}};
{% endfor %}
{% for config in configs["melfilter"] %}
const uint32_t mfcc_filter_pos_{{config}}[NB_MFCC_NB_FILTER_{{config.upper()}}]={{configs["melfilter"][config]["filtPosArray"]}};
const uint32_t mfcc_filter_len_{{config}}[NB_MFCC_NB_FILTER_{{config.upper()}}]={{configs["melfilter"][config]["filtLenArray"]}};
{% endfor %}
{% for config in configs["melfilter"] %}
const {{configs["melfilter"][config]["ctype"]}} mfcc_filter_coefs_{{config}}[NB_MFCC_FILTER_COEFS_{{config.upper()}}]={{configs["melfilter"][config]["filters"]}};
{% endfor %}

@ -0,0 +1,62 @@
#ifndef _MFCC_DATA_H_
#define _MFCC_DATA_H_
#include "arm_math_types.h"
#ifdef __cplusplus
extern "C"
{
#endif
/*****
DCT COEFFICIENTS FOR THE MFCC
*****/
{% for config in configs["dct"] %}
#define NB_MFCC_DCT_COEFS_{{config.upper()}} {{configs["dct"][config]['dctMatrixLength']}}
extern const {{configs["dct"][config]["ctype"]}} mfcc_dct_coefs_{{config}}[NB_MFCC_DCT_COEFS_{{config.upper()}}];
{% endfor %}
/*****
WINDOW COEFFICIENTS
*****/
{% for config in configs["window"] %}
#define NB_MFCC_WIN_COEFS_{{config.upper()}} {{configs["window"][config]['fftlength']}}
extern const {{configs["window"][config]["ctype"]}} mfcc_window_coefs_{{config}}[NB_MFCC_WIN_COEFS_{{config.upper()}}];
{% endfor %}
/*****
MEL FILTER COEFFICIENTS FOR THE MFCC
*****/
{% for config in configs["melfilter"] %}
#define NB_MFCC_NB_FILTER_{{config.upper()}} {{configs["melfilter"][config]['melFilters']}}
extern const uint32_t mfcc_filter_pos_{{config}}[NB_MFCC_NB_FILTER_{{config.upper()}}];
extern const uint32_t mfcc_filter_len_{{config}}[NB_MFCC_NB_FILTER_{{config.upper()}}];
{% endfor %}
{% for config in configs["melfilter"] %}
#define NB_MFCC_FILTER_COEFS_{{config.upper()}} {{configs["melfilter"][config]['totalLen']}}
extern const {{configs["melfilter"][config]["ctype"]}} mfcc_filter_coefs_{{config}}[NB_MFCC_FILTER_COEFS_{{config.upper()}}];
{% endfor %}
#ifdef __cplusplus
}
#endif
#endif

@ -82,7 +82,7 @@ static uint16_t arm_scalar_log_q15(uint16_t src)
int32_t tmp;
/* Normalize and convert to q314 format */
/* Normalize and convert to q14 format */
x = src;
if ((c-1) < 0)
{

@ -192,6 +192,10 @@ if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16))
endif()
endif()
target_sources(CMSISDSPTransform PRIVATE arm_mfcc_init_f32.c)
target_sources(CMSISDSPTransform PRIVATE arm_mfcc_f32.c)
### Includes
target_include_directories(CMSISDSPTransform PUBLIC "${DSP}/Include")

@ -48,6 +48,10 @@
#include "arm_rfft_fast_init_f32.c"
#include "arm_rfft_fast_init_f64.c"
#include "arm_mfcc_init_f32.c"
#include "arm_mfcc_f32.c"
/* Deprecated */
#include "arm_dct4_f32.c"

@ -0,0 +1,159 @@
/* ----------------------------------------------------------------------
* Project: CMSIS DSP Library
* Title: arm_mfcc_f32.c
* Description: MFCC function for the f32 version
*
* $Date: 07 September 2021
* $Revision: V1.10.0
*
* Target Processor: Cortex-M and Cortex-A cores
* -------------------------------------------------------------------- */
/*
* Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "dsp/transform_functions.h"
#include "dsp/statistics_functions.h"
#include "dsp/basic_math_functions.h"
#include "dsp/complex_math_functions.h"
#include "dsp/fast_math_functions.h"
#include "dsp/matrix_functions.h"
/**
@ingroup groupTransforms
*/
/**
@defgroup MFCC MFCC
MFCC Transform
There are separate functions for floating-point, Q15, and Q31 data types.
*/
/**
@addtogroup MFCC
@{
*/
/**
@brief MFCC F32
@param[in] S points to the mfcc instance structure
@param[in] pSrc points to the input samples
@param[out] pDst points to the output MFCC values
@param[inout] pTmp points to a temporary buffer of complex
@return none
@par Description
The number of input samples if the FFT length used
when initializing the instance data structure.
The temporary buffer has a 2*fft length size when MFCC
is implemented with CFFT.
It has length FFT Length + 2 when implemented with RFFT
(default implementation).
The source buffer is modified by this function.
*/
void arm_mfcc_f32(
arm_mfcc_instance_f32 * S,
float32_t *pSrc,
float32_t *pDst,
float32_t *pTmp
)
{
float32_t maxValue;
uint32_t index;
uint32_t i;
float32_t result;
const float32_t *coefs=S->filterCoefs;
arm_matrix_instance_f32 pDctMat;
/* Normalize */
arm_absmax_f32(pSrc,S->fftLen,&maxValue,&index);
arm_scale_f32(pSrc,1.0f/maxValue,pSrc,S->fftLen);
/* Multiply by window */
arm_mult_f32(pSrc,S->windowCoefs,pSrc,S->fftLen);
/* Compute spectrum magnitude
*/
#if defined(ARM_MFCC_CFFT_BASED)
/* some HW accelerator for CMSIS-DSP used in some boards
are only providing acceleration for CFFT.
With ARM_MFCC_CFFT_BASED enabled, CFFT is used and the MFCC
will be accelerated on those boards.
The default is to use RFFT
*/
/* Convert from real to complex */
for(i=0; i < S->fftLen ; i++)
{
pTmp[2*i] = pSrc[i];
pTmp[2*i+1] = 0.0f;
}
arm_cfft_f32(&(S->cfft),pTmp,0,1);
#else
/* Default RFFT based implementation */
arm_rfft_fast_f32(&(S->rfft),pSrc,pTmp,0);
/* Unpack real values */
pTmp[S->fftLen]=pTmp[1];
pTmp[S->fftLen+1]=0.0f;
pTmp[1]=0.0f;
#endif
arm_cmplx_mag_f32(pTmp,pSrc,S->fftLen);
/* Apply MEL filters */
for(i=0; i<S->nbMelFilters; i++)
{
arm_dot_prod_f32(pSrc+S->filterPos[i],
coefs,
S->filterLengths[i],
&result);
coefs += S->filterLengths[i];
pTmp[i] = result;
}
/* Compute the log */
arm_offset_f32(pTmp,1.0e-6f,pTmp,S->nbMelFilters);
arm_vlog_f32(pTmp,pTmp,S->nbMelFilters);
/* Multiply with the DCT matrix */
pDctMat.numRows=S->nbDctOutputs;
pDctMat.numCols=S->nbMelFilters;
pDctMat.pData=(float32_t*)S->dctCoefs;
arm_mat_vec_mult_f32(&pDctMat, pTmp, pDst);
}
/**
@} end of MFCC group
*/

@ -0,0 +1,107 @@
/* ----------------------------------------------------------------------
* Project: CMSIS DSP Library
* Title: arm_mfcc_init_f32.c
* Description: MFCC initialization function for the f32 version
*
* $Date: 07 September 2021
* $Revision: V1.10.0
*
* Target Processor: Cortex-M and Cortex-A cores
* -------------------------------------------------------------------- */
/*
* Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
@ingroup groupTransforms
*/
/**
@addtogroup MFCC
@{
*/
#include "dsp/transform_functions.h"
/**
@brief Initialization of the MFCC F32 instance structure
@param[out] S points to the mfcc instance structure
@param[in] fftLen fft length
@param[in] nbMelFilters number of Mel filters
@param[in] nbDctOutputs number of Dct outputs
@param[in] dctCoefs points to an array of DCT coefficients
@param[in] filterPos points of the array of filter positions
@param[in] filterLengths points to the array of filter lengths
@param[in] filterCoefs points to the array of filter coefficients
@param[in] windowCoefs points to the array of window coefficients
@return error status
@par Description
The matrix of Mel filter coefficients is sparse.
Most of the coefficients are zero.
To avoid multiplying the spectrogram by those zeros, the
filter is applied only to a given position in the spectrogram
and on a given number of FFT bins (the filter length).
It is the reason for the arrays filterPos and filterLengths.
window coefficients can describe (for instance) a Hamming window.
The array has the same size as the FFT length.
The folder Scripts is containing a Python script which can be used
to generate the filter, dct and window arrays.
*/
arm_status arm_mfcc_init_f32(
arm_mfcc_instance_f32 * S,
uint32_t fftLen,
uint32_t nbMelFilters,
uint32_t nbDctOutputs,
const float32_t *dctCoefs,
const uint32_t *filterPos,
const uint32_t *filterLengths,
const float32_t *filterCoefs,
const float32_t *windowCoefs
)
{
arm_status status;
S->fftLen=fftLen;
S->nbMelFilters=nbMelFilters;
S->nbDctOutputs=nbDctOutputs;
S->dctCoefs=dctCoefs;
S->filterPos=filterPos;
S->filterLengths=filterLengths;
S->filterCoefs=filterCoefs;
S->windowCoefs=windowCoefs;
#if defined(ARM_MFCC_CFFT_BASED)
status=arm_cfft_init_f32(&(S->cfft),fftLen);
#else
status=arm_rfft_fast_init_f32(&(S->rfft),fftLen);
#endif
return(status);
}
/**
@} end of MFCC group
*/

@ -333,7 +333,10 @@ if (TRANSFORM)
Source/Tests/TransformCQ31.cpp
Source/Tests/TransformRQ31.cpp
Source/Tests/TransformCQ15.cpp
Source/Tests/TransformRQ15.cpp)
Source/Tests/TransformRQ15.cpp
Source/Tests/MFCCF32.cpp
Source/Tests/mfccdata.c
)
endif()
if (SVM)

@ -0,0 +1,28 @@
#include "Test.h"
#include "Pattern.h"
#include "dsp/transform_functions.h"
class MFCCF32:public Client::Suite
{
public:
MFCCF32(Testing::testID_t id);
virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr);
virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
private:
#include "MFCCF32_decl.h"
Client::Pattern<float32_t> input1;
Client::Pattern<float32_t> input2;
Client::LocalPattern<float32_t> output;
Client::LocalPattern<float32_t> tmp;
Client::LocalPattern<float32_t> tmpin;
// Reference patterns are not loaded when we are in dump mode
Client::RefPattern<float32_t> ref;
arm_mfcc_instance_f32 mfcc;
uint32_t fftLen;
};

@ -0,0 +1,74 @@
#ifndef _MFCC_DATA_H_
#define _MFCC_DATA_H_
#include "arm_math_types.h"
#ifdef __cplusplus
extern "C"
{
#endif
/*****
DCT COEFFICIENTS FOR THE MFCC
*****/
#define NB_MFCC_DCT_COEFS_CONFIG1 260
extern const float32_t mfcc_dct_coefs_config1[NB_MFCC_DCT_COEFS_CONFIG1];
/*****
WINDOW COEFFICIENTS
*****/
#define NB_MFCC_WIN_COEFS_CONFIG1 1024
extern const float32_t mfcc_window_coefs_config1[NB_MFCC_WIN_COEFS_CONFIG1];
#define NB_MFCC_WIN_COEFS_CONFIG2 512
extern const float32_t mfcc_window_coefs_config2[NB_MFCC_WIN_COEFS_CONFIG2];
#define NB_MFCC_WIN_COEFS_CONFIG3 256
extern const float32_t mfcc_window_coefs_config3[NB_MFCC_WIN_COEFS_CONFIG3];
/*****
MEL FILTER COEFFICIENTS FOR THE MFCC
*****/
#define NB_MFCC_NB_FILTER_CONFIG1 20
extern const uint32_t mfcc_filter_pos_config1[NB_MFCC_NB_FILTER_CONFIG1];
extern const uint32_t mfcc_filter_len_config1[NB_MFCC_NB_FILTER_CONFIG1];
#define NB_MFCC_NB_FILTER_CONFIG2 20
extern const uint32_t mfcc_filter_pos_config2[NB_MFCC_NB_FILTER_CONFIG2];
extern const uint32_t mfcc_filter_len_config2[NB_MFCC_NB_FILTER_CONFIG2];
#define NB_MFCC_NB_FILTER_CONFIG3 20
extern const uint32_t mfcc_filter_pos_config3[NB_MFCC_NB_FILTER_CONFIG3];
extern const uint32_t mfcc_filter_len_config3[NB_MFCC_NB_FILTER_CONFIG3];
#define NB_MFCC_FILTER_COEFS_CONFIG1 948
extern const float32_t mfcc_filter_coefs_config1[NB_MFCC_FILTER_COEFS_CONFIG1];
#define NB_MFCC_FILTER_COEFS_CONFIG2 473
extern const float32_t mfcc_filter_coefs_config2[NB_MFCC_FILTER_COEFS_CONFIG2];
#define NB_MFCC_FILTER_COEFS_CONFIG3 236
extern const float32_t mfcc_filter_coefs_config3[NB_MFCC_FILTER_COEFS_CONFIG3];
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,244 @@
###########################################
# Project: CMSIS DSP Library
# Title: MFCC.py
# Description: Test pattern generation for MFCC
#
# $Date: 02 September 2021
# $Revision: V1.10.0
#
# Target Processor: Cortex-M and Cortex-A cores
# -------------------------------------------------------------------- */
#
# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the License); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
############################################
import os.path
import numpy as np
import itertools
import Tools
import scipy
import scipy.signal as sig
import scipy.fftpack
################################
#
# Gives the same results as the tensorflow lite
# MFCC if hamming window is used
# (TF stft) is using hanning by default
#
DEBUG = False
def frequencyToMelSpace(freq):
return 1127.0 * np.log(1.0 + freq / 700.0)
def melSpaceToFrequency(mels):
return 700.0 * (np.exp(mels / 1127.0) - 1.0)
def melFilterMatrix(fmin, fmax, numOfMelFilters,fs,FFTSize):
filters = np.zeros((numOfMelFilters,int(FFTSize/2+1)))
zeros = np.zeros(int(FFTSize // 2 ))
fmin_mel = frequencyToMelSpace(fmin)
fmax_mel = frequencyToMelSpace(fmax)
mels = np.linspace(fmin_mel, fmax_mel, num=numOfMelFilters+2)
linearfreqs = np.linspace( 0, fs/2.0, int(FFTSize // 2 + 1) )
spectrogrammels = frequencyToMelSpace(linearfreqs)[1:]
for n in range(numOfMelFilters):
upper = (spectrogrammels - mels[n])/(mels[n+1]-mels[n])
lower = (mels[n+2] - spectrogrammels)/(mels[n+2]-mels[n+1])
filters[n, :] = np.hstack([0,np.maximum(zeros,np.minimum(upper,lower))])
return filters
def dctMatrix(numOfDctOutputs, numOfMelFilters):
result = np.zeros((numOfDctOutputs,numOfMelFilters))
s=(np.linspace(1,numOfMelFilters,numOfMelFilters) - 0.5)/numOfMelFilters
for i in range(0, numOfDctOutputs):
result[i,:]=np.cos(i * np.pi*s) * np.sqrt(2.0/numOfMelFilters)
return result
class MFCCConfig:
def __init__(self,freq_min,freq_high,numOfMelFilters,numOfDctOutputs,FFTSize,sample_rate):
self._freq_min=freq_min
self._freq_high=freq_high
self._numOfMelFilters = numOfMelFilters
self._FFTSize=FFTSize
self._sample_rate=sample_rate
#self._window = sig.hann(FFTSize, sym=True)
self._window = sig.hamming(FFTSize, sym=False)
#print(self._window)
self._numOfDctOutputs=numOfDctOutputs
self._filters = melFilterMatrix(freq_min, freq_high, numOfMelFilters,sample_rate,FFTSize)
self._dctMatrixFilters = dctMatrix(numOfDctOutputs, numOfMelFilters)
def mfcc(self,audio):
m = np.amax(np.abs(audio))
if m != 0:
s = 1.0 / m
else:
s = 1.0
audio = audio * s
audioWin = audio * self._window
if DEBUG:
print(audioWin)
audioFFT = scipy.fftpack.fft(audioWin)
if DEBUG:
print(audioFFT)
audioPower = np.abs(audioFFT)
if DEBUG:
print(audioPower)
filterLimit = int(1 + self._FFTSize // 2)
audioPower=audioPower[:filterLimit]
audioFiltered = np.dot(self._filters,audioPower)
if DEBUG:
print(audioFiltered)
audioLog = np.log(audioFiltered + 1e-6)
cepstral_coefficents = np.dot(self._dctMatrixFilters, audioLog)
return(cepstral_coefficents)
debug=np.array([ 0.65507051 ,-0.94647589 ,0.00627239 ,0.14151286 ,-0.10863318 ,-0.36370327
,0.05777126 ,-0.11915792 ,0.50183546 ,-0.31461335 ,0.66440771 ,0.05389963
,0.39690544 ,0.25424852 ,-0.17045277 ,0.09649268 ,0.87357385 ,-0.44666372
,-0.02637822 ,-0.10055151 ,-0.14610252 ,-0.05981251 ,-0.02999124 ,0.60923213
,0.10530095 ,0.35684248 ,0.21845946 ,0.47845017 ,-0.60206979 ,0.25186908
,-0.27410056 ,-0.07080467 ,-0.05109539 ,-0.2666572 ,0.25483105 ,-0.86459185
,0.07733397 ,-0.58535444 ,0.06230904 ,-0.04161475 ,-0.17467296 ,0.77721125
,-0.01728161 ,-0.32141218 ,0.36674466 ,-0.17932843 ,0.78486115 ,0.12469579
,-0.94796877 ,0.05536031 ,0.32627676 ,0.46628512 ,-0.02585836 ,-0.51439834
,0.21387904 ,0.16319442 ,-0.01020818 ,-0.77161183 ,0.07754634 ,-0.24970455
,0.2368003 ,0.35167963 ,0.14620137 ,-0.02415204 ,0.91086167 ,-0.02434647
,-0.3968239 ,-0.04703925 ,-0.43905103 ,-0.34834965 ,0.33728158 ,0.15138992
,-0.43218885 ,0.26619718 ,0.07177906 ,0.33393581 ,-0.50306915 ,-0.63101084
,-0.08128395 ,-0.06569788 ,0.84232797 ,-0.32436751 ,0.02528537 ,-0.3498329
,0.41859931 ,0.07794887 ,0.4571989 ,0.24290963 ,0.08437417 ,-0.01371585
,-0.00103008 ,0.83978697 ,-0.29001237 ,0.14438743 ,0.11943318 ,-0.25576402
,0.25151083 ,0.07886626 ,0.11565781 ,-0.01582203 ,0.1310246 ,-0.5553611
,-0.37950665 ,0.44179691 ,0.08460877 ,0.30646419 ,0.48927934 ,-0.21240309
,0.36844264 ,0.49686615 ,-0.81617664 ,0.52221472 ,-0.05188992 ,-0.03929655
,-0.47674501 ,-0.54506781 ,0.30711148 ,0.10049337 ,-0.47549213 ,0.59106713
,-0.62276051 ,-0.35182917 ,0.14612027 ,0.56142168 ,-0.01053732 ,0.35782179
,-0.27220781 ,-0.03672346 ,-0.11282222 ,0.3364912 ,-0.22352515 ,-0.04245287
,0.56968605 ,-0.14023724 ,-0.82982905 ,0.00860008 ,0.37920345 ,-0.53749318
,-0.12761215 ,0.08567603 ,0.47020765 ,-0.28794812 ,-0.33888971 ,0.01850441
,0.66848233 ,-0.26532759 ,-0.20777571 ,-0.68342729 ,-0.41498696 ,0.00593224
,0.02229368 ,0.75596329 ,0.29447568 ,-0.1106449 ,0.24181939 ,0.05807497
,-0.14343857 ,0.304988 ,0.00689148 ,-0.06264758 ,0.25864714 ,-0.22252155
,0.28621689 ,0.17031599 ,-0.34694027 ,-0.01625718 ,0.39834181 ,0.01259659
,-0.28022716 ,-0.02506168 ,-0.10276881 ,0.31733924 ,0.02787068 ,-0.09824124
,0.45147797 ,0.14451518 ,0.17996395 ,-0.70594978 ,-0.92943177 ,0.13649282
,-0.5938426 ,0.50289928 ,0.19635269 ,0.16811504 ,0.05803999 ,0.0037204
,0.13847419 ,0.30568038 ,0.3700732 ,0.21257548 ,-0.31151753 ,-0.28836886
,0.68743932 ,-0.11084429 ,-0.4673766 ,0.16637754 ,-0.38992572 ,0.16505578
,-0.07499844 ,0.04226538 ,-0.11042177 ,0.0704542 ,-0.632819 ,-0.54898472
,0.26498649 ,-0.59380386 ,0.93387213 ,0.06526726 ,-0.23223558 ,0.07941394
,0.14325166 ,0.26914661 ,0.00925575 ,-0.34282161 ,-0.51418231 ,-0.12011075
,-0.26676314 ,-0.09999028 ,0.03027513 ,0.22846503 ,-0.08930338 ,-0.1867156
,0.66297846 ,0.32220769 ,-0.06015469 ,0.04034043 ,0.09595597 ,-1.
,-0.42933352 ,0.25069376 ,-0.26030918 ,-0.28511861 ,-0.19931228 ,0.24408572
,-0.3231952 ,0.45688981 ,-0.07354078 ,0.25669449 ,-0.44202722 ,0.11928406
,-0.32826109 ,0.52660984 ,0.03067858 ,0.11095242 ,0.19933679 ,0.03042371
,-0.34768682 ,0.09108447 ,0.61234556 ,0.1854931 ,0.19680502 ,0.27617564
,0.33381827 ,-0.47358967 ,0.28714328 ,-0.27495982])
def writeTests(config,format):
NBSAMPLES=[256,512,1024]
if DEBUG:
NBSAMPLES=[256]
sample_rate = 16000
FFTSize = 256
numOfDctOutputs = 13
freq_min = 64
freq_high = sample_rate / 2
numOfMelFilters = 20
for nb in NBSAMPLES:
inputs=[]
outputs=[]
inlengths=[]
outlengths=[]
audio=np.random.randn(nb)
audio = Tools.normalize(audio)
if DEBUG:
audio=debug
inputs += list(audio)
FFTSize=nb
mfccConfig=MFCCConfig(freq_min,freq_high,numOfMelFilters,numOfDctOutputs,FFTSize,sample_rate)
ref=mfccConfig.mfcc(audio)
#print(audio)
if DEBUG:
print(ref)
outputs+=list(ref)
inlengths+=[nb]
outlengths+=[numOfDctOutputs]
config.writeInput(1, inputs,"MFCCInput_%d_" % nb)
config.writeReference(1, outputs,"MFCCRef_%d_" % nb)
def generatePatterns():
PATTERNDIR = os.path.join("Patterns","DSP","Transform","MFCC")
PARAMDIR = os.path.join("Parameters","DSP","Transform","MFCC")
configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
#configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
#configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
#configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
#configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
configf32.setOverwrite(False)
writeTests(configf32,0)
if __name__ == '__main__':
generatePatterns()

@ -0,0 +1,514 @@
W
256
// 0.089738
0x3db7c865
// 0.067259
0x3d89bf0e
// 0.154389
0x3e1e1836
// -0.083019
0xbdaa05a4
// -0.087256
0xbdb2b334
// -0.621283
0xbf1f0c6a
// 0.331273
0x3ea99cac
// 0.783341
0x3f488910
// 0.092650
0x3dbdbf72
// 0.075105
0x3d99d0d7
// -0.096163
0xbdc4f113
// -0.108939
0xbddf1b32
// -0.232866
0xbe6e7455
// 0.328005
0x3ea7f043
// 0.310901
0x3e9f2e62
// -0.039975
0xbd23bc4d
// -0.296302
0xbe97b4e9
// 0.357151
0x3eb6dc87
// 0.421522
0x3ed7d1b6
// -0.570618
0xbf121408
// 0.385768
0x3ec5836a
// 0.262206
0x3e863fcf
// 0.100940
0x3dceb991
// 0.251663
0x3e80d9f9
// -0.069520
0xbd8e60af
// -0.174688
0xbe32e153
// 0.079187
0x3da22cc5
// -0.430499
0xbedc6a68
// 0.242275
0x3e7816f2
// 0.758464
0x3f422ab1
// 0.121298
0x3df86b1d
// -0.283242
0xbe91050b
// -0.664019
0xbf29fd2d
// 0.260954
0x3e859bc8
// -0.110971
0xbde344d5
// -0.359717
0xbeb82cd8
// 0.362777
0x3eb9bdd8
// 0.240596
0x3e765ebe
// -0.168707
0xbe2cc17b
// 0.096354
0x3dc55542
// 0.360356
0x3eb880a2
// 0.273952
0x3e8c4375
// -0.813507
0xbf5041f7
// 0.202244
0x3e4f1927
// 0.654824
0x3f27a285
// -0.027679
0xbce2c006
// 0.570388
0x3f1204ee
// -0.281811
0xbe904995
// 0.439898
0x3ee13a47
// 0.034354
0x3d0cb734
// -0.404687
0xbecf3331
// 0.018210
0x3c952d78
// 0.173341
0x3e318064
// 0.096519
0x3dc5ac00
// 0.025961
0x3cd4ac02
// 0.086384
0x3db0ea03
// 0.467037
0x3eef1f82
// -0.061900
0xbd7d8b10
// -0.091634
0xbdbbaa5e
// -0.054937
0xbd6105ec
// 0.402989
0x3ece548b
// 0.104294
0x3dd59832
// -0.010941
0xbc3342e7
// -0.277462
0xbe8e0f89
// 0.317816
0x3ea2b8b9
// -0.091144
0xbdbaa9c0
// 0.409791
0x3ed1d02a
// -0.042292
0xbd2d3acc
// 0.075197
0x3d9a00f3
// -0.101919
0xbdd0babb
// 0.305818
0x3e9c941f
// 0.305115
0x3e9c3801
// 0.225793
0x3e673627
// -0.819021
0xbf51ab5e
// 0.099640
0x3dcc1035
// -0.359991
0xbeb850b6
// -0.123400
0xbdfcb8eb
// -0.027310
0xbcdfb89a
// -0.223871
0xbe653e7c
// 0.455622
0x3ee94741
// 0.246788
0x3e7cb611
// -0.068658
0xbd8c9c7e
// 0.010263
0x3c28274d
// 1.000000
0x3f800000
// 0.480968
0x3ef6417f
// -0.015245
0xbc79c733
// 0.013451
0x3c5c5fc5
// -0.413680
0xbed3cdd6
// -0.451646
0xbee73e30
// -0.311718
0xbe9f9984
// -0.325950
0xbea6e2e5
// -0.385646
0xbec57374
// -0.045221
0xbd39399c
// 0.110227
0x3de1be72
// -0.035305
0xbd109c7c
// 0.004051
0x3b84bc8c
// -0.331952
0xbea9f5ad
// 0.164119
0x3e280ec3
// 0.146625
0x3e1624f8
// 0.036189
0x3d143aa4
// -0.099008
0xbdcac4c8
// -0.563731
0xbf1050aa
// 0.964170
0x3f76d3d2
// 0.428630
0x3edb7570
// -0.265563
0xbe87f7e5
// 0.443260
0x3ee2f308
// -0.627063
0xbf20872f
// -0.592591
0xbf17b410
// 0.094141
0x3dc0cd02
// -0.093867
0xbdc03d38
// -0.522123
0xbf05a9dd
// -0.035453
0xbd1136f8
// -0.031508
0xbd010e53
// 0.072731
0x3d94f436
// -0.112147
0xbde5ad66
// -0.440226
0xbee1655a
// -0.106819
0xbddac410
// -0.362694
0xbeb9b308
// 0.018079
0x3c941a6a
// -0.170406
0xbe2e7ef9
// 0.622399
0x3f1f5591
// 0.119503
0x3df4bddc
// 0.008095
0x3c04a25b
// -0.032518
0xbd053165
// 0.021576
0x3cb0bf6b
// -0.317126
0xbea25e57
// -0.387595
0xbec672cc
// 0.098323
0x3dc95d5d
// -0.333914
0xbeaaf6c5
// -0.104521
0xbdd60f35
// -0.087055
0xbdb24a01
// -0.254765
0xbe82708f
// -0.445842
0xbee44567
// -0.429256
0xbedbc765
// 0.540044
0x3f0a405a
// 0.177131
0x3e3561f1
// 0.268467
0x3e897490
// 0.429066
0x3edbae7e
// -0.197797
0xbe4a8b41
// -0.241472
0xbe774469
// 0.323202
0x3ea57aac
// -0.235000
0xbe70a3ba
// 0.609865
0x3f1c2018
// 0.602386
0x3f1a35fa
// 0.019534
0x3ca00609
// -0.196338
0xbe490cc9
// 0.096247
0x3dc51cec
// 0.155905
0x3e1fa572
// -0.530173
0xbf07b96e
// -0.625972
0xbf203fb4
// -0.132952
0xbe082484
// 0.500561
0x3f0024c8
// -0.191938
0xbe448b75
// -0.396835
0xbecb2de5
// 0.599835
0x3f198ed0
// -0.117457
0xbdf08d21
// 0.582546
0x3f1521bc
// 0.226422
0x3e67db35
// -0.223980
0xbe655b05
// -0.103188
0xbdd35454
// -0.040533
0xbd26061f
// 0.086565
0x3db14927
// 0.151441
0x3e1b1359
// 0.173882
0x3e320e25
// -0.148597
0xbe1829de
// -0.408066
0xbed0edf9
// 0.257180
0x3e83ad09
// 0.046722
0x3d3f5fb7
// -0.279765
0xbe8f3d56
// -0.513039
0xbf035683
// 0.232855
0x3e6e7184
// 0.724141
0x3f396155
// 0.156407
0x3e202949
// 0.477019
0x3ef43bd1
// 0.782124
0x3f483950
// 0.141778
0x3e112e5d
// -0.465177
0xbeee2bb4
// -0.168128
0xbe2c29c1
// 0.528298
0x3f073e8e
// -0.411862
0xbed2dfa2
// 0.319303
0x3ea37b9f
// 0.297564
0x3e985a55
// -0.263947
0xbe8723ff
// -0.185831
0xbe3e4a75
// 0.372901
0x3ebeece2
// 0.325011
0x3ea667cd
// -0.211544
0xbe589f02
// -0.054309
0xbd5e72fb
// -0.003084
0xbb4a15b9
// -0.024571
0xbcc94a0c
// 0.016627
0x3c883561
// -0.081301
0xbda680f8
// 0.472227
0x3ef1c7c9
// 0.586417
0x3f161f74
// -0.214688
0xbe5bd74c
// 0.133952
0x3e092aaf
// -0.465443
0xbeee4e96
// -0.173991
0xbe322a9f
// 0.043391
0x3d31baf2
// 0.199079
0x3e4bdb3f
// -0.720737
0xbf38823b
// 0.692669
0x3f3152c0
// -0.146139
0xbe15a580
// -0.089478
0xbdb74076
// 0.441291
0x3ee1f0d5
// 0.078354
0x3da077e1
// 0.375427
0x3ec037ea
// -0.033212
0xbd080925
// -0.107130
0xbddb66c5
// 0.048466
0x3d468475
// 0.118295
0x3df244da
// -0.062158
0xbd7e9954
// 0.044569
0x3d368e61
// -0.197895
0xbe4aa514
// 0.288538
0x3e93bb48
// -0.607111
0xbf1b6b9d
// 0.271215
0x3e8adcaa
// -0.528523
0xbf074d44
// -0.407540
0xbed0a910
// -0.010570
0xbc2d2d1e
// -0.475852
0xbef3a2e2
// 0.117884
0x3df16cfc
// -0.325560
0xbea6afcc
// -0.341994
0xbeaf19df
// -0.603439
0xbf1a7af4
// 0.252634
0x3e815945
// -0.161713
0xbe259804
// -0.173283
0xbe317100
// 0.259118
0x3e84ab15
// -0.349186
0xbeb2c87c
// 0.444531
0x3ee399a1
// 0.130996
0x3e0623b0
// -0.449434
0xbee61c40
// -0.437433
0xbedff738
// 0.379204
0x3ec22702
// 0.301281
0x3e9a4181
// 0.170051
0x3e2e21d1
// -0.235498
0xbe71265b
// -0.022892
0xbcbb878b
// 0.463847
0x3eed7d4e
// 0.308328
0x3e9ddd20
// 0.375992
0x3ec08210
// -0.305638
0xbe9c7c97
// -0.199858
0xbe4ca776
// 0.041511
0x3d2a0759
// -0.212038
0xbe59208c
// 0.002997
0x3b446c1c
// -0.454472
0xbee8b097
// -0.187657
0xbe402913
// 0.204091
0x3e50fd37
// 0.332860
0x3eaa6ca7
// -0.086138
0xbdb06936
// 0.000109
0x38e3bf6c
// -0.202735
0xbe4f99db
// 0.089400
0x3db71796
// 0.005566
0x3bb66229

@ -0,0 +1,28 @@
W
13
// 29.476383
0x41ebcfa2
// -2.793829
0xc032ce18
// -0.138950
0xbe0e48f1
// -0.255028
0xbe8292fe
// -0.086083
0xbdb04c7c
// 0.079019
0x3da1d4bc
// 0.053065
0x3d595af3
// -0.194468
0xbe4722bc
// -0.113326
0xbde81743
// 0.161914
0x3e25ccba
// -0.074321
0xbd983584
// -0.266463
0xbe886dd2
// 0.096700
0x3dc60ad7

@ -0,0 +1,28 @@
W
13
// 16.614560
0x4184ea9e
// -3.430914
0xc05b9419
// -0.449975
0xbee6631a
// -0.719270
0xbf382216
// -0.009456
0xbc1aee40
// 0.375393
0x3ec03390
// 0.091797
0x3dbc0008
// 0.571371
0x3f124566
// 0.544033
0x3f0b45b8
// 0.122636
0x3dfb2858
// -0.240764
0xbe768ac1
// -0.119661
0xbdf510f6
// 0.306596
0x3e9cfa2f

@ -0,0 +1,28 @@
W
13
// 23.285167
0x41ba4806
// -3.167810
0xc04abd66
// -0.068430
0xbd8c24da
// -0.381059
0xbec31a39
// -0.164060
0xbe27ff4d
// -0.571221
0xbf123b87
// -0.156919
0xbe20af4f
// 0.145660
0x3e1527e4
// 0.060968
0x3d79b9dc
// 0.157476
0x3e21414e
// 0.226390
0x3e67d2b2
// 0.023298
0x3cbedb77
// 0.141592
0x3e10fd8c

@ -0,0 +1,109 @@
#include "MFCCF32.h"
#include <stdio.h>
#include "Error.h"
#include "mfccdata.h"
#define SNR_THRESHOLD 120
/*
Reference patterns are generated with
a double precision computation.
*/
#define REL_ERROR (9.2e-5)
void MFCCF32::test_mfcc_f32()
{
const float32_t *inp1=input1.ptr();
float32_t *tmpinp=tmpin.ptr();
float32_t *outp=output.ptr();
float32_t *tmpp=tmp.ptr();
memcpy((void*)tmpinp,(void*)inp1,sizeof(float32_t)*this->fftLen);
arm_mfcc_f32(&mfcc,tmpinp,outp,tmpp);
ASSERT_EMPTY_TAIL(output);
ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
ASSERT_REL_ERROR(output,ref,REL_ERROR);
}
void MFCCF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
{
(void)params;
Testing::nbSamples_t nb=MAX_NB_SAMPLES;
switch(id)
{
case MFCCF32::TEST_MFCC_F32_1:
{
nb = 256;
this->fftLen = nb;
ref.reload(MFCCF32::REF_MFCC_256_F32_ID,mgr,nb);
input1.reload(MFCCF32::INPUTS_MFCC_256_F32_ID,mgr,nb);
arm_mfcc_init_f32(&mfcc,
nb,20,13,mfcc_dct_coefs_config1,
mfcc_filter_pos_config3,mfcc_filter_len_config3,
mfcc_filter_coefs_config3,
mfcc_window_coefs_config3);
tmp.create(2*nb,MFCCF32::TMP_MFCC_F32_ID,mgr);
tmpin.create(nb,MFCCF32::TMPIN_MFCC_F32_ID,mgr);
}
break;
case MFCCF32::TEST_MFCC_F32_2:
{
nb = 512;
this->fftLen = nb;
ref.reload(MFCCF32::REF_MFCC_512_F32_ID,mgr,nb);
input1.reload(MFCCF32::INPUTS_MFCC_512_F32_ID,mgr,nb);
arm_mfcc_init_f32(&mfcc,
nb,20,13,mfcc_dct_coefs_config1,
mfcc_filter_pos_config2,mfcc_filter_len_config2,
mfcc_filter_coefs_config2,
mfcc_window_coefs_config2);
tmp.create(2*nb,MFCCF32::TMP_MFCC_F32_ID,mgr);
tmpin.create(nb,MFCCF32::TMPIN_MFCC_F32_ID,mgr);
}
break;
case MFCCF32::TEST_MFCC_F32_3:
{
nb = 1024;
this->fftLen = nb;
ref.reload(MFCCF32::REF_MFCC_1024_F32_ID,mgr,nb);
input1.reload(MFCCF32::INPUTS_MFCC_1024_F32_ID,mgr,nb);
arm_mfcc_init_f32(&mfcc,
nb,20,13,mfcc_dct_coefs_config1,
mfcc_filter_pos_config1,mfcc_filter_len_config1,
mfcc_filter_coefs_config1,
mfcc_window_coefs_config1);
tmp.create(2*nb,MFCCF32::TMP_MFCC_F32_ID,mgr);
tmpin.create(nb,MFCCF32::TMPIN_MFCC_F32_ID,mgr);
}
break;
}
output.create(ref.nbSamples(),MFCCF32::OUTPUT_MFCC_F32_ID,mgr);
}
void MFCCF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
{
(void)id;
(void)mgr;
//output.dump(mgr);
}

@ -0,0 +1,423 @@
#include "mfccdata.h"
const float32_t mfcc_dct_coefs_config1[NB_MFCC_DCT_COEFS_CONFIG1]={
0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,
0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,0.316228f,
0.315253f,0.307490f,0.292156f,0.269628f,0.240461f,0.205374f,0.165229f,0.121015f,0.073822f,0.024811f,
-0.024811f,-0.073822f,-0.121015f,-0.165229f,-0.205374f,-0.240461f,-0.269628f,-0.292156f,-0.307490f,-0.315253f,
0.312334f,0.281761f,0.223607f,0.143564f,0.049469f,-0.049469f,-0.143564f,-0.223607f,-0.281761f,-0.312334f,
-0.312334f,-0.281761f,-0.223607f,-0.143564f,-0.049469f,0.049469f,0.143564f,0.223607f,0.281761f,0.312334f,
0.307490f,0.240461f,0.121015f,-0.024811f,-0.165229f,-0.269628f,-0.315253f,-0.292156f,-0.205374f,-0.073822f,
0.073822f,0.205374f,0.292156f,0.315253f,0.269628f,0.165229f,0.024811f,-0.121015f,-0.240461f,-0.307490f,
0.300750f,0.185874f,0.000000f,-0.185874f,-0.300750f,-0.300750f,-0.185874f,-0.000000f,0.185874f,0.300750f,
0.300750f,0.185874f,0.000000f,-0.185874f,-0.300750f,-0.300750f,-0.185874f,-0.000000f,0.185874f,0.300750f,
0.292156f,0.121015f,-0.121015f,-0.292156f,-0.292156f,-0.121015f,0.121015f,0.292156f,0.292156f,0.121015f,
-0.121015f,-0.292156f,-0.292156f,-0.121015f,0.121015f,0.292156f,0.292156f,0.121015f,-0.121015f,-0.292156f,
0.281761f,0.049469f,-0.223607f,-0.312334f,-0.143564f,0.143564f,0.312334f,0.223607f,-0.049469f,-0.281761f,
-0.281761f,-0.049469f,0.223607f,0.312334f,0.143564f,-0.143564f,-0.312334f,-0.223607f,0.049469f,0.281761f,
0.269628f,-0.024811f,-0.292156f,-0.240461f,0.073822f,0.307490f,0.205374f,-0.121015f,-0.315253f,-0.165229f,
0.165229f,0.315253f,0.121015f,-0.205374f,-0.307490f,-0.073822f,0.240461f,0.292156f,0.024811f,-0.269628f,
0.255834f,-0.097720f,-0.316228f,-0.097720f,0.255834f,0.255834f,-0.097720f,-0.316228f,-0.097720f,0.255834f,
0.255834f,-0.097720f,-0.316228f,-0.097720f,0.255834f,0.255834f,-0.097720f,-0.316228f,-0.097720f,0.255834f,
0.240461f,-0.165229f,-0.292156f,0.073822f,0.315253f,0.024811f,-0.307490f,-0.121015f,0.269628f,0.205374f,
-0.205374f,-0.269628f,0.121015f,0.307490f,-0.024811f,-0.315253f,-0.073822f,0.292156f,0.165229f,-0.240461f,
0.223607f,-0.223607f,-0.223607f,0.223607f,0.223607f,-0.223607f,-0.223607f,0.223607f,0.223607f,-0.223607f,
-0.223607f,0.223607f,0.223607f,-0.223607f,-0.223607f,0.223607f,0.223607f,-0.223607f,-0.223607f,0.223607f,
0.205374f,-0.269628f,-0.121015f,0.307490f,0.024811f,-0.315253f,0.073822f,0.292156f,-0.165229f,-0.240461f,
0.240461f,0.165229f,-0.292156f,-0.073822f,0.315253f,-0.024811f,-0.307490f,0.121015f,0.269628f,-0.205374f,
0.185874f,-0.300750f,-0.000000f,0.300750f,-0.185874f,-0.185874f,0.300750f,0.000000f,-0.300750f,0.185874f,
0.185874f,-0.300750f,-0.000000f,0.300750f,-0.185874f,-0.185874f,0.300750f,-0.000000f,-0.300750f,0.185874f,
};
const float32_t mfcc_window_coefs_config1[NB_MFCC_WIN_COEFS_CONFIG1]={
0.080000f,0.080009f,0.080035f,0.080078f,0.080139f,0.080216f,0.080312f,0.080424f,0.080554f,0.080701f,
0.080866f,0.081047f,0.081246f,0.081463f,0.081696f,0.081947f,0.082215f,0.082500f,0.082803f,0.083123f,
0.083459f,0.083814f,0.084185f,0.084573f,0.084979f,0.085402f,0.085841f,0.086298f,0.086772f,0.087263f,
0.087771f,0.088297f,0.088839f,0.089398f,0.089974f,0.090567f,0.091177f,0.091804f,0.092448f,0.093108f,
0.093786f,0.094480f,0.095191f,0.095919f,0.096663f,0.097424f,0.098202f,0.098996f,0.099807f,0.100635f,
0.101479f,0.102340f,0.103217f,0.104111f,0.105021f,0.105947f,0.106890f,0.107849f,0.108824f,0.109816f,
0.110823f,0.111847f,0.112887f,0.113943f,0.115015f,0.116104f,0.117208f,0.118328f,0.119464f,0.120615f,
0.121783f,0.122966f,0.124165f,0.125380f,0.126610f,0.127856f,0.129117f,0.130394f,0.131686f,0.132993f,
0.134316f,0.135654f,0.137008f,0.138376f,0.139760f,0.141159f,0.142572f,0.144001f,0.145445f,0.146903f,
0.148377f,0.149865f,0.151367f,0.152885f,0.154417f,0.155963f,0.157524f,0.159099f,0.160689f,0.162293f,
0.163911f,0.165543f,0.167190f,0.168850f,0.170525f,0.172213f,0.173915f,0.175631f,0.177361f,0.179104f,
0.180861f,0.182631f,0.184415f,0.186212f,0.188023f,0.189847f,0.191684f,0.193534f,0.195397f,0.197273f,
0.199162f,0.201064f,0.202979f,0.204906f,0.206846f,0.208799f,0.210764f,0.212741f,0.214731f,0.216733f,
0.218747f,0.220773f,0.222811f,0.224862f,0.226924f,0.228997f,0.231083f,0.233180f,0.235289f,0.237409f,
0.239540f,0.241683f,0.243837f,0.246003f,0.248179f,0.250366f,0.252565f,0.254774f,0.256993f,0.259224f,
0.261465f,0.263716f,0.265978f,0.268251f,0.270533f,0.272826f,0.275128f,0.277441f,0.279763f,0.282096f,
0.284438f,0.286789f,0.289151f,0.291521f,0.293901f,0.296290f,0.298689f,0.301096f,0.303513f,0.305938f,
0.308372f,0.310815f,0.313267f,0.315727f,0.318195f,0.320672f,0.323157f,0.325651f,0.328152f,0.330662f,
0.333179f,0.335704f,0.338237f,0.340777f,0.343325f,0.345880f,0.348442f,0.351012f,0.353589f,0.356173f,
0.358764f,0.361361f,0.363966f,0.366577f,0.369194f,0.371818f,0.374448f,0.377085f,0.379727f,0.382376f,
0.385031f,0.387691f,0.390357f,0.393029f,0.395706f,0.398389f,0.401077f,0.403771f,0.406469f,0.409173f,
0.411881f,0.414594f,0.417312f,0.420035f,0.422762f,0.425493f,0.428229f,0.430969f,0.433713f,0.436461f,
0.439213f,0.441969f,0.444729f,0.447492f,0.450258f,0.453028f,0.455802f,0.458578f,0.461358f,0.464140f,
0.466925f,0.469713f,0.472504f,0.475297f,0.478093f,0.480891f,0.483691f,0.486493f,0.489298f,0.492104f,
0.494912f,0.497722f,0.500533f,0.503346f,0.506160f,0.508976f,0.511792f,0.514610f,0.517429f,0.520248f,
0.523069f,0.525890f,0.528711f,0.531533f,0.534355f,0.537178f,0.540000f,0.542822f,0.545645f,0.548467f,
0.551289f,0.554110f,0.556931f,0.559752f,0.562571f,0.565390f,0.568208f,0.571024f,0.573840f,0.576654f,
0.579467f,0.582278f,0.585088f,0.587896f,0.590702f,0.593507f,0.596309f,0.599109f,0.601907f,0.604703f,
0.607496f,0.610287f,0.613075f,0.615860f,0.618642f,0.621422f,0.624198f,0.626972f,0.629742f,0.632508f,
0.635271f,0.638031f,0.640787f,0.643539f,0.646287f,0.649031f,0.651771f,0.654507f,0.657238f,0.659965f,
0.662688f,0.665406f,0.668119f,0.670827f,0.673531f,0.676229f,0.678923f,0.681611f,0.684294f,0.686971f,
0.689643f,0.692309f,0.694969f,0.697624f,0.700273f,0.702915f,0.705552f,0.708182f,0.710806f,0.713423f,
0.716034f,0.718639f,0.721236f,0.723827f,0.726411f,0.728988f,0.731558f,0.734120f,0.736675f,0.739223f,
0.741763f,0.744296f,0.746821f,0.749338f,0.751848f,0.754349f,0.756842f,0.759328f,0.761805f,0.764273f,
0.766733f,0.769185f,0.771628f,0.774062f,0.776487f,0.778904f,0.781311f,0.783710f,0.786099f,0.788479f,
0.790850f,0.793211f,0.795562f,0.797904f,0.800237f,0.802559f,0.804872f,0.807174f,0.809467f,0.811749f,
0.814022f,0.816284f,0.818535f,0.820776f,0.823007f,0.825226f,0.827435f,0.829634f,0.831821f,0.833997f,
0.836163f,0.838317f,0.840460f,0.842591f,0.844711f,0.846820f,0.848917f,0.851003f,0.853076f,0.855138f,
0.857189f,0.859227f,0.861253f,0.863267f,0.865269f,0.867259f,0.869236f,0.871201f,0.873154f,0.875094f,
0.877021f,0.878936f,0.880838f,0.882727f,0.884603f,0.886466f,0.888316f,0.890153f,0.891977f,0.893788f,
0.895585f,0.897369f,0.899139f,0.900896f,0.902639f,0.904369f,0.906085f,0.907787f,0.909475f,0.911150f,
0.912810f,0.914457f,0.916089f,0.917707f,0.919311f,0.920901f,0.922476f,0.924037f,0.925583f,0.927115f,
0.928633f,0.930135f,0.931623f,0.933097f,0.934555f,0.935999f,0.937428f,0.938841f,0.940240f,0.941624f,
0.942992f,0.944346f,0.945684f,0.947007f,0.948314f,0.949606f,0.950883f,0.952145f,0.953390f,0.954620f,
0.955835f,0.957034f,0.958217f,0.959385f,0.960536f,0.961672f,0.962792f,0.963896f,0.964985f,0.966057f,
0.967113f,0.968153f,0.969177f,0.970184f,0.971176f,0.972151f,0.973110f,0.974053f,0.974979f,0.975889f,
0.976783f,0.977660f,0.978521f,0.979365f,0.980193f,0.981004f,0.981798f,0.982576f,0.983337f,0.984081f,
0.984809f,0.985520f,0.986214f,0.986892f,0.987552f,0.988196f,0.988823f,0.989433f,0.990026f,0.990602f,
0.991161f,0.991703f,0.992229f,0.992737f,0.993228f,0.993702f,0.994159f,0.994599f,0.995021f,0.995427f,
0.995815f,0.996186f,0.996541f,0.996877f,0.997197f,0.997500f,0.997785f,0.998053f,0.998304f,0.998537f,
0.998754f,0.998953f,0.999134f,0.999299f,0.999446f,0.999576f,0.999688f,0.999784f,0.999861f,0.999922f,
0.999965f,0.999991f,1.000000f,0.999991f,0.999965f,0.999922f,0.999861f,0.999784f,0.999688f,0.999576f,
0.999446f,0.999299f,0.999134f,0.998953f,0.998754f,0.998537f,0.998304f,0.998053f,0.997785f,0.997500f,
0.997197f,0.996877f,0.996541f,0.996186f,0.995815f,0.995427f,0.995021f,0.994599f,0.994159f,0.993702f,
0.993228f,0.992737f,0.992229f,0.991703f,0.991161f,0.990602f,0.990026f,0.989433f,0.988823f,0.988196f,
0.987552f,0.986892f,0.986214f,0.985520f,0.984809f,0.984081f,0.983337f,0.982576f,0.981798f,0.981004f,
0.980193f,0.979365f,0.978521f,0.977660f,0.976783f,0.975889f,0.974979f,0.974053f,0.973110f,0.972151f,
0.971176f,0.970184f,0.969177f,0.968153f,0.967113f,0.966057f,0.964985f,0.963896f,0.962792f,0.961672f,
0.960536f,0.959385f,0.958217f,0.957034f,0.955835f,0.954620f,0.953390f,0.952145f,0.950883f,0.949606f,
0.948314f,0.947007f,0.945684f,0.944346f,0.942992f,0.941624f,0.940240f,0.938841f,0.937428f,0.935999f,
0.934555f,0.933097f,0.931623f,0.930135f,0.928633f,0.927115f,0.925583f,0.924037f,0.922476f,0.920901f,
0.919311f,0.917707f,0.916089f,0.914457f,0.912810f,0.911150f,0.909475f,0.907787f,0.906085f,0.904369f,
0.902639f,0.900896f,0.899139f,0.897369f,0.895585f,0.893788f,0.891977f,0.890153f,0.888316f,0.886466f,
0.884603f,0.882727f,0.880838f,0.878936f,0.877021f,0.875094f,0.873154f,0.871201f,0.869236f,0.867259f,
0.865269f,0.863267f,0.861253f,0.859227f,0.857189f,0.855138f,0.853076f,0.851003f,0.848917f,0.846820f,
0.844711f,0.842591f,0.840460f,0.838317f,0.836163f,0.833997f,0.831821f,0.829634f,0.827435f,0.825226f,
0.823007f,0.820776f,0.818535f,0.816284f,0.814022f,0.811749f,0.809467f,0.807174f,0.804872f,0.802559f,
0.800237f,0.797904f,0.795562f,0.793211f,0.790850f,0.788479f,0.786099f,0.783710f,0.781311f,0.778904f,
0.776487f,0.774062f,0.771628f,0.769185f,0.766733f,0.764273f,0.761805f,0.759328f,0.756842f,0.754349f,
0.751848f,0.749338f,0.746821f,0.744296f,0.741763f,0.739223f,0.736675f,0.734120f,0.731558f,0.728988f,
0.726411f,0.723827f,0.721236f,0.718639f,0.716034f,0.713423f,0.710806f,0.708182f,0.705552f,0.702915f,
0.700273f,0.697624f,0.694969f,0.692309f,0.689643f,0.686971f,0.684294f,0.681611f,0.678923f,0.676229f,
0.673531f,0.670827f,0.668119f,0.665406f,0.662688f,0.659965f,0.657238f,0.654507f,0.651771f,0.649031f,
0.646287f,0.643539f,0.640787f,0.638031f,0.635271f,0.632508f,0.629742f,0.626972f,0.624198f,0.621422f,
0.618642f,0.615860f,0.613075f,0.610287f,0.607496f,0.604703f,0.601907f,0.599109f,0.596309f,0.593507f,
0.590702f,0.587896f,0.585088f,0.582278f,0.579467f,0.576654f,0.573840f,0.571024f,0.568208f,0.565390f,
0.562571f,0.559752f,0.556931f,0.554110f,0.551289f,0.548467f,0.545645f,0.542822f,0.540000f,0.537178f,
0.534355f,0.531533f,0.528711f,0.525890f,0.523069f,0.520248f,0.517429f,0.514610f,0.511792f,0.508976f,
0.506160f,0.503346f,0.500533f,0.497722f,0.494912f,0.492104f,0.489298f,0.486493f,0.483691f,0.480891f,
0.478093f,0.475297f,0.472504f,0.469713f,0.466925f,0.464140f,0.461358f,0.458578f,0.455802f,0.453028f,
0.450258f,0.447492f,0.444729f,0.441969f,0.439213f,0.436461f,0.433713f,0.430969f,0.428229f,0.425493f,
0.422762f,0.420035f,0.417312f,0.414594f,0.411881f,0.409173f,0.406469f,0.403771f,0.401077f,0.398389f,
0.395706f,0.393029f,0.390357f,0.387691f,0.385031f,0.382376f,0.379727f,0.377085f,0.374448f,0.371818f,
0.369194f,0.366577f,0.363966f,0.361361f,0.358764f,0.356173f,0.353589f,0.351012f,0.348442f,0.345880f,
0.343325f,0.340777f,0.338237f,0.335704f,0.333179f,0.330662f,0.328152f,0.325651f,0.323157f,0.320672f,
0.318195f,0.315727f,0.313267f,0.310815f,0.308372f,0.305938f,0.303513f,0.301096f,0.298689f,0.296290f,
0.293901f,0.291521f,0.289151f,0.286789f,0.284438f,0.282096f,0.279763f,0.277441f,0.275128f,0.272826f,
0.270533f,0.268251f,0.265978f,0.263716f,0.261465f,0.259224f,0.256993f,0.254774f,0.252565f,0.250366f,
0.248179f,0.246003f,0.243837f,0.241683f,0.239540f,0.237409f,0.235289f,0.233180f,0.231083f,0.228997f,
0.226924f,0.224862f,0.222811f,0.220773f,0.218747f,0.216733f,0.214731f,0.212741f,0.210764f,0.208799f,
0.206846f,0.204906f,0.202979f,0.201064f,0.199162f,0.197273f,0.195397f,0.193534f,0.191684f,0.189847f,
0.188023f,0.186212f,0.184415f,0.182631f,0.180861f,0.179104f,0.177361f,0.175631f,0.173915f,0.172213f,
0.170525f,0.168850f,0.167190f,0.165543f,0.163911f,0.162293f,0.160689f,0.159099f,0.157524f,0.155963f,
0.154417f,0.152885f,0.151367f,0.149865f,0.148377f,0.146903f,0.145445f,0.144001f,0.142572f,0.141159f,
0.139760f,0.138376f,0.137008f,0.135654f,0.134316f,0.132993f,0.131686f,0.130394f,0.129117f,0.127856f,
0.126610f,0.125380f,0.124165f,0.122966f,0.121783f,0.120615f,0.119464f,0.118328f,0.117208f,0.116104f,
0.115015f,0.113943f,0.112887f,0.111847f,0.110823f,0.109816f,0.108824f,0.107849f,0.106890f,0.105947f,
0.105021f,0.104111f,0.103217f,0.102340f,0.101479f,0.100635f,0.099807f,0.098996f,0.098202f,0.097424f,
0.096663f,0.095919f,0.095191f,0.094480f,0.093786f,0.093108f,0.092448f,0.091804f,0.091177f,0.090567f,
0.089974f,0.089398f,0.088839f,0.088297f,0.087771f,0.087263f,0.086772f,0.086298f,0.085841f,0.085402f,
0.084979f,0.084573f,0.084185f,0.083814f,0.083459f,0.083123f,0.082803f,0.082500f,0.082215f,0.081947f,
0.081696f,0.081463f,0.081246f,0.081047f,0.080866f,0.080701f,0.080554f,0.080424f,0.080312f,0.080216f,
0.080139f,0.080078f,0.080035f,0.080009f,};
const float32_t mfcc_window_coefs_config2[NB_MFCC_WIN_COEFS_CONFIG2]={
0.080000f,0.080035f,0.080139f,0.080312f,0.080554f,0.080866f,0.081246f,0.081696f,0.082215f,0.082803f,
0.083459f,0.084185f,0.084979f,0.085841f,0.086772f,0.087771f,0.088839f,0.089974f,0.091177f,0.092448f,
0.093786f,0.095191f,0.096663f,0.098202f,0.099807f,0.101479f,0.103217f,0.105021f,0.106890f,0.108824f,
0.110823f,0.112887f,0.115015f,0.117208f,0.119464f,0.121783f,0.124165f,0.126610f,0.129117f,0.131686f,
0.134316f,0.137008f,0.139760f,0.142572f,0.145445f,0.148377f,0.151367f,0.154417f,0.157524f,0.160689f,
0.163911f,0.167190f,0.170525f,0.173915f,0.177361f,0.180861f,0.184415f,0.188023f,0.191684f,0.195397f,
0.199162f,0.202979f,0.206846f,0.210764f,0.214731f,0.218747f,0.222811f,0.226924f,0.231083f,0.235289f,
0.239540f,0.243837f,0.248179f,0.252565f,0.256993f,0.261465f,0.265978f,0.270533f,0.275128f,0.279763f,
0.284438f,0.289151f,0.293901f,0.298689f,0.303513f,0.308372f,0.313267f,0.318195f,0.323157f,0.328152f,
0.333179f,0.338237f,0.343325f,0.348442f,0.353589f,0.358764f,0.363966f,0.369194f,0.374448f,0.379727f,
0.385031f,0.390357f,0.395706f,0.401077f,0.406469f,0.411881f,0.417312f,0.422762f,0.428229f,0.433713f,
0.439213f,0.444729f,0.450258f,0.455802f,0.461358f,0.466925f,0.472504f,0.478093f,0.483691f,0.489298f,
0.494912f,0.500533f,0.506160f,0.511792f,0.517429f,0.523069f,0.528711f,0.534355f,0.540000f,0.545645f,
0.551289f,0.556931f,0.562571f,0.568208f,0.573840f,0.579467f,0.585088f,0.590702f,0.596309f,0.601907f,
0.607496f,0.613075f,0.618642f,0.624198f,0.629742f,0.635271f,0.640787f,0.646287f,0.651771f,0.657238f,
0.662688f,0.668119f,0.673531f,0.678923f,0.684294f,0.689643f,0.694969f,0.700273f,0.705552f,0.710806f,
0.716034f,0.721236f,0.726411f,0.731558f,0.736675f,0.741763f,0.746821f,0.751848f,0.756842f,0.761805f,
0.766733f,0.771628f,0.776487f,0.781311f,0.786099f,0.790850f,0.795562f,0.800237f,0.804872f,0.809467f,
0.814022f,0.818535f,0.823007f,0.827435f,0.831821f,0.836163f,0.840460f,0.844711f,0.848917f,0.853076f,
0.857189f,0.861253f,0.865269f,0.869236f,0.873154f,0.877021f,0.880838f,0.884603f,0.888316f,0.891977f,
0.895585f,0.899139f,0.902639f,0.906085f,0.909475f,0.912810f,0.916089f,0.919311f,0.922476f,0.925583f,
0.928633f,0.931623f,0.934555f,0.937428f,0.940240f,0.942992f,0.945684f,0.948314f,0.950883f,0.953390f,
0.955835f,0.958217f,0.960536f,0.962792f,0.964985f,0.967113f,0.969177f,0.971176f,0.973110f,0.974979f,
0.976783f,0.978521f,0.980193f,0.981798f,0.983337f,0.984809f,0.986214f,0.987552f,0.988823f,0.990026f,
0.991161f,0.992229f,0.993228f,0.994159f,0.995021f,0.995815f,0.996541f,0.997197f,0.997785f,0.998304f,
0.998754f,0.999134f,0.999446f,0.999688f,0.999861f,0.999965f,1.000000f,0.999965f,0.999861f,0.999688f,
0.999446f,0.999134f,0.998754f,0.998304f,0.997785f,0.997197f,0.996541f,0.995815f,0.995021f,0.994159f,
0.993228f,0.992229f,0.991161f,0.990026f,0.988823f,0.987552f,0.986214f,0.984809f,0.983337f,0.981798f,
0.980193f,0.978521f,0.976783f,0.974979f,0.973110f,0.971176f,0.969177f,0.967113f,0.964985f,0.962792f,
0.960536f,0.958217f,0.955835f,0.953390f,0.950883f,0.948314f,0.945684f,0.942992f,0.940240f,0.937428f,
0.934555f,0.931623f,0.928633f,0.925583f,0.922476f,0.919311f,0.916089f,0.912810f,0.909475f,0.906085f,
0.902639f,0.899139f,0.895585f,0.891977f,0.888316f,0.884603f,0.880838f,0.877021f,0.873154f,0.869236f,
0.865269f,0.861253f,0.857189f,0.853076f,0.848917f,0.844711f,0.840460f,0.836163f,0.831821f,0.827435f,
0.823007f,0.818535f,0.814022f,0.809467f,0.804872f,0.800237f,0.795562f,0.790850f,0.786099f,0.781311f,
0.776487f,0.771628f,0.766733f,0.761805f,0.756842f,0.751848f,0.746821f,0.741763f,0.736675f,0.731558f,
0.726411f,0.721236f,0.716034f,0.710806f,0.705552f,0.700273f,0.694969f,0.689643f,0.684294f,0.678923f,
0.673531f,0.668119f,0.662688f,0.657238f,0.651771f,0.646287f,0.640787f,0.635271f,0.629742f,0.624198f,
0.618642f,0.613075f,0.607496f,0.601907f,0.596309f,0.590702f,0.585088f,0.579467f,0.573840f,0.568208f,
0.562571f,0.556931f,0.551289f,0.545645f,0.540000f,0.534355f,0.528711f,0.523069f,0.517429f,0.511792f,
0.506160f,0.500533f,0.494912f,0.489298f,0.483691f,0.478093f,0.472504f,0.466925f,0.461358f,0.455802f,
0.450258f,0.444729f,0.439213f,0.433713f,0.428229f,0.422762f,0.417312f,0.411881f,0.406469f,0.401077f,
0.395706f,0.390357f,0.385031f,0.379727f,0.374448f,0.369194f,0.363966f,0.358764f,0.353589f,0.348442f,
0.343325f,0.338237f,0.333179f,0.328152f,0.323157f,0.318195f,0.313267f,0.308372f,0.303513f,0.298689f,
0.293901f,0.289151f,0.284438f,0.279763f,0.275128f,0.270533f,0.265978f,0.261465f,0.256993f,0.252565f,
0.248179f,0.243837f,0.239540f,0.235289f,0.231083f,0.226924f,0.222811f,0.218747f,0.214731f,0.210764f,
0.206846f,0.202979f,0.199162f,0.195397f,0.191684f,0.188023f,0.184415f,0.180861f,0.177361f,0.173915f,
0.170525f,0.167190f,0.163911f,0.160689f,0.157524f,0.154417f,0.151367f,0.148377f,0.145445f,0.142572f,
0.139760f,0.137008f,0.134316f,0.131686f,0.129117f,0.126610f,0.124165f,0.121783f,0.119464f,0.117208f,
0.115015f,0.112887f,0.110823f,0.108824f,0.106890f,0.105021f,0.103217f,0.101479f,0.099807f,0.098202f,
0.096663f,0.095191f,0.093786f,0.092448f,0.091177f,0.089974f,0.088839f,0.087771f,0.086772f,0.085841f,
0.084979f,0.084185f,0.083459f,0.082803f,0.082215f,0.081696f,0.081246f,0.080866f,0.080554f,0.080312f,
0.080139f,0.080035f,};
const float32_t mfcc_window_coefs_config3[NB_MFCC_WIN_COEFS_CONFIG3]={
0.080000f,0.080139f,0.080554f,0.081246f,0.082215f,0.083459f,0.084979f,0.086772f,0.088839f,0.091177f,
0.093786f,0.096663f,0.099807f,0.103217f,0.106890f,0.110823f,0.115015f,0.119464f,0.124165f,0.129117f,
0.134316f,0.139760f,0.145445f,0.151367f,0.157524f,0.163911f,0.170525f,0.177361f,0.184415f,0.191684f,
0.199162f,0.206846f,0.214731f,0.222811f,0.231083f,0.239540f,0.248179f,0.256993f,0.265978f,0.275128f,
0.284438f,0.293901f,0.303513f,0.313267f,0.323157f,0.333179f,0.343325f,0.353589f,0.363966f,0.374448f,
0.385031f,0.395706f,0.406469f,0.417312f,0.428229f,0.439213f,0.450258f,0.461358f,0.472504f,0.483691f,
0.494912f,0.506160f,0.517429f,0.528711f,0.540000f,0.551289f,0.562571f,0.573840f,0.585088f,0.596309f,
0.607496f,0.618642f,0.629742f,0.640787f,0.651771f,0.662688f,0.673531f,0.684294f,0.694969f,0.705552f,
0.716034f,0.726411f,0.736675f,0.746821f,0.756842f,0.766733f,0.776487f,0.786099f,0.795562f,0.804872f,
0.814022f,0.823007f,0.831821f,0.840460f,0.848917f,0.857189f,0.865269f,0.873154f,0.880838f,0.888316f,
0.895585f,0.902639f,0.909475f,0.916089f,0.922476f,0.928633f,0.934555f,0.940240f,0.945684f,0.950883f,
0.955835f,0.960536f,0.964985f,0.969177f,0.973110f,0.976783f,0.980193f,0.983337f,0.986214f,0.988823f,
0.991161f,0.993228f,0.995021f,0.996541f,0.997785f,0.998754f,0.999446f,0.999861f,1.000000f,0.999861f,
0.999446f,0.998754f,0.997785f,0.996541f,0.995021f,0.993228f,0.991161f,0.988823f,0.986214f,0.983337f,
0.980193f,0.976783f,0.973110f,0.969177f,0.964985f,0.960536f,0.955835f,0.950883f,0.945684f,0.940240f,
0.934555f,0.928633f,0.922476f,0.916089f,0.909475f,0.902639f,0.895585f,0.888316f,0.880838f,0.873154f,
0.865269f,0.857189f,0.848917f,0.840460f,0.831821f,0.823007f,0.814022f,0.804872f,0.795562f,0.786099f,
0.776487f,0.766733f,0.756842f,0.746821f,0.736675f,0.726411f,0.716034f,0.705552f,0.694969f,0.684294f,
0.673531f,0.662688f,0.651771f,0.640787f,0.629742f,0.618642f,0.607496f,0.596309f,0.585088f,0.573840f,
0.562571f,0.551289f,0.540000f,0.528711f,0.517429f,0.506160f,0.494912f,0.483691f,0.472504f,0.461358f,
0.450258f,0.439213f,0.428229f,0.417312f,0.406469f,0.395706f,0.385031f,0.374448f,0.363966f,0.353589f,
0.343325f,0.333179f,0.323157f,0.313267f,0.303513f,0.293901f,0.284438f,0.275128f,0.265978f,0.256993f,
0.248179f,0.239540f,0.231083f,0.222811f,0.214731f,0.206846f,0.199162f,0.191684f,0.184415f,0.177361f,
0.170525f,0.163911f,0.157524f,0.151367f,0.145445f,0.139760f,0.134316f,0.129117f,0.124165f,0.119464f,
0.115015f,0.110823f,0.106890f,0.103217f,0.099807f,0.096663f,0.093786f,0.091177f,0.088839f,0.086772f,
0.084979f,0.083459f,0.082215f,0.081246f,0.080554f,0.080139f,};
const uint32_t mfcc_filter_pos_config1[NB_MFCC_NB_FILTER_CONFIG1]={
5,11,17,25,33,43,54,66,79,94,
111,131,152,176,203,234,268,306,349,397,
};
const uint32_t mfcc_filter_len_config1[NB_MFCC_NB_FILTER_CONFIG1]={
12,14,16,18,21,23,25,28,32,37,
41,45,51,58,65,72,81,91,103,115,
};
const uint32_t mfcc_filter_pos_config2[NB_MFCC_NB_FILTER_CONFIG2]={
3,6,9,13,17,22,27,33,40,47,
56,66,76,88,102,117,134,153,175,199,
};
const uint32_t mfcc_filter_len_config2[NB_MFCC_NB_FILTER_CONFIG2]={
6,7,8,9,10,11,13,14,16,19,
20,22,26,29,32,36,41,46,51,57,
};
const uint32_t mfcc_filter_pos_config3[NB_MFCC_NB_FILTER_CONFIG3]={
2,3,5,7,9,11,14,17,20,24,
28,33,38,44,51,59,67,77,88,100,
};
const uint32_t mfcc_filter_len_config3[NB_MFCC_NB_FILTER_CONFIG3]={
3,4,4,4,5,6,6,7,8,9,
10,11,13,15,16,18,21,23,25,28,
};
const float32_t mfcc_filter_coefs_config1[NB_MFCC_FILTER_COEFS_CONFIG1]={
0.158152f,0.329789f,0.498080f,0.663153f,0.825129f,0.984122f,0.859761f,0.706417f,0.555749f,0.407665f,
0.262079f,0.118907f,0.140239f,0.293583f,0.444251f,0.592335f,0.737921f,0.881093f,0.978071f,0.839496f,
0.703110f,0.568845f,0.436636f,0.306422f,0.178142f,0.051741f,0.021929f,0.160504f,0.296890f,0.431155f,
0.563364f,0.693578f,0.821858f,0.948259f,0.927164f,0.804358f,0.683276f,0.563868f,0.446089f,0.329895f,
0.215245f,0.102097f,0.072836f,0.195642f,0.316724f,0.436132f,0.553911f,0.670105f,0.784755f,0.897903f,
0.990413f,0.880155f,0.771288f,0.663777f,0.557588f,0.452689f,0.349050f,0.246640f,0.145430f,0.045394f,
0.009587f,0.119845f,0.228712f,0.336223f,0.442412f,0.547311f,0.650950f,0.753360f,0.854570f,0.954606f,
0.946503f,0.848733f,0.752057f,0.656452f,0.561894f,0.468360f,0.375829f,0.284280f,0.193690f,0.104042f,
0.015315f,0.053497f,0.151267f,0.247943f,0.343548f,0.438106f,0.531640f,0.624171f,0.715720f,0.806310f,
0.895958f,0.984685f,0.927491f,0.840551f,0.754478f,0.669255f,0.584864f,0.501291f,0.418519f,0.336533f,
0.255318f,0.174861f,0.095146f,0.016160f,0.072509f,0.159449f,0.245522f,0.330745f,0.415136f,0.498709f,
0.581481f,0.663467f,0.744682f,0.825139f,0.904854f,0.983840f,0.937891f,0.860325f,0.783449f,0.707252f,
0.631722f,0.556847f,0.482615f,0.409017f,0.336040f,0.263676f,0.191913f,0.120741f,0.050152f,0.062109f,
0.139675f,0.216551f,0.292748f,0.368278f,0.443153f,0.517385f,0.590983f,0.663960f,0.736324f,0.808087f,
0.879259f,0.949848f,0.980135f,0.910681f,0.841781f,0.773427f,0.705610f,0.638322f,0.571554f,0.505298f,
0.439548f,0.374294f,0.309529f,0.245247f,0.181440f,0.118101f,0.055223f,0.019865f,0.089319f,0.158219f,
0.226573f,0.294390f,0.361678f,0.428446f,0.494702f,0.560452f,0.625706f,0.690471f,0.754753f,0.818560f,
0.881899f,0.944777f,0.992800f,0.930826f,0.869293f,0.808195f,0.747527f,0.687282f,0.627454f,0.568039f,
0.509029f,0.450420f,0.392207f,0.334383f,0.276944f,0.219885f,0.163200f,0.106885f,0.050935f,0.007200f,
0.069174f,0.130707f,0.191805f,0.252473f,0.312718f,0.372546f,0.431961f,0.490971f,0.549580f,0.607793f,
0.665617f,0.723056f,0.780115f,0.836800f,0.893115f,0.949065f,0.995345f,0.940111f,0.885228f,0.830692f,
0.776498f,0.722642f,0.669120f,0.615928f,0.563062f,0.510517f,0.458290f,0.406378f,0.354775f,0.303479f,
0.252487f,0.201793f,0.151396f,0.101291f,0.051475f,0.001945f,0.004655f,0.059889f,0.114772f,0.169308f,
0.223502f,0.277358f,0.330880f,0.384072f,0.436938f,0.489483f,0.541710f,0.593622f,0.645225f,0.696521f,
0.747513f,0.798207f,0.848604f,0.898709f,0.948525f,0.998055f,0.952698f,0.903729f,0.855038f,0.806619f,
0.758470f,0.710588f,0.662971f,0.615614f,0.568516f,0.521674f,0.475084f,0.428744f,0.382652f,0.336804f,
0.291199f,0.245834f,0.200705f,0.155811f,0.111150f,0.066718f,0.022514f,0.047302f,0.096271f,0.144962f,
0.193381f,0.241530f,0.289412f,0.337029f,0.384386f,0.431484f,0.478326f,0.524916f,0.571256f,0.617348f,
0.663196f,0.708801f,0.754166f,0.799295f,0.844189f,0.888850f,0.933282f,0.977486f,0.978535f,0.934779f,
0.891243f,0.847926f,0.804826f,0.761939f,0.719265f,0.676800f,0.634543f,0.592492f,0.550645f,0.508999f,
0.467554f,0.426307f,0.385255f,0.344399f,0.303734f,0.263260f,0.222975f,0.182877f,0.142965f,0.103236f,
0.063689f,0.024323f,0.021465f,0.065221f,0.108757f,0.152074f,0.195174f,0.238061f,0.280735f,0.323200f,
0.365457f,0.407508f,0.449355f,0.491001f,0.532446f,0.573693f,0.614745f,0.655601f,0.696266f,0.736740f,
0.777025f,0.817123f,0.857035f,0.896764f,0.936311f,0.975677f,0.985135f,0.946124f,0.907289f,0.868628f,
0.830139f,0.791821f,0.753672f,0.715691f,0.677876f,0.640227f,0.602740f,0.565416f,0.528253f,0.491249f,
0.454402f,0.417713f,0.381178f,0.344798f,0.308570f,0.272494f,0.236568f,0.200790f,0.165161f,0.129678f,
0.094340f,0.059146f,0.024095f,0.014865f,0.053876f,0.092711f,0.131372f,0.169861f,0.208179f,0.246328f,
0.284309f,0.322124f,0.359773f,0.397260f,0.434584f,0.471747f,0.508751f,0.545597f,0.582287f,0.618822f,
0.655202f,0.691430f,0.727506f,0.763432f,0.799210f,0.834839f,0.870322f,0.905660f,0.940854f,0.975905f,
0.989185f,0.954417f,0.919787f,0.885297f,0.850943f,0.816725f,0.782643f,0.748695f,0.714879f,0.681196f,
0.647643f,0.614221f,0.580927f,0.547761f,0.514722f,0.481809f,0.449021f,0.416357f,0.383817f,0.351398f,
0.319101f,0.286924f,0.254866f,0.222928f,0.191107f,0.159402f,0.127814f,0.096341f,0.064982f,0.033737f,
0.002604f,0.010815f,0.045583f,0.080213f,0.114703f,0.149057f,0.183275f,0.217357f,0.251305f,0.285121f,
0.318804f,0.352357f,0.385779f,0.419073f,0.452239f,0.485278f,0.518191f,0.550979f,0.583643f,0.616183f,
0.648602f,0.680899f,0.713076f,0.745134f,0.777072f,0.808893f,0.840598f,0.872186f,0.903659f,0.935018f,
0.966263f,0.997396f,0.971584f,0.940674f,0.909875f,0.879185f,0.848604f,0.818130f,0.787764f,0.757505f,
0.727351f,0.697302f,0.667357f,0.637516f,0.607777f,0.578141f,0.548606f,0.519172f,0.489838f,0.460603f,
0.431467f,0.402428f,0.373487f,0.344643f,0.315895f,0.287242f,0.258684f,0.230221f,0.201850f,0.173573f,
0.145388f,0.117295f,0.089293f,0.061381f,0.033559f,0.005827f,0.028416f,0.059326f,0.090125f,0.120815f,
0.151396f,0.181870f,0.212236f,0.242495f,0.272649f,0.302698f,0.332643f,0.362484f,0.392223f,0.421859f,
0.451394f,0.480828f,0.510162f,0.539397f,0.568533f,0.597572f,0.626513f,0.655357f,0.684105f,0.712758f,
0.741315f,0.769779f,0.798150f,0.826427f,0.854612f,0.882705f,0.910707f,0.938619f,0.966441f,0.994173f,
0.978184f,0.950628f,0.923161f,0.895780f,0.868486f,0.841279f,0.814156f,0.787119f,0.760166f,0.733296f,
0.706511f,0.679808f,0.653187f,0.626648f,0.600191f,0.573814f,0.547518f,0.521302f,0.495165f,0.469106f,
0.443127f,0.417225f,0.391401f,0.365653f,0.339983f,0.314388f,0.288869f,0.263425f,0.238056f,0.212762f,
0.187541f,0.162394f,0.137319f,0.112318f,0.087388f,0.062531f,0.037744f,0.013029f,0.021816f,0.049372f,
0.076839f,0.104220f,0.131514f,0.158721f,0.185844f,0.212881f,0.239834f,0.266704f,0.293489f,0.320192f,
0.346813f,0.373352f,0.399809f,0.426186f,0.452482f,0.478698f,0.504835f,0.530894f,0.556873f,0.582775f,
0.608599f,0.634347f,0.660017f,0.685612f,0.711131f,0.736575f,0.761944f,0.787238f,0.812459f,0.837606f,
0.862681f,0.887682f,0.912612f,0.937469f,0.962256f,0.986971f,0.988384f,0.963810f,0.939305f,0.914869f,
0.890503f,0.866205f,0.841975f,0.817813f,0.793719f,0.769691f,0.745730f,0.721836f,0.698008f,0.674245f,
0.650547f,0.626914f,0.603346f,0.579842f,0.556401f,0.533025f,0.509711f,0.486460f,0.463272f,0.440145f,
0.417081f,0.394078f,0.371136f,0.348254f,0.325434f,0.302673f,0.279973f,0.257332f,0.234750f,0.212227f,
0.189762f,0.167356f,0.145008f,0.122718f,0.100485f,0.078309f,0.056190f,0.034127f,0.012121f,0.011616f,
0.036190f,0.060695f,0.085131f,0.109497f,0.133795f,0.158025f,0.182187f,0.206281f,0.230309f,0.254270f,
0.278164f,0.301992f,0.325755f,0.349453f,0.373086f,0.396654f,0.420158f,0.443599f,0.466975f,0.490289f,
0.513540f,0.536728f,0.559855f,0.582919f,0.605922f,0.628864f,0.651745f,0.674566f,0.697327f,0.720027f,
0.742669f,0.765250f,0.787773f,0.810238f,0.832644f,0.854992f,0.877282f,0.899515f,0.921691f,0.943810f,
0.965873f,0.987879f,0.990171f,0.968276f,0.946437f,0.924653f,0.902923f,0.881249f,0.859628f,0.838062f,
0.816549f,0.795090f,0.773684f,0.752330f,0.731030f,0.709782f,0.688586f,0.667442f,0.646350f,0.625309f,
0.604320f,0.583381f,0.562493f,0.541655f,0.520867f,0.500130f,0.479442f,0.458803f,0.438214f,0.417674f,
0.397182f,0.376740f,0.356345f,0.335998f,0.315700f,0.295448f,0.275245f,0.255088f,0.234978f,0.214916f,
0.194899f,0.174929f,0.155005f,0.135127f,0.115295f,0.095508f,0.075766f,0.056069f,0.036417f,0.016810f,
0.009829f,0.031724f,0.053563f,0.075347f,0.097077f,0.118751f,0.140372f,0.161938f,0.183451f,0.204910f,
0.226316f,0.247670f,0.268970f,0.290218f,0.311414f,0.332558f,0.353650f,0.374691f,0.395680f,0.416619f,
0.437507f,0.458345f,0.479133f,0.499870f,0.520558f,0.541197f,0.561786f,0.582326f,0.602817f,0.623260f,
0.643655f,0.664002f,0.684300f,0.704552f,0.724755f,0.744912f,0.765022f,0.785084f,0.805101f,0.825071f,
0.844995f,0.864873f,0.884705f,0.904492f,0.924234f,0.943931f,0.963583f,0.983190f,0.997247f,0.977729f,
0.958254f,0.938824f,0.919437f,0.900093f,0.880792f,0.861535f,0.842321f,0.823149f,0.804020f,0.784933f,
0.765888f,0.746885f,0.727923f,0.709004f,0.690125f,0.671288f,0.652492f,0.633737f,0.615022f,0.596348f,
0.577714f,0.559120f,0.540567f,0.522053f,0.503578f,0.485144f,0.466748f,0.448391f,0.430074f,0.411795f,
0.393555f,0.375353f,0.357190f,0.339065f,0.320977f,0.302928f,0.284916f,0.266942f,0.249005f,0.231105f,
0.213242f,0.195416f,0.177627f,0.159875f,0.142159f,0.124479f,0.106835f,0.089227f,0.071656f,0.054119f,
0.036619f,0.019154f,0.001724f,0.002753f,0.022271f,0.041746f,0.061176f,0.080564f,0.099907f,0.119208f,
0.138465f,0.157679f,0.176851f,0.195980f,0.215067f,0.234112f,0.253115f,0.272077f,0.290996f,0.309875f,
0.328712f,0.347508f,0.366263f,0.384978f,0.403652f,0.422286f,0.440880f,0.459433f,0.477947f,0.496422f,
0.514856f,0.533252f,0.551609f,0.569926f,0.588205f,0.606445f,0.624647f,0.642810f,0.660935f,0.679023f,
0.697072f,0.715084f,0.733058f,0.750995f,0.768895f,0.786758f,0.804583f,0.822373f,0.840125f,0.857841f,
0.875521f,0.893165f,0.910773f,0.928344f,0.945881f,0.963381f,0.980846f,0.998276f,0.984329f,0.966969f,
0.949644f,0.932354f,0.915098f,0.897877f,0.880689f,0.863537f,0.846418f,0.829333f,0.812281f,0.795264f,
0.778279f,0.761329f,0.744411f,0.727526f,0.710675f,0.693856f,0.677070f,0.660317f,0.643596f,0.626907f,
0.610251f,0.593626f,0.577034f,0.560473f,0.543944f,0.527447f,0.510981f,0.494546f,0.478143f,0.461771f,
0.445430f,0.429119f,0.412840f,0.396591f,0.380372f,0.364184f,0.348027f,0.331899f,0.315802f,0.299734f,
0.283697f,0.267689f,0.251710f,0.235762f,0.219842f,0.203952f,0.188091f,0.172260f,0.156457f,0.140683f,
0.124938f,0.109221f,0.093533f,0.077874f,0.062243f,0.046640f,0.031065f,0.015519f,};
const float32_t mfcc_filter_coefs_config2[NB_MFCC_FILTER_COEFS_CONFIG2]={
0.329789f,0.663153f,0.984122f,0.706417f,0.407665f,0.118907f,0.293583f,0.592335f,0.881093f,0.839496f,
0.568845f,0.306422f,0.051741f,0.160504f,0.431155f,0.693578f,0.948259f,0.804358f,0.563868f,0.329895f,
0.102097f,0.195642f,0.436132f,0.670105f,0.897903f,0.880155f,0.663777f,0.452689f,0.246640f,0.045394f,
0.119845f,0.336223f,0.547311f,0.753360f,0.954606f,0.848733f,0.656452f,0.468360f,0.284280f,0.104042f,
0.151267f,0.343548f,0.531640f,0.715720f,0.895958f,0.927491f,0.754478f,0.584864f,0.418519f,0.255318f,
0.095146f,0.072509f,0.245522f,0.415136f,0.581481f,0.744682f,0.904854f,0.937891f,0.783449f,0.631722f,
0.482615f,0.336040f,0.191913f,0.050152f,0.062109f,0.216551f,0.368278f,0.517385f,0.663960f,0.808087f,
0.949848f,0.910681f,0.773427f,0.638322f,0.505298f,0.374294f,0.245247f,0.118101f,0.089319f,0.226573f,
0.361678f,0.494702f,0.625706f,0.754753f,0.881899f,0.992800f,0.869293f,0.747527f,0.627454f,0.509029f,
0.392207f,0.276944f,0.163200f,0.050935f,0.007200f,0.130707f,0.252473f,0.372546f,0.490971f,0.607793f,
0.723056f,0.836800f,0.949065f,0.940111f,0.830692f,0.722642f,0.615928f,0.510517f,0.406378f,0.303479f,
0.201793f,0.101291f,0.001945f,0.059889f,0.169308f,0.277358f,0.384072f,0.489483f,0.593622f,0.696521f,
0.798207f,0.898709f,0.998055f,0.903729f,0.806619f,0.710588f,0.615614f,0.521674f,0.428744f,0.336804f,
0.245834f,0.155811f,0.066718f,0.096271f,0.193381f,0.289412f,0.384386f,0.478326f,0.571256f,0.663196f,
0.754166f,0.844189f,0.933282f,0.978535f,0.891243f,0.804826f,0.719265f,0.634543f,0.550645f,0.467554f,
0.385255f,0.303734f,0.222975f,0.142965f,0.063689f,0.021465f,0.108757f,0.195174f,0.280735f,0.365457f,
0.449355f,0.532446f,0.614745f,0.696266f,0.777025f,0.857035f,0.936311f,0.985135f,0.907289f,0.830139f,
0.753672f,0.677876f,0.602740f,0.528253f,0.454402f,0.381178f,0.308570f,0.236568f,0.165161f,0.094340f,
0.024095f,0.014865f,0.092711f,0.169861f,0.246328f,0.322124f,0.397260f,0.471747f,0.545597f,0.618822f,
0.691430f,0.763432f,0.834839f,0.905660f,0.975905f,0.954417f,0.885297f,0.816725f,0.748695f,0.681196f,
0.614221f,0.547761f,0.481809f,0.416357f,0.351398f,0.286924f,0.222928f,0.159402f,0.096341f,0.033737f,
0.045583f,0.114703f,0.183275f,0.251305f,0.318804f,0.385779f,0.452239f,0.518191f,0.583643f,0.648602f,
0.713076f,0.777072f,0.840598f,0.903659f,0.966263f,0.971584f,0.909875f,0.848604f,0.787764f,0.727351f,
0.667357f,0.607777f,0.548606f,0.489838f,0.431467f,0.373487f,0.315895f,0.258684f,0.201850f,0.145388f,
0.089293f,0.033559f,0.028416f,0.090125f,0.151396f,0.212236f,0.272649f,0.332643f,0.392223f,0.451394f,
0.510162f,0.568533f,0.626513f,0.684105f,0.741315f,0.798150f,0.854612f,0.910707f,0.966441f,0.978184f,
0.923161f,0.868486f,0.814156f,0.760166f,0.706511f,0.653187f,0.600191f,0.547518f,0.495165f,0.443127f,
0.391401f,0.339983f,0.288869f,0.238056f,0.187541f,0.137319f,0.087388f,0.037744f,0.021816f,0.076839f,
0.131514f,0.185844f,0.239834f,0.293489f,0.346813f,0.399809f,0.452482f,0.504835f,0.556873f,0.608599f,
0.660017f,0.711131f,0.761944f,0.812459f,0.862681f,0.912612f,0.962256f,0.988384f,0.939305f,0.890503f,
0.841975f,0.793719f,0.745730f,0.698008f,0.650547f,0.603346f,0.556401f,0.509711f,0.463272f,0.417081f,
0.371136f,0.325434f,0.279973f,0.234750f,0.189762f,0.145008f,0.100485f,0.056190f,0.012121f,0.011616f,
0.060695f,0.109497f,0.158025f,0.206281f,0.254270f,0.301992f,0.349453f,0.396654f,0.443599f,0.490289f,
0.536728f,0.582919f,0.628864f,0.674566f,0.720027f,0.765250f,0.810238f,0.854992f,0.899515f,0.943810f,
0.987879f,0.968276f,0.924653f,0.881249f,0.838062f,0.795090f,0.752330f,0.709782f,0.667442f,0.625309f,
0.583381f,0.541655f,0.500130f,0.458803f,0.417674f,0.376740f,0.335998f,0.295448f,0.255088f,0.214916f,
0.174929f,0.135127f,0.095508f,0.056069f,0.016810f,0.031724f,0.075347f,0.118751f,0.161938f,0.204910f,
0.247670f,0.290218f,0.332558f,0.374691f,0.416619f,0.458345f,0.499870f,0.541197f,0.582326f,0.623260f,
0.664002f,0.704552f,0.744912f,0.785084f,0.825071f,0.864873f,0.904492f,0.943931f,0.983190f,0.977729f,
0.938824f,0.900093f,0.861535f,0.823149f,0.784933f,0.746885f,0.709004f,0.671288f,0.633737f,0.596348f,
0.559120f,0.522053f,0.485144f,0.448391f,0.411795f,0.375353f,0.339065f,0.302928f,0.266942f,0.231105f,
0.195416f,0.159875f,0.124479f,0.089227f,0.054119f,0.019154f,0.022271f,0.061176f,0.099907f,0.138465f,
0.176851f,0.215067f,0.253115f,0.290996f,0.328712f,0.366263f,0.403652f,0.440880f,0.477947f,0.514856f,
0.551609f,0.588205f,0.624647f,0.660935f,0.697072f,0.733058f,0.768895f,0.804583f,0.840125f,0.875521f,
0.910773f,0.945881f,0.980846f,0.984329f,0.949644f,0.915098f,0.880689f,0.846418f,0.812281f,0.778279f,
0.744411f,0.710675f,0.677070f,0.643596f,0.610251f,0.577034f,0.543944f,0.510981f,0.478143f,0.445430f,
0.412840f,0.380372f,0.348027f,0.315802f,0.283697f,0.251710f,0.219842f,0.188091f,0.156457f,0.124938f,
0.093533f,0.062243f,0.031065f,};
const float32_t mfcc_filter_coefs_config3[NB_MFCC_FILTER_COEFS_CONFIG3]={
0.663153f,0.706417f,0.118907f,0.293583f,0.881093f,0.568845f,0.051741f,0.431155f,0.948259f,0.563868f,
0.102097f,0.436132f,0.897903f,0.663777f,0.246640f,0.336223f,0.753360f,0.848733f,0.468360f,0.104042f,
0.151267f,0.531640f,0.895958f,0.754478f,0.418519f,0.095146f,0.245522f,0.581481f,0.904854f,0.783449f,
0.482615f,0.191913f,0.216551f,0.517385f,0.808087f,0.910681f,0.638322f,0.374294f,0.118101f,0.089319f,
0.361678f,0.625706f,0.881899f,0.869293f,0.627454f,0.392207f,0.163200f,0.130707f,0.372546f,0.607793f,
0.836800f,0.940111f,0.722642f,0.510517f,0.303479f,0.101291f,0.059889f,0.277358f,0.489483f,0.696521f,
0.898709f,0.903729f,0.710588f,0.521674f,0.336804f,0.155811f,0.096271f,0.289412f,0.478326f,0.663196f,
0.844189f,0.978535f,0.804826f,0.634543f,0.467554f,0.303734f,0.142965f,0.021465f,0.195174f,0.365457f,
0.532446f,0.696266f,0.857035f,0.985135f,0.830139f,0.677876f,0.528253f,0.381178f,0.236568f,0.094340f,
0.014865f,0.169861f,0.322124f,0.471747f,0.618822f,0.763432f,0.905660f,0.954417f,0.816725f,0.681196f,
0.547761f,0.416357f,0.286924f,0.159402f,0.033737f,0.045583f,0.183275f,0.318804f,0.452239f,0.583643f,
0.713076f,0.840598f,0.966263f,0.909875f,0.787764f,0.667357f,0.548606f,0.431467f,0.315895f,0.201850f,
0.089293f,0.090125f,0.212236f,0.332643f,0.451394f,0.568533f,0.684105f,0.798150f,0.910707f,0.978184f,
0.868486f,0.760166f,0.653187f,0.547518f,0.443127f,0.339983f,0.238056f,0.137319f,0.037744f,0.021816f,
0.131514f,0.239834f,0.346813f,0.452482f,0.556873f,0.660017f,0.761944f,0.862681f,0.962256f,0.939305f,
0.841975f,0.745730f,0.650547f,0.556401f,0.463272f,0.371136f,0.279973f,0.189762f,0.100485f,0.012121f,
0.060695f,0.158025f,0.254270f,0.349453f,0.443599f,0.536728f,0.628864f,0.720027f,0.810238f,0.899515f,
0.987879f,0.924653f,0.838062f,0.752330f,0.667442f,0.583381f,0.500130f,0.417674f,0.335998f,0.255088f,
0.174929f,0.095508f,0.016810f,0.075347f,0.161938f,0.247670f,0.332558f,0.416619f,0.499870f,0.582326f,
0.664002f,0.744912f,0.825071f,0.904492f,0.983190f,0.938824f,0.861535f,0.784933f,0.709004f,0.633737f,
0.559120f,0.485144f,0.411795f,0.339065f,0.266942f,0.195416f,0.124479f,0.054119f,0.061176f,0.138465f,
0.215067f,0.290996f,0.366263f,0.440880f,0.514856f,0.588205f,0.660935f,0.733058f,0.804583f,0.875521f,
0.945881f,0.984329f,0.915098f,0.846418f,0.778279f,0.710675f,0.643596f,0.577034f,0.510981f,0.445430f,
0.380372f,0.315802f,0.251710f,0.188091f,0.124938f,0.062243f,};

@ -2949,6 +2949,32 @@ group Root {
class = TransformTests
folder = Transform
suite MFCC F32 {
class = MFCCF32
folder = MFCCF32
Pattern INPUTS_MFCC_256_F32_ID : MFCCInput_256_1_f32.txt
Pattern REF_MFCC_256_F32_ID : MFCCRef_256_1_f32.txt
Pattern INPUTS_MFCC_512_F32_ID : MFCCInput_512_1_f32.txt
Pattern REF_MFCC_512_F32_ID : MFCCRef_512_1_f32.txt
Pattern INPUTS_MFCC_1024_F32_ID : MFCCInput_1024_1_f32.txt
Pattern REF_MFCC_1024_F32_ID : MFCCRef_1024_1_f32.txt
Output OUTPUT_MFCC_F32_ID : MFCCOutputs
Output TMP_MFCC_F32_ID : MFCCTmp
Output TMPIN_MFCC_F32_ID : MFCCTmpIn
Functions {
mfcc_256_f32:test_mfcc_f32
mfcc_512_f32:test_mfcc_f32
mfcc_1024_f32:test_mfcc_f32
}
}
suite Transform Complex F64 {
class = TransformCF64
folder = TransformF64

Loading…
Cancel
Save