Загрузка данных


#include "arm_math.h"

// Коэффициенты для фактора 4 (из 8кГц в 32кГц)
// Для фактора 2 (из 16кГц в 32кГц) CMSIS-DSP автоматически пересчитает сетку, 
// но лучше иметь два отдельных полифазных фильтра для идеального звука.
#define FILTER_TAP_NUM 24

// Пример сгенерированных коэффициентов ФНЧ (срез на 4кГц для 8кГц->32кГц)
// Умножены на фактор (4.0f), как требует математика апсемплинга
const float32_t firCoeffs_4x[FILTER_TAP_NUM] = {
    -0.0012f, -0.0034f, -0.0051f, -0.0031f, 0.0059f, 0.0243f,
     0.0491f,  0.0743f,  0.0919f,  0.0949f, 0.0792f, 0.0461f,
     0.0000f, -0.0461f, -0.0792f, -0.0949f, -0.0919f,-0.0743f,
    -0.0491f, -0.0243f, -0.0059f,  0.0031f, 0.0051f, 0.0034f
};

// Буфер состояния фильтра (размер: FILTER_TAP_NUM / factor + block_size)
static float32_t state_L[128];
static float32_t state_R[128];

arm_fir_interpolate_instance_f32 fir_L;
arm_fir_interpolate_instance_f32 fir_R;

void audio_init_filters(uint8_t factor) {
    // Инициализируем CMSIS структуры
    arm_fir_interpolate_init_f32(&fir_L, factor, FILTER_TAP_NUM, (float32_t *)firCoeffs_4x, state_L, 80);
    arm_fir_interpolate_init_f32(&fir_R, factor, FILTER_TAP_NUM, (float32_t *)firCoeffs_4x, state_R, 80);
}