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.

[参考译文] C5515 eZdsp Pingpong 缓冲器/ HWAFT

Guru**** 2562120 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/596469/c5515-ezdsp-pingpong-buffer-hwafft

您好!

为了评估 C5515的性能、我将使用 C5515音频滤波器演示。 我从 PC 获取音频数据(YouTube 流式传输)、并在单声道模式 AIC3204编解码器配置中使用乒乓缓冲器将其放入输出端口。 这听起来不错、我没有任何问题。

if (CurrentRxL_DMAChannel ==2){
buum_copy (&RcvL1[0]、&FilterOutL2[0]、Xmit_buum_size);
}else{
buff 复制(&RcvL2[0]、&FilterOutL2[0]、Xmit_buff 大小);
} 

其中、Xmit_buff 定义为1024。

现在、我已经尝试使用 hawfft 进行更改、简而言之、我获得信号 RcvL1、使用 hwafft_1024pts 的 I FFT、然后根据 http://www.ti.com/lit/an/sprabb6b/sprabb6b.pdf 中解释的示例、我反向转换它并输出它(只有一个输入缓冲器) 

int32 *数据;
int32 * data_br;
uint16 FFT_flag;
uint16 scale_flag;
int32 *暂存;
UINT16 OUT_SEL;
int32 *结果;
int16 out[Xmit_buff _size];

(笑声)

IF (CurrentRxL_DMAChannel ==2)
{
for (i = 0;i < Xmit_buff _size;i++){
温度=*(RcvL1 + I);
*(data + i)= temp << 16;
}
hwafft_br (data、data_br、Xmit_buy_size);
数据= DATA_br;
OUT_SEL = hwafft_1024pts (数据、临时、FFT_flag、scale_flag);
if (OUT_SEL = OUT_SEL_DATA){
结果=数据;
}否则{
结果=划痕;
}

hwafft_br (结果、data_br、Xmit_buy_size);
数据= DATA_br;
OUT_SEL = hwafft_1024pts (数据、暂存、IFFT_FLAG、SCALL_FLAG);
if (OUT_SEL = OUT_SEL_DATA){
结果=数据;
}否则{
结果=划痕;
}
for (i = 0;i < Xmit_buff;i++)
OUT[i]=(Result [i]>> 16);


buff 复制(&out[0]、&FilterOutL1[0]、Xmit_buff 大小);// RcvL1大小= 1024
}
其他
{
buff 复制(&RcvL2[0]、&FilterOutL2[0]、Xmit_buff 大小);
}
}

问题在于信号已严重降级。

有任何提示? 我的代码有什么问题?

提前感谢、

Paolo

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的问题之一似乎是:
    温度=*(RcvL1 + I);
    *(data + i)= temp << 16;
    其中 temp 声明为 AD Int32。

    当我打印数据[i]时、它是0或-1、为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Paolo、

    我已将此内容转发给 C55x 软件专家。 他们的反馈应发布在此处。

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

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

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

    大家好、

    为了更正数据分配中的表单、我修改了我的代码、例如:

    IF (CurrentRxL_DMAChannel ==2)
    {
    for (i = 0;i < Xmit_buff _size;i++){
    *(data + i)=((int32)(*(RcvL1 + i))<< 16);
    }
    hwafft_br (data、data_br、Xmit_buy_size);
    数据= DATA_br;
    OUT_SEL = hwafft_1024pts (数据、临时、FFT_flag、scale_flag);
    
    if (OUT_SEL = OUT_SEL_DATA){
    结果=数据;
    }否则{
    结果=划痕;
    }
    
    hwafft_br (结果、data_br、Xmit_buy_size);
    数据= DATA_br;
    OUT_SEL = hwafft_1024pts (数据、暂存、IFFT_FLAG、SCALL_FLAG);
    if (OUT_SEL = OUT_SEL_DATA){
    结果=数据;
    }否则{
    结果=划痕;
    }
    for (i = 0;i < Xmit_buff _size;i++){
    OUT[i]=结果[i]>> 16;
    }
    //buff 复制(&RcvL1[0]、&FilterOutL1[0]、Xmit_buff 大小);// RcvL1大小= 1024
    buff 复制(&out[0]、&FilterOutL1[0]、Xmit_buff 大小);
    }
    其他
    {
    buff 复制(&RcvL2[0]、&FilterOutL2[0]、Xmit_buff 大小);
    } 

    但我不断听到声音失真。 您能给我建议一些方法来实现该解决方案吗、我是 DSP 编程的新手吗...

    非常感谢您的参与

    Paolo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、
    我使用 e2e.ti.com/.../261883 主题中的提示进行了解答、
    具体而言
    对于(i = 0;i < FFT_length;i++){
    reall[FFT_length - i]=全部[i];
    imagL[FFT_length - i]=-imagL[i];

    谢谢、
    Paolo