corrected somethings in algo

This commit is contained in:
pavanvpatil 2022-10-29 16:52:19 +05:30
parent 4a2050f8c0
commit 0a45563c3f
2 changed files with 85 additions and 38 deletions

View File

@ -34,6 +34,7 @@ gboolean attack_detect_freq(struct data_frame *df)
head = (struct freqlist *)malloc(sizeof(struct freqlist)); head = (struct freqlist *)malloc(sizeof(struct freqlist));
head->AVERAGE_OF_FREQUENCY = 50; head->AVERAGE_OF_FREQUENCY = 50;
head->COUNT = 500; head->COUNT = 500;
head->idcode=to_intconvertor(df->idcode);
return TRUE; return TRUE;
} }
else else
@ -83,6 +84,7 @@ gboolean attack_detect_freq(struct data_frame *df)
bring = (struct freqlist *)malloc(sizeof(struct freqlist)); bring = (struct freqlist *)malloc(sizeof(struct freqlist));
bring->AVERAGE_OF_FREQUENCY = 50; bring->AVERAGE_OF_FREQUENCY = 50;
bring->COUNT = 500; bring->COUNT = 500;
bring->idcode = to_intconvertor(df->idcode);
previous->next=bring; previous->next=bring;
return TRUE; return TRUE;
} }
@ -117,6 +119,7 @@ gboolean attack_detect_vol(struct data_frame *df)
headvol = (struct vollist *)malloc(sizeof(struct vollist)); headvol = (struct vollist *)malloc(sizeof(struct vollist));
headvol->AVERAGE_OF_VOLTAGE = CURR_vol; headvol->AVERAGE_OF_VOLTAGE = CURR_vol;
headvol->COUNT = 500; headvol->COUNT = 500;
headvol->idcode=to_intconvertor(df->idcode);
return TRUE; return TRUE;
} }
else else
@ -160,6 +163,7 @@ gboolean attack_detect_vol(struct data_frame *df)
bring->AVERAGE_OF_VOLTAGE = CURR_vol; bring->AVERAGE_OF_VOLTAGE = CURR_vol;
bring->COUNT = 500; bring->COUNT = 500;
previous->next = bring; previous->next = bring;
bring->idcode = to_intconvertor(df->idcode);
return TRUE; return TRUE;
} }
} }

View File

@ -6,53 +6,96 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <math.h> #include <math.h>
FILE *fp; // FILE *fp;
/*intial weights weights for each points */
unsigned long long int count_A = 1000;
unsigned long long int count_B = 1000;
unsigned long long int count_C = 1000;
/*In India frequency ranges from 49.5 to 50.2 Hz*/ struct kmeans1
long double std_dev = 0.6454972244; {
long double A = 0; // for point A=50 int idcode;
long double B = -1.5491933394; // for point B=49 unsigned long long int count_A = 1000;
long double C = 0.7745966692; // for point C=50.5 unsigned long long int count_B = 1000;
long double mean = 50; unsigned long long int count_C = 1000;
unsigned long long int count = 3000; long double A = 50;
long double B = 49;
long double C = 51;
struct kmeans1 *next;
}
struct kmeans1 *headk = NULL;
gboolean kmeans(struct data_frame *df) gboolean kmeans(struct data_frame *df)
{ {
long double CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq) * 1e-3; if (headk == NULL)
long double CURR_FREQ_temp = CURR_FREQ;
CURR_FREQ = (CURR_FREQ - mean) / std_dev;
long double diff_A = fabs(A - CURR_FREQ);
long double diff_B = fabs(B - CURR_FREQ);
long double diff_C = fabs(C - CURR_FREQ);
// fp = fopen("points.csv","a");
// printf("A: %Lf, B: %Lf, C: %Lf\n",A,B,C);
// fprintf(fp,"%Lf, %Lf, %Lf\n",A,B,C);
// fclose(fp);
/*Updating std_dev and mean*/
// printf("std_dev: %Lf, mean: %Lf\n",std_dev,mean);
mean = ((mean * count) + CURR_FREQ_temp) / (++count);
std_dev = (((std_dev * std_dev) * (count - 1)) + (CURR_FREQ * std_dev * CURR_FREQ * std_dev)) / count;
std_dev = sqrt(std_dev);
if (diff_A <= diff_B && diff_A <= diff_C)
{ {
A = ((count_A * (A)) + CURR_FREQ) / (++count_A); headk->A = 50;
headk->B = 49;
headk->C = 51;
headk->count_A = 1000;
headk->count_B = 1000;
headk->count_C = 1000;
headk->next = NULL;
headk->idcode = to_intconvertor(df->idcode);
return TRUE; return TRUE;
} }
else if (diff_B < diff_C)
{
B = ((count_B * (B)) + CURR_FREQ) / (++count_B);
return FALSE;
}
else else
{ {
C = ((count_C * (C)) + CURR_FREQ) / (++count_C); struct kmeans1 *temp == headk;
return FALSE; struct kmeans1 *previous == NULL;
while (temp != NULL)
{
if (temp->idcode == to_intconvertor(df->idcode))
{
float CURR_FREQ;
if (df->dpmu[0]->fmt->freq == '0')
{
CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq) * 1e-3;
}
else
{
CURR_FREQ = decode_ieee_single(df->dpmu[0]->freq);
}
long double diff_A = fabs(temp->A - CURR_FREQ);
long double diff_B = fabs(temp->B - CURR_FREQ);
long double diff_C = fabs(temp->C - CURR_FREQ);
// fp = fopen("points.csv","a");
// printf("A: %Lf, B: %Lf, C: %Lf\n",A,B,C);
// fprintf(fp,"%Lf, %Lf, %Lf\n",A,B,C);
// fclose(fp);
if (diff_A <= diff_B && diff_A <= diff_C)
{
temp->A = ((temp->count_A * (temp->A)) + CURR_FREQ) / (++temp->count_A);
return TRUE;
}
else if (diff_B < diff_C)
{
temp->B = ((temp->count_B * (temp->B)) + CURR_FREQ) / (++temp->count_B);
return FALSE;
}
else
{
temp->C = ((temp->count_C * (temp->C)) + CURR_FREQ) / (++temp->count_C);
return FALSE;
}
break;
}
previous=temp;
temp = temp->next;
}
if(temp==NULL)
{
struct kmeans1 *bring = (struct kmeans1 *)malloc(sizeof(struct kmeans1));
bring->A = 50;
bring->B = 49;
bring->C = 51;
bring->count_A = 1000;
bring->count_B = 1000;
bring->count_C = 1000;
bring->next = NULL;
bring->idcode = to_intconvertor(df->idcode);
previous->next=bring;
return TRUE;
}
} }
} }