void filter_init() { pdm.LP_HZ = 8000; pdm.HP_HZ = 10; pdm.Fs = SAMPLING_FREQZ; pdm.Out_MicChannels = 1; pdm.In_MicChannels = 1; PDM_Filter_Init(&pdm); }
/** * @brief Initialize the PDM library. * @param AudioFreq: Audio sampling frequency * @param ChnlNbr: Number of audio channels (1: mono; 2: stereo) * @retval None */ static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbr) { uint32_t i = 0; /* Enable CRC peripheral to unlock the PDM library */ __CRC_CLK_ENABLE(); for(i = 0; i < ChnlNbr; i++) { /* Filter LP & HP Init */ Filter[i].LP_HZ = AudioFreq / 2; Filter[i].HP_HZ = 10; Filter[i].Fs = AudioFreq; Filter[i].Out_MicChannels = ChnlNbr; Filter[i].In_MicChannels = ChnlNbr; PDM_Filter_Init((PDMFilter_InitStruct *)&Filter[i]); } }
/** * @brief Initialize wave recording * @param AudioFreq: Sampling frequency * BitRes: Audio recording Samples format (from 8 to 16 bits) * ChnlNbr: Number of input microphone channel * @retval None */ uint32_t MicListenerInit(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr) { /* Check if the interface is already initialized */ if (AudioMicInited) { /* No need for initialization */ return 0; } else { #ifdef USE_ST_FILTER /* Filter LP & HP Init */ Filter.LP_HZ = 4000; Filter.HP_HZ = 250; Filter.Fs = 16000; Filter.Out_MicChannels = 1; Filter.In_MicChannels = 1; PDM_Filter_Init((PDMFilter_InitStruct *)&Filter); #else pdm_fir_flt_init(&Filter2); #endif /* Configure the GPIOs */ MicListener_GPIO_Init(); /* Configure the interrupts (for timer) */ MicListener_NVIC_Init(); /* Configure the SPI */ MicListener_SPI_Init(AudioFreq); /* Set the local parameters */ AudioRecBitRes = BitRes; AudioRecChnlNbr = ChnlNbr; /* Set state of the audio recorder to initialized */ AudioMicInited = 1; /* Return 0 if all operations are OK */ return 0; } }
/** * @brief Initialize wave recording * @param AudioFreq: Sampling frequency * BitRes: Audio recording Samples format (from 8 to 16 bits) * ChnlNbr: Number of input microphone channel * @retval None */ uint32_t WaveRecorderInit() { /* Check if the interface is already initialized */ if (AudioRecInited) { /* No need for initialization */ return 0; } else { sample_collected_fp = NULL; /* Enable CRC module */ RCC->AHB1ENR |= RCC_AHB1ENR_CRCEN; /* Filter LP & HP Init */ Filter.LP_HZ = 8000; Filter.HP_HZ = 10; Filter.Fs = 16000; Filter.Out_MicChannels = 1; Filter.In_MicChannels = 1; PDM_Filter_Init((PDMFilter_InitStruct *)&Filter); /* Configure the GPIOs */ WaveRecorder_GPIO_Init(); /* Configure the interrupts (for timer) */ WaveRecorder_NVIC_Init(); /* Configure the SPI */ WaveRecorder_SPI_Init(); /* Set the local parameters */ /* Set state of the audio recorder to initialized */ AudioRecInited = 1; /* Return 0 if all operations are OK */ return 0; } }
/** * @brief Initialize the PDM library. * @param AudioFreq: Audio sampling frequency * @param ChnlNbr: Number of audio channels (1: mono; 2: stereo) * @retval None */ static void PDMDecoder_Init(uint32_t AudioFreq, uint32_t ChnlNbr) { uint32_t i = 0; /* Enable CRC peripheral to unlock the PDM library */ __CRC_CLK_ENABLE(); for(i = 0; i < ChnlNbr; i++) { /* Filter LP & HP Init */ Filter[i].LP_HZ = AudioFreq / 2; Filter[i].HP_HZ = 10; Filter[i].Fs = AudioFreq; /* On STM32F401-Discovery a single microphone is mounted, samples are duplicated to make stereo audio streams */ Filter[i].Out_MicChannels = 2; Filter[i].In_MicChannels = ChnlNbr; PDM_Filter_Init((PDMFilter_InitStruct *)&Filter[i]); } }