espressif / esp-idf

Espressif IoT Development Framework. Official development framework for Espressif SoCs.
Apache License 2.0
12.56k stars 7.01k forks source link

esp32s3 pdm rx录音多通道有杂音,不正常。 (IDFGH-12707) #13694

Open crl6 opened 2 weeks ago

crl6 commented 2 weeks ago

Answers checklist.

General issue report

参考i2s_pdm_rx.c代码,修改gpio为:

define EXAMPLE_PDM_RX_CLK_IO GPIO_NUM_19 // I2S PDM RX clock io number

define EXAMPLE_PDM_RX_DIN_IO GPIO_NUM_20 // I2S PDM RX data in io number

if CONFIG_IDF_TARGET_ESP32S3

define EXAMPLE_PDM_RX_DIN1_IO GPIO_NUM_11 // I2S PDM RX data line1 in io number

define EXAMPLE_PDM_RX_DIN2_IO GPIO_NUM_12 // I2S PDM RX data line2 in io number

define EXAMPLE_PDM_RX_DIN3_IO GPIO_NUM_13 // I2S PDM RX data line3 in io number

endif

gpio初始化:

if CONFIG_IDF_TARGET_ESP32S3

        // Only ESP32-S3 can support 4-line PDM RX
        .dins = {
            EXAMPLE_PDM_RX_DIN_IO,
            EXAMPLE_PDM_RX_DIN_IO,
            EXAMPLE_PDM_RX_DIN_IO,
            EXAMPLE_PDM_RX_DIN_IO,
        },

else

        .din = EXAMPLE_PDM_RX_DIN_IO,

endif

通道配置:

if CONFIG_IDF_TARGET_ESP32S3

// Enable all slots for example
pdm_rx_cfg.slot_cfg.slot_mode = I2S_SLOT_MODE_STEREO;
//pdm_rx_cfg.slot_cfg.slot_mask = I2S_PDM_LINE_SLOT_ALL;
pdm_rx_cfg.slot_cfg.slot_mask |= I2S_PDM_RX_LINE0_SLOT_RIGHT | I2S_PDM_RX_LINE0_SLOT_LEFT;
pdm_rx_cfg.slot_cfg.slot_mask |= I2S_PDM_RX_LINE1_SLOT_RIGHT | I2S_PDM_RX_LINE1_SLOT_LEFT;

//pdm_rx_cfg.slot_cfg.slot_mask |= I2S_PDM_RX_LINE2_SLOT_RIGHT | I2S_PDM_RX_LINE2_SLOT_LEFT;
//pdm_rx_cfg.slot_cfg.slot_mask |= I2S_PDM_RX_LINE3_SLOT_RIGHT | I2S_PDM_RX_LINE3_SLOT_LEFT;

endif

pdm_rx_cfg.slot_cfg.slot_mask只要使用超过4通道,录音回来就不正常, 失真,杂音。

用的是同一个pmd立体声mic板子。

crl6 commented 2 weeks ago

PDM_RX.PCM 是6通道,16bit,16000hz。录音文件。i2s_channel_read读取回来的数据保存在psram,读取到2194304字节后,再把2194304字节写入到sd卡 PDM_RX.PCM。 可以排出是写sd卡速度问题导致的。