by Neal R. Wagner
Copyright © 2001 by Neal R. Wagner. All rights reserved.
NOTE: This site is obsolete. See book draft (in PDF):
Program with a formula for channel capacity:
// Cap.java: calculate channel capacity, binary symmetric channel
// p: the channel probability for a binary symmetric channel
public class Cap {
// main function to do calculation
public static void main (String[] args) {
double p = (Double.valueOf(args[0])).doubleValue(); // channel probability
System.out.println("Probability: " + p +
", Capacity: " + capacity(p));
} // end of main
// capacity: the capacity of the binary symmetric channel
private static double capacity(double p) {
if (p == 0 || p == 1) return 1;
return 1 + p*log2(p) + (1 - p)*log2(1 - p);
}
// log2: Logarithm base 2
public static double log2(double d) {
return Math.log(d)/Math.log(2.0);
}
}
Typical output:
% javac Cap.java % java Cap 0.3 Probability: 0.3, Capacity: 0.11870910076930735 % java Cap 0.999 Probability: 0.999, Capacity: 0.9885922422625388 % java Cap 0.001 Probability: 0.0010, Capacity: 0.9885922422625388 % java Cap 0.5 Probability: 0.5, Capacity: 0.0 % java Cap 0.5001 Probability: 0.5001, Capacity: 2.8853901046232977E-8 % java Cap 0.51 Probability: 0.51, Capacity: 2.8855824719009604E-4