sa

Dependencies:   mbed-dsp

Committer:
magicTurtle866
Date:
Wed Apr 29 19:54:31 2020 +0000
Revision:
0:540cf00460b2
andac bul beni

Who changed what in which revision?

UserRevisionLine numberNew contents of line
magicTurtle866 0:540cf00460b2 1 /*
magicTurtle866 0:540cf00460b2 2 * Copyright (C) 2018 Arm Limited or its affiliates. All rights reserved.
magicTurtle866 0:540cf00460b2 3 *
magicTurtle866 0:540cf00460b2 4 * SPDX-License-Identifier: Apache-2.0
magicTurtle866 0:540cf00460b2 5 *
magicTurtle866 0:540cf00460b2 6 * Licensed under the Apache License, Version 2.0 (the License); you may
magicTurtle866 0:540cf00460b2 7 * not use this file except in compliance with the License.
magicTurtle866 0:540cf00460b2 8 * You may obtain a copy of the License at
magicTurtle866 0:540cf00460b2 9 *
magicTurtle866 0:540cf00460b2 10 * www.apache.org/licenses/LICENSE-2.0
magicTurtle866 0:540cf00460b2 11 *
magicTurtle866 0:540cf00460b2 12 * Unless required by applicable law or agreed to in writing, software
magicTurtle866 0:540cf00460b2 13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
magicTurtle866 0:540cf00460b2 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
magicTurtle866 0:540cf00460b2 15 * See the License for the specific language governing permissions and
magicTurtle866 0:540cf00460b2 16 * limitations under the License.
magicTurtle866 0:540cf00460b2 17 */
magicTurtle866 0:540cf00460b2 18
magicTurtle866 0:540cf00460b2 19 #ifndef __KWS_MFCC_H__
magicTurtle866 0:540cf00460b2 20 #define __KWS_MFCC_H__
magicTurtle866 0:540cf00460b2 21
magicTurtle866 0:540cf00460b2 22 #include "arm_math.h"
magicTurtle866 0:540cf00460b2 23 #include "string.h"
magicTurtle866 0:540cf00460b2 24
magicTurtle866 0:540cf00460b2 25 #define SAMP_FREQ 16000
magicTurtle866 0:540cf00460b2 26 #define NUM_FBANK_BINS 40
magicTurtle866 0:540cf00460b2 27 #define MEL_LOW_FREQ 20
magicTurtle866 0:540cf00460b2 28 #define MEL_HIGH_FREQ 4000
magicTurtle866 0:540cf00460b2 29
magicTurtle866 0:540cf00460b2 30 #define M_2PI 6.283185307179586476925286766559005
magicTurtle866 0:540cf00460b2 31 #define M_PI M_2PI/2
magicTurtle866 0:540cf00460b2 32
magicTurtle866 0:540cf00460b2 33 class MFCC{
magicTurtle866 0:540cf00460b2 34 private:
magicTurtle866 0:540cf00460b2 35 int num_mfcc_features;
magicTurtle866 0:540cf00460b2 36 int frame_len;
magicTurtle866 0:540cf00460b2 37 int frame_len_padded;
magicTurtle866 0:540cf00460b2 38 int mfcc_dec_bits;
magicTurtle866 0:540cf00460b2 39 float * frame;
magicTurtle866 0:540cf00460b2 40 float * buffer;
magicTurtle866 0:540cf00460b2 41 float * mel_energies;
magicTurtle866 0:540cf00460b2 42 float * window_func;
magicTurtle866 0:540cf00460b2 43 int32_t * fbank_filter_first;
magicTurtle866 0:540cf00460b2 44 int32_t * fbank_filter_last;
magicTurtle866 0:540cf00460b2 45 float ** mel_fbank;
magicTurtle866 0:540cf00460b2 46 float * dct_matrix;
magicTurtle866 0:540cf00460b2 47 arm_rfft_fast_instance_f32 * rfft;
magicTurtle866 0:540cf00460b2 48 float * create_dct_matrix(int32_t input_length, int32_t coefficient_count);
magicTurtle866 0:540cf00460b2 49 float ** create_mel_fbank();
magicTurtle866 0:540cf00460b2 50
magicTurtle866 0:540cf00460b2 51 static inline float InverseMelScale(float mel_freq) {
magicTurtle866 0:540cf00460b2 52 return 700.0f * (expf (mel_freq / 1127.0f) - 1.0f);
magicTurtle866 0:540cf00460b2 53 }
magicTurtle866 0:540cf00460b2 54
magicTurtle866 0:540cf00460b2 55 static inline float MelScale(float freq) {
magicTurtle866 0:540cf00460b2 56 return 1127.0f * logf (1.0f + freq / 700.0f);
magicTurtle866 0:540cf00460b2 57 }
magicTurtle866 0:540cf00460b2 58
magicTurtle866 0:540cf00460b2 59 public:
magicTurtle866 0:540cf00460b2 60 MFCC(int num_mfcc_features, int frame_len, int mfcc_dec_bits);
magicTurtle866 0:540cf00460b2 61 ~MFCC();
magicTurtle866 0:540cf00460b2 62 void mfcc_compute(const int16_t* data, q7_t* mfcc_out);
magicTurtle866 0:540cf00460b2 63 };
magicTurtle866 0:540cf00460b2 64
magicTurtle866 0:540cf00460b2 65 #endif