|
我也来顶一下!
用excel生成的64点采样数据,这样就不存在采样误差的问题,纯粹验证ST的FFT库。
50hz,基波1.65V,直流分量1.65V,这些都是不变的,只有初始相角发生变化,每次变化60度,生成6组样本数据。
初始相角0度时,计算得基波幅度为1482 --- AD数据数据之间参与运算,不是电压值
初始相角240度时,计算得基波幅度为1498
其他角度就不一一赘述了。
上述2个数据差了16个AD值,相对于3.3V的系统来说,就是0.13V了,这个误差是不是大点了??
求模和相角的程序:
void powerMag(long *fftbufout,u16 *mag,u16 *angle)
{
s32 lX,lY;
float X,Y,Mag;
angle = angle;
//direct current
lX= (fftbufout[0]<<16)>>16; /* sine_cosine --> cos */
lY= (fftbufout[0] >> 16); /* sine_cosine --> sin */
X= ((float)lX)/512; // X= 64*((float)lX)/32768;
Y = ((float)lY)/512; // Y = 64*((float)lY)/32768;
Mag = sqrt(X*X+ Y*Y)/NPT; // 先平方和,再开方
mag[0] = (u16)(Mag*65536); //
//50HZ
lX= (fftbufout[1]<<16)>>16; /* sine_cosine --> cos */
lY= (fftbufout[1] >> 16); /* sine_cosine --> sin */
X= ((float)lX)/512; // X= 64*((float)lX)/32768;
Y = ((float)lY)/512; // Y = 64*((float)lY)/32768;
Mag = sqrt(X*X+ Y*Y)/NPT; // 先平方和,再开方
mag[1] = (u16)(Mag*65536); //
if(lX!=0)
{
Mag = atan2f(Y,X);
// if(lY<0)
{
// angle[1] = ((-Mag*180*1000/3.1415926-5625)*2)/1000;
}
// else
{
angle[1] = (Mag*180/3.1415926)+360;
angle[1] = angle[1]%360;
};
};
}
欢迎ST和大家排砖! |
|