Fundamentals of Global Positioning System Receivers: A Software Approach