在 C 中将 uint8_t* 转换为 int16_t8

问题描述 投票:0回答:1

我正在尝试改编此处中的示例,该示例读取 PDM 麦克风数据并使用串行 USB 将其打印到计算机。 我想绕过示例中的过滤阶段,这样我就可以编写自己的过滤器,同时维护其他功能。

我当前的计划是将传入的 PDM 数据作为过滤阶段的输出传递。然而,输入为

uint8_t* in
,输出为
int16_t* out
。将
in
转换为
out
的最简单方法是什么?我已经复制了下面的整个函数。

int pdm_microphone_read(int16_t* buffer, size_t samples) {
    int filter_stride = (pdm_mic.filter.Fs / 1000);
    samples = (samples / filter_stride) * filter_stride;

    if (samples > pdm_mic.config.sample_buffer_size) {
        samples = pdm_mic.config.sample_buffer_size;
    }

    if (pdm_mic.raw_buffer_write_index == pdm_mic.raw_buffer_read_index) {
        return 0;
    }

    uint8_t* in = pdm_mic.raw_buffer[pdm_mic.raw_buffer_read_index];
    int16_t* out = buffer; //need to change this line
    
    pdm_mic.raw_buffer_read_index++;

    for (int i = 0; i < samples; i += filter_stride) {
#if PDM_DECIMATION == 64
        Open_PDM_Filter_64(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#elif PDM_DECIMATION == 128
        Open_PDM_Filter_128(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#else
        #error "Unsupported PDM_DECIMATION value!"
#endif

        in += filter_stride * (PDM_DECIMATION / 8);
        out += filter_stride;
    }

    return samples;
}
casting raspberry-pi-pico uint8t uint16 pdm
1个回答
0
投票

如果我理解正确的话,您需要逐项复制列表列表条目。我会使用 for 循环:

for (int p1 = 0, p2 = 0; p1 < IN_SIZE; p1++, p2++) {
    out[p1] = (int16_t)in[p2];
}
© www.soinside.com 2019 - 2024. All rights reserved.