2019-12-27 18:38发布
zhang0352505 发表于 2017-7-12 11:49 是吗?采集64个点,均方根法可以做到1%?为啥我就做到2%?
splfsp 发表于 2017-7-12 12:06 采集到AD值精度能保证吗? 我之前好像是用标准源校正过的
again 发表于 2017-7-12 08:55 类似,照搬套公式没问题的!
最多设置5个标签!
采集到AD值精度能保证吗? 我之前好像是用标准源校正过的
不校准,直接上的。。。校准太麻烦。。
#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; //乘校准系数计算实际输入电压
你这程序是哪个窗函数的比值校正?我如果移植到单片机是不是将fft这个函数实现就行?
一周热门 更多>