Fundamentals of Global Positioning System Receivers - A Software Approach