ks.pl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

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 perform two-sided Kolmogorov-Smirnov Test for two
  20. # samples
  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 [-s Sample1] [-d Sample2] 
  28.         Options:
  29.             -s string  first sample
  30.             -d string  second sample
  31. END
  32.         exit 1;
  33. }
  34. BEGIN {
  35.         $dblibdir = "./";
  36.         push(@INC, $dblibdir);
  37. }
  38. use DbGetopt;
  39. require "dblib.pl";
  40. my(@orig_argv) = @ARGV;
  41. &usage if ($#ARGV < 0);
  42. my($prog) = &progname;
  43. my($dbopts) = new DbGetopt("s:d:i:?", @ARGV);
  44. my($ch);                                                                       
  45. while ($dbopts->getopt) {
  46.         $ch = $dbopts->opt;
  47.         if ($ch eq 's') {
  48.                 $file1 = $dbopts->optarg;
  49.         } elsif ($ch eq 'd') { 
  50.                 $file2 = $dbopts->optarg;
  51.         } elsif ($ch eq 'i') { 
  52.                 $interval = $dbopts->optarg;
  53. } else {
  54.                 &usage;
  55.         };
  56. };                          
  57. open(FILE1,$file1) || die("cannot open $file1.n");
  58. open(FILE2,$file2) || die("cannot open $file2.n");
  59. $oldx=0;
  60. $oldy=0;
  61. #$interval=0.001;
  62. $cnt1=0;
  63. $cnt2=0;
  64. $c1=0;
  65. $c2=0;
  66. while (<FILE1>) {
  67.      ($xvalue,$yvalue) = split(' ',$_);
  68. $data1[$c1]=$yvalue;
  69. $c1++;
  70. while ($oldx  < $xvalue) {
  71. $sample1X[$cnt1]=$oldx;
  72. $sample1Y[$cnt1]=$oldy;
  73. $cnt1++;
  74. $oldx=$oldx+$interval;
  75. }
  76. $oldy=$yvalue;
  77. $sample1X[$cnt1]=$oldx;
  78. $sample1Y[$cnt1]=$oldy;
  79. $cnt1++;
  80. $oldx=$oldx+$interval;
  81. }
  82. close(FILE1);
  83. $oldx=0;
  84. $oldy=0;
  85. while (<FILE2>) {
  86.      ($xvalue,$yvalue) = split(' ',$_);
  87. $data2[$c2]=$yvalue;
  88. $c2++;
  89. while ($oldx  < $xvalue) {
  90. $sample2X[$cnt2]=$oldx;
  91. $sample2Y[$cnt2]=$oldy;
  92. $cnt2++;
  93. $oldx=$oldx+$interval;
  94. }
  95. $oldy=$yvalue;
  96. $sample2X[$cnt2]=$oldx;
  97. $sample2Y[$cnt2]=$oldy;
  98. $cnt2++;
  99. $oldx=$oldx+$interval;
  100. }
  101. close(FILE2);
  102. $count=&min($cnt1-1,$cnt2-1);
  103. $statD=0;
  104. $maxi=0;
  105. foreach $i (0 .. $count) { 
  106.    $temp=&max($sample1Y[$i],$sample2Y[$i])-&min($sample1Y[$i],$sample2Y[$i]);
  107.    $statD=&max($statD, $temp);
  108.         if ($temp eq $statD) {
  109. $maxi=$i;
  110. print "$sample1Y[$i] $sample2Y[$i]n";
  111. }
  112. }
  113. print "max deviation = $statDn";
  114. $leftcnt1=0;
  115. $leftcnt2=0;
  116. foreach $i (0 .. ($c1-1)) { 
  117. if ($data1[$i] le $sample1Y[$maxi]) {
  118. $leftcnt1++;
  119. }
  120. }
  121. foreach $i (0 .. ($c2-1)) { 
  122. if ($data2[$i] le $sample2Y[$maxi]) {
  123. $leftcnt2++;
  124. }
  125. }
  126. $rightcnt1=$c1 - $leftcnt1 ;
  127. $rightcnt2=$c2 - $leftcnt2 ;
  128. print "data1 $leftcnt1 $rightcnt1n";
  129. print "data2 $leftcnt2 $rightcnt2n";
  130. $left1D=$leftcnt1/$c1;
  131. $right1D=$rightcnt1/$c1;
  132. $left2D=$leftcnt2/$c2;
  133. $right2D=$rightcnt2/$c2;
  134. $leftD=&max($left1D,$left2D)-&min($left1D,$left2D);
  135. $rightD=&max($right1D,$right2D)-&min($right1D,$right2D);
  136. $D=&max($leftD,$rightD);
  137. print "D=$Dn";
  138. sub max {
  139. local($a,$b) = @_;
  140. if ($a > $b) { return $a; }
  141. else { return $b; }
  142. }
  143. sub min {
  144. local($a,$b) = @_;
  145. if ($a < $b) { return $a; }
  146. else { return $b; }
  147. }