144|0

32

帖子

4

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow Me第二季第4期】Arduino Nano RP2040 Connect 进阶任务 [复制链接]

  本帖最后由 鲜de芒果 于 2024-12-29 13:34 编辑

1. 任务要求

        学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。

 

2. 基础知识

        脉冲密度调制(Pulse Density Modulation,简称PDM)是一种数字调制技术,它使用二进制数0和1来表示模拟信号的幅值。在PDM中,模拟信号的幅值通过输出脉冲对应区域的密度来表示,即1的密度越大,代表该区域对应的模拟信号幅值越大,反之亦然。

        麦克风是将物理声音转换为数字数据的部件。麦克风通常用于移动终端、语音识别系统甚至游戏和虚拟现实输入设备。 Arduino Nano RP2040 Connect 开发板上有一颗 MP34DT06JTR 传感器。如下图所示:

        MP34DT06JTR 传感器是一种超紧凑型麦克风,使用PDM(脉冲密度调制)用二进制信号表示模拟信号。MP34DT06JTR 传感器典型参数如下: 信噪比:64dB 灵敏度:-26dBFS ±3dB 温度范围:-40 ~ 85℃

 

3. 功能实现

3.1 原理

        使用PDM 采集数字音频数据,然后再通过串口将数字音频数据发送至上位机,上位机再通过串口接收数字音频数据,使用曲线图绘制音频曲线。

 

3.2 代码实现

/**
 * FollowMe 2-4 任务3:
 * 1. 学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
 */
#include <Arduino.h>
#include <PDM.h>

static const char channels = 1;                     // 音频通道数,1:单通道,2:立体声
static const int frequency = 20000;                 // PCM 输出频率

short sampleBuffer[512];                            // 音频采样缓存区
volatile uint32_t samplesRead;                      // 读取到的音频样本数


void setup() {
  // 初始化串口
  Serial.begin(115200);
  delay(1500);
  
  // 设置PDM接收回调函数
  PDM.onReceive(onPDMdata);

  // 增益设置,可选
  // PDM.setGain(30);

  // 初始化 PDM
  while (!PDM.begin(channels, frequency)) {
    Serial.println("PDM 初始化失败!");
    PDM.end();
    // 延时重试
    delay(3000);
  }
}

void loop() {
  if (samplesRead) { // 读取到了音频数据
    // 对音频数据进行处理,这里使用串口输出。上位机可通过串口展示音频波形
    for (int i = 0; i < samplesRead; i++) {
      Serial.println(sampleBuffer[i]);
    }

    // 处理完毕,清零读取到的音频样本数
    samplesRead = 0;
  }
}

/**
 * 数据处理回调函数,用于接收PDM麦克风的数据
 */
void onPDMdata() {
  // Query the number of available bytes
  int bytesAvailable = PDM.available();

  // Read into the sample buffer
  PDM.read(sampleBuffer, bytesAvailable);

  // 16-bit, 2 bytes per sample
  samplesRead = bytesAvailable / 2;
}

 

4. 效果展示

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表