主题中讨论的其他器件:EVMK2G
工具/软件:Starterware
大家好、
是否有一个演示展示了 添加了 DSPLib 滤波器的音频馈通? 我正在考虑使用 DSPF_sp_fir gen_*的 StarterWare McASP_*。
谢谢、
Scott
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.
工具/软件:Starterware
大家好、
是否有一个演示展示了 添加了 DSPLib 滤波器的音频馈通? 我正在考虑使用 DSPF_sp_fir gen_*的 StarterWare McASP_*。
谢谢、
Scott
我想尝试更笼统地解释我的问题(但也特别与 C6748相关)。 据我了解、示例项目 MCAS_C674x_C6748_lcdkC6748 配置编解码器和 EDMS3通道。 然后、它使用直接存储器存取(DMA)在编解码器输入之间逐字节传输数据、以回路到输出。 如果我错了、请纠正我的问题。
我要做的是在编解码器输入和输出之间插入一个 FIR 滤波器。 这意味着我需要以某种方式抓取数据(rxBuf 或 txBuf)并对其进行处理。 我尝试了下面的第一遍作为示例、但我认为它有问题:
/*复制缓冲区*/ memcpy ((void *) txBufPtr [lastSentTxBuf]、 (void *) rxBufPtr[lastFullRxBuf]、 AUDIO_BUF_SIZE); // FIR 滤波器 dSPF_sp_fir_gen (((const float *) rxBufPtr[lastSentTxBuf]、ptr_h、(float *) txBufPtr[lastSentTxBuf]、nh、NY); /* **通过相应地设置 DMA 参数来发送缓冲区。 **此处要发送的缓冲区和样本数按原样传递 **参数。 这一点很重要、如果只是传输段 **将被使用。 * BufferTxDMAActivate (lastSentTxBuf、NUM_Samples_per_AUDIO_BUF、 (无符号短整型) parToSend、 (无符号短整型) parToLink);
希望这将显示问题。 由于数据以 字节的形式传输到/从编解码器传输、我是否需要将数据汇编为4字节的块以重新创建原始浮点数? 如果是这样、它是否会引入过多的延迟、以便能够实时流式传输音频? 我上面的代码将字节发送到滤波器、而不是浮点数(参数为 float 类型)。 我必须插入大量代码来在 DSP 函数前后构建数据。 此外、我是否在正确的位置插入了 DSP 函数? 在不触发编解码器操作的情况下、我似乎无法读取 rxBuf/txBuf。
我希望这是有道理的。
谢谢、
Scott
Yordan、您好!
感谢您的回答。 这是我正在处理的最新代码。 它从接收缓冲区中取出一个通道、将字节阵列转换为浮点值、调用 DSP 函数、然后反转该过程。
if (lastFullRxBuf!= lastSentTxBuf) { /* **从链接参数集开始传输。 参数集 ** 1将链接到 PAR_TX_START 处设置的参数。 所以请勿这样做 **更新参数设置1。 * parToSend = PAR_TX_START +(parOffTxToSend % NUM_PAR); parOffTxToSend =(parOffTxToSend + 1)% NUM_PAR; parToLink = PAR_TX_START + parOffTxToSend; lastSentTxBuf =(lastSentTxBuf + 1)% NUM_BUF; //剥离通道1 deInterleave ((void *) rxBufPtr[lastFullRxBuf]、AUDIO_BUF_SIZE/4、buftemp); //将字符转换为浮点以进行筛选 charToFloat (buftemp、audio_BUF_size/4、inputDemoSignal); //Filter blockprocessing dspf_sp_fir gen_cn (inputDemoSignal、coeffsFilter、outputDemoSignal、NUM_OF_TAPPS、NUM_SAMESSAMLE_PER_AUDIO_BUF); //重新组装到2通道缓冲器中 Interleave (outputDemoSignal、AUDIO_BUF_SIZE/4、(void *) txBufPtr [lastSentTxBuf]); memcpy ((void *) txBufPtr [lastSentTxBuf]、 (void *) rxBufPtr[lastFullRxBuf]、 AUDIO_BUF_SIZE); /* **通过相应地设置 DMA 参数来发送缓冲区。 **此处要发送的缓冲区和样本数按原样传递 **参数。 这一点很重要、如果只是传输段 **将被使用。 * BufferTxDMAActivate (lastSentTxBuf、NUM_Samples_per_AUDIO_BUF、 (无符号短整型) parToSend、 (无符号短整型) parToLink);
它还不能工作、但我想知道我是否走上了正确的道路。
谢谢、
Scott