⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telemetry_stats.c

📁 一个非常好的人工智能开发工具开源软件
💻 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);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -