can bayar
/
can_mfcc
sa
mfcc.h@0:540cf00460b2, 2020-04-29 (annotated)
- Committer:
- magicTurtle866
- Date:
- Wed Apr 29 19:54:31 2020 +0000
- Revision:
- 0:540cf00460b2
andac bul beni
Who changed what in which revision?
User | Revision | Line number | New 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 |