LU CHIN-HE / Motor

Dependencies:   DMSupport DMemWin

Fork of Motor_Embedded_3rd_emwin by Wei Chang Shen

Committer:
Will_Lu
Date:
Wed Jan 18 11:19:53 2017 +0000
Revision:
2:bfc676294e38
Parent:
1:c6b089f4ff2a
Child:
3:1823bfc913c1
123

Who changed what in which revision?

UserRevisionLine numberNew contents of line
destinyXfate 0:08606a13a816 1 #include "MATH1.h"
destinyXfate 0:08606a13a816 2 #define pi 3.14159265359
Will_Lu 2:bfc676294e38 3 double round(double src, int n)
Will_Lu 2:bfc676294e38 4 {
Will_Lu 2:bfc676294e38 5 double res;
Will_Lu 2:bfc676294e38 6 int i, k = 1;
Will_Lu 2:bfc676294e38 7 for (i = 0; i<n; i++)k *= 10;
Will_Lu 2:bfc676294e38 8 res = int(src*k + 0.5);
Will_Lu 2:bfc676294e38 9 res /= k;
Will_Lu 2:bfc676294e38 10 return res;
Will_Lu 2:bfc676294e38 11 }
destinyXfate 0:08606a13a816 12 double mean(double *d, int len)
destinyXfate 0:08606a13a816 13 {
destinyXfate 0:08606a13a816 14 double mean = 0.0;
destinyXfate 0:08606a13a816 15 double sum = 0.0;
destinyXfate 0:08606a13a816 16
destinyXfate 0:08606a13a816 17 for(int i = 0 ; i<len ; i++) {
destinyXfate 0:08606a13a816 18 sum += d[i];
destinyXfate 0:08606a13a816 19 }
destinyXfate 0:08606a13a816 20
destinyXfate 0:08606a13a816 21 mean = sum / len ;
destinyXfate 0:08606a13a816 22 return mean;
destinyXfate 0:08606a13a816 23 }
destinyXfate 0:08606a13a816 24
destinyXfate 0:08606a13a816 25 double MAXof3(double one, double two, double three)
destinyXfate 0:08606a13a816 26 {
destinyXfate 0:08606a13a816 27 double MAXMAX = one;
destinyXfate 0:08606a13a816 28 double yoyoyo[2]= {two, three};
destinyXfate 0:08606a13a816 29 for(int i = 0; i<2 ; i++) {
destinyXfate 0:08606a13a816 30 if(yoyoyo[i]>MAXMAX) {
destinyXfate 0:08606a13a816 31 MAXMAX = yoyoyo[i];
destinyXfate 0:08606a13a816 32 }
destinyXfate 0:08606a13a816 33 }
destinyXfate 0:08606a13a816 34 return MAXMAX;
destinyXfate 0:08606a13a816 35 }
destinyXfate 0:08606a13a816 36
destinyXfate 0:08606a13a816 37 ///square///
destinyXfate 0:08606a13a816 38 double MATH::sqr(double value)
destinyXfate 0:08606a13a816 39 {
destinyXfate 0:08606a13a816 40 double sqrvalue = value * value;
destinyXfate 0:08606a13a816 41 return sqrvalue;
destinyXfate 0:08606a13a816 42 }
destinyXfate 0:08606a13a816 43
destinyXfate 0:08606a13a816 44
destinyXfate 0:08606a13a816 45 ///line voltage RMS///
destinyXfate 0:08606a13a816 46 double MATH::LVRMS(double* d1, double* d2, uint16_t len)
destinyXfate 0:08606a13a816 47 {
destinyXfate 0:08606a13a816 48 double sum = 0.0;
destinyXfate 0:08606a13a816 49 for (int i = 0; i < len; i++) {
destinyXfate 0:08606a13a816 50 sum += sqr((d1[i]-d2[i]));
destinyXfate 0:08606a13a816 51 }
destinyXfate 0:08606a13a816 52 double RMS = sqrt(sum/len);
destinyXfate 0:08606a13a816 53 return RMS;
destinyXfate 0:08606a13a816 54 }
destinyXfate 0:08606a13a816 55
destinyXfate 0:08606a13a816 56 ///RMS///
destinyXfate 0:08606a13a816 57 double MATH::RMS(double* d, uint16_t len)
destinyXfate 0:08606a13a816 58 {
destinyXfate 0:08606a13a816 59 double sum = 0.0;
destinyXfate 0:08606a13a816 60 for (int i = 0; i < len; i++) {
destinyXfate 0:08606a13a816 61 sum += d[i]*d[i];
destinyXfate 0:08606a13a816 62 }
destinyXfate 0:08606a13a816 63 double rms = sqrt(sum/len)*1.0;
destinyXfate 0:08606a13a816 64 return rms;
destinyXfate 0:08606a13a816 65 }
destinyXfate 0:08606a13a816 66
Will_Lu 2:bfc676294e38 67 ///Voltage Deviation Factor///
Will_Lu 2:bfc676294e38 68 double MATH::VDF(double d1, double d2, double d3)
Will_Lu 2:bfc676294e38 69 {
Will_Lu 2:bfc676294e38 70 double dmax=0.0;
Will_Lu 2:bfc676294e38 71 double x[3]={fabs((d1-220)/220)*100,fabs((d2-220)/220)*100,fabs((d3-220)/220)*100};
Will_Lu 2:bfc676294e38 72 for(int i=0 ; i<3 ; i++) {
Will_Lu 2:bfc676294e38 73 if(x[i]>dmax) {
Will_Lu 2:bfc676294e38 74 dmax=x[i];
Will_Lu 2:bfc676294e38 75 }
Will_Lu 2:bfc676294e38 76 }
Will_Lu 2:bfc676294e38 77 return dmax;
Will_Lu 2:bfc676294e38 78 }
Will_Lu 2:bfc676294e38 79 ///Currrent Deviation Factor///
Will_Lu 2:bfc676294e38 80 double MATH::CDF(double d1, double d2, double d3)
Will_Lu 2:bfc676294e38 81 {
Will_Lu 2:bfc676294e38 82 double dmax=0.0;
Will_Lu 2:bfc676294e38 83 double x[3]={d1,d2,d3};
Will_Lu 2:bfc676294e38 84 for(int i=0 ; i<3 ; i++) {
Will_Lu 2:bfc676294e38 85 if(x[i]>dmax) {
Will_Lu 2:bfc676294e38 86 dmax=x[i];
Will_Lu 2:bfc676294e38 87 }
Will_Lu 2:bfc676294e38 88 }
Will_Lu 2:bfc676294e38 89 double CDF=(dmax-6.1)/6.1*100;
Will_Lu 2:bfc676294e38 90 if(CDF<0){CDF=0;}
Will_Lu 2:bfc676294e38 91 return CDF;
Will_Lu 2:bfc676294e38 92 }
destinyXfate 0:08606a13a816 93 ///unbalance rate///
destinyXfate 0:08606a13a816 94 double MATH::UR(double d1, double d2, double d3)
destinyXfate 0:08606a13a816 95 {
destinyXfate 0:08606a13a816 96 double abc_avg = (d1+d2+d3) / 3.0;
destinyXfate 0:08606a13a816 97 double x[3] = {fabs(d1 - abc_avg), fabs(d2 - abc_avg), fabs(d3 - abc_avg)};
destinyXfate 0:08606a13a816 98 double dmax = 0.0;
destinyXfate 0:08606a13a816 99 for(int i=0 ; i<3 ; i++) {
destinyXfate 0:08606a13a816 100 if(x[i]>dmax) {
destinyXfate 0:08606a13a816 101 dmax=x[i];
destinyXfate 0:08606a13a816 102 }
destinyXfate 0:08606a13a816 103 }
destinyXfate 0:08606a13a816 104 double URv = dmax / abc_avg * 100.0;
destinyXfate 0:08606a13a816 105 return URv;
destinyXfate 0:08606a13a816 106 }
destinyXfate 0:08606a13a816 107
destinyXfate 0:08606a13a816 108
destinyXfate 0:08606a13a816 109 ///angle(rad)///
destinyXfate 0:08606a13a816 110 double MATH::angle(double d1, double d2)
destinyXfate 0:08606a13a816 111 {
destinyXfate 0:08606a13a816 112
destinyXfate 0:08606a13a816 113 double sqrt_2 = sqrt(2.0);
destinyXfate 0:08606a13a816 114 if (d1 > 0.0 ) {
destinyXfate 0:08606a13a816 115 if(d2 > 0.0) {
destinyXfate 0:08606a13a816 116 double rad = fabs(atan(d2 / d1));
destinyXfate 0:08606a13a816 117 return (0.0 + rad);
destinyXfate 0:08606a13a816 118 } else {
destinyXfate 0:08606a13a816 119 double rad = fabs(atan(d2 / d1));
destinyXfate 0:08606a13a816 120 return (0.0 - rad);
destinyXfate 0:08606a13a816 121 }
destinyXfate 0:08606a13a816 122 } else {
destinyXfate 0:08606a13a816 123 if(d2 > 0.0) {
destinyXfate 0:08606a13a816 124 double rad = fabs(atan(d2 / d1));
destinyXfate 0:08606a13a816 125 return (pi - rad);
destinyXfate 0:08606a13a816 126 } else {
destinyXfate 0:08606a13a816 127 double rad = fabs(atan(d2 / d1));
destinyXfate 0:08606a13a816 128 return (pi + rad);
destinyXfate 0:08606a13a816 129 }
destinyXfate 0:08606a13a816 130 }
destinyXfate 0:08606a13a816 131 }
destinyXfate 0:08606a13a816 132
destinyXfate 0:08606a13a816 133 ///Unbalance Factor///
destinyXfate 0:08606a13a816 134 double MATH::UF(double rms_a, double rms_b, double rms_c, double angle_a, double angle_b, double angle_c)
destinyXfate 0:08606a13a816 135 {
destinyXfate 0:08606a13a816 136 double a = 120.0 * pi / 180 ; /// degree -> rad
destinyXfate 0:08606a13a816 137 double ang_v1_1 = angle_b + a*2.0 ;
destinyXfate 0:08606a13a816 138 double ang_v1_2 = angle_c + a;
destinyXfate 0:08606a13a816 139 double ang_v2_1 = angle_b + a;
destinyXfate 0:08606a13a816 140 double ang_v2_2 = angle_c + a*2.0;
destinyXfate 0:08606a13a816 141
destinyXfate 0:08606a13a816 142 double v1 = sqrt(sqr((rms_a * cos(angle_a)) + (rms_b * cos(ang_v1_1)) + (rms_c * cos(ang_v1_2)))
destinyXfate 0:08606a13a816 143 + sqr((rms_a * sin(angle_a)) + (rms_b * sin(ang_v1_1)) + (rms_c * sin(ang_v1_2))));
destinyXfate 0:08606a13a816 144 double v2 = sqrt(sqr((rms_a * cos(angle_a)) + (rms_b * cos(ang_v2_1)) + (rms_c * cos(ang_v2_2)))
destinyXfate 0:08606a13a816 145 + sqr((rms_a * sin(angle_a)) + (rms_b * sin(ang_v2_1)) + (rms_c * sin(ang_v2_2))));
destinyXfate 0:08606a13a816 146
destinyXfate 0:08606a13a816 147 return (v2/v1)*100.0 ;
destinyXfate 0:08606a13a816 148 }
destinyXfate 0:08606a13a816 149
destinyXfate 0:08606a13a816 150 ///DFT///
destinyXfate 0:08606a13a816 151 double MATH::doDFT(double *input, double *output, int N)
destinyXfate 0:08606a13a816 152 {
destinyXfate 0:08606a13a816 153 for (int i=0 ; i<N ; i++) {
destinyXfate 0:08606a13a816 154 double re = 0;
destinyXfate 0:08606a13a816 155 double im = 0;
destinyXfate 0:08606a13a816 156 for(int j=0 ; j<N ; j++) {
destinyXfate 0:08606a13a816 157 re += input[j]*cos(2*pi*i*j/N);
destinyXfate 0:08606a13a816 158 im += input[j]*(-sin(2*pi*i*j/N));
destinyXfate 0:08606a13a816 159 }
destinyXfate 0:08606a13a816 160 output[i] = sqrt(sqr(re) + sqr(im))/N;
destinyXfate 0:08606a13a816 161 }
destinyXfate 0:08606a13a816 162 return *output;
destinyXfate 0:08606a13a816 163
destinyXfate 0:08606a13a816 164 }
destinyXfate 0:08606a13a816 165
destinyXfate 0:08606a13a816 166
destinyXfate 0:08606a13a816 167 void MATH::integal(double *in, double *out, int len, int sps)
destinyXfate 0:08606a13a816 168 {
destinyXfate 0:08606a13a816 169
destinyXfate 0:08606a13a816 170 double t = 1.0 /sps ;
Will_Lu 1:c6b089f4ff2a 171 double mean1;
destinyXfate 0:08606a13a816 172 double sum = 0.0;
destinyXfate 0:08606a13a816 173 out[0] = 0 ;
destinyXfate 0:08606a13a816 174 double v = 0;
destinyXfate 0:08606a13a816 175
destinyXfate 0:08606a13a816 176 for(int i = 1 ; i < len ; i++) {
destinyXfate 0:08606a13a816 177 v += ((in[i - 1] + in[i]) * t / 2.0); /// m/s --> *1000 mm/s --> *1000 *1000 um/s
destinyXfate 0:08606a13a816 178 out[i] = v;
destinyXfate 0:08606a13a816 179 }
destinyXfate 0:08606a13a816 180
Will_Lu 1:c6b089f4ff2a 181 mean1 = mean(out, len);
destinyXfate 0:08606a13a816 182
destinyXfate 0:08606a13a816 183 for(int i = 0 ; i<len ; i++) {
Will_Lu 1:c6b089f4ff2a 184 out[i] = ( out[i] - mean1 ) * 1000;
destinyXfate 0:08606a13a816 185 }
destinyXfate 0:08606a13a816 186
destinyXfate 0:08606a13a816 187
destinyXfate 0:08606a13a816 188 }
destinyXfate 0:08606a13a816 189
destinyXfate 0:08606a13a816 190 void MATH::detrend(double *y, int len, int sps)
destinyXfate 0:08606a13a816 191 {
destinyXfate 0:08606a13a816 192 int i;
destinyXfate 0:08606a13a816 193 double t = 1.0 /sps ;
destinyXfate 0:08606a13a816 194
destinyXfate 0:08606a13a816 195 double sum_k1 = 0.0, sum_k2 = 0.0, xbar = 0.0, ybar = 0.0;
destinyXfate 0:08606a13a816 196
destinyXfate 0:08606a13a816 197 double *x, *d1, *d2;
destinyXfate 0:08606a13a816 198 x = (double*) malloc(sizeof(double) * len);
destinyXfate 0:08606a13a816 199 d1 = (double*) malloc(sizeof(double) * len);
destinyXfate 0:08606a13a816 200 d2 = (double*) malloc(sizeof(double) * len);
destinyXfate 0:08606a13a816 201
destinyXfate 0:08606a13a816 202 for(i=0 ; i<len ; i++) {
destinyXfate 0:08606a13a816 203 x[i] = (i+1)*t;
destinyXfate 0:08606a13a816 204 }
destinyXfate 0:08606a13a816 205
destinyXfate 0:08606a13a816 206 xbar = mean(x, len);
destinyXfate 0:08606a13a816 207 ybar = mean(y, len);
destinyXfate 0:08606a13a816 208
destinyXfate 0:08606a13a816 209 for(i=0 ; i<len ; i++) {
destinyXfate 0:08606a13a816 210 d1[i] = x[i]-xbar;
destinyXfate 0:08606a13a816 211 d2[i] = y[i]-ybar;
destinyXfate 0:08606a13a816 212 sum_k1 += d1[i]*d2[i];
destinyXfate 0:08606a13a816 213 sum_k2 += d1[i]*d1[i];
destinyXfate 0:08606a13a816 214 }
destinyXfate 0:08606a13a816 215
destinyXfate 0:08606a13a816 216 double A,B;
destinyXfate 0:08606a13a816 217 A = sum_k1/sum_k2;
destinyXfate 0:08606a13a816 218 B = ybar-A*xbar;
destinyXfate 0:08606a13a816 219
destinyXfate 0:08606a13a816 220 double * trend;
destinyXfate 0:08606a13a816 221 trend = (double*) malloc(sizeof(double) * len);
destinyXfate 0:08606a13a816 222
destinyXfate 0:08606a13a816 223 for(i=0 ; i<len ; i++) {
destinyXfate 0:08606a13a816 224 trend[i]=A*x[i] + B;
destinyXfate 0:08606a13a816 225 y[i]=y[i]-trend[i];
destinyXfate 0:08606a13a816 226 }
destinyXfate 0:08606a13a816 227
destinyXfate 0:08606a13a816 228 }
destinyXfate 0:08606a13a816 229
destinyXfate 0:08606a13a816 230
destinyXfate 0:08606a13a816 231 double MATH::Peak2Peak(double *in, int len)
destinyXfate 0:08606a13a816 232 {
destinyXfate 0:08606a13a816 233 int i;
destinyXfate 0:08606a13a816 234 double outpp;
destinyXfate 0:08606a13a816 235
destinyXfate 0:08606a13a816 236 double MAX = in[0];
destinyXfate 0:08606a13a816 237 for(i = 1 ; i < len ; i++) {
destinyXfate 0:08606a13a816 238 MAX = (in[i] > MAX ? in[i]:MAX ) ;
destinyXfate 0:08606a13a816 239 }
destinyXfate 0:08606a13a816 240
destinyXfate 0:08606a13a816 241 double min = in[0];
destinyXfate 0:08606a13a816 242 for(i = 1 ; i < len ; i++) {
destinyXfate 0:08606a13a816 243 min = (in[i] < min ? in[i]:min ) ;
destinyXfate 0:08606a13a816 244 }
destinyXfate 0:08606a13a816 245
destinyXfate 0:08606a13a816 246 outpp = MAX - min;
destinyXfate 0:08606a13a816 247
destinyXfate 0:08606a13a816 248 return outpp;
destinyXfate 0:08606a13a816 249 }
destinyXfate 0:08606a13a816 250
destinyXfate 0:08606a13a816 251
destinyXfate 0:08606a13a816 252 double MATH::PeakValue(double *x , double *y, double *z, int len)
destinyXfate 0:08606a13a816 253 {
destinyXfate 0:08606a13a816 254 double xmax = fabs(x[0]), ymax = fabs(y[0]), zmax = fabs(z[0]);
destinyXfate 0:08606a13a816 255 for(int i =1; i<len ; i++) {
destinyXfate 0:08606a13a816 256 if(fabs(x[i]) > xmax) {
destinyXfate 0:08606a13a816 257 xmax = fabs(x[i]);
destinyXfate 0:08606a13a816 258 }
destinyXfate 0:08606a13a816 259 if(fabs(y[i]) > ymax) {
destinyXfate 0:08606a13a816 260 ymax = fabs(y[i]);
Will_Lu 2:bfc676294e38 261 }
destinyXfate 0:08606a13a816 262 if(fabs(z[i]) > zmax) {
destinyXfate 0:08606a13a816 263 zmax = fabs(z[i]);
destinyXfate 0:08606a13a816 264 }
destinyXfate 0:08606a13a816 265 }
destinyXfate 0:08606a13a816 266 double MAX = ymax;
destinyXfate 0:08606a13a816 267 double xzmax[2]= {xmax, zmax};
destinyXfate 0:08606a13a816 268 for(int i=0 ; i<2 ; i++) {
destinyXfate 0:08606a13a816 269 if(xzmax[i] > MAX) {
destinyXfate 0:08606a13a816 270 MAX = xzmax[i];
destinyXfate 0:08606a13a816 271 }
destinyXfate 0:08606a13a816 272 }
destinyXfate 0:08606a13a816 273
destinyXfate 0:08606a13a816 274 return MAX ;
destinyXfate 0:08606a13a816 275 }
destinyXfate 0:08606a13a816 276
destinyXfate 0:08606a13a816 277
destinyXfate 0:08606a13a816 278 double MATH::UBValue(double *maxi, double *x , double *y, double *z, int len)
destinyXfate 0:08606a13a816 279 {
destinyXfate 0:08606a13a816 280 double xmin = fabs(x[0]) , ymin = fabs(y[0]) , zmin = fabs(z[0]);
destinyXfate 0:08606a13a816 281 for(int i = 1 ; i<len ; i++) {
destinyXfate 0:08606a13a816 282 if(fabs(x[i]) < xmin) {
destinyXfate 0:08606a13a816 283 xmin = fabs(x[i]);
destinyXfate 0:08606a13a816 284 }
destinyXfate 0:08606a13a816 285 if(fabs(y[i]) < ymin) {
destinyXfate 0:08606a13a816 286 ymin = fabs(y[i]);
destinyXfate 0:08606a13a816 287 }
destinyXfate 0:08606a13a816 288 if(fabs(z[i]) < zmin) {
destinyXfate 0:08606a13a816 289 zmin = fabs(z[i]);
destinyXfate 0:08606a13a816 290 }
destinyXfate 0:08606a13a816 291 }
destinyXfate 0:08606a13a816 292 double MIN = zmin;
destinyXfate 0:08606a13a816 293 double yxmin[2]= {ymin, xmin};
destinyXfate 0:08606a13a816 294 for(int i=0 ; i<2 ; i++) {
destinyXfate 0:08606a13a816 295 if(yxmin[i] < MIN) {
destinyXfate 0:08606a13a816 296 MIN = yxmin[i];
destinyXfate 0:08606a13a816 297 }
destinyXfate 0:08606a13a816 298 }
destinyXfate 0:08606a13a816 299
destinyXfate 0:08606a13a816 300 double UB = *maxi + 0.5 *( *maxi - MIN ) / ( len - 1 );
destinyXfate 0:08606a13a816 301 return UB;
destinyXfate 0:08606a13a816 302 }
destinyXfate 0:08606a13a816 303
destinyXfate 0:08606a13a816 304
destinyXfate 0:08606a13a816 305 double MATH::THD(double *ass_1, double *ass_2, double *ass_3, int pu)
destinyXfate 0:08606a13a816 306 {
destinyXfate 0:08606a13a816 307 double WTF, WTFa, WTFb, WTFc;
Will_Lu 2:bfc676294e38 308 double you_1=0, you_2=0, you_3=0, fu_1, fu_2, fu_3;
Will_Lu 2:bfc676294e38 309 int i=0;
destinyXfate 0:08606a13a816 310
destinyXfate 0:08606a13a816 311 switch(pu) {
destinyXfate 0:08606a13a816 312 case 10000 :
Will_Lu 2:bfc676294e38 313
Will_Lu 2:bfc676294e38 314 for(i=0;i<10;i++){you_1 = you_1+sqr(ass_1[120+i*60]);}
destinyXfate 0:08606a13a816 315 fu_1 = sqrt(you_1);
destinyXfate 0:08606a13a816 316 WTFa = (fu_1 / ass_1[60])*100;
destinyXfate 0:08606a13a816 317
Will_Lu 2:bfc676294e38 318 for(i=0;i<10;i++){you_2 = you_2+sqr(ass_2[120+i*60]);}
destinyXfate 0:08606a13a816 319 fu_2 = sqrt(you_2);
destinyXfate 0:08606a13a816 320 WTFb = (fu_2 / ass_2[60])*100;
destinyXfate 0:08606a13a816 321
Will_Lu 2:bfc676294e38 322 for(i=0;i<10;i++){you_3 = you_3+sqr(ass_3[120+i*60]);}
destinyXfate 0:08606a13a816 323 fu_3 = sqrt(you_3);
destinyXfate 0:08606a13a816 324 WTFc = (fu_3 / ass_3[60])*100;
destinyXfate 0:08606a13a816 325
destinyXfate 0:08606a13a816 326 WTF = MAXof3(WTFa, WTFb, WTFc);
destinyXfate 0:08606a13a816 327 break;
destinyXfate 0:08606a13a816 328 case 8192 :
destinyXfate 0:08606a13a816 329
destinyXfate 0:08606a13a816 330 double opps_2, opps_3, opps_4, opps_5, opps_6, opps_7, opps_8, opps_9, opps_10, opps_11;
destinyXfate 0:08606a13a816 331
destinyXfate 0:08606a13a816 332 opps_2 = (ass_1[49] > ass_1[50] ? ass_1[49] :ass_1[50]);
destinyXfate 0:08606a13a816 333 opps_4 = (ass_1[98] > ass_1[99] ? ass_1[98] :ass_1[99]);
destinyXfate 0:08606a13a816 334 opps_6 = (ass_1[147] > ass_1[148] ? ass_1[147] :ass_1[148]);
destinyXfate 0:08606a13a816 335 opps_7 = (ass_1[172] > ass_1[173] ? ass_1[172] :ass_1[173]);
destinyXfate 0:08606a13a816 336 opps_9 = (ass_1[221] > ass_1[222] ? ass_1[221] :ass_1[222]);
destinyXfate 0:08606a13a816 337 opps_11 = (ass_1[270] > ass_1[271] ? ass_1[270] :ass_1[271]);
destinyXfate 0:08606a13a816 338 opps_3 = MAXof3(ass_1[73], ass_1[74], ass_1[75]);
destinyXfate 0:08606a13a816 339 opps_5 = MAXof3(ass_1[122], ass_1[123], ass_1[124]);
destinyXfate 0:08606a13a816 340 opps_8 = MAXof3(ass_1[196], ass_1[197], ass_1[198]);
destinyXfate 0:08606a13a816 341 opps_10 = MAXof3(ass_1[245], ass_1[246], ass_1[247]);
destinyXfate 0:08606a13a816 342
destinyXfate 0:08606a13a816 343 you_1 = (sqr(opps_2) + sqr(opps_3) + sqr(opps_4) + sqr(opps_5) + sqr(opps_6) + sqr(opps_7) + sqr(opps_8) + sqr(opps_9) + sqr(opps_10) + sqr(opps_11));
destinyXfate 0:08606a13a816 344 fu_1 = sqrt(you_1);
destinyXfate 0:08606a13a816 345 WTFa = (fu_1 / ass_1[24])*100;
destinyXfate 0:08606a13a816 346
destinyXfate 0:08606a13a816 347 opps_2 = (ass_2[49] > ass_2[50] ? ass_2[49] :ass_2[50]);
destinyXfate 0:08606a13a816 348 opps_4 = (ass_2[98] > ass_2[99] ? ass_2[98] :ass_2[99]);
destinyXfate 0:08606a13a816 349 opps_6 = (ass_2[147] > ass_2[148] ? ass_2[147] :ass_2[148]);
destinyXfate 0:08606a13a816 350 opps_7 = (ass_2[172] > ass_2[173] ? ass_2[172] :ass_2[173]);
destinyXfate 0:08606a13a816 351 opps_9 = (ass_2[221] > ass_2[222] ? ass_2[221] :ass_2[222]);
destinyXfate 0:08606a13a816 352 opps_11 = (ass_2[270] > ass_2[271] ? ass_2[270] :ass_2[271]);
destinyXfate 0:08606a13a816 353 opps_3 = MAXof3(ass_2[73], ass_2[74], ass_2[75]);
destinyXfate 0:08606a13a816 354 opps_5 = MAXof3(ass_2[122], ass_2[123], ass_2[124]);
destinyXfate 0:08606a13a816 355 opps_8 = MAXof3(ass_2[196], ass_2[197], ass_2[198]);
destinyXfate 0:08606a13a816 356 opps_10 = MAXof3(ass_2[245], ass_2[246], ass_2[247]);
destinyXfate 0:08606a13a816 357
destinyXfate 0:08606a13a816 358 you_2 = (sqr(opps_2) + sqr(opps_3) + sqr(opps_4) + sqr(opps_5) + sqr(opps_6) + sqr(opps_7) + sqr(opps_8) + sqr(opps_9) + sqr(opps_10) + sqr(opps_11));
destinyXfate 0:08606a13a816 359 fu_2 = sqrt(you_2);
destinyXfate 0:08606a13a816 360 WTFb = (fu_2 / ass_2[24])*100;
destinyXfate 0:08606a13a816 361
destinyXfate 0:08606a13a816 362 opps_2 = (ass_3[49] > ass_3[50] ? ass_3[49] :ass_3[50]);
destinyXfate 0:08606a13a816 363 opps_4 = (ass_3[98] > ass_3[99] ? ass_3[98] :ass_3[99]);
destinyXfate 0:08606a13a816 364 opps_6 = (ass_3[147] > ass_3[148] ? ass_3[147] :ass_3[148]);
destinyXfate 0:08606a13a816 365 opps_7 = (ass_3[172] > ass_3[173] ? ass_3[172] :ass_3[173]);
destinyXfate 0:08606a13a816 366 opps_9 = (ass_3[221] > ass_3[222] ? ass_3[221] :ass_3[222]);
destinyXfate 0:08606a13a816 367 opps_11 = (ass_3[270] > ass_3[271] ? ass_3[270] :ass_3[271]);
destinyXfate 0:08606a13a816 368 opps_3 = MAXof3(ass_3[73], ass_3[74], ass_3[75]);
destinyXfate 0:08606a13a816 369 opps_5 = MAXof3(ass_3[122], ass_3[123], ass_3[124]);
destinyXfate 0:08606a13a816 370 opps_8 = MAXof3(ass_3[196], ass_3[197], ass_3[198]);
destinyXfate 0:08606a13a816 371 opps_10 = MAXof3(ass_3[245], ass_3[246], ass_3[247]);
destinyXfate 0:08606a13a816 372
destinyXfate 0:08606a13a816 373 you_3 = (sqr(opps_2) + sqr(opps_3) + sqr(opps_4) + sqr(opps_5) + sqr(opps_6) + sqr(opps_7) + sqr(opps_8) + sqr(opps_9) + sqr(opps_10) + sqr(opps_11));
destinyXfate 0:08606a13a816 374 fu_3 = sqrt(you_3);
destinyXfate 0:08606a13a816 375 WTFc = (fu_3 / ass_3[24])*100;
destinyXfate 0:08606a13a816 376
destinyXfate 0:08606a13a816 377 WTF = MAXof3(WTFa, WTFb, WTFc);
destinyXfate 0:08606a13a816 378 break;
destinyXfate 0:08606a13a816 379 }
destinyXfate 0:08606a13a816 380
destinyXfate 0:08606a13a816 381 return WTF;
destinyXfate 0:08606a13a816 382 }
destinyXfate 0:08606a13a816 383
destinyXfate 0:08606a13a816 384
destinyXfate 0:08606a13a816 385 double MATH::HD(double *ck_1, double *ck_2, double *ck_3, int pu)
destinyXfate 0:08606a13a816 386 {
destinyXfate 0:08606a13a816 387 double blow, blow1, blow2, blow3;
destinyXfate 0:08606a13a816 388 double su_3, su_5, su_7, su_9, su_11;
destinyXfate 0:08606a13a816 389
destinyXfate 0:08606a13a816 390 switch(pu) {
destinyXfate 0:08606a13a816 391
destinyXfate 0:08606a13a816 392 case 10000:
destinyXfate 0:08606a13a816 393
destinyXfate 0:08606a13a816 394 su_3 = (ck_1[180] / ck_1[60])*100;
destinyXfate 0:08606a13a816 395 su_5 = (ck_1[300] / ck_1[60])*100;
destinyXfate 0:08606a13a816 396 su_7 = (ck_1[420] / ck_1[60])*100;
destinyXfate 0:08606a13a816 397 su_9 = (ck_1[540] / ck_1[60])*100;
destinyXfate 0:08606a13a816 398 su_11 = (ck_1[660] / ck_1[60])*100;
destinyXfate 0:08606a13a816 399
destinyXfate 0:08606a13a816 400 blow1 = su_3;
Will_Lu 2:bfc676294e38 401 //double job[4]= {su_5, su_7, su_9, su_11};
Will_Lu 2:bfc676294e38 402 //for(int i = 0 ; i<4 ; i++) {
Will_Lu 2:bfc676294e38 403 // if(job[i] > blow1) {
Will_Lu 2:bfc676294e38 404 // blow1 = job[i];
Will_Lu 2:bfc676294e38 405 // }
Will_Lu 2:bfc676294e38 406 //}
destinyXfate 0:08606a13a816 407
destinyXfate 0:08606a13a816 408 su_3 = (ck_2[180] / ck_2[60])*100;
destinyXfate 0:08606a13a816 409 su_5 = (ck_2[300] / ck_2[60])*100;
destinyXfate 0:08606a13a816 410 su_7 = (ck_2[420] / ck_2[60])*100;
destinyXfate 0:08606a13a816 411 su_9 = (ck_2[540] / ck_2[60])*100;
destinyXfate 0:08606a13a816 412 su_11 = (ck_2[660] / ck_2[60])*100;
destinyXfate 0:08606a13a816 413
destinyXfate 0:08606a13a816 414 blow2 = su_3;
Will_Lu 2:bfc676294e38 415 //double job2[4]= {su_5, su_7, su_9, su_11};
Will_Lu 2:bfc676294e38 416 //for(int i = 0 ; i<4 ; i++) {
Will_Lu 2:bfc676294e38 417 // if(job2[i] > blow2) {
Will_Lu 2:bfc676294e38 418 // blow2 = job2[i];
Will_Lu 2:bfc676294e38 419 // }
Will_Lu 2:bfc676294e38 420 //}
destinyXfate 0:08606a13a816 421
destinyXfate 0:08606a13a816 422 su_3 = (ck_3[180] / ck_3[60])*100;
destinyXfate 0:08606a13a816 423 su_5 = (ck_3[300] / ck_3[60])*100;
destinyXfate 0:08606a13a816 424 su_7 = (ck_3[420] / ck_3[60])*100;
destinyXfate 0:08606a13a816 425 su_9 = (ck_3[540] / ck_3[60])*100;
destinyXfate 0:08606a13a816 426 su_11 = (ck_3[660] / ck_3[60])*100;
destinyXfate 0:08606a13a816 427
destinyXfate 0:08606a13a816 428 blow3 = su_3;
Will_Lu 2:bfc676294e38 429 //double job3[4]= {su_5, su_7, su_9, su_11};
Will_Lu 2:bfc676294e38 430 //for(int i = 0 ; i<4 ; i++) {
Will_Lu 2:bfc676294e38 431 // if(job3[i] > blow3) {
Will_Lu 2:bfc676294e38 432 // blow3 = job3[i];
Will_Lu 2:bfc676294e38 433 // }
Will_Lu 2:bfc676294e38 434 //}
destinyXfate 0:08606a13a816 435
destinyXfate 0:08606a13a816 436 blow = MAXof3(blow1, blow2, blow3);
destinyXfate 0:08606a13a816 437
destinyXfate 0:08606a13a816 438 break;
destinyXfate 0:08606a13a816 439
destinyXfate 0:08606a13a816 440 case 8192 :
destinyXfate 0:08606a13a816 441
destinyXfate 0:08606a13a816 442 double opps_3, opps_5, opps_7, opps_9, opps_11;
destinyXfate 0:08606a13a816 443 opps_3 = MAXof3(ck_1[73], ck_1[74], ck_1[75]);
destinyXfate 0:08606a13a816 444 opps_5 = MAXof3(ck_1[122], ck_1[123], ck_1[124]);
destinyXfate 0:08606a13a816 445 opps_7 = (ck_1[172] > ck_1[173] ? ck_1[172] :ck_1[173]);
destinyXfate 0:08606a13a816 446 opps_9 = (ck_1[221] > ck_1[222] ? ck_1[221] :ck_1[222]);
destinyXfate 0:08606a13a816 447 opps_11 = (ck_1[270] > ck_1[271] ? ck_1[270] :ck_1[271]);
destinyXfate 0:08606a13a816 448
destinyXfate 0:08606a13a816 449
destinyXfate 0:08606a13a816 450 su_3 = (opps_3 / ck_1[24])*100;
destinyXfate 0:08606a13a816 451 su_5 = (opps_5 / ck_1[24])*100;
destinyXfate 0:08606a13a816 452 su_7 = (opps_7 / ck_1[24])*100;
destinyXfate 0:08606a13a816 453 su_9 = (opps_9 / ck_1[24])*100;
destinyXfate 0:08606a13a816 454 su_11 = (opps_11 / ck_1[24])*100;
destinyXfate 0:08606a13a816 455
destinyXfate 0:08606a13a816 456 blow1 = su_3;
destinyXfate 0:08606a13a816 457 double job4[4]= {su_5, su_7, su_9, su_11};
destinyXfate 0:08606a13a816 458 for(int i = 0 ; i<4 ; i++) {
destinyXfate 0:08606a13a816 459 if(job4[i] > blow1) {
destinyXfate 0:08606a13a816 460 blow1 = job4[i];
destinyXfate 0:08606a13a816 461 }
destinyXfate 0:08606a13a816 462 }
destinyXfate 0:08606a13a816 463
destinyXfate 0:08606a13a816 464
destinyXfate 0:08606a13a816 465 opps_3 = MAXof3(ck_2[73], ck_2[74], ck_2[75]);
destinyXfate 0:08606a13a816 466 opps_5 = MAXof3(ck_2[122], ck_2[123], ck_2[124]);
destinyXfate 0:08606a13a816 467 opps_7 = (ck_2[172] > ck_2[173] ? ck_2[172] :ck_2[173]);
destinyXfate 0:08606a13a816 468 opps_9 = (ck_2[221] > ck_2[222] ? ck_2[221] :ck_2[222]);
destinyXfate 0:08606a13a816 469 opps_11 = (ck_2[270] > ck_2[271] ? ck_2[270] :ck_2[271]);
destinyXfate 0:08606a13a816 470
destinyXfate 0:08606a13a816 471 su_3 = (opps_3 / ck_2[24])*100;
destinyXfate 0:08606a13a816 472 su_5 = (opps_5 / ck_2[24])*100;
destinyXfate 0:08606a13a816 473 su_7 = (opps_7 / ck_2[24])*100;
destinyXfate 0:08606a13a816 474 su_9 = (opps_9 / ck_2[24])*100;
destinyXfate 0:08606a13a816 475 su_11 = (opps_11 / ck_2[24])*100;
destinyXfate 0:08606a13a816 476
destinyXfate 0:08606a13a816 477 blow2 = su_3;
destinyXfate 0:08606a13a816 478 double job5[4]= {su_5, su_7, su_9, su_11};
destinyXfate 0:08606a13a816 479
destinyXfate 0:08606a13a816 480 for(int i = 0 ; i<4 ; i++) {
destinyXfate 0:08606a13a816 481 if(job5[i] > blow2) {
destinyXfate 0:08606a13a816 482 blow2 = job5[i];
destinyXfate 0:08606a13a816 483 }
destinyXfate 0:08606a13a816 484 }
destinyXfate 0:08606a13a816 485
destinyXfate 0:08606a13a816 486
destinyXfate 0:08606a13a816 487 opps_3 = MAXof3(ck_3[73], ck_3[74], ck_3[75]);
destinyXfate 0:08606a13a816 488 opps_5 = MAXof3(ck_3[122], ck_3[123], ck_3[124]);
destinyXfate 0:08606a13a816 489 opps_7 = (ck_3[172] > ck_3[173] ? ck_3[172] :ck_3[173]);
destinyXfate 0:08606a13a816 490 opps_9 = (ck_3[221] > ck_3[222] ? ck_3[221] :ck_3[222]);
destinyXfate 0:08606a13a816 491 opps_11 = (ck_3[270] > ck_3[271] ? ck_3[270] :ck_3[271]);
destinyXfate 0:08606a13a816 492
destinyXfate 0:08606a13a816 493 su_3 = (opps_3 / ck_3[24])*100;
destinyXfate 0:08606a13a816 494 su_5 = (opps_5 / ck_3[24])*100;
destinyXfate 0:08606a13a816 495 su_7 = (opps_7 / ck_3[24])*100;
destinyXfate 0:08606a13a816 496 su_9 = (opps_9 / ck_3[24])*100;
destinyXfate 0:08606a13a816 497 su_11 = (opps_11 / ck_3[24])*100;
destinyXfate 0:08606a13a816 498
destinyXfate 0:08606a13a816 499 blow3 = su_3;
destinyXfate 0:08606a13a816 500 double job6[4]= {su_5, su_7, su_9, su_11};
destinyXfate 0:08606a13a816 501
destinyXfate 0:08606a13a816 502 for(int i = 0 ; i<4 ; i++) {
destinyXfate 0:08606a13a816 503 if(job6[i] > blow3) {
destinyXfate 0:08606a13a816 504 blow3 = job6[i];
destinyXfate 0:08606a13a816 505 }
destinyXfate 0:08606a13a816 506 }
destinyXfate 0:08606a13a816 507
destinyXfate 0:08606a13a816 508 blow = MAXof3(blow1, blow2, blow3);
destinyXfate 0:08606a13a816 509
destinyXfate 0:08606a13a816 510 break;
destinyXfate 0:08606a13a816 511 }
destinyXfate 0:08606a13a816 512
destinyXfate 0:08606a13a816 513 return blow;
destinyXfate 0:08606a13a816 514
destinyXfate 0:08606a13a816 515 }
Will_Lu 2:bfc676294e38 516 double MATH::BB(double *d1, double *d2, double *d3, int pu)
Will_Lu 2:bfc676294e38 517 {
Will_Lu 2:bfc676294e38 518 switch(pu){
Will_Lu 2:bfc676294e38 519 case 10000:
Will_Lu 2:bfc676294e38 520
Will_Lu 2:bfc676294e38 521 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]};
Will_Lu 2:bfc676294e38 522 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]};
Will_Lu 2:bfc676294e38 523 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]};
Will_Lu 2:bfc676294e38 524 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;
Will_Lu 2:bfc676294e38 525 for(i=0;i<3;i++){if(x[i]>tmp1)tmp1=x[i];}
Will_Lu 2:bfc676294e38 526 for(i=0;i<3;i++){if(y[i]>tmp2)tmp2=y[i];}
Will_Lu 2:bfc676294e38 527 for(i=0;i<3;i++){if(z[i]>tmp3)tmp3=z[i];}
Will_Lu 2:bfc676294e38 528 for(i=0;i<3;i++){if(x_1[i]>tmp1_1)tmp1_1=x_1[i];}
Will_Lu 2:bfc676294e38 529 for(i=0;i<3;i++){if(y_1[i]>tmp2_1)tmp2_1=y_1[i];}
Will_Lu 2:bfc676294e38 530 for(i=0;i<3;i++){if(z_1[i]>tmp3_1)tmp3_1=z_1[i];}
Will_Lu 2:bfc676294e38 531 for(i=0;i<3;i++){if(x_2[i]>tmp1_2)tmp1_2=x_2[i];}
Will_Lu 2:bfc676294e38 532 for(i=0;i<3;i++){if(y_2[i]>tmp2_2)tmp2_2=y_2[i];}
Will_Lu 2:bfc676294e38 533 for(i=0;i<3;i++){if(z_2[i]>tmp3_2)tmp3_2=z_2[i];}
Will_Lu 2:bfc676294e38 534 double n[3],ra=0,rb=0,rc=0,la=0,lb=0,lc=0,BB=-50;
Will_Lu 2:bfc676294e38 535 for(i=0;i<2;i++){n[i]=x_1[i]-x_1[i+1];if(n[i]<ra)ra=n[i];}
Will_Lu 2:bfc676294e38 536 for(i=0;i<2;i++){n[i]=y_1[i]-y_1[i+1];if(n[i]<rb)rb=n[i];}
Will_Lu 2:bfc676294e38 537 for(i=0;i<2;i++){n[i]=z_1[i]-z_1[i+1];if(n[i]<rc)rc=n[i];}
Will_Lu 2:bfc676294e38 538 for(i=0;i<2;i++){n[i]=x_2[i+1]-x_2[i];if(n[i]<la)la=n[i];}
Will_Lu 2:bfc676294e38 539 for(i=0;i<2;i++){n[i]=y_2[i+1]-y_2[i];if(n[i]<lb)lb=n[i];}
Will_Lu 2:bfc676294e38 540 for(i=0;i<2;i++){n[i]=z_2[i+1]-z_2[i];if(n[i]<lc)lc=n[i];}
Will_Lu 2:bfc676294e38 541 if(ra<-0.02 || la<-0.02){n[0]=20*log10((tmp1_1+tmp1_2)/tmp1);} else {n[0]=-50;}
Will_Lu 2:bfc676294e38 542 if(rb<-0.02 || lb<-0.02){n[1]=20*log10((tmp2_1+tmp2_2)/tmp2);} else {n[1]=-50;}
Will_Lu 2:bfc676294e38 543 if(rc<-0.02 || lc<-0.02){n[2]=20*log10((tmp3_1+tmp3_2)/tmp3);} else {n[2]=-50;}
Will_Lu 2:bfc676294e38 544 for(i=0;i<3;i++){if(n[i]>BB)BB=n[i];}
Will_Lu 2:bfc676294e38 545 return BB;
Will_Lu 2:bfc676294e38 546
Will_Lu 2:bfc676294e38 547 break;
Will_Lu 2:bfc676294e38 548 case 8192:
Will_Lu 2:bfc676294e38 549
Will_Lu 2:bfc676294e38 550 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]};
Will_Lu 2:bfc676294e38 551 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]};
Will_Lu 2:bfc676294e38 552 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]};
Will_Lu 2:bfc676294e38 553 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;
Will_Lu 2:bfc676294e38 554 for(i=0;i<3;i++){if(xx[i]>ttmp1)ttmp1=xx[i];}
Will_Lu 2:bfc676294e38 555 for(i=0;i<3;i++){if(yy[i]>ttmp2)ttmp2=yy[i];}
Will_Lu 2:bfc676294e38 556 for(i=0;i<3;i++){if(zz[i]>ttmp3)ttmp3=zz[i];}
Will_Lu 2:bfc676294e38 557 for(i=0;i<3;i++){if(xx_1[i]>ttmp1_1)ttmp1_1=xx_1[i];}
Will_Lu 2:bfc676294e38 558 for(i=0;i<3;i++){if(yy_1[i]>ttmp2_1)ttmp2_1=yy_1[i];}
Will_Lu 2:bfc676294e38 559 for(i=0;i<3;i++){if(zz_1[i]>ttmp3_1)ttmp3_1=zz_1[i];}
Will_Lu 2:bfc676294e38 560 for(i=0;i<3;i++){if(xx_2[i]>ttmp1_2)ttmp1_2=xx_2[i];}
Will_Lu 2:bfc676294e38 561 for(i=0;i<3;i++){if(yy_2[i]>ttmp2_2)ttmp2_2=yy_2[i];}
Will_Lu 2:bfc676294e38 562 for(i=0;i<3;i++){if(zz_2[i]>ttmp3_2)ttmp3_2=zz_2[i];}
Will_Lu 2:bfc676294e38 563 double nn[3],rra=0,rrb=0,rrc=0,lla=0,llb=0,llc=0,BBB=-50;
Will_Lu 2:bfc676294e38 564 for(i=0;i<3;i++){nn[i]=xx_1[i]-xx_1[i+1];if(nn[i]<rra)rra=nn[i];}
Will_Lu 2:bfc676294e38 565 for(i=0;i<3;i++){nn[i]=yy_1[i]-yy_1[i+1];if(nn[i]<rrb)rrb=nn[i];}
Will_Lu 2:bfc676294e38 566 for(i=0;i<3;i++){nn[i]=zz_1[i]-zz_1[i+1];if(nn[i]<rrc)rrc=nn[i];}
Will_Lu 2:bfc676294e38 567 for(i=0;i<3;i++){nn[i]=xx_2[i+1]-xx_2[i];if(nn[i]<lla)lla=nn[i];}
Will_Lu 2:bfc676294e38 568 for(i=0;i<3;i++){nn[i]=yy_2[i+1]-yy_2[i];if(nn[i]<llb)llb=nn[i];}
Will_Lu 2:bfc676294e38 569 for(i=0;i<3;i++){nn[i]=zz_2[i+1]-zz_2[i];if(nn[i]<llc)llc=nn[i];}
Will_Lu 2:bfc676294e38 570 if(rra<-0.02 || lla<-0.02){nn[0]=20*log10((ttmp1_1+ttmp1_2)/ttmp1);} else {nn[0]=-50;}
Will_Lu 2:bfc676294e38 571 if(rrb<-0.02 || llb<-0.02){nn[1]=20*log10((ttmp2_1+ttmp2_2)/ttmp2);} else {nn[1]=-50;}
Will_Lu 2:bfc676294e38 572 if(rrc<-0.02 || llc<-0.02){nn[2]=20*log10((ttmp3_1+ttmp3_2)/ttmp3);} else {nn[2]=-50;}
Will_Lu 2:bfc676294e38 573 for(i=0;i<3;i++){if(nn[i]>BB)BB=nn[i];}
Will_Lu 2:bfc676294e38 574 return BB;
Will_Lu 2:bfc676294e38 575 break;
Will_Lu 2:bfc676294e38 576 }
Will_Lu 2:bfc676294e38 577 }
Will_Lu 2:bfc676294e38 578 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)
Will_Lu 2:bfc676294e38 579 {
Will_Lu 2:bfc676294e38 580 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;
Will_Lu 2:bfc676294e38 581 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;}
Will_Lu 2:bfc676294e38 582 h[1]=IUF*2.0-4.0;if(h[1]<0){h[1]=0;}if(h[1]>1){h[1]=1;}
Will_Lu 2:bfc676294e38 583 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;}
Will_Lu 2:bfc676294e38 584 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;}
Will_Lu 2:bfc676294e38 585 h[4]=THDI*2.0/5.0-1.0;if(h[4]<0){h[4]=0;}if(h[4]>1){h[4]=1;}
Will_Lu 2:bfc676294e38 586 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;}
Will_Lu 2:bfc676294e38 587 h[6]=BB*1.0/5.0+9.0;if(h[6]<0){h[6]=0;}if(h[6]>1){h[6]=1;}
Will_Lu 2:bfc676294e38 588 h[7]=peakvalue*2.0-8.0;if(h[7]<0){h[7]=0;}if(h[7]>1){h[7]=1;}
Will_Lu 2:bfc676294e38 589 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;}
Will_Lu 2:bfc676294e38 590 else{
Will_Lu 2:bfc676294e38 591 for(i=0;i<8;i++){f1[i]=h[i];if(h[i]>f1max){f1max=h[i];}}
Will_Lu 2:bfc676294e38 592 h1max=1-f1max;
Will_Lu 2:bfc676294e38 593 *health=h1max*100;
Will_Lu 2:bfc676294e38 594 g2max=h[7];g1max=1-g2max;
Will_Lu 2:bfc676294e38 595 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;
Will_Lu 2:bfc676294e38 596 r[6]=h[6];s[6]=0;if(r[6]==0){s[6]=1.0;}
Will_Lu 2:bfc676294e38 597 for(i=0;i<7;i++){if(s[i]>smax){smax=s[i];}if(r[i]>rmax)rmax=r[i];}
Will_Lu 2:bfc676294e38 598 rmax=rmax/(smax+rmax);smax=1-rmax;*stator=f1max*g1max*smax*100;*rotor=f1max*g1max*rmax*100;
Will_Lu 2:bfc676294e38 599 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;
Will_Lu 2:bfc676294e38 600 for(i=0;i<6;i++){if(b[i]>bmax){bmax=b[i];}if(e[i]>emax)emax=e[i];}
Will_Lu 2:bfc676294e38 601 emax=emax/(bmax+emax);bmax=1-emax;*bearing=f1max*g2max*bmax*100;*eccentric=f1max*g2max*emax*100;
Will_Lu 2:bfc676294e38 602 }
Will_Lu 2:bfc676294e38 603 }
Will_Lu 2:bfc676294e38 604 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)
Will_Lu 2:bfc676294e38 605 {
Will_Lu 2:bfc676294e38 606 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];
Will_Lu 2:bfc676294e38 607 int flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,i;
Will_Lu 2:bfc676294e38 608 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;}
Will_Lu 2:bfc676294e38 609 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;}
Will_Lu 2:bfc676294e38 610 else{
Will_Lu 2:bfc676294e38 611 if(VUR<=2){g1[1]=VUR-1.0;if(g1[1]<0){g1[1]=0;}g1[0]=1-g1[1];flag1=1;}
Will_Lu 2:bfc676294e38 612 if(VUR>2&&VUR<=3.5){g1[1]=VUR*2.0/3.0-4.0/3.0;g1[0]=1-g1[1];flag1=2;}
Will_Lu 2:bfc676294e38 613 if(VUR>3.5&&VUR<5){g1[1]=VUR*2.0/3.0-7.0/3.0;g1[0]=1-g1[1];flag1=3;}
Will_Lu 2:bfc676294e38 614 if(IUR<=4){g2[1]=IUR*0.5-1;if(g2[1]<0){g2[1]=0;}g2[0]=1-g2[1];flag2=1;}
Will_Lu 2:bfc676294e38 615 if(IUR>4&&IUR<=6){g2[1]=IUR*0.5-2.0;g2[0]=1-g2[1];flag2=2;}
Will_Lu 2:bfc676294e38 616 if(IUR>6&&IUR<10){g2[1]=IUR*0.25-3.0*2.0;g2[0]=1-g2[1];flag2=3;}
Will_Lu 2:bfc676294e38 617 if(THDV<=2){g3[1]=THDV*2-3;if(g3[1]<0){g3[1]=0;}g3[0]=1-g3[1];flag3=1;}
Will_Lu 2:bfc676294e38 618 if(THDV>2&&THDV<=3.5){g3[1]=THDV*2.0/3.0-4.0/3.0;g3[0]=1-g3[1];flag3=2;}
Will_Lu 2:bfc676294e38 619 if(THDV>3.5&&THDV<5){g3[1]=THDV*2.0/3.0-7.0/3.0;g3[0]=1-g3[1];flag3=3;}
Will_Lu 2:bfc676294e38 620 if(VDFodd<=2){g3[1]=VDFodd*2.0-3.0;if(g4[1]<0){g4[1]=0;}g4[0]=1-g4[1];flag4=1;}
Will_Lu 2:bfc676294e38 621 if(VDFodd>2&&VDFodd<=2.5){g4[1]=VDFodd*2.0-4.0;g4[0]=1-g4[1];flag4=2;}
Will_Lu 2:bfc676294e38 622 if(VDFodd>2.5&&VDFodd<3){g4[1]=VDFodd*2.0-5.0;g4[0]=1-g4[1];flag4=3;}
Will_Lu 2:bfc676294e38 623 if(THDI<=3){g5[1]=THDI*2.0-5.0;if(g5[1]<0){g5[1]=0;}g5[0]=1-g5[1];flag5=1;}
Will_Lu 2:bfc676294e38 624 if(THDI>3&&THDI<=4){g5[1]=THDI-3.0;g5[0]=1-g5[1];flag5=2;}
Will_Lu 2:bfc676294e38 625 if(THDI>4&&THDI<5){g5[1]=THDI-4.0;g5[0]=1-g5[1];flag5=3;}
Will_Lu 2:bfc676294e38 626 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;}
Will_Lu 2:bfc676294e38 627 if(IDFodd>2.5&&IDFodd<=3){g6[1]=IDFodd*2.0-5.0;g6[0]=1-g6[1];flag6=2;}
Will_Lu 2:bfc676294e38 628 if(IDFodd>3&&IDFodd<4){g6[1]=IDFodd-3.0;g6[0]=1-g6[1];flag6=3;}
Will_Lu 2:bfc676294e38 629 if(VD<=3){g7[1]=VD*2.0-5.0;if(g7[1]<0){g7[1]=0;}g7[0]=1-g7[1];flag7=1;}
Will_Lu 2:bfc676294e38 630 if(VD>3&&VD<=5){g7[1]=VD*0.5-3.0/2.0;g7[0]=1-g7[1];flag7=2;}
Will_Lu 2:bfc676294e38 631 if(VD>5&&VD<10){g7[1]=VD*0.2-1.0;g7[0]=1-g7[1];flag7=3;}
Will_Lu 2:bfc676294e38 632 if(CD<=2){g8[1]=CD*0.5;if(g8[1]<0){g8[1]=0;}g8[0]=1-g8[1];flag8=1;}
Will_Lu 2:bfc676294e38 633 if(CD>2&&CD<=5){g8[1]=CD*1.0/3.0-2.0/3.0;g8[0]=1-g8[1];flag8=2;}
Will_Lu 2:bfc676294e38 634 if(CD>5&&CD<10){g8[1]=CD*0.2-1.0;g8[0]=1-g8[1];flag8=3;}
Will_Lu 2:bfc676294e38 635 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;}
Will_Lu 2:bfc676294e38 636 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;}
Will_Lu 2:bfc676294e38 637 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;}
Will_Lu 2:bfc676294e38 638 if(flag1==3||flag2==3||flag3==3||flag4==3||flag5==3||flag6==3||flag7==3||flag8==3||flag9==3){
Will_Lu 2:bfc676294e38 639 if(flag1==3){c1[0]=g1[0];c2[0]=g1[1];}
Will_Lu 2:bfc676294e38 640 if(flag2==3){c1[1]=g2[0];c2[1]=g2[1];}
Will_Lu 2:bfc676294e38 641 if(flag3==3){c1[2]=g3[0];c2[2]=g3[1];}
Will_Lu 2:bfc676294e38 642 if(flag4==3){c1[3]=g4[0];c2[3]=g4[1];}
Will_Lu 2:bfc676294e38 643 if(flag5==3){c1[4]=g5[0];c2[4]=g5[1];}
Will_Lu 2:bfc676294e38 644 if(flag6==3){c1[5]=g6[0];c2[5]=g6[1];}
Will_Lu 2:bfc676294e38 645 if(flag7==3){c1[6]=g7[0];c2[6]=g7[1];}
Will_Lu 2:bfc676294e38 646 if(flag8==3){c1[7]=g8[0];c2[7]=g8[1];}
Will_Lu 2:bfc676294e38 647 if(flag9==3){c1[8]=g9[0];c2[8]=g9[1];}
Will_Lu 2:bfc676294e38 648 p[0]=c1[0];p[1]=c2[0];
Will_Lu 2:bfc676294e38 649 for(i=1;i<9;i++){
Will_Lu 2:bfc676294e38 650 if(p[0]<c1[i]){p[0]=c1[i];}
Will_Lu 2:bfc676294e38 651 if(p[1]<c2[i]){p[1]=c2[i];}
Will_Lu 2:bfc676294e38 652 }
Will_Lu 2:bfc676294e38 653 *pCMS=(p[0]*0.6667+p[1])/(p[0]+p[1]);
Will_Lu 2:bfc676294e38 654 }
Will_Lu 2:bfc676294e38 655 else if(flag1==2||flag2==2||flag3==2||flag4==2||flag5==2||flag6==2||flag7==2||flag8==2||flag9==2){
Will_Lu 2:bfc676294e38 656 if(flag1==2){c1[0]=g1[0];c2[0]=g1[1];}
Will_Lu 2:bfc676294e38 657 if(flag2==2){c1[1]=g2[0];c2[1]=g2[1];}
Will_Lu 2:bfc676294e38 658 if(flag3==2){c1[2]=g3[0];c2[2]=g3[1];}
Will_Lu 2:bfc676294e38 659 if(flag4==2){c1[3]=g4[0];c2[3]=g4[1];}
Will_Lu 2:bfc676294e38 660 if(flag5==2){c1[4]=g5[0];c2[4]=g5[1];}
Will_Lu 2:bfc676294e38 661 if(flag6==2){c1[5]=g6[0];c2[5]=g6[1];}
Will_Lu 2:bfc676294e38 662 if(flag7==2){c1[6]=g7[0];c2[6]=g7[1];}
Will_Lu 2:bfc676294e38 663 if(flag8==2){c1[7]=g8[0];c2[7]=g8[1];}
Will_Lu 2:bfc676294e38 664 if(flag9==2){c1[8]=g9[0];c2[8]=g9[1];}
Will_Lu 2:bfc676294e38 665 p[0]=c1[0];p[1]=c2[0];
Will_Lu 2:bfc676294e38 666 for(i=1;i<9;i++){
Will_Lu 2:bfc676294e38 667 if(p[0]<c1[i]){p[0]=c1[i];}
Will_Lu 2:bfc676294e38 668 if(p[1]<c2[i]){p[1]=c2[i];}
Will_Lu 2:bfc676294e38 669 }
Will_Lu 2:bfc676294e38 670 *pCMS=(p[0]*0.3333+p[1]*0.6667)/(p[0]+p[1]);
Will_Lu 2:bfc676294e38 671 }
Will_Lu 2:bfc676294e38 672 else{
Will_Lu 2:bfc676294e38 673 if(flag1==1){c1[0]=g1[0];c2[0]=g1[1];}
Will_Lu 2:bfc676294e38 674 if(flag2==1){c1[1]=g2[0];c2[1]=g2[1];}
Will_Lu 2:bfc676294e38 675 if(flag3==1){c1[2]=g3[0];c2[2]=g3[1];}
Will_Lu 2:bfc676294e38 676 if(flag4==1){c1[3]=g4[0];c2[3]=g4[1];}
Will_Lu 2:bfc676294e38 677 if(flag5==1){c1[4]=g5[0];c2[4]=g5[1];}
Will_Lu 2:bfc676294e38 678 if(flag6==1){c1[5]=g6[0];c2[5]=g6[1];}
Will_Lu 2:bfc676294e38 679 if(flag7==1){c1[6]=g7[0];c2[6]=g7[1];}
Will_Lu 2:bfc676294e38 680 if(flag8==1){c1[7]=g8[0];c2[7]=g8[1];}
Will_Lu 2:bfc676294e38 681 if(flag9==1){c1[8]=g9[0];c2[8]=g9[1];}
Will_Lu 2:bfc676294e38 682 p[0]=c1[0];p[1]=c2[0];
Will_Lu 2:bfc676294e38 683 for(i=1;i<9;i++){
Will_Lu 2:bfc676294e38 684 if(p[0]<c1[i]){p[0]=c1[i];}
Will_Lu 2:bfc676294e38 685 if(p[1]<c2[i]){p[1]=c2[i];}
Will_Lu 2:bfc676294e38 686 }
Will_Lu 2:bfc676294e38 687 *pCMS=(p[1]*0.3333)/(p[0]+p[1]);
Will_Lu 2:bfc676294e38 688 }
Will_Lu 2:bfc676294e38 689 }
Will_Lu 2:bfc676294e38 690 }