STM32
直播中

李杰

8年用户 1464经验值
私信 关注
[问答]

关于使用STM32F411 discovery板子i2S音频接口的几个问题求解

大家好,我用的是STMF411 discovery板子,软件用的是i2S hal库和st的pdm2pcm library,通过i2S总线采集音频数据,st官方给的audio record and playback例子我也看了,我自己也调试了一段时间,现在有几个小疑惑想请教下大家:

1.i2s hal库用户似乎无法直接设定pdm采样率,因为hal库的api似乎是通过用户设定的pcm采样率间接地帮用户设定了pdm采样率。我用定时计数器测定了一下,好像pdm采样率总是用户设定的pcm采样率的64倍,但是这个比例和64有误差(那么decimation factor应该永远是64么?)

2.我设定pcm采样率为48KHz,mic_gain默认,我对pcm数据加了带通滤波器,经过通带之后有这么大的噪音(如下图所示),最大值可以到50多,我觉得噪音太大,而我的应用必须严格控制噪音,我一直怀疑因为我哪里没有设置对导致采集转换之后的pcm数据有错(噪声过大)

3.官方给的例子最后转换好的pcm数据是uint16_t型,我试了一下官方的例子有很多的65535这样的异常数据,我换成了int16_t型结果正常多了,难道官方写错了?

4.在官方给的例子中,数据格式似乎都是LSB,在pdm转pcm的时候似乎总是要高低8位调换顺序,我曾经尝试改成MSB,但是结果就完全不对了,我对此有疑惑。

5.st的pdm2pcm 库比起硬件转换效果如何?假如这个库本身有问题,我可以考虑硬件pdm pcm转换。



回帖(1)

贾桂林

2024-5-15 16:39:35
您好!关于您在使用STM32F411 Discovery开发板和I2S音频接口时遇到的一些问题,我会尽力帮助您解答。

1. PDM采样率与PCM采样率的关系:
   PDM(Pulse Density Modulation)是一种音频编码方式,通常用于麦克风。I2S(Inter-IC Sound)是一种音频数据传输协议。在这种情况下,PDM采样率与PCM(Pulse Code Modulation)采样率之间存在一定的关系。PDM采样率通常是PCM采样率的64倍,这是因为PDM编码需要通过一个特定的滤波器(如Sinc滤波器)进行解调,以获得PCM音频数据。这个比例可能会因为滤波器的设计和实现而有所不同,但通常情况下,decimation factor(降采样因子)接近64。

2. PCM采样率设置:
   您提到将PCM采样率设置为48kHz,这是一个常见的音频采样率。在这种情况下,PDM采样率将是PCM采样率的64倍,即3072kHz。这个采样率对于大多数应用来说是足够的。关于mic_gain,您可以根据实际的麦克风性能和所需的增益进行调整。如果默认值不能满足您的需求,您可以尝试调整它以获得更好的音频质量。

3. 使用STM32 HAL库和PDM2PCM库:
   STM32 HAL库提供了一种简单易用的方法来配置和控制STM32的外设,包括I2S。PDM2PCM库则用于将PDM编码的音频数据转换为PCM格式。在使用这些库时,请确保您已经正确配置了I2S接口和相关参数,如数据格式、时钟设置等。此外,您还需要确保PDM2PCM库的配置与您的硬件和需求相匹配。

4. 调试建议:
   在调试过程中,您可以使用示波器或逻辑分析仪来观察I2S接口的信号,以确保数据传输正确。此外,您还可以使用STM32的调试工具(如ST-LINK)来跟踪程序的执行和变量的值,以便更好地了解程序的运行情况。

希望这些信息对您有所帮助!如果您有其他问题或需要进一步的帮助,请随时提问。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分