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
关于智能电网就介绍完了,您有什么想法可以联系小编。