打印
[STM32F4]

怎么利用配置DFSDM滤波器采集特定频率范围内的音频信号

[复制链接]
487|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2022-4-14 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
怎么利用配置DFSDM滤波器采集特定频率范围内的音频信号

使用特权

评论回复
评论
东大viper 2022-10-16 20:54 回复TA
兄弟 配置好没 
沙发
supernan| | 2022-4-14 21:17 | 只看该作者

你有什么打算呢?或者你想知道什么?

使用特权

评论回复
板凳
renyaq|  楼主 | 2022-4-14 21:19 | 只看该作者
只想采集20-2000Hz以内的音频信号改怎么配置DFSDM,44.1K代码如下:
void DFSDM_Init(void)
{
  /* Initialize channel 2 */
  __HAL_DFSDM_CHANNEL_RESET_HANDLE_STATE(&DfsdmChannelHandle);
  DfsdmChannelHandle.Instance                      = DFSDM1_Channel2;
  DfsdmChannelHandle.Init.OutputClock.Activation   = ENABLE;
  DfsdmChannelHandle.Init.OutputClock.Selection    = DFSDM_CHANNEL_OUTPUT_CLOCK_AUDIO;
  DfsdmChannelHandle.Init.OutputClock.Divider      = 4; /* 11.294MHz/4 = 2.82MHz */
  DfsdmChannelHandle.Init.Input.Multiplexer        = DFSDM_CHANNEL_EXTERNAL_INPUTS;
  DfsdmChannelHandle.Init.Input.DataPacking        = DFSDM_CHANNEL_STANDARD_MODE; /* N.U. */
  DfsdmChannelHandle.Init.Input.Pins               = DFSDM_CHANNEL_SAME_CHANNEL_PINS;
  DfsdmChannelHandle.Init.SerialInterface.Type     = DFSDM_CHANNEL_SPI_RISING;
  DfsdmChannelHandle.Init.SerialInterface.SpiClock = DFSDM_CHANNEL_SPI_CLOCK_INTERNAL;
  DfsdmChannelHandle.Init.Awd.FilterOrder          = DFSDM_CHANNEL_FASTSINC_ORDER; /* N.U. */
  DfsdmChannelHandle.Init.Awd.Oversampling         = 10; /* N.U. */
  DfsdmChannelHandle.Init.Offset                   = 0;
  DfsdmChannelHandle.Init.RightBitShift            =0;
  if(HAL_OK != HAL_DFSDM_ChannelInit(&DfsdmChannelHandle))
  {
    Error_Handler();
  }

  /* Initialize filter 0 */
  __HAL_DFSDM_FILTER_RESET_HANDLE_STATE(&DfsdmFilterHandle);
  DfsdmFilterHandle.Instance                          = DFSDM1_Filter0;
  DfsdmFilterHandle.Init.RegularParam.Trigger         = DFSDM_FILTER_SW_TRIGGER;
  DfsdmFilterHandle.Init.RegularParam.FastMode        = ENABLE;
  DfsdmFilterHandle.Init.RegularParam.DmaMode         = ENABLE;
  DfsdmFilterHandle.Init.InjectedParam.Trigger        = DFSDM_FILTER_SW_TRIGGER; /* N.U. */
  DfsdmFilterHandle.Init.InjectedParam.ScanMode       = ENABLE; /* N.U. */
  DfsdmFilterHandle.Init.InjectedParam.DmaMode        = DISABLE; /* N.U. */
  DfsdmFilterHandle.Init.InjectedParam.ExtTrigger     = DFSDM_FILTER_EXT_TRIG_TIM1_TRGO; /* N.U. */
  DfsdmFilterHandle.Init.InjectedParam.ExtTriggerEdge = DFSDM_FILTER_EXT_TRIG_RISING_EDGE; /* N.U. */
  DfsdmFilterHandle.Init.FilterParam.SincOrder        =DFSDM_FILTER_SINC3_ORDER;

  DfsdmFilterHandle.Init.FilterParam.Oversampling     = 64; /* 11.294MHz/(4*64) = 44.1KHz */
  DfsdmFilterHandle.Init.FilterParam.IntOversampling  = 1;
  if(HAL_OK != HAL_DFSDM_FilterInit(&DfsdmFilterHandle))
  {
    Error_Handler();
  }

  /* Configure regular channel and continuous mode for filter 0 */
  if(HAL_OK != HAL_DFSDM_FilterConfigRegChannel(&DfsdmFilterHandle, DFSDM_CHANNEL_2, DFSDM_CONTINUOUS_CONV_ON))
  {
    Error_Handler();
  }
}

使用特权

评论回复
地板
juventus9554| | 2022-4-14 21:22 | 只看该作者
用硬件不是更好吗

使用特权

评论回复
5
chuxh| | 2022-4-14 21:24 | 只看该作者
额 我还从没有用过这个滤波器呢

使用特权

评论回复
6
renyaq|  楼主 | 2022-4-14 21:27 | 只看该作者
本帖最后由 renyaq 于 2022-4-14 21:29 编辑

不知怎么搞了

使用特权

评论回复
7
jiajs| | 2022-4-14 21:29 | 只看该作者
你好,请问实现了吗?我现在也想这样做,但是看了一下DFSDM配置没有找到有这样的滤波器可以设置。

使用特权

评论回复
评论
hello丶酷狗 2022-8-22 14:10 回复TA
你好 你的实现来吗能不能分享一下 
8
hello丶酷狗| | 2022-8-19 17:17 | 只看该作者
本帖最后由 hello丶酷狗 于 2022-8-22 14:09 编辑

楼主还在吗  分享一下调试经验  我采集PDM MIC数据基本不变 不知道什么问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝