?? telemetry_stats.c
字號:
/*** *** See the file "L2_RTI_EO1/disclaimers-and-notices-L2.txt" for *** information on usage and redistribution of this file, *** and for a DISCLAIMER OF ALL WARRANTIES. ***//********************************************************************************//* *//* telemetry_stats.c *//* *//* This program calculates the telemetry rate statistics using a *//* "sliding window" method. The maximum and the average per second *//* rates are calculated within approximately a 1.04 second window *//* (13 full frames), then results are adjusted to correspond to *//* exactly 1 sec by using a 0.96 multiplier. The window is then *//* moved to the next frame and the procedure is repeated. *//* *//********************************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_KEYWORD_LENGTH 128#define NUMBER_OF_STRING_TYPES 12#define BUFFER_SIZE 200#define WINDOW_SIZE 13typedef enum{ STRTYPE_FRAME_UPDATE = 0, STRTYPE_TIMESTEP = 1, STRTYPE_OBSERVATION = 2, STRTYPE_FINDCANDIDATES = 3, STRTYPE_ENDFINDCANDIDATES = 4, STRTYPE_CANDIDATE = 5, STRTYPE_ENDCANDIDATE = 6, STRTYPE_ASSIGNMENT = 7, STRTYPE_TRANSITION = 8, STRTYPE_COMMAND = 9, STRTYPE_ROS_OBSERVATION =10, STRTYPE_ROS_COMMAND =11,} strType;typedef struct{ strType type; char keyword[MAX_KEYWORD_LENGTH]; int int_length;} TelemetryString;FILE *in;TelemetryString String [NUMBER_OF_STRING_TYPES];int total_integers;int total_frames;float max_per_second;int f[WINDOW_SIZE];double total_sum=0;float sum_f () { int sum = 0, i; for (i=0; i<WINDOW_SIZE; i++) sum = sum + f[i]; return (sum*12.5/13);}void init () { int i=0; total_integers = 0; total_frames = 0; max_per_second = 0; for (i=0; i<WINDOW_SIZE; i++) f[i]=0; strcpy (String[STRTYPE_FRAME_UPDATE].keyword, "ROS: Frame Update"); String[STRTYPE_FRAME_UPDATE].int_length = 4; String[STRTYPE_FRAME_UPDATE].type = STRTYPE_FRAME_UPDATE; strcpy (String[STRTYPE_TIMESTEP].keyword, "timestep"); String[STRTYPE_TIMESTEP].int_length = 4; String[STRTYPE_TIMESTEP].type = STRTYPE_TIMESTEP; strcpy (String[STRTYPE_OBSERVATION].keyword, "observation,"); String[STRTYPE_OBSERVATION].int_length = 6; String[STRTYPE_OBSERVATION].type = STRTYPE_OBSERVATION; strcpy (String[STRTYPE_FINDCANDIDATES].keyword, "findCandidates,"); String[STRTYPE_FINDCANDIDATES].int_length = 4; String[STRTYPE_FINDCANDIDATES].type = STRTYPE_FINDCANDIDATES; strcpy (String[STRTYPE_ENDFINDCANDIDATES].keyword, "endFindCandidates"); String[STRTYPE_ENDFINDCANDIDATES].int_length = 1; String[STRTYPE_ENDFINDCANDIDATES].type = STRTYPE_FINDCANDIDATES; strcpy (String[STRTYPE_CANDIDATE].keyword, "candidate"); String[STRTYPE_CANDIDATE].int_length = 2; String[STRTYPE_CANDIDATE].type = STRTYPE_CANDIDATE; strcpy (String[STRTYPE_ENDCANDIDATE].keyword, "endCandidate"); String[STRTYPE_ENDCANDIDATE].int_length = 1; String[STRTYPE_ENDCANDIDATE].type = STRTYPE_ENDCANDIDATE; strcpy (String[STRTYPE_ASSIGNMENT].keyword, "assignment"); String[STRTYPE_ASSIGNMENT].int_length = 5; String[STRTYPE_ASSIGNMENT].type = STRTYPE_ASSIGNMENT; strcpy (String[STRTYPE_TRANSITION].keyword, "transition"); String[STRTYPE_TRANSITION].int_length = 5; String[STRTYPE_TRANSITION].type = STRTYPE_TRANSITION; strcpy (String[STRTYPE_COMMAND].keyword, "command,"); String[STRTYPE_COMMAND].int_length = 5; String[STRTYPE_COMMAND].type = STRTYPE_COMMAND; strcpy (String[STRTYPE_ROS_OBSERVATION].keyword, "ROS: Observation"); String[STRTYPE_ROS_OBSERVATION].int_length = 8; String[STRTYPE_ROS_OBSERVATION].type = STRTYPE_ROS_OBSERVATION; strcpy (String[STRTYPE_ROS_COMMAND].keyword, "ROS: Cmd"); String[STRTYPE_ROS_COMMAND].int_length = 5; String[STRTYPE_ROS_COMMAND].type = STRTYPE_ROS_COMMAND;}strType get_string_type (char *buffer) { int i; for (i=0; i<NUMBER_OF_STRING_TYPES; i++) { if (strstr (buffer, String[i].keyword)) return String[i].type; } return -1;}int get_string_encoding (strType type) { return String[type].int_length;}void process_file () { int frame_current = 0; strType cur_type; char line [BUFFER_SIZE]; char buffer [BUFFER_SIZE]; int frame_counter = 0; while (!feof(in)) { fgets (line, BUFFER_SIZE, in); strcpy (buffer, line); cur_type = get_string_type (buffer); if (cur_type == STRTYPE_FRAME_UPDATE) { total_frames++; f[frame_counter]=frame_current; total_sum = total_sum+sum_f(); if (sum_f() > max_per_second) max_per_second = sum_f(); frame_current = 0; frame_counter++; if (frame_counter == WINDOW_SIZE) frame_counter = 0; } else { /* increment the counters */ if (cur_type > 0) { frame_current = frame_current + get_string_encoding (cur_type); total_integers = total_integers + get_string_encoding (cur_type); } } } fprintf (stderr, " average2 per second - %.3f Kbps (Kilobits per second)\n", ((float)total_sum*8*4/total_frames/1000) ); fprintf (stderr, " maximum per second - %.3f Kbps (Kilobits per second)\n", max_per_second * 8/1000 ); fprintf (stderr, " mission data rate - %d bytes\n", total_integers*4); fprintf (stderr, " mission duration (seconds) - %d\n", (int) (total_frames*0.08));}void close () { fclose (in);}void main (int argc, char **argv) { in = fopen (argv[1], "r"); if (in) { init(); process_file (); } else { printf ("Can't open the file\n"); exit(0); } fclose (in);}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -