移植
首先进入TI官网下载软件支持包,我们需要的FFT官方包就在这里边。
TMS320F28335 data sheet, product information and support | TI.com
下载完成后,解压。进入以下目录
C2000Ware_4_01_00_00_Software__all\C2000Ware_4_01_00_00\libraries\dsp\FPU\c28
里面只需要Include、source文件夹的内容,lib文件夹不需要,新版本库一律被集成到了rts2800 fpu32.ib这个库里面了。
Include:复制到你的工程中备用,将里面fpu64文件夹删除,fpu32文件夹里的除了f2837xd_filter文件夹全整理出来到include文件夹中。整理完如下:
source:同样复制到你的工程目录即可,删除里面的C28x_FPU_LIB_DEPRECATED文件夹和fpu64文件夹,并把fpu32文件夹内容整理出来。整理完如下
并且把fft文件夹里面带有TMU0后缀的汇编源码全部删除了
此时的你的CCS工程应该有如下文件树:
打开工程设置将头文件路径添加进去
因为只用到实傅里叶变化和实时计算旋转因子表,可以将fft文件夹中的cfft和table都删除了,此时fft文件夹应只有有如下源码文件
到这一步,官方的FFT源码移植完成了。
测试
测试可以直接使用官方的测试数据和代码进行测试,在下载软件包C2000Ware_4_01_00_00\libraries\dsp\FPU\c28\examples\fft\rfft_adc_f32 目录中可以找到
其中的dsp_rfft_adc.c 、golden.c、input.c 为测试FFT计算程序、正确数据、输入数据。
大致流程为输入的数据经过FFT计算后与正确数据进行比对。
在这里我提供一套我自己编写的测试程序。
以下是我编写的FFT相关参数,12位ADC、1000Hz采样频率、1024采样点,输入信号如下图:
RFFT.h
/** RFFT.h** Created on: 2022年11月2日* Author: Administrator*/#ifndef APP_RFFT_H_
#define APP_RFFT_H_#include "DSP28x_Project.h"
#include <stdio.h>
#include <string.h>#define RFFT_Analyse_MaxNum 20typedef struct {Uint16 Wave_Num;float DC_Amp;float Amp[RFFT_Analyse_MaxNum];float freq[RFFT_Analyse_MaxNum];float Phase[RFFT_Analyse_MaxNum];
} RFFT_Analyse_Struct;void RFFT_ADC_Init();
void RFFT_ADC_Caculate();
float RFFT_Fractional_Frequency(float ratio);
void RFFT_Analyse(float *src);
float RFFT_Phase_Caculate(Uint16 index,float ratio);Uint16 RFFT_Peak_Find(float *src ,Uint16 len,Uint16 *index); //幅度谱及其长度#endif /* APP_RFFT_H_ */
RFFT.c
/** RFFT.c** Created on: 2022年11月2日* Author: Administrator*/#include "dsp.h"
#include "fpu_rfft.h"
#include "RFFT.h"
#include <math.h>
#include "complex.h"#define Fs 1000
#define FFT_STAGES (10U) //迭代次数 =Log2(FFT_SIZE)
#define FFT_SIZE (1 << FFT_STAGES) //FFT计算点数RFFT_F32_STRUCT rfft;
RFFT_ADC_F32_STRUCT rfft_adc;
RFFT_F32_STRUCT_Handle hnd_rfft = &rfft;
RFFT_ADC_F32_STRUCT_Handle hnd_rfft_adc = &rfft_adc;
RFFT_Analyse_Struct rfft_analyse;//#pragma DATA_SECTION(FFT_input, "FFT_buffer");
#pragma DATA_SECTION(FFT_output, "FFT_buffer1");
#pragma DATA_SECTION(FFT_twiddleFactors, "FFT_buffer2");
#pragma DATA_SECTION(FFT_magnitude_phase, "FFT_buffer3");//uint16_t FFT_input[FFT_SIZE];
extern uint16_t FFT_input[2U*FFT_SIZE];
float FFT_twiddleFactors[FFT_SIZE];
float FFT_output[FFT_SIZE];
float FFT_magnitude_phase[(FFT_SIZE >> 1) + 1];#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))float myabs;void RFFT_ADC_Init()
{RFFT_f32_setInputPtr(hnd_rfft, (float *)FFT_input);RFFT_f32_setOutputPtr(hnd_rfft, FFT_output);RFFT_f32_setStages(hnd_rfft, FFT_STAGES);RFFT_f32_setFFTSize(hnd_rfft, FFT_SIZE);RFFT_f32_setMagnitudePtr(hnd_rfft, FFT_magnitude_phase);RFFT_f32_setPhasePtr(hnd_rfft, FFT_magnitude_phase);RFFT_f32_setTwiddlesPtr(hnd_rfft, FFT_twiddleFactors);RFFT_f32_sincostable(hnd_rfft);RFFT_ADC_f32_setTailPtr(hnd_rfft_adc, &(hnd_rfft->OutBuf));RFFT_ADC_f32_setInBufPtr(hnd_rfft_adc, FFT_input);
}void RFFT_ADC_Caculate()
{float* temp;RFFT_adc_f32(hnd_rfft_adc);RFFT_f32_mag(hnd_rfft);temp=RFFT_f32_getMagnitudePtr(hnd_rfft);RFFT_Analyse(temp);
}float RFFT_Phase_Caculate(Uint16 index,float ratio)
{complex p;complex FFT_value;p=(1-cexpf((2*M_PI*ratio/FFT_SIZE)*I));p=p/ (1-cexpf((2*M_PI*ratio)*I));FFT_value=FFT_output[index]+FFT_output[FFT_SIZE-index]*I;p=FFT_value*p;return (cargf(p)+M_PI/2);
}Uint16 RFFT_Peak_Find(float *src ,Uint16 len,Uint16 *index) //幅度谱及其长度
{Uint16 num=0;Uint16 i;float max_data=0;float data1=0;float data2=0;float data3=0;for (i=1;i<len;i++){if(*(src+i)>max_data)max_data=*(src+i);}for (i=1;i<len-1;i++){data1=*(src+i-1);data2=*(src+i);data3=*(src+i+1);if((data1<data2) && (data2>data3) && (data2 >max_data*0.1)){if(num<20){*(index+num)=i;num++;}elsereturn num;}}return num;
}float RFFT_Fractional_Frequency(float ratio){Uint16 niter;float K,f,a,b,y,yp;f=0;K=(M_PI/FFT_SIZE) * sin(M_PI/FFT_SIZE);for(niter=0;niter<20;niter++){a = sin(M_PI*f/FFT_SIZE);b = sin(M_PI*(f-1)/FFT_SIZE);y = ratio - a/b;yp = K / (b*b);f = MAX(-0.5, MIN(f - y/yp, 0.5));}return f;}void RFFT_Analyse(float *src)
{Uint16 i;float ratio;float FFT_Value;Uint16 peak_index[RFFT_Analyse_MaxNum];memset(peak_index, 0U, RFFT_Analyse_MaxNum*sizeof(Uint16));memset(rfft_analyse.freq, 0U, RFFT_Analyse_MaxNum*sizeof(float));memset(rfft_analyse.Amp, 0U, RFFT_Analyse_MaxNum*sizeof(float));memset(rfft_analyse.Phase, 0U, RFFT_Analyse_MaxNum*sizeof(float));rfft_analyse.Wave_Num=RFFT_Peak_Find(src,FFT_SIZE/2,peak_index);for(i=0;i<rfft_analyse.Wave_Num;i++){FFT_Value=*(src+peak_index[i]);ratio = (*(src+peak_index[i]+1))/FFT_Value;if ((*(src+peak_index[i]+1)) > (*(src+peak_index[i]-1)))ratio = -ratio;ratio = RFFT_Fractional_Frequency(ratio);rfft_analyse.freq[i] = (*(peak_index+i)-1+ratio)*Fs/FFT_SIZE;rfft_analyse.Amp[i] = 2 *FFT_Value * fabsf(sin(M_PI*ratio/FFT_SIZE)/sin(M_PI*ratio));rfft_analyse.Phase[i] = RFFT_Phase_Caculate(peak_index[i],ratio);}for(i=0;i<rfft_analyse.Wave_Num;i++){rfft_analyse.Phase[i]=rfft_analyse.Phase[i]-rfft_analyse.Phase[0];rfft_analyse.Phase[i]=rfft_analyse.Phase[i]*180/M_PI;}rfft_analyse.DC_Amp=*src/FFT_SIZE;
}
input.c
//#############################################################################
//! \file input.c
//! \brief Input Vector (512)
//! \author Vishal Coelho
//! \date 22-Aug-2016
//!
//
// Group: C2000
// Target Family: $DEVICE$
//
//#############################################################################
//
//
// $Copyright: Copyright (C) 2020 Texas Instruments Incorporated -
// http://www.ti.com/ ALL RIGHTS RESERVED $
//##############################################################################include <stdint.h>#pragma DATA_SECTION(FFT_input, "FFT_buffer3")// Matrix is 2 times its required sizeas it will be used to store
// 1024 floats at a later point
uint16_t FFT_input[2048] = {3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,2.258888e+03, 2.628179e+03, 2.054902e+03, 2.438736e+03,1.750881e+03, 1.040492e+03, 3.077914e+03, 2.589702e+03,1.876330e+03, 1.952391e+03, 1.479973e+03, 1.809179e+03,1.275987e+03, 1.776151e+03, 1.269484e+03, 7.874067e+02,3.077914e+03, 2.842787e+03, 2.357726e+03, 2.614976e+03,
}; // End of File
cmd文件:
/*
// TI File $Revision: /main/3 $
// Checkin $Date: July 9, 2008 14:12:45 $
//###########################################################################
//
// FILE: 28335_RAM_lnk.cmd
//
// TITLE: Linker Command File For IQmath examples that run out of RAM
//
// NOTE; The example project uses memory protected by the
// Code Security Module (CSM). Make sure the CSM is
// unlocked before you load the project. One quick way
// to do this on an erased device is to open a memory
// window to the CSM password locations. If these locations
// read back 0xFFFF (or non-zero), then the CSM is unlocked:
//
// Device Password locations
// 28335: 0x33FFF8 - 0x33FFFF
//
//###########################################################################
//
//
// $Copyright: Copyright (C) 2014-2022 Texas Instruments Incorporated -
// http://www.ti.com/ ALL RIGHTS RESERVED $
//###########################################################################
*/MEMORY
{
PAGE 0 :BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */RAML0 : origin = 0x008000, length = 0x000800RAML1L2 : origin = 0x008800, length = 0x004800ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ADC_CAL : origin = 0x380080, length = 0x000009IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */RESET : origin = 0x3FFFC0, length = 0x000002VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */PAGE 1 :BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */RAML3 : origin = 0x00D000, length = 0x001000RAML4 : origin = 0x00E000, length = 0x001000RAML5 : origin = 0x00F000, length = 0x001000ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */}SECTIONS
{FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD/* Setup for "boot to SARAM" mode:The codestart section (found in DSP28_CodeStartBranch.asm)re-directs execution to the start of user code. */codestart : > BEGIN, PAGE = 0#ifdef __TI_COMPILER_VERSION__#if __TI_COMPILER_VERSION__ >= 15009000.TI.ramfunc : {} LOAD = RAML0,RUN = RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),LOAD_SIZE(_RamfuncsLoadSize),PAGE = 0#elseramfuncs : LOAD = RAML0,RUN = RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),LOAD_SIZE(_RamfuncsLoadSize),PAGE = 0#endif
#endif.text : {*(.text)}>> RAML1L2|RAML0 PAGE = 0.cinit : > RAML0, PAGE = 0.pinit : > RAML0, PAGE = 0.switch : > RAML0, PAGE = 0.stack : > RAMM1, PAGE = 1.ebss : > RAML3, PAGE = 1.econst : > RAML3, PAGE = 1.sysmem : > RAML3, PAGE = 1.esysmem : > RAML3, PAGE = 1.sysmem : > RAML3, PAGE = 1FFT_buffer1 : > RAML4, PAGE = 1FFT_buffer2 : > RAML4, PAGE = 1FFT_buffer3 : > RAML5, PAGE = 1FFT_buffer4 : > RAML5, PAGE = 1.cio : > RAML3, PAGE = 1ZONE7DATA : > ZONE7B, PAGE = 1DMARAML4 : > RAML4, PAGE = 1DMARAML5 : > RAML5, PAGE = 1.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples *//* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD}/*
//===========================================================================
// End of file.
//===========================================================================
*/
main中调用
RFFT_ADC_Init();
RFFT_ADC_Caculate();
这两个函数即可完成测试。
打开调试窗口
rfft_analyse 加入调试窗口,点击运行即可看到计算结果
可以看到成功把input.c采集到的数据通过FFT将各次不同频率的分量提取出来了,结果和我们上面输入信号很相近。(input.c输入信号数据可以通过matlab借助dsp库编写生成数据,可参考C2000Ware_4_01_00_00\libraries\dsp\FPU\c28\reference\MATLAB中的FPU_DSP_runIFFT.m进行编写)
下图是相关程序的运行时间,1024点旋转因子表生成要650us(采样点数固定,该旋转因子表只需要生成一次),FFT计算大概要200us。