📄 calculate_fft.c
字号:
#include "MATH.h"
#include <stdlib.h>
unsigned int sqrt_16B(unsigned long int Source_Operand);
/*********************************************************************************************************
** 函数名称: Harmonics_1_Calculate
** 功能描述: 基波计算
** 输 入: struct _Virtual_Value_ *UI;
** 输 出: struct _Virtual_Value_ *UI;
** 全局变量: struct FFT_Calculate_Buff;
** 调用模块: FFT.LIB sqrt_16B;
** 作 者: R
** 日 期: 2007年9月26日
********************************************************************************************************/
long Harmonics_1_Calculate(long *ADC_BUFF,unsigned int *Angle)
{
long ShiBu,XuBu;
long temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
unsigned long temp9;
unsigned long temp10;
double temp_Angle;
temp1 = ADC_BUFF[1]+ADC_BUFF[15];
temp1 = temp1 - ADC_BUFF[17];
temp1 = temp1 - ADC_BUFF[31];
temp1 = temp1 * 799;
temp2 = ADC_BUFF[2]+ADC_BUFF[14];
temp2 = temp2 - ADC_BUFF[18];
temp2 = temp2 - ADC_BUFF[30];
temp2 = temp2 * 1567;
temp3 = ADC_BUFF[3]+ADC_BUFF[13];
temp3 = temp3 - ADC_BUFF[19];
temp3 = temp3 - ADC_BUFF[29];
temp3 = temp3 * 2276;
temp4 = ADC_BUFF[4]+ADC_BUFF[12];
temp4 = temp4 - ADC_BUFF[20];
temp4 = temp4 - ADC_BUFF[28];
temp4 = temp4 * 2896;
temp5 = ADC_BUFF[5]+ADC_BUFF[11];
temp5 = temp5 - ADC_BUFF[21];
temp5 = temp5 - ADC_BUFF[27];
temp5 = temp5 * 3406;
temp6 = ADC_BUFF[6]+ADC_BUFF[10];
temp6 = temp6 - ADC_BUFF[22];
temp6 = temp6 - ADC_BUFF[26];
temp6 = temp6 * 3784;
temp7 = ADC_BUFF[7]+ADC_BUFF[9];
temp7 = temp7 - ADC_BUFF[23];
temp7 = temp7 - ADC_BUFF[25];
temp7 = temp7 * 4017;
temp8 = ADC_BUFF[8]-ADC_BUFF[24];
temp8 = temp8 * 4096;
ShiBu= (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8)/65536;
temp1 = ADC_BUFF[1]-ADC_BUFF[15];
temp1 = temp1 - ADC_BUFF[17];
temp1 = temp1 + ADC_BUFF[31];
temp1 = temp1 * 4017;
temp2 = ADC_BUFF[2]-ADC_BUFF[14];
temp2 = temp2 - ADC_BUFF[18];
temp2 = temp2 + ADC_BUFF[30];
temp2 = temp2 * 3784;
temp3 = ADC_BUFF[3]-ADC_BUFF[13];
temp3 = temp3 - ADC_BUFF[19];
temp3 = temp3 + ADC_BUFF[29];
temp3 = temp3 * 3406;
temp4 = ADC_BUFF[4]-ADC_BUFF[12];
temp4 = temp4 - ADC_BUFF[20];
temp4 = temp4 + ADC_BUFF[28];
temp4 = temp4 * 2896;
temp5 = ADC_BUFF[5]-ADC_BUFF[11];
temp5 = temp5 - ADC_BUFF[21];
temp5 = temp5 + ADC_BUFF[27];
temp5 = temp5 * 2276;
temp6 = ADC_BUFF[6]-ADC_BUFF[10];
temp6 = temp6 - ADC_BUFF[22];
temp6 = temp6 + ADC_BUFF[26];
temp6 = temp6 * 1567;
temp7 = ADC_BUFF[7]-ADC_BUFF[9];
temp7 = temp7 - ADC_BUFF[23];
temp7 = temp7 + ADC_BUFF[25];
temp7 = temp7 * 799;
temp8 = ADC_BUFF[0]-ADC_BUFF[16];
temp8 = temp8 * 4096;
XuBu = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8)/65536;
temp9 = (ShiBu*ShiBu);
temp10 = (XuBu*XuBu);
temp1 = abs(XuBu);
temp2 = abs(ShiBu);
temp_Angle = (double)temp1 / temp2;
temp_Angle = atan(temp_Angle); //求出弧度
temp_Angle = temp_Angle/0.01745329; // 弧度/(3.1415926/180)
if((ShiBu >= 0)&&(XuBu >= 0)) //(第一象限),则x与y的相角差为x
{
temp_Angle = (int)(temp_Angle * 10);
}
else if((ShiBu < 0)&&(XuBu >=0)) //(第二象限),则x与y的相角差为180-x
{
temp_Angle = (int)(1800- (temp_Angle * 10));
}
else if((ShiBu < 0)&&(XuBu < 0)) //(第三象限),则x与y的相角差为180+x
{
temp_Angle = (int)(1800 + (temp_Angle * 10));
}
else if((ShiBu >= 0)&&(XuBu < 0)) //(第四象限),则x与y的相角差为360-x
{
temp_Angle = (int)(3600-temp_Angle * 10);
}
*Angle =(int)temp_Angle;
return (sqrt_16B(temp10+temp9));
}
/*********************************************************************************************************
** 函数名称: Harmonics_2_Calculate
** 功能描述: 2次谐波计算
** 输 入: struct _Virtual_Value_ *UI;
** 输 出: struct _Virtual_Value_ *UI;
** 全局变量: struct FFT_Calculate_Buff;
** 调用模块: FFT.LIB sqrt_16B;
** 作 者: R
** 日 期: 2007年9月26日
********************************************************************************************************/
long Harmonics_2_Calculate(long *ADC_BUFF)
{
long ShiBu,XuBu;
long temp1,temp2,temp3,temp4;
unsigned long temp9;
unsigned long temp10;
temp1 = ADC_BUFF[1]+ADC_BUFF[7];
temp1 = temp1 - ADC_BUFF[9];
temp1 = temp1 - ADC_BUFF[15];
temp1 = temp1 + ADC_BUFF[17];
temp1 = temp1 + ADC_BUFF[23];
temp1 = temp1 - ADC_BUFF[25];
temp1 = temp1 - ADC_BUFF[31];
temp1 = temp1 * 1567;
temp2 = ADC_BUFF[2]+ADC_BUFF[6];
temp2 = temp2 - ADC_BUFF[10];
temp2 = temp2 - ADC_BUFF[14];
temp2 = temp2 + ADC_BUFF[18];
temp2 = temp2 + ADC_BUFF[22];
temp2 = temp2 - ADC_BUFF[26];
temp2 = temp2 - ADC_BUFF[30];
temp2 = temp2 * 2896;
temp3 = ADC_BUFF[3]+ADC_BUFF[5];
temp3 = temp3 - ADC_BUFF[11];
temp3 = temp3 - ADC_BUFF[13];
temp3 = temp3 + ADC_BUFF[19];
temp3 = temp3 + ADC_BUFF[21];
temp3 = temp3 - ADC_BUFF[27];
temp3 = temp3 - ADC_BUFF[29];
temp3 = temp3 * 3784;
temp4 = ADC_BUFF[4] - ADC_BUFF[12];
temp4 = temp4 + ADC_BUFF[20];
temp4 = temp4 - ADC_BUFF[28];
temp4 = temp4 * 4096;
ShiBu= (temp1+temp2+temp3+temp4)/65536;
// UI->Re = ShiBu;
temp1 = ADC_BUFF[1]-ADC_BUFF[7];
temp1 = temp1 - ADC_BUFF[9];
temp1 = temp1 + ADC_BUFF[15];
temp1 = temp1 + ADC_BUFF[17];
temp1 = temp1 - ADC_BUFF[23];
temp1 = temp1 - ADC_BUFF[25];
temp1 = temp1 + ADC_BUFF[31];
temp1 = temp1 * 3784;
temp2 = ADC_BUFF[2]-ADC_BUFF[6];
temp2 = temp2 - ADC_BUFF[10];
temp2 = temp2 + ADC_BUFF[14];
temp2 = temp2 + ADC_BUFF[18];
temp2 = temp2 - ADC_BUFF[22];
temp2 = temp2 - ADC_BUFF[26];
temp2 = temp2 + ADC_BUFF[30];
temp2 = temp2 * 2896;
temp3 = ADC_BUFF[3]-ADC_BUFF[5];
temp3 = temp3 - ADC_BUFF[11];
temp3 = temp3 + ADC_BUFF[13];
temp3 = temp3 + ADC_BUFF[19];
temp3 = temp3 - ADC_BUFF[21];
temp3 = temp3 - ADC_BUFF[27];
temp3 = temp3 + ADC_BUFF[29];
temp3 = temp3 * 1567;
temp4 = ADC_BUFF[0] + ADC_BUFF[16];
temp4 = temp4 - ADC_BUFF[8];
temp4 = temp4 - ADC_BUFF[24];
temp4 = temp4 * 4096;
XuBu = (temp1+temp2+temp3+temp4)/65536;
// UI->Im = XuBu;
temp9 = (ShiBu*ShiBu);
temp10 = (XuBu*XuBu);
return (sqrt_16B(temp10+temp9));
}
/*********************************************************************************************************
** 函数名称: Harmonics_3_Calculate
** 功能描述: 3次谐波计算
** 输 入: struct _Virtual_Value_ *UI;
** 输 出: struct _Virtual_Value_ *UI;
** 全局变量: struct FFT_Calculate_Buff;
** 调用模块: FFT.LIB sqrt_16B;
** 作 者: R
** 日 期: 2007年9月26日
********************************************************************************************************/
long Harmonics_3_Calculate(long *ADC_BUFF)
{
long ShiBu,XuBu;
long temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
unsigned long temp9;
unsigned long temp10;
temp1 = ADC_BUFF[5]+ADC_BUFF[11];
temp1 = temp1 - ADC_BUFF[21];
temp1 = temp1 - ADC_BUFF[27];
temp1 = temp1 * 799;
temp2 = ADC_BUFF[22]+ADC_BUFF[26];
temp2 = temp2 - ADC_BUFF[6];
temp2 = temp2 - ADC_BUFF[10];
temp2 = temp2 * 1567;
temp3 = ADC_BUFF[1]+ADC_BUFF[15];
temp3 = temp3 - ADC_BUFF[17];
temp3 = temp3 - ADC_BUFF[31];
temp3 = temp3 * 2276;
temp4 = ADC_BUFF[4]+ADC_BUFF[12];
temp4 = temp4 - ADC_BUFF[20];
temp4 = temp4 - ADC_BUFF[28];
temp4 = temp4 * 2896;
temp5 = ADC_BUFF[23]+ADC_BUFF[25];
temp5 = temp5 - ADC_BUFF[7];
temp5 = temp5 - ADC_BUFF[9];
temp5 = temp5 * 3406;
temp6 = ADC_BUFF[2]+ADC_BUFF[14];
temp6 = temp6 - ADC_BUFF[18];
temp6 = temp6 - ADC_BUFF[30];
temp6 = temp6 * 3784;
temp7 = ADC_BUFF[3]+ADC_BUFF[13];
temp7 = temp7 - ADC_BUFF[19];
temp7 = temp7 - ADC_BUFF[29];
temp7 = temp7 * 4017;
temp8 = ADC_BUFF[24]-ADC_BUFF[8];
temp8 = temp8 * 4096;
ShiBu= (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8)/65536;
// UI->Re = ShiBu;
temp1 = ADC_BUFF[11]-ADC_BUFF[5];
temp1 = temp1 + ADC_BUFF[21];
temp1 = temp1 - ADC_BUFF[27];
temp1 = temp1 * 4017;
temp2 = ADC_BUFF[10]-ADC_BUFF[6];
temp2 = temp2 + ADC_BUFF[22];
temp2 = temp2 - ADC_BUFF[26];
temp2 = temp2 * 3784;
temp3 = ADC_BUFF[1]-ADC_BUFF[15];
temp3 = temp3 - ADC_BUFF[17];
temp3 = temp3 + ADC_BUFF[31];
temp3 = temp3 * 3406;
temp4 = ADC_BUFF[12]-ADC_BUFF[4];
temp4 = temp4 + ADC_BUFF[20];
temp4 = temp4 - ADC_BUFF[28];
temp4 = temp4 * 2896;
temp5 = ADC_BUFF[9]-ADC_BUFF[7];
temp5 = temp5 + ADC_BUFF[23];
temp5 = temp5 - ADC_BUFF[25];
temp5 = temp5 * 2276;
temp6 = ADC_BUFF[2]-ADC_BUFF[14];
temp6 = temp6 - ADC_BUFF[18];
temp6 = temp6 + ADC_BUFF[30];
temp6 = temp6 * 1567;
temp7 = ADC_BUFF[13]-ADC_BUFF[3];
temp7 = temp7 + ADC_BUFF[19];
temp7 = temp7 - ADC_BUFF[29];
temp7 = temp7 * 799;
temp8 = ADC_BUFF[0]-ADC_BUFF[16];
temp8 = temp8 * 4096;
XuBu = (temp1+temp2+temp3+temp4+temp5+temp6+temp7+temp8)/65536;
// UI->Im = XuBu;
temp9 = (ShiBu*ShiBu);
temp10 = (XuBu*XuBu);
return (sqrt_16B(temp10+temp9));
}
/*********************************************************************************************************
** 函数名称: Harmonics_4_Calculate
** 功能描述: 4次谐波计算
** 输 入: struct _Virtual_Value_ *UI;
** 输 出: struct _Virtual_Value_ *UI;
** 全局变量: struct FFT_Calculate_Buff;
** 调用模块: FFT.LIB sqrt_16B;
** 作 者: R
** 日 期: 2007年9月26日
********************************************************************************************************/
long Harmonics_4_Calculate(long *ADC_BUFF)
{
long ShiBu,XuBu;
long temp1,temp2;
unsigned long temp9;
unsigned long temp10;
temp1 = (ADC_BUFF[2] - ADC_BUFF[6] + ADC_BUFF[10] - ADC_BUFF[14] + ADC_BUFF[18]- ADC_BUFF[22] + ADC_BUFF[26] - ADC_BUFF[30])*4096;
temp2 = (ADC_BUFF[1] + ADC_BUFF[3] - ADC_BUFF[5] - ADC_BUFF[7] + ADC_BUFF[9] + ADC_BUFF[11]-
ADC_BUFF[13] - ADC_BUFF[15] + ADC_BUFF[17] + ADC_BUFF[19]- ADC_BUFF[21] - ADC_BUFF[23]+
ADC_BUFF[25] + ADC_BUFF[27] - ADC_BUFF[29] - ADC_BUFF[31])*2896;
ShiBu= (temp1+temp2)/65536;
// UI->Re = ShiBu;
temp1 = (ADC_BUFF[0] - ADC_BUFF[4] + ADC_BUFF[8] - ADC_BUFF[12] + ADC_BUFF[16]- ADC_BUFF[20] + ADC_BUFF[24] - ADC_BUFF[28])*4096;
temp2 = (ADC_BUFF[1] - ADC_BUFF[3] - ADC_BUFF[5] + ADC_BUFF[7] + ADC_BUFF[9] - ADC_BUFF[11]-
ADC_BUFF[13] + ADC_BUFF[15] + ADC_BUFF[17] - ADC_BUFF[19]- ADC_BUFF[21] + ADC_BUFF[23]+
ADC_BUFF[25] - ADC_BUFF[27] - ADC_BUFF[29] + ADC_BUFF[31])*2896;
XuBu = (temp1+temp2)/65536;
// UI->Im = XuBu;
temp9 = (ShiBu*ShiBu);
temp10 = (XuBu*XuBu);
return (sqrt_16B(temp10+temp9));
}
/*********************************************************************************************************
** 函数名称: Harmonics_5_Calculate
** 功能描述: 5次谐波计算
** 输 入: struct _Virtual_Value_ *UI;
** 输 出: struct _Virtual_Value_ *UI;
** 全局变量: struct FFT_Calculate_Buff;
** 调用模块: FFT.LIB sqrt_16B;
** 作 者: R
** 日 期: 2007年9月26日
********************************************************************************************************/
long Harmonics_5_Calculate(long *ADC_BUFF)
{
long ShiBu,XuBu;
long temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
unsigned long temp9;
unsigned long temp10;
temp1 = ADC_BUFF[3]+ADC_BUFF[13];
temp1 = temp1 - ADC_BUFF[19];
temp1 = temp1 - ADC_BUFF[29];
temp1 = temp1 * 799;
temp2 = ADC_BUFF[22]+ADC_BUFF[26];
temp2 = temp2 - ADC_BUFF[6];
temp2 = temp2 - ADC_BUFF[10];
temp2 = temp2 * 1567;
temp3 = ADC_BUFF[7]+ADC_BUFF[9];
temp3 = temp3 - ADC_BUFF[23];
temp3 = temp3 - ADC_BUFF[25];
temp3 = temp3 * 2276;
temp4 = ADC_BUFF[20]+ADC_BUFF[28];
temp4 = temp4 - ADC_BUFF[4];
temp4 = temp4 - ADC_BUFF[12];
temp4 = temp4 * 2896;
temp5 = ADC_BUFF[1]+ADC_BUFF[15];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -