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:使用 mcaspPlayBk.c 的正弦波发生器

Guru**** 2589245 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633905/tmdslcdk6748-sine-wave-generator-using-mcaspplaybk-c

器件型号:TMDSLCDK6748

您好!

我正在尝试使用 mcaspPlayBk.c 演示代码向编解码器发送正弦波。 生成的正弦波在 Code Composer 中如下所示:

它使用32位有符号整数进行编码、并以 LSB 优先的方式交错到发送缓冲器中:

然后、我将数据发送到发送缓冲区、再发送到 MCASP 控制器。  

//重新组装到2通道缓冲器中
交织2 (tempBufferInt、AUDIO_BUF_SIZE/8、(void *) txBufPtr[lastSentTxBuf]);
/*
memcpy ((void *) txBufPtr [lastSentTxBuf]、
TempBuffer、
AUDIO_BUF_SIZE);
*

/*
**通过相应地设置 DMA 参数来发送缓冲区。
**此处要发送的缓冲区和样本数按原样传递
**参数。 这一点很重要、如果只是传输段
**将被使用。
*
BufferTxDMAActivate (lastSentTxBuf、NUM_Samples_per_AUDIO_BUF、
(无符号短整型) parToSend、
(无符号短整型) parToLink);

问题是输出在发送缓冲区 txBuf 中被打乱:

我认为正弦波的样本未正确发送到编解码器。  

谢谢、

Scott

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

    我已通知 RTOS 团队。 反馈将发布在此处。

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

    Starterware 中 McASP 示例中的数据使用 I2S 模式、这意味着音频 TX/RX 缓冲区中的数据将具有左右通道数据、然后将这些数据提供给编解码器、该编解码器希望以该格式传输数据。 您可以使用 Audiacity 等主机软件生成数据、然后将来自主机的信号输入到线路中、并检查数据是否在线路上回退、而不是在 DSP 上生成数据。  

    如果您在 DSP 上生成数据、则需要生成左侧右侧通道格式的数据、并在将其发送到编解码器之前将其调整为编解码器增益和量化。

    此致、

    Rahul

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

    您好、Rahul、

    我将输入信号从 Audacity 更改为外部信号。 如果我使用开箱即用代码馈送音频、则可以正常工作。  

    但是、如果我以任何方式(例如、二分频)更改数据、则输出为噪声。 因此、我将尝试确定编解码器希望数据采用的格式。

    我尝试将数据解码为隔行双通道32位有符号整数。 因此、为了对其进行解码、我将获取2个非相邻的2字节块并将它们连接到单个32位整数中。 是这样吗?

    我认为这一定不正确、因为当我将32位整数插入基于字节的原始2通道缓冲器时、不会重构信号。

    谢谢、

    Scott

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

    您好!

    如果有人对如何解决此问题有任何建议、请提供建议。

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将输入信号从 Audacity 更改为外部信号。 如果我使用开箱即用代码馈送音频、则可以正常工作。

    但是、如果我以任何方式(例如、二分频)更改数据、则输出为噪声。 因此、我将尝试确定编解码器希望数据采用的格式。

    我尝试将数据解码为隔行双通道32位有符号整数。 因此、为了对其进行解码、我将获取2个非相邻的2字节块并将它们连接到单个32位整数中。 是这样吗?

    我认为这一定不正确、因为当我将32位整数插入基于字节的原始2通道缓冲器时、不会重构信号。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Scott、

    根据 Rahul 的解释、您的数据应该是一系列有符号16位对或有符号32位对、具体取决于您如何配置 McASP 和编解码器。 您谈论的是字节和非相邻的块、这一事实让我认为您看的数据是错误的。

    使用正在运行的代码、您能否停止处理器并在 CCS 中查看 Txbuf 并发送屏幕截图? 将数据格式化为32位有符号 TI 样式。 理想情况下、数据将接近单个音调、因此更易于通过眼睛阅读、但无论您有什么、都会发送屏幕截图并说明其听起来是什么样的。

    您可以尝试使用原始正弦波数据的另一项操作是发送 tempBufferInt 的精确副本或将 tempBufferInt 精确复制到 txBuf2中、而不将0插入中间。 如果一个通道听起来像是正弦波、另一个通道听起来像是噪声、那么您的数据是16位对;如果两个通道听起来像是预期频率的两倍正弦波、那么您的数据是32位对。

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

    您好 RandyP、

    我正在将来自 ADC/编解码器的数据解码为32位有符号对。 这给出了上面显示的正弦波(从而重建输入模拟信号)。

    我谈论的是字节、因为数据是以字节为单位传输的(如果我错了、请纠正我的错误)。 我不知道如何避免讨论字节、除非它沿着较大的数据总线传输。

    我已暂停 CPU 并发送了上面 txBuf 的屏幕截图。 它是32位有符号的 TI 样式。 输入信号是单音正弦波。

    谢谢、

    Scott

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

    这是 rxBuf 的快照。 如果将其与 txBuf (上面)进行比较,它们的外观就不一样了。  

    此外、我想说我讨论的是字节、因为 rxBuf 和 txBuf 是 char 类型。 但是、由于样本是32位有符号整数、我必须编写一个函数来将 char 转换有符号整型。  如果这听起来不正确、请告诉我。

    谢谢、

    Scott

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

    我还尝试展示了我在这一过程中看到的波形。 希望它可见。 它显示我有一个模拟输入、然后在 rxBuf 中捕获、然后是一个温度缓冲器来验证波形、然后将其发送回编解码器。 我将其显示为2个单独的编解码器、即使它是1个。  

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

    您好 RandyP、

    您是否能够查看您要求的屏幕截图?

    谢谢、

    Scott

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

    您将波形显示为16位无符号、而不是32位有符号。 您使用的是故障数据、而不是通过案例。 传递数据可能会更有用、因为它可以显示内存浏览器而不是图形、但在某些方面、图形会更有用。

    数据显然是两个16位数的交错数据。 您会以某种方式破坏数据、因为它看起来与 rxBuf 的输入和 txBuf 的输出完全不同。 在使用传递数据重新执行此操作之前、即使使用此数据也应该能够进行调试、这在调试后会更有帮助。

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

    [引用 user="SCott">此外,我想说我所说的是字节,因为 rxBuf 和 txBuf 是 char 类型。 但是、由于样本是32位有符号整数、我必须编写一个函数来将 char 转换有符号整型。  如果这听起来不正确、请告知我。

    是的、这听起来不正确。 数据类型在显示和缓冲区数据中似乎是一个问题。 铸造可能会令人困惑、因此混合定义会增加它。

    此致、
    RandyP