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.

[参考译文] CCS/TMS320C6713B:使用 DSPLIB 中的 FFT 函数时出现问题

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/591533/ccs-tms320c6713b-problems-using-fft-function-from-dsplib

器件型号:TMS320C6713B

工具/软件:Code Composer Studio

您好!
在 CCS v5.3 (DSK6713)中使用 DSPLIB (dsp67x.lib)中的 DSPF_sp_cfftr2_dit 函数时遇到一些问题。 如果代码中包含以下行:

dspf_sp_cfftr2_dit (FFT_in、coeffs、wlen); 

我始终从编解码器输出中获得噪声信号(即使 FFT 结果不是定向到耳机输出-请参阅下面的代码)。

我在构建项目时没有收到任何错误或警告。 我的配置为:

链接器搜索路径:
- DSPLIB/lib/dsp67x.lib 的路径
- rts670.lib 的路径

包含选项:
- DSPLib/Include 的路径

 

#define CHIP_6713 1

#include 
#include 
#include 
#include 
#include 
#include 

#include "dsk6713.h"
#include "dsk6713_AIC23.h"

#include "DSPF_sp_cfftr2_dit.h"
#include "utility.h"


DSK6713_AIC23_CodecHandle hCodec;//编解码器句柄
DSK6713_AIC23_Config 配置= DSK6713_AIC23_DEFAULTCONFIG;//编解码器配置具有默认设置

#define M_PI 3.141592658979323846
#define wINT1024
#define hoplid 2 256
#define hopeffma

data_align (FFT_in、8






);volatilefloat translid translat #v0_translation_reatile rulations=8);/volatile fatile float translate=uatile rfloat rulatile rlag #v0_translid rulatile rule_translid rf_translag #v0_translate=0_translate=uatile rf_translate=0_




void main()
{DSK6713_init()

;//初始化电路板支持库,必须首先调用
hCodec = DSK6713_AIC23_openCodec (0、&CONFIG);//打开编解码器并获取句柄

//配置缓冲串行端口以实现32位操作
//这允许在一个读取/写入 McBSP_FSETS
(SPCR1、RINTM、FRM)中传输左右通道
;McBSP_FSETS (SPR1、XPCR1、XINTM、FRM) FRM);
McBSP_FSETS (RCR1、RWDLEN1、32位);
McBSP_FSETS (XCR1、 XWDLEN1、32位);

//设置编解码器采样频率
DSK6713_AIC23_setFreq (hCodec、DSK6713_AIC23_FREQ_44KHZ);

//中断设置
IRQ_globalDisable ();//全局禁用中断
IRQ_nmiEnable();//启用 NMI 中断
IRQ_MAP (IRQ_EVT_RINT1、15);//将事件映射到物理中断
IRQ_ENABLE (IRQ_EVT_RINT1);//启用事件
IRQ_globalEnable ();//全局启用中断

UINT8 frame_status = 0;
UINT16 pin=0、pout=0;
Uint16

(uefftw); wlen);
bit_rev (codest_flag、wlen>1);

//等待第一个帧准备好处理
,while (frame_status!= 4){
frame_status += frame_ready_flag;
frame_ready_flag = 0;


}while (1)
{
if (frame_read_flag = 1){
frame_ready =


1);fft_i+ i = 1280* in

(f_in_I = 1)
;fft_in_i+= 1);fft_ift_in_in_i+(in = 1)
bit_rev (FFT_IN、wlen);

引脚+= 256;
}

}

中断空 serialPortRcvISR ()
{
union{uint32 combo;short channel[2];}temp;

temp.combo = McBSP_read (DSK6713_AIC23_DATAHANDLE);

buffer_in[j]=(float) temp.channel[0];
j+;
//如果(
j%256 == 0){
frame_ready_flag = 1、则将 frame_ready_flag 设置为1;
}
//如果
(j = 1280){
j = 0、则清除循环缓冲区索引;
}

McBSP_write (DSK6713_AIC23_DATAHANDLE、temp.combo);
}

请您向我指出原因是什么?

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

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

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

    Ka、

    为什么要在不连续的数据缓冲区上运行 FFT 函数?

    您意味着,如果对 DSPF_sp_cfftr2_dit()函数行进行注释,则输出会像输入一样发出声音,您不会听到噪音。 是这样吗?

    在您在输出端听到的噪声范围内、您能否听到一些输入信号通过?

    在 DSPF_sp_cfftr2_dit 函数描述下的 DSPLIB 编程人员参考指南中、实现说明部分包括以下注释:

    [引用用户="Implementation Notes"]可中断性:此代码可容中断,但不可中断。

    "不可中断"表示在函数运行时、不会发生中断。 由于您是逐个采样处理 McBSP 数据、因此您的设计要求每个数据样本都发生一次中断。 如果该函数花费的时间超过两个采样周期、则数据将丢失。 这将导致输出噪声。

    通过查看 TI.com 上的可用文档和存档 的 TMS320C6x1x DSP 集成技术讲座、您可以了解有关使用 C6713的更高级功能(如 EDMA)设计音频系统的更多信息。

    或者、您也可以使用提供的 C 语言实现方案将 DSPLIB 调用替换为可中断的实现方案。

    此致、
    RandyP

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


    您好、Randy、
    感谢您的回答。 关于您的问题:

    您意味着,如果对 DSPF_sp_cfftr2_dit()函数行进行注释,则输出会像输入一样发出声音,您不会听到噪音。 是这样吗?

    是的、没错。

    在您在输出端听到的噪声范围内、您能否听到一些输入信号通过?

    是的、我可以听到我的输入信号发出一些噪声和咔嗒声。

    我尝试使用 C 语言实现、但仍然存在相同的问题。 那么、使用它的唯一方法是 EDMA?

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

    Ka、

    ka 说:
    因此使用它的唯一方法是 EDMA?

    看情况而定:您要做什么? EDMA 是 C6713的一个重要部分、可减轻大量 DSP 处理负载。 如果不使用 EDMA、可能会感觉在夏季驾驶汽车时空调打开、所有车窗都关闭。

    C6713是一款旧处理器、我们拥有许多功能更强大的较新处理器。 使用 C6748或 C6655、您的应用也可能会更好。 我不知道。

    [引用 user="ka"]我尝试使用 C 语言实现,但仍然存在相同的问题。

    您的 C 实现是否在执行的某些部分禁用了中断。 如果您可以避免阻止中断、那么当前问题应该会消失。

    请从以下链接中找到 DSP 集成技术讲座材料。 (请参阅 Lab4 - audioapp)

    processors.wiki.ti.com/.../TMS320C6x1x_DSP_Integration_Workshop

    您将从有关实时处理的讨论和展示如何实现实时处理的实验中受益。

    此致、
    RandyP