float fft_buf[128]; // 保存CS5451A采集的128点数据

float dataR[128]; // 保存抽出来的64点数据

void DataChange(float Ta,int Points)

图4:软件主流程图。

{

int i,j,k;

int index; //offset;

float p=1.0;//初始化p

float c=1.0;

float yE=0;

float m;

int T0=25; //To单位为10us.

for(i=0;i{

//找到所需的三个点的第一个点。 整除的状况要考虑。

index=(floor((i*Ta*100)/(Points*T0)));

//若所求的点为已知点则跳过。

if((i*Ta*100)/(Points*T0)-floor((i*Ta*100)/(Points*T0))==0)

{

dataR[i]=fft_buf[index];

continue;

}

//用lagrange计算出所求的点。

for(j=0;j《3;j++)

{

p=1;

c=1;

for( k=0;k《3;k++)

{

if(k==j)continue;//判断是否为同一个数

m=index+k;

m=m*T0*Points;

p=p*(Ta*i*100-m);

p=p/Points;

c=c*((index+j)*T0-(index+k)*T0); }

//求和

yE=yE+p*fft_buf[index+j]/c;

}

dataR[i]=yE;

yE=0;

}

}

本方案中数据运算量很大,对TMS320F2801的要求很高,所以FFT计算和电量计算程序用汇编语言编写,程序编写这里不作介绍。

责任编辑:gt

关于智能电网就介绍完了,您有什么想法可以联系小编。