This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDSLCDK6748:C6748LCDK 的多个麦克风输入

Guru**** 2380860 points
Other Parts Discussed in Thread: TMDSLCDK6748, TLV320AIC3106
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1016191/tmdslcdk6748-multiple-mic-inputs-to-c6748lcdk

器件型号:TMDSLCDK6748
主题中讨论的其他器件:TLV320AIC3106OMAPL138

这是我 之前关于 使用6748LCDK 连接多个麦克风的问题的后续解答。 在这里(链接)、有人建议我尝试使用立体声麦克风插孔 J11来访问两个麦克风。 我被告知可以将两个麦克风轻松连接到这个插孔- MIC_RIGHT (MIC3R)和 MIC_LEFT (MIC3L)-我可以同时从两个麦克风中录制并单独播放它们。

我尝试通过音频插孔将两个麦克风连接到 J11 (一个麦克风连接到插孔的左声道输入、另一个连接到右侧)。 我正在使用处理器 SDK RTOS 中的 McASP 示例代码来获取音频样本。 但是、我无法知道 MIC3R 的样片和 MIC3L 的样片。 因此,我无法单独播放它们。 团队中的某个人能否很快帮助解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:TMDSLCDK6748

    C6748 LCDK 具有1个 MIC In 端口、但是论坛(link1link2link3)指示可以将多个麦克风连接到此电路板。 怎么可能?  我想知道是否可以使用扩展端口(J15)连接额外的麦克风并将信号传递到板载编解码器? 是否有人可以帮助我找到一个逐步完成的流程? 作为简单的设置、我想同时保存两个麦克风录制的音频、并单独播放。

    (我是使用 DSP 的新手、因此我非常感谢您提供详细的答案)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    查看原理图、TLV320AIC3106编解码器具有立体声麦克风插孔 J11。 您可以将两个麦克风轻松连接到此插孔。 MIC_RIGHT (MIC3R)和 MIC_LEFT (MIC3L)信号连接驻极体 PC 麦克风所需的麦克风偏置电压。 您将能够同时从两个麦克风中录制并单独播放它们。

    如果您需要两个以上的麦克风、就会变得更加复杂。
    编解码器还有一个 AUDIO_IN 插孔(J10上部)。 来自这个插孔的左和右信号连接至编解码器 LINE1L+和 LINE1R+。 这些信号没有布置麦克风偏置。 驻极体 PC 麦克风在没有偏置的情况下不会生成任何信号、但您可以使用不需要偏置的动态麦克风、或者您可以从与 J11类似的 MICBIAS 信号焊接导线以使用驻极体 PC 麦克风...

    但是、AIC3106编解码器只有两个 ADC -用于立体声音频。 它一次只能对两个输入信号进行采样。 编解码器可以在对多个 ADC 的组合进行采样之前在内部混合/组合多个输入。 因此、您可以组合来自两对麦克风的信号、并具有来自4个麦克风的2个音频流。 我怀疑你想这样做。

    另一种选择是在 MIC3L/R 和 LINE1L+/R+之间切换。 您可以从 MIC3L/R 收集一些样本、然后切换到 LINE1L+/R+以收集一些样本、然后重复上述操作。 如果您正在进行任何类型的波束形成、这将不起作用、因为您需要完全同时对所有4个麦克风进行采样-而不是先对另一对进行采样。 我不知道您的系统要求-但我怀疑您也想这样做。

    如果您需要 同时采样两个以上的麦克风、则需要一些具有附加 ADC 的附加硬件来采样更多的麦克风。

    J15接头非常合适、因为它具有板载编解码器所使用的相同音频时钟。 J15还具有 I2C 来配置其他 ADC/编解码器。 还有三个额外的 McASP 串行器(AXR7、AXR8、AXR15)。 这些串行器中的每一个都可以使用 I2S 协议传输立体声数据、因此您可以添加六个麦克风。 (时分复用可以为每个串行器添加更多通道、但编解码器需要支持此功能。)

    我想您将能够找到适用于 ADC 或编解码器的 EVM、您可以轻松地将其连接到 J15接头。 您可以将三个 AIC3106 EVM 连接到 J15。 确保将每个 EVM 上编解码器的 I2C 地址设置为唯一的 I2C 地址(AIC3106 EVM 上 JMP11/12的 MFP1/0)。    

    由于音频时钟(AIC _BCLK、AIC WCLK、AIC MCLK)与板载编解码器共享、因此您可以将连接到 J15的任何 ADC /编解码器与板载编解码器同步。 这对于波束形成应用非常重要、在这些应用中、麦克风需要完全同时采样才能捕获波前端。 使用相同的时钟还可以防止多个编解码器之间的时钟漂移。 时钟漂移可能会导致样本丢失以及咔嗒声和砰砰声等声音干扰。

    因此、如果您可以使用两个麦克风、那么 LCDK 板已经支持该功能。 如果您需要两个以上的麦克风、请考虑为 TI.com 上的任何 ADC/编解码器连接 EVM。

    请参阅 AIC3106数据表
    https://www.ti.com/lit/gpn/TLV320AIC3106
    11.2功能方框图显示了两个 ADC 和音频混合器

    请参阅 AIC3106 EVM
    https://www.ti.com/tool/TLV320AIC3106EVM-K
    AIC3106用户指南 https://www.ti.com/lit/ug/slau209a/slau209a.pdf 第40页上的原理图

    希望这对您有所帮助、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mark、

    我尝试通过音频插孔将两个麦克风连接到 J11 (一个麦克风连接到插孔的左声道输入、另一个连接到右侧)。 我正在使用处理器 SDK RTOS 中的 McASP 示例代码来获取音频样本。 但是、根据我对代码的理解、您可以从缓冲区中获取样本、我可以这么做、但我无法知道哪些样本来自 MIC3R、哪些样本来自 MIC3L。 团队中的某个人能否很快帮助解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我很确定您必须使用软件从从编解码器接收到的每个数据中提取(屏蔽掉)左右通道。

    在 I2S 协议中、FS (WCLK)信号在左右两侧切换。

    确保您正在为立体声配置编解码器-一个 ADC 用于 MIC3L、另一个 ADC 用于 MIC3R。

    这些位将按照串行器接收到的顺序位于寄存器(缓冲器)中。



    -Mark

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、感谢您的回复。 我更正了编解码器的配置。 我现在能够将输入从 MIC3R 定向到右侧通道线路输出、将 MIC3L 定向到左侧通道线路输出。 为此、我只需output[i] = input[i]*output这里执行、和*input分别是指向缓冲器接收器和发送器的指针。 现在、我要做的是能够确定输入中的哪些样本来自左麦克风、哪些样本来自右麦克风。 这是因为我希望对两个麦克风的输入执行不同的操作。

    为了确定来自正确麦克风的样本、我在代码中执行了以下操作:

    if i%2 ==0{

    output[i] = 0

    }

    else{

    output[i] = input[i]

    }

    在执行此操作时、我的右麦克风上没有任何声音。 这告诉我、每个备用样本都来自正确的麦克风。 但是、在阅读 处理器 SDK RTOS 文档中有关 MCASP 缓冲区格式的内容时、这毫无意义。 在模式1SER_1SLOT 中、我预期前16位来自一个麦克风、后16位来自另一个麦克风、而在交错格式中、我预期前32位来自一个麦克风、后32位来自另一个麦克风。 但是、情况似乎并非如此。 我的理解是否正确/不正确?

    此外、如果您能指出 McASP_cfg.c 中指定的 McASP 缓冲模式在哪里、那会很好? 默认使用哪种模式?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    听起来您是为 McASP_BufferFormat_MULTISER_MULTISLOT_Semi_interleaved_1或 McASP_BufferFormat_MULTISER_MULTISLOT_Semi_interleaved_2设置的

    数组输出[]和输入[]使用什么数据类型?

    我将与其他更熟悉软件方面的人一起探讨。

    此致、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    石沙尼

    使用16位数据时、格式化会有点棘手、因为 MCAASP 驱动程序配置是针对单个插槽进行设置的、并且右侧和左侧通道16位数据会打包成一个32位值、并由 EDMA 传输到缓冲器中。 通常、在这样的格式中、32位采样的前16位是左通道数据、后16位是右通道数据。

     n`t 避免打包、则可以使用两个32位时隙捕获16位 I2S 数据、因此不必解压缩数据。 或者设置编解码器以提供32位样本、例如我们为 AM57x 器件提供的示例。

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但根据我的理解、我只有一个音频器件(因为我仅使用一个端口- J11)、但有两个通道(左和右)对应于我插入的两个 MEMS 麦克风。 是否可以使用 此类设置使 McASP_BufferFormat_MULTISER_MULTISLOT_Semi_interleave_1或 McASP_BufferFormat_MULTISER_MULTISLOT_SEMI 交错_2。 此外、在 MCASP 的 OMAPL138/6748LCDK 示例项目中、这在哪里定义? 我在示例项目的 McASP_cfg.c 中假设它、但根据定义的编解码器(?)、有多个条件 运行模式(DSP 或 I2S)、我还不知道这些模式的定义位置。 如果我错了、请纠正我的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Rahul、Mark 也建议这样做- 根据 Mark 所附的图表、前16个样本应该来自左通道、后16个应该来自右通道。 它们是否也以相同的方式写入输出缓冲器? 如果我修改了 RTOS PDK McASP 示例工程中的 audioSample_io.c、如果我修改了  output[i] = input[i] for i ranging from 0 to rx_frame_size, where output and input are the output and input buffer pointers:

    short *input = ((void *)((uint8_t *)appBuf_ptr_rx->buf));
    short *output = ((void *)((uint8_t *)appBuf_ptr_tx->buf));

    then for every chunk of 32 samples that I take from the rx buffer and output to the tx buffer, the first 16 bits should go to the left channel and the next 16 go to the right channel, correct? However, that doesn't seem to be the case. If I want to output nothing to my left speaker connected to Line_out, I need to set every alternate sample of output to be 0. I am attaching my audioSample_io.c file below because that is where I am making all these changes. Specifically look at lines (1103-1126). 

    I would like to repeat what I am trying to do - I want to be able to separate out the left and right mic inputs, i.e, I want to know exactly which sample numbers (i) belong to the left mic and which belong to the right. So I am parsing the input buffer from i = 0 to the rx_frame_size (which is 512 = BUFLEN*mcasp_chanparam[0].noOfSerRequested*rx_bytes_per_sample). Now for each incoming left mic sample, I want to set the corresponding left output sample to 0. Assuming that the output buffer is written exactly like input buffer, I will be able to get no signal on my left output speaker only if I am able to separate the left and right mic inputs correctly. Currently, I get no signal on my right mic when I set the output to 0 every alternate sample. This seems to counter what you say, ie, first 16bits are from the left mic and the next 16 from right.

    e2e.ti.com/.../audioSample_5F00_io.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ishani、

    听起来 McASP_BufferFormat 正在为您移动左右样本、因此您不必花费软件周期从缓冲区中的每个32位值中挑选左右样本。

    当您将输出的每个备用样本设置为0时、您已经证明了这一点。 您会说这会使左侧线路输出变得安静。

    您是否可以尝试修改代码、使每个其他备用样本为0、从而从正确的麦克风静音正确的信道?
    如果 i%2 =1{//之前=0
    OUTPUT [i]= 0


    然后、您可以将左麦克风路由到右线输出信道(将右麦克风路由到左线输出信道)。

    研究数据输入[n]-假设输入数组中的每个元素为32位并且编解码器为每个左通道和右通道生成16位数据、那么输入[n]中可能有两个16位左通道、输入[n+1]中可能有两个16位右通道。

    然后、您应该能够区分左麦克风数据和右麦克风数据。

    在代码中找到每个 McASP_BufferFormat 之间的差异
    它应更改时隙和数据格式化程序以进行位操作
    请参阅 TRM https://www.ti.com/lit/ug/spruh79c/spruh79c.pdf

    此致、
    标记