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.

[参考译文] TMS320F28335:FPU 库中 RFFT_ADC_f32u 函数计算出的振幅频谱不正确

Guru**** 2468460 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1480913/tms320f28335-the-amplitude-spectrum-calculated-by-the-rfft_adc_f32u-function-in-the-fpu-library-is-incorrect

器件型号:TMS320F28335
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我曾尝试使用 RFFT_ADC_f32u 函数来计算 ADC 采集波形的频谱、但调用 RFFT_ADC_f32u 和 RFFT_F32_MAG 函数后获得的振幅频谱与真实值有很大不同。 我将 ADC 收集的数据转换成浮点数、然后使用 CCS 的图形函数计算频谱、随后我可以获得正确的幅度。 这里是我的代码。

#include "DSP2833x_Device.h"// DSP2833x 头文件包含文件
#include "DSP2833x_examples.h"// DSP2833x examples include 文件
#include "ADC.h"

易失性 UINT16 ADC_UCD3=0 Finish_Flag;

volatile float32 myfft[1024];

RFFT_ADC_F32_struct rfft_adc;
RFFT_F32_struct rfft;

float32 RFFToutBuff[RFFT_SIZE];//计算得出的 FFT 结果
float32 RFFTF32Coef[RFFT_SIZE];//系数表缓冲区
float32 RFFTmagBuff[RFFT_SIZE/2+1];//频谱幅度

UINT16 AdcBuf[RFFT_SIZE];// ADC 缓冲区分配

void main (void)

InitSysCtrl();
颜色;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();

PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
IER |= M_INT1;
PieCtrlRegs.PIEIER7.bit.INTx1 = 1;
IER |= M_INT7;
EINT;
ERTM;


内部 I;

rfft_adc.tail =\rfft.OutBuf;
rfft.FFTSize = RFFT_SIZE;
rfft.FFTStages = RFFT_STAGES;
rfft_adc.InBuf =&AdcBuf[0];
rfft.OutBuf =&RFFToutBuff[0];
rfft.CosSinBuf =&RFFTF32Coef[0];
rfft.MagBuf =&RFFTmagBuff[0];
RFFT_F32_sincostable (&R);

对于(I=0;I < RFFT_SIZE;I++)
RFFToutBuff[i]= 0;
对于(I=0;I < RFFT_SIZE/2;I++)
RFFTmagBuff[i]= 0;

while (1)

ADC_InitAndStart (AdcBuf、RFFT_SIZE);
while (!ADC_ADC Finish_Flag);
ADC_LVDS=0;Finish_Flag

for (i=0;i<1024;i++)
myfft[i]=3.0*AdcBuf[i]/4095.0;

RFFT_ADC_f32u (&R rfft_adc);//该版本的 FFT 不需要对齐缓冲区
RFFT_F32_MAG (\rfft);//计算频谱振幅
DELAY_US (1000000);
}
}

这是我捕获的波形、与信号发生器生成的波形一致。

使用图形函数获得的信号的振幅频谱经验证正确的

这是通过调用28335的 RFFT_ADC_f32u 函数获得的频谱、可以清楚地看到生成的值比正常值小得多。

互联网上查看相关信息时发现很多代码 ADC 收集的数据右偏移了4、然后进行了处理、但经过测试后ADC我的代码中收集的数据需要右移、ADC 结果寄存器中读取的数据正确的。 是否因为 RFFT_ADC_f32u 函数输入 ADC 数据右移动幅度频谱小了曾尝试读取 RFFT_ADC_f32u 的代码这段代码汇编语言编写的无法读取是否专家可以帮助

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

    您好!

    团队中的 FPU 专家 将在未来几周的商务旅行中离职。 不过,我会尽我所能来帮助你。 您能否发送  RFFT_ADC_f32u 函数的汇编指令的屏幕截图、我可以尝试帮助大家对其进行解释吗?

    此致、

    Delaney

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

    正式的 PDF 文档:

    除了 RFFT_ADC_f32u 函数之外、我还使用 RFFT_ADC_f32计算频谱、并获得 RFFT_ADC_f32u 函数相同的结果得到的小于实际由于 RFFT_ADC_f32u 函数 RFFT_ADC_F32函数的某些定义是一致的、并且 RFFT_ADC_f32u 文档中没有解释很多内容、因此附上了 RFFT_ADC_F32函数的官方文档

    非常感谢您的帮助!

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

    您好!

     RFFT_ADC_f32u 和  RFFT_ADC_F32函数的源汇编文件位于 C2000ware 路径[C2000ware install]/libraries/dsp/FPU/c28/source/fpu32/fft 中、名为 RFFT_ADC_f32u.asm 和 RFFT_ADC_F32.asm 。 您是否已查看这些文件中的注释? 这些可能是需要查看的最佳资源、因为它们详细说明了函数的功能。  

    此致、

    Delaney