normalised added DTW algo
This commit is contained in:
parent
658e423553
commit
1ee60c80b2
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*pavan changes*/
|
/*pavan changes*/
|
||||||
|
|
||||||
void DTWdistance(struct data_frame *df,gboolean *result);
|
void DTWdistance(struct data_frame *df,gboolean *result);
|
|
@ -2,15 +2,9 @@
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
// intial variables
|
// intial variables
|
||||||
|
|
||||||
unsigned long long int count_A=500;
|
|
||||||
unsigned long long int count_B=500;
|
|
||||||
unsigned long long int count_C=500;
|
|
||||||
long double A=50;
|
|
||||||
long double B=49.5;
|
|
||||||
long double C=50.5;
|
|
||||||
|
|
||||||
//function declaration
|
//function declaration
|
||||||
gboolean kmeans(struct data_frame *df,unsigned long long int *count_A,unsigned long long int *count_B,
|
gboolean kmeans(struct data_frame *df);
|
||||||
unsigned long long int *count_C,long double *A,long double *B,long double *C);
|
|
||||||
|
|
||||||
/*Pavan Changes*/
|
/*Pavan Changes*/
|
60596
iPDC/points.csv
60596
iPDC/points.csv
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -11,11 +10,11 @@ int count_track1=0;
|
||||||
int count_track2=0;
|
int count_track2=0;
|
||||||
int flag=0;
|
int flag=0;
|
||||||
|
|
||||||
void DTWdistance(struct data_frame *df,gboolean *result)
|
void DTWdistance(struct data_frame *df,int *result)
|
||||||
{
|
{
|
||||||
float CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq)*1e-3;
|
float CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq)*1e-3;
|
||||||
//printf("count1: %d\ncount2: %d\n",count_track1,count_track2);
|
// printf("count1: %d\ncount2: %d\n",count_track1,count_track2);
|
||||||
//printf("curr_freq: %f\n",CURR_FREQ);
|
// printf("curr_freq: %f\n",CURR_FREQ);
|
||||||
if(count_track1==0)
|
if(count_track1==0)
|
||||||
{
|
{
|
||||||
if(flag==0)
|
if(flag==0)
|
||||||
|
@ -66,18 +65,26 @@ void DTWdistance(struct data_frame *df,gboolean *result)
|
||||||
for(int j=1;j<501;j++)
|
for(int j=1;j<501;j++)
|
||||||
{
|
{
|
||||||
float cost=fabs(freq1[i-1]-freq2[j-1]);
|
float cost=fabs(freq1[i-1]-freq2[j-1]);
|
||||||
//printf("cost: %f",cost);
|
// printf("cost: %f",cost);
|
||||||
DTW[i][j]=cost+fmin(DTW[i][j-1],fmin(DTW[i-1][j],DTW[i-1][j-1]));
|
DTW[i][j]=cost+fmin(DTW[i][j-1],fmin(DTW[i-1][j],DTW[i-1][j-1]));
|
||||||
//printf(" DTW[%d][%d]: %f\n",i,j,DTW[i][j]);
|
// printf(" DTW[%d][%d]: %f\n",i,j,DTW[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("DTWdistance: %f\n",DTW[500][500]);
|
printf("DTWdistance: %f\n",DTW[500][500]);
|
||||||
if(DTW[500][500]>=35) *result=false;
|
if(DTW[500][500]>=35)
|
||||||
else *result=true;
|
{
|
||||||
free(freq1);
|
|
||||||
free(freq2);
|
free(freq2);
|
||||||
|
*result=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
long double *temp=freq1;
|
||||||
|
freq1=freq2;
|
||||||
|
free(temp);
|
||||||
|
*result=1;
|
||||||
|
}
|
||||||
free(DTW);
|
free(DTW);
|
||||||
count_track1=0;
|
count_track1=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,32 +2,56 @@
|
||||||
|
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
c
|
#include <stdio.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;
|
||||||
|
|
||||||
gboolean kmeans(struct data_frame *df,unsigned long long int *count_A,unsigned long long int *count_B,
|
/*In India frequency ranges from 49.5 to 50.2 Hz*/
|
||||||
unsigned long long int *count_C,long double *A,long double *B,long double *C)
|
long double std_dev = 0.6454972244;
|
||||||
|
long double A = 0; // for point A=50
|
||||||
|
long double B = -1.5491933394; // for point B=49
|
||||||
|
long double C = 0.7745966692; // for point C=50.5
|
||||||
|
long double mean = 50;
|
||||||
|
unsigned long long int count = 3000;
|
||||||
|
|
||||||
|
gboolean kmeans(struct data_frame *df)
|
||||||
{
|
{
|
||||||
float CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq)*1e-3;
|
long double CURR_FREQ = 50 + to_intconvertor(df->dpmu[0]->freq) * 1e-3;
|
||||||
long double diff_A = fabs(*A-CURR_FREQ);
|
long double CURR_FREQ_temp=CURR_FREQ;
|
||||||
long double diff_B = fabs(*B-CURR_FREQ);
|
CURR_FREQ = (CURR_FREQ - mean) / std_dev;
|
||||||
long double diff_C = fabs(*C-CURR_FREQ);
|
long double diff_A = fabs(A - CURR_FREQ);
|
||||||
//fp = fopen("points.csv","a");
|
long double diff_B = fabs(B - CURR_FREQ);
|
||||||
//printf("A: %Lf, B: %Lf, C: %Lf\n",*A,*B,*C);
|
long double diff_C = fabs(C - CURR_FREQ);
|
||||||
//fprintf(fp,"%Lf, %Lf, %Lf\n",*A,*B,*C);
|
fp = fopen("points.csv","a");
|
||||||
//fclose(fp);
|
printf("A: %Lf, B: %Lf, C: %Lf\n",A,B,C);
|
||||||
if(diff_A <= diff_B && diff_A <= diff_C){
|
fprintf(fp,"%Lf, %Lf, %Lf\n",A,B,C);
|
||||||
*A = ((*count_A*(*A))+CURR_FREQ)/(++*count_A);
|
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);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else if(diff_B < diff_C){
|
else if (diff_B < diff_C)
|
||||||
*B = ((*count_B*(*B))+CURR_FREQ)/(++*count_B);
|
{
|
||||||
|
B = ((count_B * (B)) + CURR_FREQ) / (++count_B);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
else{
|
else
|
||||||
*C = ((*count_C*(*C))+CURR_FREQ)/(++*count_C);
|
{
|
||||||
|
C = ((count_C * (C)) + CURR_FREQ) / (++count_C);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
#include "align_sort.h"
|
#include "align_sort.h"
|
||||||
#include "map_vis.h"
|
#include "map_vis.h"
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
@ -8,7 +9,9 @@
|
||||||
#include "Kmeans.h"
|
#include "Kmeans.h"
|
||||||
#include "Dynamic_time_warping.h"
|
#include "Dynamic_time_warping.h"
|
||||||
|
|
||||||
gboolean value = true;
|
/*used for DTW*/
|
||||||
|
int result=1;
|
||||||
|
/*used for DTW*/
|
||||||
|
|
||||||
gboolean update_images(gpointer* pars){
|
gboolean update_images(gpointer* pars){
|
||||||
myParameters* parameters = (myParameters*) pars;
|
myParameters* parameters = (myParameters*) pars;
|
||||||
|
@ -19,9 +22,8 @@ gboolean update_images(gpointer* pars){
|
||||||
int freq = to_intconvertor(df->dpmu[0]->freq);
|
int freq = to_intconvertor(df->dpmu[0]->freq);
|
||||||
//gboolean green =attack_detect(df,&START,&COUNT,&SUM_OF_FREQUENCY);
|
//gboolean green =attack_detect(df,&START,&COUNT,&SUM_OF_FREQUENCY);
|
||||||
//printf("map_vis A: %Lf, B: %Lf,C: %Lf\n",A,B,C);
|
//printf("map_vis A: %Lf, B: %Lf,C: %Lf\n",A,B,C);
|
||||||
//gboolean green = kmeans(df,&count_A,&count_B,&count_C,&A,&B,&C);
|
gboolean green = kmeans(df);
|
||||||
DTWdistance(df,&value);
|
//DTWdistance(df,&result);
|
||||||
gboolean green=value;
|
|
||||||
if(parameters->g_last_image != 0){
|
if(parameters->g_last_image != 0){
|
||||||
osm_gps_map_image_remove(parameters->util_map, parameters->g_last_image);
|
osm_gps_map_image_remove(parameters->util_map, parameters->g_last_image);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue