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:如何使用编解码器缓冲器处理以前的采样?

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/642435/tmdslcdk6748-how-do-i-handle-previous-samples-using-the-codec-buffers

器件型号:TMDSLCDK6748

大家好、

在处理来自 rxBuf0、rxBuf1和 rxBuf2的数据块时、如何处理以前的样本?  我尝试在  mcaspPlaybk.c 演示的音频链中插入一个滤波器、但我不知道如何在每个数据块之间存储以前的样本。

我尝试使用滤波器抽头数填充温度缓冲器、但这不起作用。 请参见下图,其中我将以前的样本保存在较低的数组中。

谢谢、

Scott

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

    我已通知软件团队。

    请分享您正在使用的 SDK 版本。

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

    Scott、

    如果您的示例有三个接收缓冲区、那么请n`t 当当前缓冲区被填满时、您仍然有之前的缓冲区。 我是说

    当缓冲器 rxbu2中填充新数据并且正在处理 Rxbuf 1时、您在 rxbuf0中仍有数据是否为n`t μ s? 或者您是说处理时间更长、因此您丢失了数据。 n`t 还不清楚为什么温度缓冲解决方案不能为您工作、就好像您制作了样本的副本、那么您应该能够使用 PRV 样本。 另一个要尝试的方法是将 rxbuf0、rxbuf1和 rxbuf2本身填充存储样本并将样本复制到填充区域所需的额外内存。 这样、即使使用新数据填充 rxbuf、填充区域仍将包含您需要处理的先前样本。

    此致、
    Rahul

    n`t:我为您查找了参考实现、但没有找到。 有一个具有此功能的 FIR 滤波器示例、但这可能与您的用例不完全匹配。

    sestevenson.wordpress.com/.../

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

    您好、Rahul、

    我想我正在做你建议的事情。 我将填充 rxBuf、数量等于 number_for_tuts -1以执行卷积。 我要将 PRV 样本复制到填充区域、然后在填充新的 rxbuf 时、应填充之前的样本。 以下是我的代码:

    lastSentTxBuf =(lastSentTxBuf + 1)% NUM_BUF;
    
    /*
    **将采样数据复制到临时缓冲区中
    *
    memcpy (tempBuffer、(void *) rxBufPtr[lastFullRxBuf]、AUDIO_BUF_SIZE);
    /*
    **de-Interleave rxBuf /将 char 转换为 short signed int
    *
    charToShortInt (tempBuffer、AUDIO_BUF_Size/8、singleChannelInt);
    /*
    **将先前的样本插入缓冲器的前面,以便为 FIR 滤波器做好准备
    *
    for (i= 0;i < NUM_OF_COEFFS - 1;+I)
    singleChannelInt[i]= padBuffer[i];
    /*
    **转换为 FIR 滤波器的浮点值
    *
    intToFloat (singleChannelInt、AUDIO_BUF_SIZE /8、DSPInputSignal);
    /*
    **FIR 滤波器
    *
    DSP_FLOAT (DSPInputSignal、CoeffsFilter、DSPOutputSignal、NUM_OF_COEFFS、AUDIO_BUF_SIZE / 8);
    /*
    **转换回 TxBuf 的 int
    *
    floatToInt (DSPOutputSignal、AUDIO_BUF_SIZE/8、tempBufferInt);
    /*
    **保存当前 N 个样本以进行下一卷积
    *
    for (i= 0;i < NUM_OF_COEFFS - 1;+I)
    padBuffer[i]= singleChannelInt[AUDIO_BUF_SIZE /8 + i ];
    /*
    **转换回 txBuf 的 char 和 interleave
    *
    shortToChar (tempBufferInt、AUDIO_BUF_SIZE / 8、tempTxBuf);
    memcpy (((void *) txBufPtr [lastSentTxBuf]、tempTxBuf、AUDIO_BUF_SIZE);
    /*
    **通过相应地设置 DMA 参数来发送缓冲区。
    **此处要发送的缓冲区和样本数按原样传递
    **参数。 这一点很重要、如果只是传输段
    **将被使用。
    *
    BufferTxDMAActivate (lastSentTxBuf、NUM_Samples_per_AUDIO_BUF、
    (无符号短整型) parToSend、(无符号短整型) parToLink);
    

    但我仍然看到缓冲器之间存在不连续性。 例如、16次抽头的快照、我在该快照中尝试将之前的 N 个样本插入缓冲区的开头。 但是、来自前一个缓冲器的最后一个样本与当前样本不一致。

    谢谢、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有使用 McASP 外设。 从编码的角度来看、有一些意见。 在 A 位上似乎存在不一致。 取决于 charToShortInt()的参数。 这一行
    charToShortInt (tempBuffer、AUDIO_BUF_Size/8、singleChannelInt);
    可能是
    charToShortInt (tempBuffer、AUDIO_BUF_Size/8、&singleChannelInt[AUDIO_BUF_Size/8]);
    以稍后匹配
    for (i= 0;i < NUM_OF_COEFFS - 1;+I)
    padBuffer[i]= singleChannelInt[AUDIO_BUF_SIZE /8 + i ];
    除非 charToShortInt 的参数是偏移指数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。  charToShortInt()函数确实采用偏移索引。 这是代码。 它开始填充数组、从系数数减一:

    void charToShortInt (unsigned char input[]、int size、short signed int output[]){
    int i=0;
    int indx=0;
    for (i=NUM_OF_COEFFS - 1;i< size + NUM_OF_COEFFS - 1;i++){
    output[i]= input[indx+1]<< 8;
    output[i]|= input[indx+0]<< 0;
    indx += 8;
    }
    }
    

    我在全局范围内定义了 NUM_OF_COEFFS。

    不过、我认为您的成绩是正确的。 我需要在某种程度上将新数据与旧数据(之前的样本)同步。 我的问题似乎是当前的 rxBuf 正在填充新数据、但之前的 rxBuf 样本与其不匹配。 我不知道如何解决它。

    我不明白三个 rxBuf 接收缓冲区如何与 txBuf 同步。 它们以循环方式填充、那么我如何用系数数量填充缓冲器?

    谢谢、

    Scott

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 使用偏移量、数据似乎是在正确的位置进行复制和复制的。 我对 McASP 的了解有限。 您是否将格式更改为4个通道? 原始 McASP 示例具有交错的2通道。 很抱歉、我得到了所有内容。