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/TMS320F28379D:如何获取数组数据的绝对值

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/588013/ccs-tms320f28379d-how-to-take-absolute-value-for-array-data

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

大家好、我将在 CCS 中使用'2837x_RFFT_ADC'示例代码。

对于 FFT 输出、我希望获取这些数据的绝对值。

====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

#include "fpu_rfft.h"

#include "math.h"

#include "examples_setup.h"

#define RFFT_STACages 11.

#define RFFT_SIZE (1 << RFFT_STOPENAINSages)

#define F_PER_SAMPLE (ADC_SAMPLING_FREQ/(float) RFFT_SIZE)

#pragma DATA_SECTION (RFFTin1Buff、"RFFTdata1")

uint16_t RFFTin1Buff[2*RFFT_SIZE];

#pragma DATA_SECTION (RFFTmagBuff、"RFFTdata2")

float RFFTmagBuff[RFFT_SIZE/2+1];

#pragma DATA_SECTION (RFFToutBuff、"RFFTdata3")

float RFFToutBuff[RFFT_SIZE];

//float RFFToutBuff1[RFFT_SIZE]=fabsf (RFFToutBuff[RFFT_SIZE]);

#pragma DATA_SECTION (RFFTF32Coef、"RFFTdata4")

float RFFTF32Coef[RFFT_SIZE];

RFFT_ADC_F32_struct rfft_ADC;

RFFT_ADC_F32_struct_Handle HND_rfft_ADC =&rfft_ADC;

RFFT_F32_struct rfft;

RFFT_F32_struct_Handle HND_rfft =&rfft;

volatile uint16_t flagInputReady = 0;

volatile uint16_t sampleIndex = 0;

uint16_t pass = 0;

uint16_t 故障= 0;

_interrupt void adcaIsr()

int16_t main ()

uint16_t i、j;

float freq = 0.0;

ifdef 闪存

EALLOW;

Flash0EccRegs.ecc_enable.bit.enable = 0;

memcpy (((uint32_t *)&RamfuncsRunStart、(uint32_t *)&RamfuncsLoadStart、

(uint32_t)&RamfuncsLoadSize);

FPU_initFlash()

#endif //闪存

FPU_initSystemClocks()

FPU_initEPIE()

FPU_initADCA()

 FPU_initEPWM()

EALLOW;

PieVectTable.ADCA1_INT =&adcaIsr;

EDIS;

PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

IER |= M_INT1;

EINT;

ERTM;

FPU_startEPWM ();

hnd_rfft_adc->Tail =&(hnd_rfft->OutBuf);

hnd_rfft->FFTize = RFFT_SIZE;//FFT 大小

hnd_rfft->FFTStage = RFFT_STA期;//FFT 级

hnd_rfft_adc->InBuf =&RFFTin1Buff[0];//输入缓冲器(12位 ADC)输入

hnd_rfft->OutBuf =&RFFToutBuff[0];//输出缓冲区

hnd_rfft->CosSinBuf =&RFFTF32Coef[0];//Twiddle 因子

hnd_rfft->MagBuf =&RFFTmagBuff[0];//幅度输出缓冲区

RFFT_F32_SINCOSTable (HND_rfft);//计算旋转因子

对于(i=0;i < RFFT_SIZE;i++){

RFFToutBuff[i]= 0;//清理输出缓冲器

对于(i=0;i < RFFT_SIZ/2;i++){

RFFTmagBuff[i]= 0;//清理幅度缓冲器

while (1){

while (flagInputReady = 0){};

RFFT_ADC_F32 (HND_rfft_ADC);

FlagInputReady = 0;//重置标志

RFFT_F32_MAG (HND_RFFT);//计算幅度

J = 1;

FREQ = RFFTmagBuff[1];

for (i=2;<RFFT_SIZE/2+1;i++){)

if (RFFTmagBuff[i]> freq){

J = I;

FREQ = RFFTmagBuff[i];

FREQ = F_PER_SAMPLE *(float) j;

Done ();

返回1;

_interrupt void adcaIsr ()

RFFTin1Buff[sampleIndex++]= AdcaResultRegs.ADCRESULT0

if (sampleIndex ==(RFFT_SIZE - 1))){

sampleIndex = 0;

flagInputReady = 1;

AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志

PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

根据该代码、FFT 输出数据存储在"RFFToutBuff"中。

请帮帮我

谢谢你。

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

    如果此代码来自示例、则

    RFFT_F32_MAG (HND_RFFT);//计算幅度

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

    感谢您的回复。

    但是、我一直在比较'RFFToutBuff'数据和'RFFTmagBuff'。

    而且、它看起来是不同的。

    是否可以将"mag"数据视为"out"数据的绝对值版本?