Skip to main content
PIvan.9
Associate III
September 2, 2021
Question

How to configure AcousticBF library for PCM mode on STM32L476RG?

I'm trying to implement AcousticBF library functions and what I've noticed is that, when I configure it like this for PCM mode, 2 microphones:

void Audio_Libraries_Init(void)
{
 volatile uint32_t error_value = 0;
 /* Enable CRC peripheral to unlock the library */
 __CRC_CLK_ENABLE();
 /*Setup Beamforming static parameters*/
 error_value = 0;
 libBeamforming_Handler_Instance.algorithm_type_init=ACOUSTIC_BF_TYPE_CARDIOID_BASIC;
 libBeamforming_Handler_Instance.ref_mic_enable=ACOUSTIC_BF_REF_ENABLE;
 libBeamforming_Handler_Instance.ptr_out_channels=2;
 libBeamforming_Handler_Instance.data_format=ACOUSTIC_BF_DATA_FORMAT_PCM;
 libBeamforming_Handler_Instance.sampling_frequency=16;
 libBeamforming_Handler_Instance.ptr_M1_channels=1;
 libBeamforming_Handler_Instance.ptr_M2_channels=1;
 libBeamforming_Handler_Instance.delay_enable = 0;
 (void)AcousticBF_getMemorySize(&libBeamforming_Handler_Instance);
 libBeamforming_Handler_Instance.pInternalMemory =(uint32_t *)malloc(libBeamforming_Handler_Instance.internal_memory_size);
 error_value = AcousticBF_Init(&libBeamforming_Handler_Instance);
 
 /*Error Management*/
 if(error_value != 0U)
 {
 Error_Handler();
 }
 
 /*Malloc Failure*/
 if(libBeamforming_Handler_Instance.pInternalMemory == NULL)
 {
 Error_Handler();
 }
 
 /*Setup Beamforming dynamic parameters*/
 lib_Beamforming_Config_Instance.algorithm_type = ACOUSTIC_BF_TYPE_CARDIOID_BASIC;
 lib_Beamforming_Config_Instance.M2_gain = 0.0f;
 lib_Beamforming_Config_Instance.mic_distance = 212;
 lib_Beamforming_Config_Instance.volume = 24;
 error_value = AcousticBF_setConfig(&libBeamforming_Handler_Instance, &lib_Beamforming_Config_Instance);
 
 /*Error Management*/
 if(error_value != 0U)
 {
 Error_Handler();
 }
}

then, AcousticBF_FirstStep function returns 0, so I can't implement AcousticBF_SecondStep() function further:

void AudioProcess(void)
{
 if(AcousticBF_FirstStep(&((uint8_t *)(PCM_Buffer))[0],&((uint8_t *)(PCM_Buffer))[1], (int16_t *)Out_Buffer, &libBeamforming_Handler_Instance) == 1U)
 {
 SW_Task1_Start();
 }
 
 /*for L4 PDM to PCM conversion is performed in hardware by DFSDM peripheral*/
 Send_Audio_to_USB((int16_t *)Out_Buffer, (AUDIO_IN_SAMPLING_FREQUENCY/1000)*AUDIO_IN_CHANNELS);
}

Is there smth I missed? Or did I configure smth wrong?

This topic has been closed for replies.