http://www.gsmworld.com/using/algorithms/docs/55205-600.pdf