北方 发表于 2021-9-3 10:50

【Silicon Labs 开发套件评测】读取PDM的音频信号

本帖最后由 北方 于 2021-9-3 10:55 编辑

<p style="text-align: center;"><span style="font-size:20px;">读取PDM的音频信号</span></p>

<p><span style="font-size:20px;">1、PDM简介</span></p>

<p><span style="font-size:20px;">如下,pdm是一种和i2s并行的串行音频数据格式,代替传统的模拟mic,体积小,灵敏度高,是一种新的音频数据格式。</span></p>

<ul>
        <li>Pulse Density Modulation =脉冲分时复用</li>
        <li>手机和平板电脑等便携设备的音频,PDM在诸如手机和平板等对于空间限制严格的场合,即尺寸受限应用中优势明显,有着广泛的应用前景-》在数字麦克风应用很广,手机cpu到蓝牙的通话实时音频和mp3,codec的音频接口</li>
        <li>一种用数字信号表示模拟信号的调制方法,PCM使用等间隔采样方法,将每次采样的模拟分量幅度表示为N位的数字分量(N = 量化深度),因此PCM方式每次采样的结果都是N bit字长的数据。PDM,只有2根线,传音乐,编码方式和I2S不同。PDM方式表示的正弦波</li>
        <li>PDM格式的音频信号可以在比如LCD屏这样Noise干扰强的电路附近走线(等于没说,这里指数字信号抗干扰能力相比于模拟信号更强,同样PCM也具有此优势)基于PDM的架构不同于I2S和TDM之处在于,抽取滤波器(Decimation Filter)不在发送设备,而在接收设备内部。源端输出是原始的高采样率(oversample)调制数据,如Sigma-Delta调制器的输出,而不是像I2S中那样的抽取数据。基于PDM接口的应用降低了发送设备的复杂性,由于作为接收设备的CODEC内部集成抽取滤波器,因此系统整体复杂度大大降低。对于数字麦克风而言,通过使用面向CODEC或处理器制造的更精细硅工艺,而非传统麦克风使用的工艺,可以实现更高效率的抽取滤波器。</li>
</ul>

<p><span style="font-size:20px;">2、创建工程并开启PDM外设</span></p>

<p>2.1 首先需要启动新建工程的slcp文件进行设置,找到board control进入</p>

<p>&nbsp;</p>

<p>2.2 直接显示板载外设的增删</p>

<p></p>

<p>2.3 启动后显示硬件更改,</p>

<p></p>

<p>2.4 对应的是对配置文件的直接修改</p>

<p></p>

<p>&nbsp;</p>

<p>2.5 下拉可以更改实用的引脚</p>

<p></p>

<p>&nbsp;</p>

<p>2.6 对应显示需要设置的元件,因为没有installed所以,原来看不到这个选项</p>

<p></p>

<p>2.7 首先点击安装,然后就可以配置PDM的参数,</p>

<p></p>

<p></p>

<p>&nbsp;</p>

<p>2.8 为了便于使用再这里提供了api手册和使用范例</p>

<p></p>

<p>2.9 根据代码是否使用rtos,选择快速使用代码,范例代码和主要的函数如下,</p>

<pre>
<code>#include "sl_mic.h"

#define MIC_SAMPLE_RATE            44100
#define MIC_SAMPLE_BUFFER_SIZE   1024
#define MIC_N_CHANNELS             2

static int16_t buffer;

int main( void )
{

   float sound_level_0;
   float sound_level_1;
   uint32_t n_samples = 1024;

   // Initialize microphone with sample rate and number of channels
   sl_mic_init(MIC_SAMPLE_RATE, MIC_N_CHANNELS);

   while(true){

   // Read samples from the microphone
   sl_mic_get_n_samples(buffer, n_samples);

   while (!sl_mic_sample_buffer_ready()) {
       // Wait until sample buffer ready
   }

   // Calculate sound level
   sl_mic_calculate_sound_level(&amp;sound_level_0, buffer, n_samples, 0);
   sl_mic_calculate_sound_level(&amp;sound_level_1, buffer, n_samples, 1);

   }

} </code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><span style="font-size:20px;">3、代码编写和实用</span></p>

<p>代码开放首先初始化,然后定期读取buff中数据,就可以快速实现代码的取用了。</p>

Jacktang 发表于 2021-9-3 11:19

<p>这个配置PDM的参数是根据什么配置</p>

北方 发表于 2021-9-3 15:36

Jacktang 发表于 2021-9-3 11:19
这个配置PDM的参数是根据什么配置

<p>比较简单的配置,包括采样频率,样本数等。</p>
页: [1]
查看完整版本: 【Silicon Labs 开发套件评测】读取PDM的音频信号