8#ifndef __SOF_AUDIO_MFCC_MFCC_COMP_H__
9#define __SOF_AUDIO_MFCC_MFCC_COMP_H__
23# include <xtensa/config/core-isa.h>
24# if XCHAL_HAVE_HIFI4 || XCHAL_HAVE_HIFI5
26# elif XCHAL_HAVE_HIFI3
35#define MFCC_MAGIC 0x6d666363
36#define MFCC_FFT_BITS 32
37#define MFCC_MAX_SAMPLE_RATE 64000
40#define MFCC_CTRL_INDEX_VAD 0
162int mfcc_setup(
struct processing_module *mod,
int max_frames,
int rate,
int channels);
167 int prev_data_length);
188 struct sof_source **sources,
struct sof_sink **sinks,
189 int num_ceps,
int frames);
191#if CONFIG_FORMAT_S16LE
196#if CONFIG_FORMAT_S24LE
197void mfcc_source_copy_s24(
struct sof_source *source,
struct mfcc_buffer *buf,
201#if CONFIG_FORMAT_S32LE
206#if CONFIG_IPC_MAJOR_4
212 uint32_t config_id, uint32_t *data_offset_size,
213 uint8_t *fragment,
size_t fragment_size);
216 enum module_cfg_fragment_position pos, uint32_t data_offset_size,
217 const uint8_t *fragment,
size_t fragment_size, uint8_t *response,
218 size_t response_size);
231 uint32_t config_id, uint32_t *data_offset_size,
232 uint8_t *fragment,
size_t fragment_size)
241 enum module_cfg_fragment_position pos, uint32_t data_offset_size,
242 const uint8_t *fragment,
size_t fragment_size, uint8_t *response,
243 size_t response_size)
248 fragment, fragment_size);
253void sys_comp_module_mfcc_interface_init(
void);
int comp_data_blob_set(struct comp_data_blob_handler *blob_handler, enum module_cfg_fragment_position pos, uint32_t data_offset_size, const uint8_t *fragment, size_t fragment_size)
Handles IPC set command.
int comp_data_blob_get_cmd(struct comp_data_blob_handler *blob_handler, struct sof_ipc_ctrl_data *cdata, int size)
Handles IPC get command.
int mfcc_process_output(struct processing_module *mod, struct mfcc_comp_data *cd, struct sof_source **sources, struct sof_sink **sinks, int num_ceps, int frames)
Prepare and commit MFCC output data after STFT processing.
void(* mfcc_source_func)(struct sof_source *source, struct mfcc_buffer *buf, struct mfcc_pre_emph *emph, int frames, int source_channel)
Type definition for source/sink based input copy function.
Definition mfcc_comp.h:74
void mfcc_source_copy_s32(struct sof_source *source, struct mfcc_buffer *buf, struct mfcc_pre_emph *emph, int frames, int source_channel)
void mfcc_fill_fft_buffer(struct mfcc_state *state)
static int mfcc_set_config(struct processing_module *mod, uint32_t config_id, enum module_cfg_fragment_position pos, uint32_t data_offset_size, const uint8_t *fragment, size_t fragment_size, uint8_t *response, size_t response_size)
Definition mfcc_comp.h:240
int mfcc_stft_process(struct processing_module *mod, struct mfcc_comp_data *cd)
Run STFT and Mel/DCT processing.
static void mfcc_send_vad_notification(struct processing_module *mod, uint32_t val)
Definition mfcc_comp.h:226
static int mfcc_buffer_samples_without_wrap(struct mfcc_buffer *buffer, int16_t *ptr)
Definition mfcc_comp.h:149
void mfcc_free_buffers(struct processing_module *mod)
static int mfcc_ipc_notification_init(struct processing_module *mod)
Definition mfcc_comp.h:221
int mfcc_setup(struct processing_module *mod, int max_frames, int rate, int channels)
void mfcc_fill_prev_samples(struct mfcc_buffer *buf, int16_t *prev_data, int prev_data_length)
void mfcc_source_copy_s16(struct sof_source *source, struct mfcc_buffer *buf, struct mfcc_pre_emph *emph, int frames, int source_channel)
static int mfcc_get_config(struct processing_module *mod, uint32_t config_id, uint32_t *data_offset_size, uint8_t *fragment, size_t fragment_size)
Definition mfcc_comp.h:230
void mfcc_apply_window(struct mfcc_state *state, int input_shift)
static int16_t * mfcc_buffer_wrap(struct mfcc_buffer *buffer, int16_t *ptr)
Definition mfcc_comp.h:154
Voice Activity Detection based on Mel spectrum energy.
struct icomplex32 - Storage for a normal complex number.
Definition icomplex32.h:23
Definition mfcc_comp.h:57
int s_free
samples count
Definition mfcc_comp.h:63
int s_length
length in samples for wrap
Definition mfcc_comp.h:64
int s_avail
samples count
Definition mfcc_comp.h:62
int16_t * end_addr
Definition mfcc_comp.h:59
int16_t * addr
Definition mfcc_comp.h:58
int16_t * r_ptr
Definition mfcc_comp.h:60
int16_t * w_ptr
Definition mfcc_comp.h:61
Definition mfcc_comp.h:90
int num_ceps
Definition mfcc_comp.h:93
int16_t cepstral_lifter
Definition mfcc_comp.h:92
struct mat_matrix_16b * matrix
Definition mfcc_comp.h:91
Definition mfcc_comp.h:137
int max_frames
Definition mfcc_comp.h:143
struct comp_data_blob_handler * model_handler
Definition mfcc_comp.h:140
struct sof_mfcc_config * config
Definition mfcc_comp.h:141
enum sof_ipc_frame source_format
Source audio format for output sizing.
Definition mfcc_comp.h:144
bool vad_prev
Previous VAD state for edge detection.
Definition mfcc_comp.h:145
struct mfcc_state state
Definition mfcc_comp.h:138
struct mfcc_vad_state vad
Definition mfcc_comp.h:139
struct ipc_msg * msg
IPC notification for VAD switch control.
Definition mfcc_comp.h:142
mfcc_source_func source_func
source copy function
Definition mfcc_comp.h:146
Definition mfcc_comp.h:77
struct fft_plan * fft_plan
Definition mfcc_comp.h:80
int fft_size
Definition mfcc_comp.h:82
struct icomplex32 * fft_buf
fft_padded_size
Definition mfcc_comp.h:78
int half_fft_size
Definition mfcc_comp.h:86
int fft_padded_size
Definition mfcc_comp.h:83
struct icomplex32 * fft_out
fft_padded_size
Definition mfcc_comp.h:79
size_t fft_buffer_size
bytes
Definition mfcc_comp.h:87
int fft_buf_size
Definition mfcc_comp.h:85
int fft_hop_size
Definition mfcc_comp.h:84
int fft_fill_start_idx
Set to 0 for pad left, etc.
Definition mfcc_comp.h:81
Definition mfcc_comp.h:67
int16_t delay
Definition mfcc_comp.h:69
int enable
Definition mfcc_comp.h:70
int16_t coef
Definition mfcc_comp.h:68
Definition mfcc_comp.h:96
struct mfcc_buffer buf
Circular buffer for input data.
Definition mfcc_comp.h:97
int vad_silence_count
Consecutive VAD=0 hops since last speech.
Definition mfcc_comp.h:130
struct mfcc_pre_emph emph
Pre-emphasis filter.
Definition mfcc_comp.h:98
int buffer_size
Definition mfcc_comp.h:114
int16_t * triangles
Definition mfcc_comp.h:112
struct dct_plan_16 dct
DCT related.
Definition mfcc_comp.h:100
struct mfcc_data_header header
Data header for current output frame.
Definition mfcc_comp.h:123
int32_t mmax
Maximum Mel value in Q9.23.
Definition mfcc_comp.h:107
bool waiting_fill
booleans
Definition mfcc_comp.h:120
int32_t * out_stage
Dedicated staging buffer for pending output, decoupled from STFT scratch.
Definition mfcc_comp.h:127
bool mel_only
When true, output Mel spectra instead of cepstral coefficients.
Definition mfcc_comp.h:119
int32_t * power_spectra
Pointer to scratch.
Definition mfcc_comp.h:105
int32_t * mel_log_32
Pointer to scratch for 32-bit Mel output Q9.23.
Definition mfcc_comp.h:106
struct mfcc_fft fft
FFT related.
Definition mfcc_comp.h:99
struct mat_matrix_16b * mel_spectra
Pointer to scratch.
Definition mfcc_comp.h:103
int sample_rate
Definition mfcc_comp.h:118
struct mat_matrix_16b * cepstral_coef
Pointer to scratch.
Definition mfcc_comp.h:104
size_t sample_buffers_size
bytes
Definition mfcc_comp.h:124
int16_t buf_avail
Definition mfcc_comp.h:108
int high_freq
Definition mfcc_comp.h:117
bool prev_samples_valid
Definition mfcc_comp.h:121
int16_t dtx_trailing_silence
Number of trailing silence hops to send, from config.
Definition mfcc_comp.h:131
int16_t dtx_silence_interval
Send silence frame every Nth hop, 0 = disable.
Definition mfcc_comp.h:132
int16_t * prev_data
prev_data_size
Definition mfcc_comp.h:110
int low_freq
Definition mfcc_comp.h:116
int dtx_silence_counter
Counter for periodic silence frame send.
Definition mfcc_comp.h:133
int source_channel
Definition mfcc_comp.h:113
bool header_pending
True when data header not yet written for current output.
Definition mfcc_comp.h:122
int out_remain
Remaining int32_t samples to write to sink from staging.
Definition mfcc_comp.h:126
int prev_data_size
Definition mfcc_comp.h:115
int32_t * out_data_ptr
Read pointer into staging data for multi-period output.
Definition mfcc_comp.h:125
uint32_t hop_count
FFT hop counter, increments every processed hop.
Definition mfcc_comp.h:129
struct psy_mel_filterbank melfb
Mel filter bank.
Definition mfcc_comp.h:101
int16_t * buffers
Definition mfcc_comp.h:109
int16_t * window
fft_size
Definition mfcc_comp.h:111
struct mfcc_cepstral_lifter lifter
Cepstral lifter coefficients.
Definition mfcc_comp.h:102
int out_stage_size
Capacity of out_stage in int32_t samples.
Definition mfcc_comp.h:128
VAD state structure.
Definition mfcc_vad.h:54
Generic control data.
Definition control.h:120