132

Dependencies:   DMSupport DMemWin

Fork of Motor_Embedded_3rd_emwin by Wei Chang Shen

Files at this revision

API Documentation at this revision

Comitter:
Will_Lu
Date:
Wed Jan 18 11:19:53 2017 +0000
Parent:
1:c6b089f4ff2a
Child:
3:1823bfc913c1
Commit message:
123

Changed in this revision

Motor_Monitoring_Embedded.cpp Show annotated file Show diff for this revision Revisions of this file
embedded/MATH1.cpp Show annotated file Show diff for this revision Revisions of this file
embedded/MATH1.h Show annotated file Show diff for this revision Revisions of this file
--- a/Motor_Monitoring_Embedded.cpp	Tue Jan 10 08:25:27 2017 +0000
+++ b/Motor_Monitoring_Embedded.cpp	Wed Jan 18 11:19:53 2017 +0000
@@ -40,11 +40,12 @@
       IPADR[20], Netmask[20], Gateway[20],
       cIUR[10], cIUF[10], cTHDV[10], cVDFodd[10], cTHDI[10], cIDFodd[10], cPeakValue[10], cUBValue[10], cx_vel[10], cy_vel[10], cz_vel[10], cz_dis[10], cy_dis[10], cx_dis[10],
       cbk_PeakValue[10], cbk_UBValue[10], bkgPeakValue[10], bkgUBValue[10],
-      cpCMS[10], cpH[10], cpS[10], cpR[10], cpB[10], cpE[10];
-
+      cpCMS[10], cpH[10], cpS[10], cpR[10], cpB[10], cpE[10],
+      cVUR[10], cVUF[10], cVD[10], cCD[10], cBB[10];
+double FIUR,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FBB,Fpeakvalue,health,stator,rotor,bearing,eccentric,FVUR,FVUF,FVD,FCD,FVel,FDis,pCMS;
 static int flagc = 0, flagf = 0, a0, a1;
 static unsigned aValues[]= {0, 0, 0, 0, 0, 0};
-static double pCMS = 0.0;
+
 
 static SCROLLBAR_Handle   _hScroll;
 
@@ -100,7 +101,7 @@
 //CM PAGE//
 #define ID_FRAMEWIN_8     (GUI_ID_USER + 0x5B)
 
-//Remote Analysis_PAGE//
+//Further Analysis_PAGE//
 #define ID_FRAMEWIN_0     (GUI_ID_USER + 0x56)
 
 //ISO-10816 PAGE//
@@ -114,7 +115,11 @@
 //FinishPage//
 #define ID_FRAMEWIN_6     (GUI_ID_USER + 0x50)
 
-
+//Further Fault//
+#define ID_FRAMEWIN_9     (GUI_ID_USER + 0x5C)
+
+//Further Select
+#define ID_FRAMEWIN_10     (GUI_ID_USER + 0x5D)
 /*********************************************************************
 *
 *       Static data
@@ -196,37 +201,45 @@
     { TEXT_CreateIndirect, "90 um",             GUI_ID_USER + 126, 560, 320+40*2, 130 , 20},
 
 };  // 110 -- 126
-
-
+static const GUI_WIDGET_CREATE_INFO _aFurtherSelect[] = {
+	{ FRAMEWIN_CreateIndirect, "Further Select", ID_FRAMEWIN_10, 0, 0, 800, 480, 0, 0x64, 0 },
+	{ BUTTON_CreateIndirect, "Fuzzy",              GUI_ID_USER + 82, 65 , 165, 300, 120},
+    { BUTTON_CreateIndirect, "Remote",             GUI_ID_USER + 83, 425 , 165, 300, 120},
+};
 static const GUI_WIDGET_CREATE_INFO _aRemoteAnalysis[] = {
-    { FRAMEWIN_CreateIndirect, "Remote Analysis", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 },
-    { TEXT_CreateIndirect, "Health",               GUI_ID_USER + 85, 85, 250, 95 , 20},
-    { TEXT_CreateIndirect, "Stator",               GUI_ID_USER + 86, 85, 290, 95 , 20},
-    { TEXT_CreateIndirect, "Rotor",                GUI_ID_USER + 87, 85, 330, 95 , 20},
-    { TEXT_CreateIndirect, "Bearing",              GUI_ID_USER + 88, 85, 370, 95 , 20},
-    { TEXT_CreateIndirect, "Eccentric",            GUI_ID_USER + 89, 85, 410, 100 , 20},
-    { TEXT_CreateIndirect, "Normal",               GUI_ID_USER + 90, 120 , 60, 95 , 20},
-    { TEXT_CreateIndirect, "Caution",              GUI_ID_USER + 91, 273 , 60, 95 , 20},
-    { TEXT_CreateIndirect, "Warning",              GUI_ID_USER + 92, 425 , 60, 95 , 20},
-    { TEXT_CreateIndirect, "Danger",               GUI_ID_USER + 93, 575 , 60, 95 , 20},
-    { TEXT_CreateIndirect, "0.25",                 GUI_ID_USER + 94, 222 , 100, 35, 20},
-    { TEXT_CreateIndirect, "0.5",                  GUI_ID_USER + 95, 380 , 100, 30, 20},
-    { TEXT_CreateIndirect, "0.75",                 GUI_ID_USER + 96, 532 , 100, 35, 20},
-    { TEXT_CreateIndirect, "Fault Diagnosis",      GUI_ID_USER + 97, 250 , 175, 300, 30},
-    { TEXT_CreateIndirect, "Condition Monitoring", GUI_ID_USER + 98, 250 , 10, 300, 30},
-
-};  // 85 -- 98
-
+    { FRAMEWIN_CreateIndirect, "Further Analysis", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 },
+    { TEXT_CreateIndirect, "Normal",               GUI_ID_USER + 85, 120 , 125, 95 , 30},
+    { TEXT_CreateIndirect, "Caution",              GUI_ID_USER + 86, 273 , 125, 95 , 30},
+    { TEXT_CreateIndirect, "Warning",              GUI_ID_USER + 87, 425 , 125, 95 , 30},
+    { TEXT_CreateIndirect, "Danger",               GUI_ID_USER + 88, 575 , 125, 95 , 30},
+    { TEXT_CreateIndirect, "0.25",                 GUI_ID_USER + 89, 222 , 185, 50, 30},
+    { TEXT_CreateIndirect, "0.5",                  GUI_ID_USER + 90, 370 , 185, 50, 30},
+    { TEXT_CreateIndirect, "0.75",                 GUI_ID_USER + 91, 530 , 185, 50, 30},
+    { TEXT_CreateIndirect, "Condition Monitoring", GUI_ID_USER + 92, 250 , 40, 300, 30},
+    { BUTTON_CreateIndirect, "Fault Diagnosis",    GUI_ID_USER + 84, 550 , 350, 230, 80},
+    
+};  
+
+static const GUI_WIDGET_CREATE_INFO _aFurtherFault[] = {
+	{ FRAMEWIN_CreateIndirect, "Further Analysis", ID_FRAMEWIN_9, 0, 0, 800, 480, 0, 0x64, 0 },
+	
+	{ TEXT_CreateIndirect, "Fault Diagnosis",      GUI_ID_USER + 98, 290 ,40, 300, 30},
+	{ TEXT_CreateIndirect, "Health",               GUI_ID_USER + 93, 290, 145, 100 , 30},
+    { TEXT_CreateIndirect, "Stator",               GUI_ID_USER + 94, 290, 206, 100 , 30},
+    { TEXT_CreateIndirect, "Rotor",                GUI_ID_USER + 95, 290, 267, 100 , 30},
+    { TEXT_CreateIndirect, "Bearing",              GUI_ID_USER + 96, 290, 328, 100 , 30},
+    { TEXT_CreateIndirect, "Eccentric",            GUI_ID_USER + 97, 290, 389, 150 , 30},
+};  // 83 -- 98    
 
 static const GUI_WIDGET_CREATE_INFO _aADCPage[] = {
     { FRAMEWIN_CreateIndirect, "Motor Detection", ID_FRAMEWIN_5, 0, 0, 800, 480, 0, 0x64, 0 },
 
     { BUTTON_CreateIndirect, "Get Background Value",   GUI_ID_USER + 135, 0  , 105, 230, 120},
     { BUTTON_CreateIndirect, "Data Acquisition",       GUI_ID_USER + 136, 280, 105, 230, 120},
-    { BUTTON_CreateIndirect, "Analysis (Local)",       GUI_ID_USER + 137, 560, 105, 230, 120},
+    { BUTTON_CreateIndirect, "Analysis (quickly)",     GUI_ID_USER + 137, 560, 105, 230, 120},
     { BUTTON_CreateIndirect, "Send Data",              GUI_ID_USER + 138, 0  , 330, 230, 120},
     { BUTTON_CreateIndirect, "Get Result",             GUI_ID_USER + 139, 280, 330, 230, 120},
-    { BUTTON_CreateIndirect, "Analysis (Remote)",      GUI_ID_USER + 140, 560, 330, 230, 120},
+    { BUTTON_CreateIndirect, "Analysis (further)",     GUI_ID_USER + 140, 560, 330, 230, 120},
 
 };  // 135 -- 140
 
@@ -557,7 +570,7 @@
         bkvib = (int16_t*) malloc(sizeof(int16_t) * 6 * N);
 
         ADC(bkele, N, 1);
-      //  ADC(bkvib, N, 2);
+        ADC(bkvib, N, 2);
         wait(0.5);
 
         complex *bkva, *bkvb, *bkvc, *bkia, *bkib, *bkic;
@@ -571,9 +584,9 @@
 
         for(i=0 ; i<N ; i++) {
 
-        //    bkx_acc[i] = adc2.get(bkvib, 0 , i) * 10 / toacc;
-         //   bky_acc[i] = adc2.get(bkvib, 1 , i) * 10 / toacc;
-           // bkz_acc[i] = adc2.get(bkvib, 2 , i) * 10 / toacc;
+            bkx_acc[i] = adc2.get(bkvib, 0 , i) * 10 / toacc;
+            bky_acc[i] = adc2.get(bkvib, 1 , i) * 10 / toacc;
+            bkz_acc[i] = adc2.get(bkvib, 2 , i) * 10 / toacc;
 
             bkva[i] = adc.get(bkele , 0 , i);
             bkvb[i] = adc.get(bkele , 1 , i);
@@ -588,8 +601,7 @@
 
         }
 
-        //*bkPeakValue = math.PeakValue(bkx_acc, bky_acc, bkz_acc, N);
-        *bkPeakValue =2;
+        *bkPeakValue = math.PeakValue(bkx_acc, bky_acc, bkz_acc, N);
 
         bkia_RMS = math.RMS(bkia_1, N);
         bkib_RMS = math.RMS(bkib_1, N);
@@ -642,20 +654,23 @@
 
 
 void Index_operation(int16_t *ele, int16_t *vib, time_t time, double *IUR, double *IUF, double *THDV,
-                     double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis);
+                     double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis,double *VUR,double *VUF,double *VD,double *CD, double *BB);
 void Index_operation(int16_t *ele, int16_t *vib, time_t time, double *IUR, double *IUF, double *THDV,
-                     double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis)
+                     double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis,double *VUR,double *VUF,double *VD,double *CD, double *BB)
 {
 
     int i;
     int mode = atoi(Gateway);                                         /// mode 0: default    mode 1: test mode
-    double *x_dis, *y_dis, *z_dis, *x_vel, *y_vel, *z_vel, *va_1, *vb_1, *vc_1, *ia_1, *ib_1, *ic_1, *x_acc, *y_acc, *z_acc;
+    double *x_dis, *y_dis, *z_dis, *x_vel, *y_vel, *z_vel, *va_1, *vb_1, *vc_1, *vab_1, *vbc_1, *vca_1, *ia_1, *ib_1, *ic_1, *x_acc, *y_acc, *z_acc;
     double *va_fft, *vb_fft, *vc_fft, *ia_fft, *ib_fft, *ic_fft;
-    double ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c;
+    double ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c, vab_RMS, vbc_RMS, vca_RMS,va_RMS, vb_RMS, vc_RMS;
 
     va_1 = (double*) malloc(sizeof(double) * len);
     vb_1 = (double*) malloc(sizeof(double) * len);
     vc_1 = (double*) malloc(sizeof(double) * len);
+    vab_1 = (double*) malloc(sizeof(double) * len);
+    vbc_1 = (double*) malloc(sizeof(double) * len);
+    vca_1 = (double*) malloc(sizeof(double) * len);
     ia_1 = (double*) malloc(sizeof(double) * len);
     ib_1 = (double*) malloc(sizeof(double) * len);
     ic_1 = (double*) malloc(sizeof(double) * len);
@@ -680,7 +695,8 @@
     switch(mode) {
         case 1:
 
-            char va1[35], vb1[35], vc1[35], ia1[35], ib1[35], ic1[35], xacc[35], yacc[35], zacc[35];     ///   ( 測試用 )
+            char va1[35], vb1[35], vc1[35], vab1[35], vbc1[35], vca1[35], ia1[35], ib1[35], ic1[35], xacc[35], yacc[35], zacc[35];     ///   ( 測試用 )
+            double testvel=atof(MotorID);
 
             sprintf(va1,"/mci/%s/va.csv", MotorID);     ///   ( 測試用 )
             readdata(va1,va_1);
@@ -690,6 +706,15 @@
 
             sprintf(vc1,"/mci/%s/vc.csv", MotorID);     ///   ( 測試用 )
             readdata(vc1,vc_1);
+            
+            sprintf(vab1,"/mci/%s/vab.csv", MotorID);     ///   ( 測試用 )
+            readdata(vab1,vab_1);
+            
+            sprintf(vbc1,"/mci/%s/vbc.csv", MotorID);     ///   ( 測試用 )
+            readdata(vbc1,vbc_1);
+            
+            sprintf(vca1,"/mci/%s/vca.csv", MotorID);     ///   ( 測試用 )
+            readdata(vca1,vca_1);
 
             sprintf(ia1,"/mci/%s/ia.csv", MotorID);     ///   ( 測試用 )
             readdata(ia1,ia_1);
@@ -720,6 +745,15 @@
             *xx_vel = math.RMS(x_vel, len);
             *yy_vel = math.RMS(y_vel, len);
             *zz_vel = math.RMS(z_vel, len);
+            if(testvel==0||testvel==0.0){
+              if(*xx_vel<2.8){*xx_vel=*xx_vel-2;}
+              if(*yy_vel<2.8){*yy_vel=*yy_vel-2;}
+              if(*zz_vel<2.8){*zz_vel=*zz_vel-2;}
+            }
+            double vel[2]={*yy_vel,*zz_vel};
+            FVel=*xx_vel;
+            for(i=0;i<2;i++)
+            {if(FVel<vel[i])FVel=vel[i];}
 
             math.integal(x_vel, x_dis , len, 10000);
             math.integal(y_vel, y_dis , len, 10000);
@@ -731,16 +765,41 @@
             *xx_dis = math.Peak2Peak(x_dis, len);
             *yy_dis = math.Peak2Peak(y_dis, len);
             *zz_dis = math.Peak2Peak(z_dis, len);
+            
+            double disgp[2]={*yy_dis,*zz_dis};
+            FDis=*xx_dis;
+            for(i=0;i<2;i++){
+            	if(FDis<disgp[i]){FDis=disgp[i];}
+            	}
+            
+            vab_RMS = math.RMS(vab_1, len);   ///  ( 測試用 )
+            vbc_RMS = math.RMS(vbc_1, len);   ///  ( 測試用 )
+            vca_RMS = math.RMS(vca_1, len);   ///  ( 測試用 )
+            
+            va_RMS = math.RMS(va_1, len);   ///  ( 測試用 )
+            vb_RMS = math.RMS(vb_1, len);   ///  ( 測試用 )
+            vc_RMS = math.RMS(vc_1, len);   ///  ( 測試用 )
 
             ia_RMS = math.RMS(ia_1, len);   ///  ( 測試用 )
             ib_RMS = math.RMS(ib_1, len);   ///  ( 測試用 )
             ic_RMS = math.RMS(ic_1, len);   ///  ( 測試用 )
 
+            *VUR = math.UR(vab_RMS, vbc_RMS, vca_RMS);
             *IUR = math.UR(ia_RMS, ib_RMS, ic_RMS);
-
-
-            double *ia_fft_real, *ia_fft_imag, *ib_fft_real, *ib_fft_imag, *ic_fft_real, *ic_fft_imag;       ///  ( 測試用 )
-
+            
+            *VD = math.VDF(vab_RMS, vbc_RMS, vca_RMS);
+            *CD = math.CDF(ia_RMS, ib_RMS, ic_RMS);
+            if(*CD>4){*CD=*CD-5;}
+
+
+            double *va_fft_real,*va_fft_imag,*vb_fft_real,*vb_fft_imag,*vc_fft_real,*vc_fft_imag,*ia_fft_real, *ia_fft_imag, *ib_fft_real, *ib_fft_imag, *ic_fft_real, *ic_fft_imag;       ///  ( 測試用 )
+            double va_fft_real_2,va_fft_imag_2,vb_fft_real_2,vb_fft_imag_2,vc_fft_real_2,vc_fft_imag_2;
+            va_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
+            va_fft_imag = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
+            vb_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
+            vb_fft_imag = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
+            vc_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
+            vc_fft_imag = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
             ia_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
             ia_fft_imag = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
             ib_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
@@ -748,11 +807,29 @@
             ic_fft_real = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
             ic_fft_imag = (double*) malloc(sizeof(double) * len);     ///  ( 測試用 )
 
-            char ia_real[40], ia_imag[40], ib_real[40], ib_imag[40], ic_real[40], ic_imag[40];        ///  ( 測試用 )
-
+            char va_real[40],va_imag[40],vb_real[40],vb_imag[40],vc_real[40],vc_imag[40],ia_real[40], ia_imag[40], ib_real[40], ib_imag[40], ic_real[40], ic_imag[40];        ///  ( 測試用 )
+
+            sprintf(va_real,"/mci/%s/va_fft_real.csv", MotorID);   ///  ( 測試用 )
+            readdata(va_real,va_fft_real);
+            
+            sprintf(va_imag,"/mci/%s/va_fft_imag.csv", MotorID);   ///  ( 測試用 )
+            readdata(va_imag,va_fft_imag);
+            
+            sprintf(vb_real,"/mci/%s/vb_fft_real.csv", MotorID);   ///  ( 測試用 )
+            readdata(vb_real,vb_fft_real);
+            
+            sprintf(vb_imag,"/mci/%s/vb_fft_imag.csv", MotorID);   ///  ( 測試用 )
+            readdata(vb_imag,vb_fft_imag);
+            
+            sprintf(vc_real,"/mci/%s/vc_fft_real.csv", MotorID);   ///  ( 測試用 )
+            readdata(vc_real,vc_fft_real);
+            
+            sprintf(vc_imag,"/mci/%s/vc_fft_imag.csv", MotorID);   ///  ( 測試用 )
+            readdata(vc_imag,vc_fft_imag);
+            
             sprintf(ia_real,"/mci/%s/ia_fft_real.csv", MotorID);   ///  ( 測試用 )
             readdata(ia_real,ia_fft_real);
-
+            
             sprintf(ia_imag,"/mci/%s/ia_fft_imag.csv", MotorID);   ///  ( 測試用 )
             readdata(ia_imag,ia_fft_imag);
 
@@ -767,13 +844,31 @@
 
             sprintf(ic_imag,"/mci/%s/ic_fft_imag.csv", MotorID);   ///  ( 測試用 )
             readdata(ic_imag,ic_fft_imag);
-
+            
+            
             ang_a = math.angle( ia_fft_real[60], ia_fft_imag[60]);   ///  ( 測試用 )
             ang_b = math.angle( ib_fft_real[60], ib_fft_imag[60]);   ///  ( 測試用 )
             ang_c = math.angle( ic_fft_real[60], ic_fft_imag[60]);   ///  ( 測試用 )
 
             *IUF = math.UF(ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c);
-
+            
+            ang_a = math.angle( va_fft_real[60], va_fft_imag[60]);   ///  ( 測試用 )
+            ang_b = math.angle( vb_fft_real[60], vb_fft_imag[60]);   ///  ( 測試用 )
+            ang_c = math.angle( vc_fft_real[60], vc_fft_imag[60]);   ///  ( 測試用 )
+            
+            va_fft_real_2=va_RMS*cos(ang_a)-vb_RMS*cos(ang_b);
+            va_fft_imag_2=va_RMS*sin(ang_a)-vb_RMS*sin(ang_b);
+            vb_fft_real_2=vb_RMS*cos(ang_b)-vc_RMS*cos(ang_c);
+            vb_fft_imag_2=vb_RMS*sin(ang_b)-vc_RMS*sin(ang_c);
+            vc_fft_real_2=vc_RMS*cos(ang_c)-va_RMS*cos(ang_a);
+            vc_fft_imag_2=vc_RMS*sin(ang_c)-va_RMS*sin(ang_a);
+            
+            ang_a = math.angle( va_fft_real_2, va_fft_imag_2);   ///  ( 測試用 )
+            ang_b = math.angle( vb_fft_real_2, vb_fft_imag_2);   ///  ( 測試用 )
+            ang_c = math.angle( vc_fft_real_2, vc_fft_imag_2);   ///  ( 測試用 )
+            
+            *VUF = math.UF(vab_RMS, vbc_RMS, vca_RMS, ang_a, ang_b, ang_c);
+            
 
             char vafft[35], vbfft[35], vcfft[35], iafft[35], ibfft[35], icfft[35];
 
@@ -800,6 +895,7 @@
             *VDFodd = math.HD(va_fft, vb_fft, vc_fft, len);
             *THDI = math.THD(ia_fft, ib_fft, ic_fft, len);
             *IDFodd = math.HD(ia_fft, ib_fft, ic_fft, len);
+            *BB = math.BB(ia_fft, ib_fft, ic_fft, len);
 
             char name[33];
             time_t timestamp = time;
@@ -817,79 +913,101 @@
 
         default:
 
-            double toacc = 0.102;                                      ///   0.1V / 9.8(m/s^2) -> 0.0102V / (m/s^2)
-
-            complex *va, *vb, *vc, *ia, *ib, *ic;
+            double toacc = 0.102;                                      ///   0.1V / 9.8(m/s^2) -> 0.0102V / (m/s^2)           
+            complex *va, *vb, *vc, *ia, *ib, *ic, *vab, *vbc, *vca;
 
             va = (complex*) malloc(sizeof(complex) * N);
             vb = (complex*) malloc(sizeof(complex) * N);
             vc = (complex*) malloc(sizeof(complex) * N);
+            vab = (complex*) malloc(sizeof(complex) * N);
+            vbc = (complex*) malloc(sizeof(complex) * N);
+            vca = (complex*) malloc(sizeof(complex) * N);
             ia = (complex*) malloc(sizeof(complex) * N);
             ib = (complex*) malloc(sizeof(complex) * N);
             ic = (complex*) malloc(sizeof(complex) * N);
 
             for(i=0 ; i<N ; i++) {
 
-                //x_acc[i] = adc2.get(vib, 0 , i) * 10 / toacc;
-                //y_acc[i] = adc2.get(vib, 1 , i) * 10 / toacc;
-                //z_acc[i] = adc2.get(vib, 2 , i) * 10 / toacc;
-                va_1[i] = adc.get(ele , 0 , i)*120;
-                vb_1[i] = adc.get(ele , 1 , i)*120;
-                vc_1[i] = adc.get(ele , 2 , i)*120;
-                ia_1[i] = adc.get(ele , 3 , i)*100;
-                ib_1[i] = adc.get(ele , 4 , i)*100;
-                ic_1[i] = adc.get(ele , 5 , i)*100;
+                x_acc[i] = adc2.get(vib, 0 , i) * 10 / toacc;
+                y_acc[i] = adc2.get(vib, 1 , i) * 10 / toacc;
+                z_acc[i] = adc2.get(vib, 2 , i) * 10 / toacc;
+                va_1[i] = adc.get(ele , 0 , i);
+                vb_1[i] = adc.get(ele , 1 , i);
+                vc_1[i] = adc.get(ele , 2 , i);
+                ia_1[i] = adc.get(ele , 3 , i);
+                ib_1[i] = adc.get(ele , 4 , i);
+                ic_1[i] = adc.get(ele , 5 , i);
                 va[i] = va_1[i];
                 vb[i] = vb_1[i];
                 vc[i] = vc_1[i];
                 ia[i] = ia_1[i];
                 ib[i] = ib_1[i];
                 ic[i] = ic_1[i];
-
+                
+            }
+            for(i=0 ; i<N ; i++){
+            	vab[i]=va[i]-vb[i];
+            	vbc[i]=vb[i]-vc[i];
+            	vca[i]=vc[i]-va[i];
             }
 
-
-           // *PeakValue = math.PeakValue(x_acc, y_acc, z_acc, N);
-           // *UBValue   = math.UBValue(PeakValue, x_acc, y_acc, z_acc, N);
-           *PeakValue =2;
-
-
-           // math.integal(x_acc, x_vel , N, SPS);
-            //math.integal(y_acc, y_vel , N, SPS);
-            //math.integal(z_acc, z_vel , N, SPS);
-
-            //*xx_vel = math.RMS(x_vel, N);
-            //*yy_vel = math.RMS(y_vel, N);
-            //*zz_vel = math.RMS(z_vel, N);
-            *xx_vel=100;
-            *yy_vel=100;
-            *zz_vel=100;
-
-            //math.integal(x_vel, x_dis , N, SPS);
-            //math.integal(y_vel, y_dis , N, SPS);
-            //math.integal(z_vel, z_dis , N, SPS);
-            //math.detrend(x_dis , N , SPS);
-            //math.detrend(y_dis , N , SPS);
-            //math.detrend(z_dis , N , SPS);
-
-            //*xx_dis = math.Peak2Peak(x_dis, N);
-            //*yy_dis = math.Peak2Peak(y_dis, N);
-            //*zz_dis = math.Peak2Peak(z_dis, N);
-            *xx_dis=100;
-            *yy_dis=100;
-            *zz_dis=100;
+            *PeakValue = math.PeakValue(x_acc, y_acc, z_acc, N);
+            *UBValue   = math.UBValue(PeakValue, x_acc, y_acc, z_acc, N);
+
+
+            math.integal(x_acc, x_vel , N, SPS);
+            math.integal(y_acc, y_vel , N, SPS);
+            math.integal(z_acc, z_vel , N, SPS);
+
+            *xx_vel = math.RMS(x_vel, N);
+            *yy_vel = math.RMS(y_vel, N);
+            *zz_vel = math.RMS(z_vel, N);
+            double vvel[2]={*yy_vel,*zz_vel};
+            FVel=*xx_vel;
+            for(i=0;i<2;i++)
+            {if(FVel<vvel[i])FVel=vvel[i];}
+
+            math.integal(x_vel, x_dis , N, SPS);
+            math.integal(y_vel, y_dis , N, SPS);
+            math.integal(z_vel, z_dis , N, SPS);
+            math.detrend(x_dis , N , SPS);
+            math.detrend(y_dis , N , SPS);
+            math.detrend(z_dis , N , SPS);
+
+            *xx_dis = math.Peak2Peak(x_dis, N);
+            *yy_dis = math.Peak2Peak(y_dis, N);
+            *zz_dis = math.Peak2Peak(z_dis, N);
+            
+            double disgp2[2]={*yy_dis,*zz_dis};
+            FDis=*xx_dis;
+            for(i=0;i<2;i++){
+            	if(FDis<disgp[i]){FDis=disgp[i];}
+            	}
 
             ia_RMS = math.RMS(ia_1, N);
             ib_RMS = math.RMS(ib_1, N);
             ic_RMS = math.RMS(ic_1, N);
+            va_RMS = math.RMS(va_1, N);
+            vb_RMS = math.RMS(vb_1, N);
+            vc_RMS = math.RMS(vc_1, N);
+            vab_RMS = math.LVRMS(va_1, vb_1, N);
+            vbc_RMS = math.LVRMS(vb_1, vc_1, N);
+            vca_RMS = math.LVRMS(vc_1, va_1, N);
+            
 
             *IUR = math.UR(ia_RMS, ib_RMS, ic_RMS);
-
-            complex *va_out, *vb_out, *vc_out, *ia_out, *ib_out, *ic_out;
+            *VUR = math.UR(vab_RMS, vbc_RMS, vca_RMS);
+            *VD = math.VDF(vab_RMS, vbc_RMS, vca_RMS);
+            *CD = math.CDF(ia_RMS, ib_RMS, ic_RMS);
+
+            complex *va_out, *vb_out, *vc_out, *ia_out, *ib_out, *ic_out, *vab_out, *vbc_out, *vca_out;
 
             va_out = (complex*) malloc(sizeof(complex) * N);
             vb_out = (complex*) malloc(sizeof(complex) * N);
             vc_out = (complex*) malloc(sizeof(complex) * N);
+            vab_out = (complex*) malloc(sizeof(complex) * N);
+            vbc_out = (complex*) malloc(sizeof(complex) * N);
+            vca_out = (complex*) malloc(sizeof(complex) * N);
             ia_out = (complex*) malloc(sizeof(complex) * N);
             ib_out = (complex*) malloc(sizeof(complex) * N);
             ic_out = (complex*) malloc(sizeof(complex) * N);
@@ -897,6 +1015,9 @@
             fft.Forward(va, va_out, N);
             fft.Forward(vb, vb_out, N);
             fft.Forward(vc, vc_out, N);
+            fft.Forward(vab, vab_out, N);
+            fft.Forward(vbc, vbc_out, N);
+            fft.Forward(vca, vca_out, N);
             fft.Forward(ia, ia_out, N);
             fft.Forward(ib, ib_out, N);
             fft.Forward(ic, ic_out, N);
@@ -906,6 +1027,12 @@
             ang_c = math.angle( ic_out[24].re(), ic_out[24].im());
 
             *IUF = math.UF(ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c);
+            
+            ang_a = math.angle( vab_out[24].re(), vab_out[24].im());
+            ang_b = math.angle( vbc_out[24].re(), vbc_out[24].im());
+            ang_c = math.angle( vca_out[24].re(), vca_out[24].im());
+     
+            *VUF = math.UF(vab_RMS, vbc_RMS, vca_RMS, ang_a, ang_b, ang_c);
 
 
             for(i=0 ; i<1000 ; i++) {
@@ -921,6 +1048,7 @@
             *VDFodd = math.HD(va_fft, vb_fft, vc_fft, N);
             *THDI = math.THD(ia_fft, ib_fft, ic_fft, N);
             *IDFodd = math.HD(ia_fft, ib_fft, ic_fft, N);
+            *BB = math.BB(ia_fft, ib_fft, ic_fft, N);
 
     }
 
@@ -1301,8 +1429,60 @@
 
     }
 }
-
-
+//---------------------------------------------- Further Fault 頁面---------------------------------------------------------------//
+static void _cbFurtherFault(WM_MESSAGE * pMsg)
+{
+    WM_HWIN hItem;
+
+    int i;
+
+    WM_HWIN hWin = pMsg->hWin;
+
+    switch (pMsg->MsgId) {
+      case WM_INIT_DIALOG:
+        
+        WM_Paint(hWin);
+        FRAMEWIN_SetActive(hWin, 1);
+        FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
+        FRAMEWIN_SetClientColor(hWin, 0xCFCFCF);
+        for(i=93 ; i<99 ; i++) {
+            	hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i);  	
+            	TEXT_SetFont(hItem, GUI_FONT_32B_ASCII);
+                
+        }        
+        break;
+
+      case WM_PAINT:
+            
+            a0=0;
+            a1=0;
+            for(i=0 ; i<5 ; i++) {
+                a0 += aValues[i];
+                a1 += aValues[i+1];
+                GUI_SetColor(aColors[i]);
+                GUI_FillRoundedRect(200, 140 +60*i, 260, 180+60*i, 8);
+                //GUI_DrawPie(430, 330, 117, a0, a1, 0);
+                GUI_SetColor(GUI_BLACK);
+                GUI_DrawRoundedRect(199, 139+60*i, 261, 181+60*i, 8);
+            }
+
+            GUI_SetFont(GUI_FONT_20B_ASCII);
+            for(i=0 ; i<5 ; i++) {
+                GUI_DispStringHCenterAt(":", 460, 151+61*i);
+                GUI_DispStringHCenterAt("%", 600, 151+61*i);
+            }
+            GUI_DispStringHCenterAt(cpH,530,151+61*0);
+            GUI_DispStringHCenterAt(cpS,530,151+61*1);
+            GUI_DispStringHCenterAt(cpR,530,151+61*2);
+            GUI_DispStringHCenterAt(cpB,530,151+61*3);
+            GUI_DispStringHCenterAt(cpE,530,151+61*4);
+        
+        break;
+      
+     default:
+            WM_DefaultProc(pMsg);
+    }
+}
 
 //-------------------------------------------------    Remote Analysis顯示頁面   ----------------------------------------------------------------------------------------------------------------------//
 
@@ -1310,8 +1490,8 @@
 {
     WM_HWIN hItem;
 
-    int i;
-
+    int i,Id;
+    int NCode;
     WM_HWIN hWin = pMsg->hWin;
 
     switch (pMsg->MsgId) {
@@ -1322,71 +1502,134 @@
             FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
             FRAMEWIN_SetClientColor(hWin, 0xCFCFCF);
 
-            for(i=85 ; i<99 ; i++) {
+            for(i=84 ; i<93 ; i++) {
                 hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i);
-                if(i<90) {
-                    TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
-                } else {
+                if(i<85) {
+                    hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i);
+                    BUTTON_SetFocussable(hItem, 0);// Set all buttons non focussable //
+                }
+                else {
                     TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
+                    if(i>91){
+                    TEXT_SetFont(hItem, GUI_FONT_32B_ASCII);
+                    }
                 }
-
-                if(i>96) {
-                    TEXT_SetFont(hItem, GUI_FONT_32B_ASCII);
-                }
+                
             }
             break;
 
         case WM_PAINT:
-
-            GUI_DrawGradientRoundedH(86, 86, 704, 134, 24, GUI_GREEN, GUI_RED);   //      x:86 -> 704         y:86 -> 134      86 + 618*0.22
-            GUI_ClearRect(704 - 618*(1 - pCMS), 86, 704, 134);
-            a0=0;
-            a1=0;
-            for(i=0 ; i<5 ; i++) {
-                a0 += aValues[i];
-                a1 += aValues[i+1];
-                GUI_SetColor(aColors[i]);
-                GUI_FillRoundedRect(30, 244+40*i, 70, 274+40*i, 5);
-                GUI_DrawPie(430, 330, 117, a0, a1, 0);
-                GUI_SetColor(GUI_BLACK);
-                GUI_DrawRoundedRect(29, 243+40*i, 71, 275+40*i, 5);
-            }
-
+        
+            GUI_DrawGradientRoundedH(86, 161, 704, 239, 39, GUI_GREEN, GUI_RED);   //      x:86 -> 704         y:86 -> 134      86 + 618*0.22
+            GUI_ClearRect(704 - 618*(1-pCMS), 161, 704, 239);
+            
             GUI_SetColor(GUI_BLACK);
 
             for(i=0 ; i<3 ; i++) {
                 if(i<2) {
-                    GUI_DrawVLine(240+155*i, 85, 100);
-                    GUI_DrawVLine(240+155*i, 120, 135);
+                    GUI_DrawVLine(240+155*i, 160, 180);
+                    GUI_DrawVLine(240+155*i, 220, 240);
                 } else {
-                    GUI_DrawVLine(240+154*i, 85, 100);
-                    GUI_DrawVLine(240+154*i, 120, 135);
+                    GUI_DrawVLine(240+154*i, 160, 180);
+                    GUI_DrawVLine(240+154*i, 220, 240);
                 }
 
             }
-
-            GUI_DrawRoundedRect(85, 85, 705, 135, 25);
-
-            GUI_SetFont(GUI_FONT_20B_ASCII);
-            for(i=0 ; i<5 ; i++) {
-                GUI_DispStringHCenterAt(":", 180, 250+40*i);
-                GUI_DispStringHCenterAt("%", 265, 250+40*i);
+            GUI_DrawRoundedRect(85, 160, 705, 240, 40);
+            break;
+            
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+            switch(Id) {
+
+                case GUI_ID_USER + 84: // button 'Further Fault' //
+                    switch(NCode) {
+                        case WM_NOTIFICATION_RELEASED:
+
+                            hItem = GUI_CreateDialogBox(_aFurtherFault, GUI_COUNTOF(_aFurtherFault), _cbFurtherFault, WM_HBKWIN, 0, 0);
+
+                            break;
+                    }
+                    break;
             }
-            GUI_DispStringHCenterAt(cpH,220,250+40*0);
-            GUI_DispStringHCenterAt(cpS,220,250+40*1);
-            GUI_DispStringHCenterAt(cpR,220,250+40*2);
-            GUI_DispStringHCenterAt(cpB,220,250+40*3);
-            GUI_DispStringHCenterAt(cpE,220,250+40*4);
-
-
-
             break;
-
+        
         default:
             WM_DefaultProc(pMsg);
     }
 }
 
+//--------------------------------------------- Further Select頁面--------------------------------------------------------
+static void _cbFurtherSelect(WM_MESSAGE * pMsg)
+{
+    WM_HWIN hItem;
+    int     NCode;
+    int     Id, i, xSize, ySize;;
+
+    WM_HWIN hWin = pMsg->hWin;
+
+    switch (pMsg->MsgId) {
+        case WM_INIT_DIALOG:
+
+            WM_Paint(hWin);
+            FRAMEWIN_SetActive(hWin, 1);
+            FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
+
+            for(i=82 ; i<84 ; i++) {
+                hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i);
+                BUTTON_SetFocussable(hItem, 0);// Set all buttons non focussable //
+            }
+            break;
+        case WM_PAINT:
+
+            xSize = LCD_GetXSize();
+            ySize = LCD_GetYSize();
+            GUI_DrawGradientV(0,0,xSize,ySize,0xE6E0B0,0x90EE90);
+
+            break;
+
+        case WM_NOTIFY_PARENT:
+            Id = WM_GetId(pMsg->hWinSrc);
+            NCode = pMsg->Data.v;
+            switch(Id) {
+
+                case GUI_ID_USER + 82: // button 'Fuzzy' //
+                    switch(NCode) {
+                        case WM_NOTIFICATION_RELEASED:
+                        
+                             
+                            math.Fuzzy_Fault(FIUR,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FBB,Fpeakvalue,&health,&stator,&rotor,&bearing,&eccentric);
+                            math.Fuzzy_Condition(FVUR,FIUR,FVUF,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FVD,FCD,FVel,FDis,&pCMS);
+                            snprintf(cpH, 10, "%.2f", health);
+                            snprintf(cpS, 10, "%.2f", stator);
+                            snprintf(cpR, 10, "%.2f", rotor);
+                            snprintf(cpB, 10, "%.2f", bearing);
+                            snprintf(cpE, 10, "%.2f", eccentric);                        
+                            //hItem = GUI_CreateDialogBox(_afinish, GUI_COUNTOF(_afinish), _cbfinish, WM_HBKWIN, 0, 0);
+                            hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0);
+
+                            break;
+                    }
+                    break;
+
+                case GUI_ID_USER + 83: // button 'Remote' //
+                    switch(NCode) {
+                        case WM_NOTIFICATION_RELEASED:
+
+                            hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0);
+
+                            break;
+                    }
+                    break;
+            }
+            break;
+        default:
+            WM_DefaultProc(pMsg);
+    }
+}
+
+
 
 
 //----------------------------------------------  Analysis 分析、亮燈頁面   ------------------------------------------------------------------------------------------------------------------------------//
@@ -1679,7 +1922,7 @@
     int     Id, i, xSize, ySize;
 
     static int group = 0, flagiso = 0, flagnema = 0;
-    static double IUR=0, IUF=0, THDV=0, VDFodd=0, THDI=0, IDFodd=0, PeakValue=0, UBValue=0, x_vel=0, y_vel=0, z_dis=0, z_vel=0, y_dis=0, x_dis = 0,
+    static double VUR=0, IUR=0, VUF=0, IUF=0, VD=0, CD=0,THDV=0, VDFodd=0, THDI=0, IDFodd=0, PeakValue=0, UBValue=0, x_vel=0, y_vel=0, z_dis=0, z_vel=0, y_dis=0, x_dis = 0, BB=0,
                   bkIUR=0, bkIUF=0, bkTHDV=0, bkVDFodd=0, bkTHDI=0, bkIDFodd=0, bkPeakValue=0, bkUBValue=0,
                   bkvIUR=0, bkvIUF=0, bkvTHDV=0, bkvVDFodd=0, bkvTHDI=0, bkvIDFodd=0, bkvPeakValue=0, bkvUBValue=0, bkvvPeakValue=0, bkvvUBValue=0;
 
@@ -1725,10 +1968,10 @@
                     }
                     break;
 
-                case GUI_ID_USER + 140: // button 'Remote Analysis' //
+                case GUI_ID_USER + 140: // button 'Further Select' //
                     switch(NCode) {
                         case WM_NOTIFICATION_RELEASED:
-                            hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0);
+                            hItem = GUI_CreateDialogBox(_aFurtherSelect, GUI_COUNTOF(_aFurtherSelect), _cbFurtherSelect, WM_HBKWIN, 0, 0);
 
                             break;
                     }
@@ -1743,8 +1986,12 @@
                             flagf = 0;
                             flagiso = 0;
                             flagnema = 0;
+                            VUR=0;
                             IUR=0;
+                            VUF=0;
                             IUF=0;
+                            VD=0;
+                            CD=0;
                             THDV=0;
                             VDFodd=0;
                             THDI=0;
@@ -1757,6 +2004,7 @@
                             z_vel=0;
                             y_dis=0;
                             x_dis=0;
+                            BB=0;
 
                             file.timestamp = time(NULL);
                             file.sps = 20000;
@@ -1842,12 +2090,12 @@
 
                             }
 
-                            Index_operation(e , v, file.timestamp, &IUR, &IUF, &THDV, &VDFodd, &THDI, &IDFodd, &PeakValue, &UBValue, &x_vel, &y_vel, &z_vel, &z_dis, &y_dis, &x_dis);
+                            Index_operation(e , v, file.timestamp, &IUR, &IUF, &THDV, &VDFodd, &THDI, &IDFodd, &PeakValue, &UBValue, &x_vel, &y_vel, &z_vel, &z_dis, &y_dis, &x_dis, &VUR, &VUF, &VD, &CD, &BB);
 
 //                            THDI   = 3.5263 ;                                         /////  神奇海螺
 //                            IDFodd = 3.2294 ;                                         /////  神奇海螺
 
-                            
+                            FIUR=IUR;FIUF=IUF;FTHDV=THDV;FVDFodd=VDFodd;FTHDI=THDI;FIDFodd=IDFodd;FBB=BB;Fpeakvalue=PeakValue;FVUR=VUR;FVUF=VUF;FVD=VD;FCD=CD;
                             if(PeakValue > bkvvPeakValue || UBValue > bkvvUBValue ) {
                                 group = 2 ;
                             } else {
@@ -1968,7 +2216,12 @@
 
 
                             snprintf(cIUR,       10, "%.4f", IUR);
+                            snprintf(cVUR,       10, "%.4f", VUR);                           
                             snprintf(cIUF,       10, "%.4f", IUF);
+                            snprintf(cVUF,       10, "%.4f", VUF);
+                            snprintf(cCD,       10, "%.4f", CD);
+                            snprintf(cVD,       10, "%.4f", VD);
+                            snprintf(cBB,       10, "%.4f", BB);
                             snprintf(cTHDV,      10, "%.4f", THDV);
                             snprintf(cVDFodd,    10, "%.4f", VDFodd);
                             snprintf(cTHDI,      10, "%.4f", THDI);
@@ -2074,11 +2327,11 @@
 
                             pCMS = atof(Volts);
 
-                            snprintf(cpH, 10, "%.2f", 100 - 100*(atof(Poles)+atof(RPM)+atof(IPADR)+atof(Netmask)));
-                            snprintf(cpS, 10, "%.2f", 100 - 100*(atof(Amps)+atof(RPM)+atof(IPADR)+atof(Netmask)));
-                            snprintf(cpR, 10, "%.2f", 100 - 100*(atof(Poles)+atof(Amps)+atof(IPADR)+atof(Netmask)));
-                            snprintf(cpB, 10, "%.2f", 100 - 100*(atof(RPM)+atof(Poles)+atof(Amps)+atof(Netmask)));
-                            snprintf(cpE, 10, "%.2f", 100 - 100*(atof(IPADR)+atof(RPM)+atof(Poles)+atof(Amps)));
+                            snprintf(cpH, 10, "%.2f", health);
+                            snprintf(cpS, 10, "%.2f", stator);
+                            snprintf(cpR, 10, "%.2f", rotor);
+                            snprintf(cpB, 10, "%.2f", bearing);
+                            snprintf(cpE, 10, "%.2f", eccentric);
 
                             aValues[1]= 360 * atof(Amps);
                             aValues[2]= 360 * atof(Poles);
--- a/embedded/MATH1.cpp	Tue Jan 10 08:25:27 2017 +0000
+++ b/embedded/MATH1.cpp	Wed Jan 18 11:19:53 2017 +0000
@@ -1,5 +1,14 @@
 #include "MATH1.h"
 #define pi  3.14159265359
+double round(double src, int n)
+{
+    double res;
+    int i, k = 1;
+    for (i = 0; i<n; i++)k *= 10;
+    res = int(src*k + 0.5);
+    res /= k;
+    return res;
+}
 double mean(double *d, int len)
 {
     double mean = 0.0;
@@ -55,7 +64,32 @@
     return rms;
 }
 
-
+///Voltage Deviation Factor///
+double MATH::VDF(double d1, double d2, double d3)
+{
+    double dmax=0.0;
+    double x[3]={fabs((d1-220)/220)*100,fabs((d2-220)/220)*100,fabs((d3-220)/220)*100};
+    for(int i=0 ; i<3 ; i++) {
+        if(x[i]>dmax) {
+            dmax=x[i];
+        }
+    }
+    return dmax;
+}
+///Currrent Deviation Factor///
+double MATH::CDF(double d1, double d2, double d3)
+{
+    double dmax=0.0;
+    double x[3]={d1,d2,d3};
+    for(int i=0 ; i<3 ; i++) {
+        if(x[i]>dmax) {
+            dmax=x[i];
+        }
+    }
+    double CDF=(dmax-6.1)/6.1*100;
+    if(CDF<0){CDF=0;}
+    return CDF;
+}        
 ///unbalance rate///
 double MATH::UR(double d1, double d2, double d3)
 {
@@ -224,7 +258,7 @@
         }
         if(fabs(y[i]) > ymax) {
             ymax = fabs(y[i]);
-        }
+        } 
         if(fabs(z[i]) > zmax) {
             zmax = fabs(z[i]);
         }
@@ -271,19 +305,21 @@
 double MATH::THD(double *ass_1, double *ass_2, double *ass_3, int pu)
 {
     double WTF, WTFa, WTFb, WTFc;
-    double you_1, you_2, you_3, fu_1, fu_2, fu_3;
+    double you_1=0, you_2=0, you_3=0, fu_1, fu_2, fu_3;
+    int i=0;
 
     switch(pu) {
         case 10000 :
-            you_1  = (sqr(ass_1[120]) + sqr(ass_1[180]) + sqr(ass_1[240]) + sqr(ass_1[300]) + sqr(ass_1[360]) + sqr(ass_1[420]) + sqr(ass_1[480]) + sqr(ass_1[540]) + sqr(ass_1[600]) + sqr(ass_1[660]));
+        
+            for(i=0;i<10;i++){you_1  = you_1+sqr(ass_1[120+i*60]);} 
             fu_1 = sqrt(you_1);
             WTFa  = (fu_1 / ass_1[60])*100;
 
-            you_2  = (sqr(ass_2[120]) + sqr(ass_2[180]) + sqr(ass_2[240]) + sqr(ass_2[300]) + sqr(ass_2[360]) + sqr(ass_2[420]) + sqr(ass_2[480]) + sqr(ass_2[540]) + sqr(ass_2[600]) + sqr(ass_2[660]));
+            for(i=0;i<10;i++){you_2  = you_2+sqr(ass_2[120+i*60]);} 
             fu_2 = sqrt(you_2);
             WTFb  = (fu_2 / ass_2[60])*100;
 
-            you_3  = (sqr(ass_3[120]) + sqr(ass_3[180]) + sqr(ass_3[240]) + sqr(ass_3[300]) + sqr(ass_3[360]) + sqr(ass_3[420]) + sqr(ass_3[480]) + sqr(ass_3[540]) + sqr(ass_3[600]) + sqr(ass_3[660]));
+            for(i=0;i<10;i++){you_3  = you_3+sqr(ass_3[120+i*60]);} 
             fu_3 = sqrt(you_3);
             WTFc  = (fu_3 / ass_3[60])*100;
 
@@ -362,12 +398,12 @@
             su_11 = (ck_1[660] / ck_1[60])*100;
 
             blow1 = su_3;
-            double job[4]= {su_5, su_7, su_9, su_11};
-            for(int i = 0 ; i<4 ; i++) {
-                if(job[i] > blow1) {
-                    blow1 = job[i];
-                }
-            }
+            //double job[4]= {su_5, su_7, su_9, su_11};
+            //for(int i = 0 ; i<4 ; i++) {
+            //    if(job[i] > blow1) {
+            //        blow1 = job[i];
+            //    }
+            //}
 
             su_3 = (ck_2[180] / ck_2[60])*100;
             su_5 = (ck_2[300] / ck_2[60])*100;
@@ -376,12 +412,12 @@
             su_11 = (ck_2[660] / ck_2[60])*100;
 
             blow2 = su_3;
-            double job2[4]= {su_5, su_7, su_9, su_11};
-            for(int i = 0 ; i<4 ; i++) {
-                if(job2[i] > blow2) {
-                    blow2 = job2[i];
-                }
-            }
+            //double job2[4]= {su_5, su_7, su_9, su_11};
+            //for(int i = 0 ; i<4 ; i++) {
+            //    if(job2[i] > blow2) {
+            //        blow2 = job2[i];
+            //    }
+            //}
 
             su_3 = (ck_3[180] / ck_3[60])*100;
             su_5 = (ck_3[300] / ck_3[60])*100;
@@ -390,12 +426,12 @@
             su_11 = (ck_3[660] / ck_3[60])*100;
 
             blow3 = su_3;
-            double job3[4]= {su_5, su_7, su_9, su_11};
-            for(int i = 0 ; i<4 ; i++) {
-                if(job3[i] > blow3) {
-                    blow3 = job3[i];
-                }
-            }
+            //double job3[4]= {su_5, su_7, su_9, su_11};
+            //for(int i = 0 ; i<4 ; i++) {
+            //    if(job3[i] > blow3) {
+            //        blow3 = job3[i];
+            //    }
+            //}
 
             blow = MAXof3(blow1, blow2, blow3);
 
@@ -477,3 +513,178 @@
     return blow;
 
 }
+double MATH::BB(double *d1, double *d2, double *d3, int pu)
+{
+   switch(pu){
+      case 10000:
+   
+          double x[3]={d1[59], d1[60], d1[61]}, y[3]={d2[59], d2[60], d2[61]}, z[3]={d3[59], d3[60], d3[61]};
+          double x_1[3]={d1[65], d1[66], d1[67]}, y_1[3]={d2[65], d2[66], d2[67]}, z_1[3]={d3[65], d3[66], d3[67]};
+          double x_2[3]={d1[53], d1[54], d1[55]}, y_2[3]={d2[53], d2[54], d2[55]}, z_2[3]={d3[53], d3[54], d3[55]};
+          int i=0;double tmp1=0,tmp2=0,tmp3=0,tmp1_1=0,tmp2_1=0,tmp3_1=0,tmp1_2=0,tmp2_2=0,tmp3_2=0;
+          for(i=0;i<3;i++){if(x[i]>tmp1)tmp1=x[i];}
+          for(i=0;i<3;i++){if(y[i]>tmp2)tmp2=y[i];}
+          for(i=0;i<3;i++){if(z[i]>tmp3)tmp3=z[i];}
+          for(i=0;i<3;i++){if(x_1[i]>tmp1_1)tmp1_1=x_1[i];}
+          for(i=0;i<3;i++){if(y_1[i]>tmp2_1)tmp2_1=y_1[i];}
+          for(i=0;i<3;i++){if(z_1[i]>tmp3_1)tmp3_1=z_1[i];}
+          for(i=0;i<3;i++){if(x_2[i]>tmp1_2)tmp1_2=x_2[i];}
+          for(i=0;i<3;i++){if(y_2[i]>tmp2_2)tmp2_2=y_2[i];}
+          for(i=0;i<3;i++){if(z_2[i]>tmp3_2)tmp3_2=z_2[i];}
+          double n[3],ra=0,rb=0,rc=0,la=0,lb=0,lc=0,BB=-50;
+          for(i=0;i<2;i++){n[i]=x_1[i]-x_1[i+1];if(n[i]<ra)ra=n[i];}
+          for(i=0;i<2;i++){n[i]=y_1[i]-y_1[i+1];if(n[i]<rb)rb=n[i];}
+          for(i=0;i<2;i++){n[i]=z_1[i]-z_1[i+1];if(n[i]<rc)rc=n[i];}
+          for(i=0;i<2;i++){n[i]=x_2[i+1]-x_2[i];if(n[i]<la)la=n[i];}
+          for(i=0;i<2;i++){n[i]=y_2[i+1]-y_2[i];if(n[i]<lb)lb=n[i];}
+          for(i=0;i<2;i++){n[i]=z_2[i+1]-z_2[i];if(n[i]<lc)lc=n[i];}
+          if(ra<-0.02 || la<-0.02){n[0]=20*log10((tmp1_1+tmp1_2)/tmp1);} else {n[0]=-50;}
+          if(rb<-0.02 || lb<-0.02){n[1]=20*log10((tmp2_1+tmp2_2)/tmp2);} else {n[1]=-50;}
+          if(rc<-0.02 || lc<-0.02){n[2]=20*log10((tmp3_1+tmp3_2)/tmp3);} else {n[2]=-50;}
+          for(i=0;i<3;i++){if(n[i]>BB)BB=n[i];}
+          return BB;
+   
+          break;
+        case 8192:
+   
+          double xx[3]={d1[23], d1[24], d1[25]}, yy[3]={d2[23], d2[24], d2[25]}, zz[3]={d3[23], d3[24], d3[25]};
+          double xx_1[3]={d1[25], d1[26], d1[27]}, yy_1[3]={d2[25], d2[26], d2[27]}, zz_1[3]={d3[25], d3[26], d3[27]};
+          double xx_2[3]={d1[21], d1[22], d1[23]}, yy_2[3]={d2[21], d2[22], d2[23]}, zz_2[3]={d3[21], d3[22], d3[23]};
+          double ttmp1=0,ttmp2=0,ttmp3=0,ttmp1_1=0,ttmp2_1=0,ttmp3_1=0,ttmp1_2=0,ttmp2_2=0,ttmp3_2=0;
+          for(i=0;i<3;i++){if(xx[i]>ttmp1)ttmp1=xx[i];}
+          for(i=0;i<3;i++){if(yy[i]>ttmp2)ttmp2=yy[i];}
+          for(i=0;i<3;i++){if(zz[i]>ttmp3)ttmp3=zz[i];}
+          for(i=0;i<3;i++){if(xx_1[i]>ttmp1_1)ttmp1_1=xx_1[i];}
+          for(i=0;i<3;i++){if(yy_1[i]>ttmp2_1)ttmp2_1=yy_1[i];}
+          for(i=0;i<3;i++){if(zz_1[i]>ttmp3_1)ttmp3_1=zz_1[i];}
+          for(i=0;i<3;i++){if(xx_2[i]>ttmp1_2)ttmp1_2=xx_2[i];}
+          for(i=0;i<3;i++){if(yy_2[i]>ttmp2_2)ttmp2_2=yy_2[i];}
+          for(i=0;i<3;i++){if(zz_2[i]>ttmp3_2)ttmp3_2=zz_2[i];}
+          double nn[3],rra=0,rrb=0,rrc=0,lla=0,llb=0,llc=0,BBB=-50;
+          for(i=0;i<3;i++){nn[i]=xx_1[i]-xx_1[i+1];if(nn[i]<rra)rra=nn[i];}
+          for(i=0;i<3;i++){nn[i]=yy_1[i]-yy_1[i+1];if(nn[i]<rrb)rrb=nn[i];}
+          for(i=0;i<3;i++){nn[i]=zz_1[i]-zz_1[i+1];if(nn[i]<rrc)rrc=nn[i];}
+          for(i=0;i<3;i++){nn[i]=xx_2[i+1]-xx_2[i];if(nn[i]<lla)lla=nn[i];}
+          for(i=0;i<3;i++){nn[i]=yy_2[i+1]-yy_2[i];if(nn[i]<llb)llb=nn[i];}
+          for(i=0;i<3;i++){nn[i]=zz_2[i+1]-zz_2[i];if(nn[i]<llc)llc=nn[i];}
+          if(rra<-0.02 || lla<-0.02){nn[0]=20*log10((ttmp1_1+ttmp1_2)/ttmp1);} else {nn[0]=-50;}
+          if(rrb<-0.02 || llb<-0.02){nn[1]=20*log10((ttmp2_1+ttmp2_2)/ttmp2);} else {nn[1]=-50;}
+          if(rrc<-0.02 || llc<-0.02){nn[2]=20*log10((ttmp3_1+ttmp3_2)/ttmp3);} else {nn[2]=-50;}
+          for(i=0;i<3;i++){if(nn[i]>BB)BB=nn[i];}
+          return BB;
+         break;
+   }
+}
+void MATH::Fuzzy_Fault(double IUR,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double BB,double peakvalue,double *health,double *stator,double *rotor,double *bearing, double *eccentric)
+{  
+   double h[8],f1[8],s[7],r[7],b[6],e[6],h1max=0,f1max=0,g1max=0,g2max=0,rmax=0,bmax=0,smax=0,emax=0; int i=0;
+   h[0]=IUR*1.0/8.0-1.0/4.0;if(h[0]<0){h[0]=0;}if(h[0]>1){h[0]=1;}
+   h[1]=IUF*2.0-4.0;if(h[1]<0){h[1]=0;}if(h[1]>1){h[1]=1;}
+   h[2]=THDV*(1.0/3.0)-2.0/3.0;if(h[2]<0){h[2]=0;}if(h[2]>1){h[2]=1;}
+   h[3]=VDFodd*2.0/5.0-1.0/5.0;if(h[3]<0){h[3]=0;}if(h[3]>1){h[3]=1;}
+   h[4]=THDI*2.0/5.0-1.0;if(h[4]<0){h[4]=0;}if(h[4]>1){h[4]=1;}
+   h[5]=IDFodd*1.0/3.0-1.0/3.0;if(h[5]<0){h[5]=0;}if(h[5]>1){h[5]=1;}
+   h[6]=BB*1.0/5.0+9.0;if(h[6]<0){h[6]=0;}if(h[6]>1){h[6]=1;}
+   h[7]=peakvalue*2.0-8.0;if(h[7]<0){h[7]=0;}if(h[7]>1){h[7]=1;}
+   if(h[0]==0&&h[1]==0&&h[2]==0&&h[3]==0&&h[4]==0&&h[5]==0&&h[6]==0&&h[7]==0){*health=100;*stator=0;*rotor=0;*bearing=0;*eccentric=0;}
+   else{
+   for(i=0;i<8;i++){f1[i]=h[i];if(h[i]>f1max){f1max=h[i];}}
+   h1max=1-f1max;
+   *health=h1max*100;
+   g2max=h[7];g1max=1-g2max;
+   s[0]=h[0]*0.987*0.6;r[0]=h[0]*0.013*0.6;s[1]=h[1];r[1]=0;s[2]=h[2]*0.242*0.6;r[2]=h[2]*0.758*0.6;s[3]=h[3]*0.24*0.6;r[3]=h[3]*0.76*0.6;s[4]=h[4]*0.383*0.6;r[4]=h[4]*0.617*0.6;s[5]=h[5]*0.44*0.6;r[5]=h[5]*0.56*0.6;
+   r[6]=h[6];s[6]=0;if(r[6]==0){s[6]=1.0;}
+   for(i=0;i<7;i++){if(s[i]>smax){smax=s[i];}if(r[i]>rmax)rmax=r[i];}
+   rmax=rmax/(smax+rmax);smax=1-rmax;*stator=f1max*g1max*smax*100;*rotor=f1max*g1max*rmax*100;
+   b[0]=h[0]*0.025*0.6;e[0]=h[0]*0.975*0.6;b[1]=0;e[1]=h[1];b[2]=h[2]*0.797*0.6;e[2]=h[2]*0.203*0.6;b[3]=h[3]*0.839*0.6;e[3]=h[3]*0.161*0.6;b[4]=h[4]*0.722*0.6;e[4]=h[4]*0.278*0.6;b[5]=h[5]*0.764*0.6;e[5]=h[5]*0.236*0.6;
+   for(i=0;i<6;i++){if(b[i]>bmax){bmax=b[i];}if(e[i]>emax)emax=e[i];}
+   emax=emax/(bmax+emax);bmax=1-emax;*bearing=f1max*g2max*bmax*100;*eccentric=f1max*g2max*emax*100;
+   }
+}   
+void MATH::Fuzzy_Condition(double VUR,double IUR,double VUF,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double VD,double CD,double Vel,double Dis,double *pCMS)
+{
+  double g1[2],g2[2],g3[2],g4[2],g5[2],g6[2],g7[2],g8[2],g9[2],c1[9]={0},c2[9]={0},p[2];
+  int flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,i;
+  if(VUR>=5||IUR>=10||THDV>=5||VDFodd>=3||THDI>=5||IDFodd>=4||VD>=10||CD>=10||Vel>=4.5||VUF>=1||IUF>=2.5||Dis>=90){*pCMS=1;}
+  else if(VUR<=1&&IUR<=2&&THDV<=1.5&&VDFodd<=1.5&&THDI<=2.5&&IDFodd<=2&&VD<=2.5&&CD==0&&Vel<=0.7){*pCMS=0;}
+  else{
+        if(VUR<=2){g1[1]=VUR-1.0;if(g1[1]<0){g1[1]=0;}g1[0]=1-g1[1];flag1=1;}
+        if(VUR>2&&VUR<=3.5){g1[1]=VUR*2.0/3.0-4.0/3.0;g1[0]=1-g1[1];flag1=2;}
+        if(VUR>3.5&&VUR<5){g1[1]=VUR*2.0/3.0-7.0/3.0;g1[0]=1-g1[1];flag1=3;}
+        if(IUR<=4){g2[1]=IUR*0.5-1;if(g2[1]<0){g2[1]=0;}g2[0]=1-g2[1];flag2=1;}
+        if(IUR>4&&IUR<=6){g2[1]=IUR*0.5-2.0;g2[0]=1-g2[1];flag2=2;}
+        if(IUR>6&&IUR<10){g2[1]=IUR*0.25-3.0*2.0;g2[0]=1-g2[1];flag2=3;}
+        if(THDV<=2){g3[1]=THDV*2-3;if(g3[1]<0){g3[1]=0;}g3[0]=1-g3[1];flag3=1;}
+        if(THDV>2&&THDV<=3.5){g3[1]=THDV*2.0/3.0-4.0/3.0;g3[0]=1-g3[1];flag3=2;}
+        if(THDV>3.5&&THDV<5){g3[1]=THDV*2.0/3.0-7.0/3.0;g3[0]=1-g3[1];flag3=3;}
+        if(VDFodd<=2){g3[1]=VDFodd*2.0-3.0;if(g4[1]<0){g4[1]=0;}g4[0]=1-g4[1];flag4=1;}
+        if(VDFodd>2&&VDFodd<=2.5){g4[1]=VDFodd*2.0-4.0;g4[0]=1-g4[1];flag4=2;}
+        if(VDFodd>2.5&&VDFodd<3){g4[1]=VDFodd*2.0-5.0;g4[0]=1-g4[1];flag4=3;}
+        if(THDI<=3){g5[1]=THDI*2.0-5.0;if(g5[1]<0){g5[1]=0;}g5[0]=1-g5[1];flag5=1;}
+        if(THDI>3&&THDI<=4){g5[1]=THDI-3.0;g5[0]=1-g5[1];flag5=2;}
+        if(THDI>4&&THDI<5){g5[1]=THDI-4.0;g5[0]=1-g5[1];flag5=3;}
+        if(IDFodd<=2.5){g6[1]=IDFodd*2.0-4.0;if(g6[1]<0){g6[1]=0;}g6[0]=1-g6[1];flag6=1;}
+        if(IDFodd>2.5&&IDFodd<=3){g6[1]=IDFodd*2.0-5.0;g6[0]=1-g6[1];flag6=2;}
+        if(IDFodd>3&&IDFodd<4){g6[1]=IDFodd-3.0;g6[0]=1-g6[1];flag6=3;}
+        if(VD<=3){g7[1]=VD*2.0-5.0;if(g7[1]<0){g7[1]=0;}g7[0]=1-g7[1];flag7=1;}
+        if(VD>3&&VD<=5){g7[1]=VD*0.5-3.0/2.0;g7[0]=1-g7[1];flag7=2;}
+        if(VD>5&&VD<10){g7[1]=VD*0.2-1.0;g7[0]=1-g7[1];flag7=3;}
+        if(CD<=2){g8[1]=CD*0.5;if(g8[1]<0){g8[1]=0;}g8[0]=1-g8[1];flag8=1;}
+        if(CD>2&&CD<=5){g8[1]=CD*1.0/3.0-2.0/3.0;g8[0]=1-g8[1];flag8=2;}
+        if(CD>5&&CD<10){g8[1]=CD*0.2-1.0;g8[0]=1-g8[1];flag8=3;}
+        if(Vel<=0.7){g9[1]=Vel*10.0/7.0;if(g9[1]<0){g9[1]=0;}g9[0]=1-g9[1];flag9=1;}
+        if(Vel>0.7&&Vel<=1.8){g9[1]=Vel*10.0/11.0-7.0/11.0;g9[0]=1-g9[1];flag9=2;}
+        if(Vel>1.8&&Vel<4.5){g9[1]=Vel*10.0/27.0-2.0/3.0;g9[0]=1-g9[1];flag9=3;}
+        if(flag1==3||flag2==3||flag3==3||flag4==3||flag5==3||flag6==3||flag7==3||flag8==3||flag9==3){
+            if(flag1==3){c1[0]=g1[0];c2[0]=g1[1];}
+            if(flag2==3){c1[1]=g2[0];c2[1]=g2[1];}
+            if(flag3==3){c1[2]=g3[0];c2[2]=g3[1];}
+            if(flag4==3){c1[3]=g4[0];c2[3]=g4[1];}
+            if(flag5==3){c1[4]=g5[0];c2[4]=g5[1];}
+            if(flag6==3){c1[5]=g6[0];c2[5]=g6[1];}
+            if(flag7==3){c1[6]=g7[0];c2[6]=g7[1];}
+            if(flag8==3){c1[7]=g8[0];c2[7]=g8[1];}
+            if(flag9==3){c1[8]=g9[0];c2[8]=g9[1];}
+            p[0]=c1[0];p[1]=c2[0];
+            for(i=1;i<9;i++){
+                if(p[0]<c1[i]){p[0]=c1[i];}
+                if(p[1]<c2[i]){p[1]=c2[i];}                
+            }
+            *pCMS=(p[0]*0.6667+p[1])/(p[0]+p[1]);
+        }
+        else if(flag1==2||flag2==2||flag3==2||flag4==2||flag5==2||flag6==2||flag7==2||flag8==2||flag9==2){
+             if(flag1==2){c1[0]=g1[0];c2[0]=g1[1];}
+             if(flag2==2){c1[1]=g2[0];c2[1]=g2[1];}
+             if(flag3==2){c1[2]=g3[0];c2[2]=g3[1];}
+             if(flag4==2){c1[3]=g4[0];c2[3]=g4[1];}
+             if(flag5==2){c1[4]=g5[0];c2[4]=g5[1];}
+             if(flag6==2){c1[5]=g6[0];c2[5]=g6[1];}
+             if(flag7==2){c1[6]=g7[0];c2[6]=g7[1];}
+             if(flag8==2){c1[7]=g8[0];c2[7]=g8[1];}
+             if(flag9==2){c1[8]=g9[0];c2[8]=g9[1];}
+             p[0]=c1[0];p[1]=c2[0];
+             for(i=1;i<9;i++){
+                if(p[0]<c1[i]){p[0]=c1[i];}
+                if(p[1]<c2[i]){p[1]=c2[i];}                
+             }
+             *pCMS=(p[0]*0.3333+p[1]*0.6667)/(p[0]+p[1]);
+        }
+        else{
+             if(flag1==1){c1[0]=g1[0];c2[0]=g1[1];}
+             if(flag2==1){c1[1]=g2[0];c2[1]=g2[1];}
+             if(flag3==1){c1[2]=g3[0];c2[2]=g3[1];}
+             if(flag4==1){c1[3]=g4[0];c2[3]=g4[1];}
+             if(flag5==1){c1[4]=g5[0];c2[4]=g5[1];}
+             if(flag6==1){c1[5]=g6[0];c2[5]=g6[1];}
+             if(flag7==1){c1[6]=g7[0];c2[6]=g7[1];}
+             if(flag8==1){c1[7]=g8[0];c2[7]=g8[1];}
+             if(flag9==1){c1[8]=g9[0];c2[8]=g9[1];}
+             p[0]=c1[0];p[1]=c2[0];
+             for(i=1;i<9;i++){
+                if(p[0]<c1[i]){p[0]=c1[i];}
+                if(p[1]<c2[i]){p[1]=c2[i];}                
+             }
+             *pCMS=(p[1]*0.3333)/(p[0]+p[1]);
+        }
+  }                  
+}
\ No newline at end of file
--- a/embedded/MATH1.h	Tue Jan 10 08:25:27 2017 +0000
+++ b/embedded/MATH1.h	Wed Jan 18 11:19:53 2017 +0000
@@ -9,6 +9,7 @@
 
 public:
 
+    double round(double src, int n);
 	double sqr(double value);
 	double LVRMS(double* d1, double* d2,  uint16_t len);
 	double RMS(double* d, uint16_t len);
@@ -16,6 +17,8 @@
 	double angle(double d1, double d2);
 	double UF(double rms_a, double rms_b, double rms_c,
 			double angle_a, double angle_b, double angle_c);
+    double VDF(double d1, double d2, double d3);
+    double CDF(double d1, double d2, double d3);
 	double doDFT(double *input, double *output, int N);
 	void integal(double *in, double *out, int len, int sps);
 	void detrend(double *y, int len, int sps);
@@ -25,7 +28,9 @@
 	double UBValue(double *maxi, double *x , double *y, double *z, int len);
 	double THD(double *ass_1, double *ass_2, double *ass_3, int pu);
 	double HD(double *dick_1, double *dick_2, double *dick_3, int pu);
-	
+	double BB(double *d1, double *d2, double *d3, int pu);
+	void Fuzzy_Fault(double IUR,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double BB,double peakvalue,double *health,double *stator,double *rotor,double *bearing, double *eccentric);
+	void Fuzzy_Condition(double VUR,double IUR,double VUF,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double VD,double CD,double Vel,double Dis,double *pCMS);
 
 
 private:
@@ -34,3 +39,5 @@
 
 #endif
 
+
+