|
发表于 2017-7-12 17:15:08
|
显示全部楼层
给个24点的参数。
#define PI 3.1415926
//24点付氏算法,返回long值并放大128倍,g:连续存放24点数据缓冲区首地址
#define FOURIER_R_24L(g) ( (int32)( 66l*( (int32)g[0] + (int32)g[10] - (int32)g[12] - (int32)g[22] )\
+ (( (int32)g[1] + (int32)g[9] - (int32)g[13] - (int32)g[21] )<<7) \
+ 227l*((int32)g[3] + (int32)g[7] - (int32)g[15] - (int32)g[19] )\
+ 247l*((int32)g[4] + (int32)g[6] - (int32)g[16] - (int32)g[18] )\
+ 181l*( (int32)g[2] + (int32)g[8] - (int32)g[14] - (int32)g[20] )\
+ ((int32)g[5]<<8) - ((int32)g[17]<<8) ) )
//24点付氏算法,返回long值并放大128倍,g:连续存放24点数据缓冲区首地址
#define FOURIER_X_24L(g) ( (int32)( 247l*((int32) g[0] - (int32)g[10] - (int32)g[12] + (int32)g[22] ) + 227l*( (int32)g[1]\
- (int32)g[9] - (int32)g[13] + (int32)g[21] ) + 181l*( (int32)g[2] - (int32)g[8] - (int32)g[14] + (int32)g[20] )\
+ (((int32)g[3] - (int32)g[7] - (int32)g[15] + (int32)g[19] )<<7)\
+ 66l*((int32)g[4] - (int32)g[6] - (int32)g[16] + (int32)g[18] )\
+ ((int32)g[23]<<8) - ((int32)g[11]<<8) ) )
//24点半波付氏算法 //@2007.08.27 //ZHOUTING
//返回long值并放大128倍,g:连续存放24点数据缓冲区首地址
#define FOURIER_X_24L_HALF(g) ( (INT32)( 247l*((INT32) g[0] - (INT32)g[10]) \
+ 222l*((INT32)g[1] - (INT32)g[9]) \
+ 181l*((INT32)g[2] - (INT32)g[8]) \
+ (((INT32)g[3] - (INT32)g[7])<<7) \
+ 66l*((INT32)g[4] - (INT32)g[6]) \
- ((INT32)g[11]<<8) ) )
#define FOURIER_R_24L_HALF(g) ( (INT32)( 66l*( (INT32)g[0] + (INT32)g[10] ) \
+ (( (INT32)g[1] + (INT32)g[9] )<<7 ) \
+ 181l*((INT32)g[2] + (INT32)g[8] ) \
+ 222l*((INT32)g[3] + (INT32)g[7] ) \
+ 247l*((INT32)g[4] + (INT32)g[6] ) \
+ ((INT32)g[5]<<8) ) )
计算如下: Aui[24] 放采样点
UiR = FOURIER_R_24L(Aui)>>8; //计算实部
UiX = FOURIER_X_24L(Aui)>>8;//计算虚部
fUi =sqrt_16( UiR*UiR+UiX*UiX);//计算有效值
AC_val_UIC = (int32)((fUi>>2) * ADJ_PARAM.ADJ_Aui_ratio)/10; //乘校准系数计算实际输入电压 |
|