Home from work. Decided to clean this up. Didn't do the java docs, because fuck them thats why.
Code
package network; /* Package for class placement */
import javax.swing.JOptionPane;
/**
* Simple Java implementation of Shannon's Theorem based on CST8288 Lab01b
* handout originally by Reginald Dyer.
*
* @author FD
* @version 1.0.0 Jan 11, 2015
*/
public class ShannonsTheorem {
private ShannonsModel model;
/**
* Default constructor.
*/
public ShannonsTheorem() {
super();
model = new ShannonsModel();
}
/**
* Accessor for bandwidth field
*
* @return value for bandwidth (hertz)
*/
public double getBandwidth() {
return model.getBandwidth();
}
/**
* Mutator for bandwidth field
*
* @param bandwidth
* in hertz
*/
public void setBandwidth(double bandwidth) {
model.setBandwidth(bandwidth);
}
/**
* Accessor for signalToNoise field
*
* @return value for signal to noise (decibels)
*/
public double getSignalToNoise() {
return model.getSignalToNoise();
}
/**
* Mutator for signalToNoise field
*
* @param signalToNoise
* in (decibels)
*/
public void setSignalToNoise(double signalToNoise) {
model.setSignalToNoise(signalToNoise);
}
/**
* Accessor which generates value for Maximum Data Rate, based on bandwidth
* and signal to noise fields.
*
* @return Maximum Data Rate in bits per second (bps)
*/
public double maximumDataRate() {
return model.maximumDataRate();
}
/**
* Entry point "main()" as required by the JVM.
*
* @param args
* Standard command line parameters (arguments) as a string
* array. (Not used in this program).
*/
public static void main(String args[]) {
ShannonsTheorem app = new ShannonsTheorem();
String tryAgain = "";
do
{
try {
JOptionPane.showMessageDialog(null,
"Welcome to the Shannon's Theorem Java program", "Welcome",
JOptionPane.INFORMATION_MESSAGE);
double bandwidth = Double.parseDouble(JOptionPane
.showInputDialog("Please enter bandwidth (herz)"));
double signalToNoise = Double
.parseDouble(JOptionPane
.showInputDialog("Please enter signal to noise ratio in decibals"));
app.setBandwidth(bandwidth);
app.setSignalToNoise(signalToNoise);
String message = String.format("Max data rate is %.2f %s",
app.maximumDataRate(), "bps");
JOptionPane.showMessageDialog(null, message,
"Shannon's Theorem Results",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,
"Please enter only numbers when using this program",
"Problem", JOptionPane.ERROR_MESSAGE);
}
tryAgain = JOptionPane.showInputDialog("Continue? Enter anything to continue. N or n to exit.");
}while(!tryAgain.toLowerCase().equals("n"));
}
} /* End of CLASS: ShannonsTheorem.java */
Code
package network;
public class ShannonsModel {
private double bandwidth, signalToNoise;
public ShannonsModel() {
this.bandwidth = this.signalToNoise = 0.0;
}
public double getBandwidth() {
return bandwidth;
}
public double getSignalToNoise() {
return signalToNoise;
}
public double maximumDataRate() {
return maximumDataRate(bandwidth, signalToNoise);
}
/**
* Private method which performs the actual calculation of max data rate,
* using Shannon's Theorem.
*
* @param bandwidth
* in hertz
* @param signalToNoise
* in decibels
* @return max data rate in bits per second (bps)
*/
private double maximumDataRate(double bandwidth, double signalToNoise) {
return bandwidth
* (Math.log(1 + Math.pow(10, signalToNoise / 10)) / Math.log(2));
}
public void setBandwidth(double bandwidth) {
this.bandwidth = bandwidth;
}
public void setSignalToNoise(double signalToNoise) {
this.signalToNoise = signalToNoise;
}
/**
* Converts this class into a meaningful string.
*
* @return Formats bandwidth, signalToNoise, and max data rate in a String
*/
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[");
builder.append("bandwidth=").append(bandwidth).append(" hz,");
builder.append(" signalToNoise=").append(signalToNoise).append(" db,");
builder.append(" maximumDataRate=")
.append(String.format("%.2f", maximumDataRate()))
.append(" bps]");
return builder.toString();
}
}
Code
package networkTest;
import network.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class ShannonsTheoremTest {
@Test
public void getBandwidthTest() {
double bandwidth;
ShannonsTheorem st;
st = new ShannonsTheorem();
bandwidth = st.getBandwidth();
assertTrue(bandwidth == 0.0);
st.setBandwidth(10.0);
bandwidth = st.getBandwidth();
assertTrue(bandwidth == 10.0);
}
@Test
public void setBandwidthTest() {
double bandwidth;
ShannonsTheorem st;
st = new ShannonsTheorem();
st.setBandwidth(10.0);
bandwidth = st.getBandwidth();
assertTrue(bandwidth == 10.0);
}
@Test
public void getSignalToNoiseTest() {
double signalToNoise;
ShannonsTheorem st;
st = new ShannonsTheorem();
signalToNoise = st.getSignalToNoise();
assertTrue(signalToNoise == 0.0);
st.setSignalToNoise(10.0);
signalToNoise = st.getSignalToNoise();
assertTrue(signalToNoise == 10.0);
}
@Test
public void setSignalToNoiseTest() {
double signalToNoise;
ShannonsTheorem st;
st = new ShannonsTheorem();
st.setSignalToNoise(10.0);
signalToNoise = st.getSignalToNoise();
assertTrue(signalToNoise == 10.0);
}
@Test
public void maximumDataRateTest() {
double maximumDataRate;
ShannonsTheorem st;
st = new ShannonsTheorem();
maximumDataRate = st.maximumDataRate();
assertTrue(maximumDataRate == 0.0);
st.setBandwidth(10.0);
st.setSignalToNoise(10.0);
maximumDataRate = st.maximumDataRate();
assertTrue(maximumDataRate == 34.59431618637298);
}
}
Code
package networkTest;
import network.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class ShannonsModelTest {
@Test
public void getBandwidthTest() {
double bandwidth;
ShannonsModel sm;
sm = new ShannonsModel();
bandwidth = sm.getBandwidth();
assertTrue(bandwidth == 0.0);
sm.setBandwidth(10.0);
bandwidth = sm.getBandwidth();
assertTrue(bandwidth == 10.0);
}
@Test
public void setBandwidthTest() {
double bandwidth;
ShannonsModel sm;
sm = new ShannonsModel();
sm.setBandwidth(10.0);
bandwidth = sm.getBandwidth();
assertTrue(bandwidth == 10.0);
}
@Test
public void getSignalToNoiseTest() {
double signalToNoise;
ShannonsModel sm;
sm = new ShannonsModel();
signalToNoise = sm.getSignalToNoise();
assertTrue(signalToNoise == 0.0);
sm.setSignalToNoise(10.0);
signalToNoise = sm.getSignalToNoise();
assertTrue(signalToNoise == 10.0);
}
@Test
public void setSignalToNoiseTest() {
double signalToNoise;
ShannonsModel sm;
sm = new ShannonsModel();
sm.setSignalToNoise(10.0);
signalToNoise = sm.getSignalToNoise();
assertTrue(signalToNoise == 10.0);
}
@Test
public void maximumDataRateTest() {
double maximumDataRate;
ShannonsModel sm;
sm = new ShannonsModel();
maximumDataRate = sm.maximumDataRate();
assertTrue(maximumDataRate == 0.0);
sm.setBandwidth(10.0);
sm.setSignalToNoise(10.0);
maximumDataRate = sm.maximumDataRate();
assertTrue(maximumDataRate == 34.59431618637298);
}
@Test
public void toStringTest() {
String s;
ShannonsModel sm;
sm = new ShannonsModel();
s = sm.toString();
assertTrue(s.equals("[bandwidth=0.0 hz, signalToNoise=0.0 db, maximumDataRate=0.00 bps]"));
}
}
Unit tests could be better. But whatever.