See: http://www.ece.msstate.edu/~ruff/