dat2cdf
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (C) 2001 by USC/ISI
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms are permitted
  7. # provided that the above copyright notice and this paragraph are
  8. # duplicated in all such forms and that any documentation, advertising
  9. # materials, and other materials related to such distribution and use
  10. # acknowledge that the software was developed by the University of
  11. # Southern California, Information Sciences Institute.  The name of the
  12. # University may not be used to endorse or promote products derived from
  13. # this software without specific prior written permission.
  14. #
  15. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  16. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18. #
  19. # An perl script that transforms a data file (one-column format) into
  20. # a ns-style CDF file, used by SAMAN ModelGen
  21. #
  22. # This work is supported by DARPA through SAMAN Project
  23. # (http://www.isi.edu/saman/), administered by the Space and Naval
  24. # Warfare System Center San Diego under Contract No. N66001-00-C-8066
  25. sub usage {
  26.         print STDERR <<END;
  27.       usage: $0 [-e FirstEpoch] [-i Increment] [-d Dividend] [-t DataFile]
  28.         Options:
  29.             -e string  specify the starting epoch
  30.             -i string  size of each bin
  31.             -d string  scaling factor of each epoch
  32.             -t string  filename of data
  33. END
  34.         exit 1;
  35. }
  36. BEGIN {
  37.         $dblibdir = "./";
  38.         push(@INC, $dblibdir);
  39. }
  40. use DbGetopt;
  41. require "dblib.pl";
  42. my(@orig_argv) = @ARGV;
  43. &usage if ($#ARGV < 0);
  44. my($prog) = &progname;
  45. my($dbopts) = new DbGetopt("e:i:d:t:?", @ARGV);
  46. my($ch);                                                                       
  47. while ($dbopts->getopt) {
  48.         $ch = $dbopts->opt;
  49.         if ($ch eq 'e') {
  50.                 $epoch = $dbopts->optarg;
  51.         } elsif ($ch eq 'i') { 
  52.                 $incr = $dbopts->optarg;
  53.         } elsif ($ch eq 'd') { 
  54.                 $dividend = $dbopts->optarg;
  55.         } elsif ($ch eq 't') { 
  56.                 $tfile = $dbopts->optarg;
  57. } else {
  58.                 &usage;
  59.         };
  60. };                          
  61. &outputCDF($epoch,$incr,$dividend,$tfile);
  62. sub numerically { $a <=> $b; }
  63. sub outputCDF {
  64. local($cur_epoch,$incr,$dividend,$tfile) = @_;
  65. local(@data);
  66. local(@dataS);
  67. local(@epoch);
  68. local(@cum);
  69. open(ORIG,$tfile) || die("cannot open $tfile.n");
  70. $tfileS = join('.',$tfile,"cdf");
  71. $newtfile = join(' ',">",$tfileS);
  72. open(CDF,$newtfile) || die("cannot open $newtfile.n");
  73. $count = 0;
  74. $cur_time = 0;
  75. $i = 0;
  76. while ($line = <ORIG>) {
  77. chop $line;
  78. $data[$i] = $line;
  79. $i++;
  80. }
  81. close(ORIG);
  82. if ($i eq 0) { exit; }
  83. @dataS = sort numerically @data;
  84. $i = 0;
  85. $sum = 0;
  86. foreach $j (0 .. $#dataS) {
  87. $cur_time = $dataS[$j];
  88. if ($cur_time > $cur_epoch) {
  89.          while ($cur_epoch < $cur_time) {
  90.       $epoch[$i] = $cur_epoch;
  91.       $sum = $sum + $count;
  92.       $cum[$i] = $sum;
  93.       $i++;
  94.       $cur_epoch = $cur_epoch + $incr;
  95.       $count=0;
  96.     }
  97.     if ($cur_time <= $cur_epoch) {
  98.        $count = 1;
  99.     } else {
  100.        $count = 0;
  101.     }
  102. } else {
  103.     $count++;
  104. }
  105. }
  106. $epoch[$i] = $cur_epoch;
  107. $sum = $sum + $count;
  108. $cum[$i] = $sum;
  109. $oldcum = 0;
  110. foreach $j (0 .. $#epoch) {
  111. $prob = $cum[$j]/$cum[$#cum];
  112. $e = $epoch[$j]/$dividend;
  113. if ($cum[$j] ne $oldcum) {
  114. print CDF "$e $cum[$j] $probn";
  115. }
  116.    $oldcum = $cum[$j];
  117. }
  118. close(CDF);
  119. }