Skip to content

Commit

Permalink
fbank: update to better match kaldifeat
Browse files Browse the repository at this point in the history
  • Loading branch information
abb128 committed Feb 27, 2025
1 parent 3308e68 commit 641ca80
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/april_model.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ AprilASRModel aam_create_model(const char *model_path) {
//aam->fbank_opts.snip_edges = aam->params.snip_edges;
aam->fbank_opts.snip_edges = true;

aam->fbank_opts.remove_dc_offset = true;
aam->fbank_opts.preemph_coeff = 0.97f;

ASSERT_OR_FREE_AAM_AND_RETURN_NULL(aam, aam->x_dim[0] == aam->params.batch_size);
ASSERT_OR_FREE_AAM_AND_RETURN_NULL(aam, aam->x_dim[1] == aam->fbank_opts.pull_segment_count);
ASSERT_OR_FREE_AAM_AND_RETURN_NULL(aam, aam->x_dim[2] == aam->fbank_opts.num_bins);
Expand Down
26 changes: 24 additions & 2 deletions src/fbank.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ void fbank_accept_waveform(OnlineFBank fbank, float *wave, size_t wave_count) {
sonicReadFloatFromStream(fbank->sonic_stream, wave, wave_count);
}

float preemph_coeff = fbank->opts.preemph_coeff;
for(ssize_t i=0;; i++) {
if((fbank->temp_segment_avail + 1) > fbank->temp_segments_y){
LOG_WARNING("fbank ran out of space. Please call fbank_pull_segments. Can't eat wave");
Expand Down Expand Up @@ -228,12 +229,33 @@ void fbank_accept_waveform(OnlineFBank fbank, float *wave, size_t wave_count) {
ssize_t wave_idx = start_idx + j;
if(wave_idx < 0){
ssize_t ll_idx = fbank->prev_leftover_count + wave_idx;
fbank->data[j] = fbank->prev_leftover[ll_idx] * fbank->window[j];
fbank->data[j] = fbank->prev_leftover[ll_idx];
} else {
fbank->data[j] = wave[start_idx + j] * fbank->window[j];
fbank->data[j] = wave[start_idx + j];
}
}

// Not included: dither

// Apply remove dc offset
if(fbank->opts.remove_dc_offset) {
float sum = 0;
for(int j=0; j<fbank->padded_window_size; j++) sum += fbank->data[j];
float mean = sum / fbank->padded_window_size;
for(int j=0; j<fbank->padded_window_size; j++) fbank->data[j] -= mean;
}

// Apply preemphasize
if(preemph_coeff > 0.0f) {
for(int j=fbank->padded_window_size-1; j>0; --j)
fbank->data[j] -= preemph_coeff * fbank->data[j - 1];
fbank->data[0] -= preemph_coeff * fbank->data[0];
}

// Apply window function
for(int j=0; j<fbank->padded_window_size; j++)
fbank->data[j] *= fbank->window[j];

double *dptr = fbank->data;
double *rptr = fbank->ret;
memcpy((char *)(rptr+1), dptr, fbank->padded_window_size * sizeof(double));
Expand Down
3 changes: 3 additions & 0 deletions src/fbank.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ typedef struct FBankOptions {

// If false, speed feature will be unavailable
bool use_sonic;

bool remove_dc_offset; // true
float preemph_coeff; // 0.97
} FBankOptions;

OnlineFBank make_fbank(FBankOptions opts);
Expand Down

0 comments on commit 641ca80

Please sign in to comment.