Patent Publication Number: US-9891054-B2

Title: Inertial sensor aided heading and positioning for GNSS vehicle navigation

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of and priority under 35 U.S.C. § 119(e) to U.S. Provisional Application No. 61/440,730, filed Feb. 8, 2011, and titled “Inertial Sensor Aided Heading and Positioning for GNSS Vehicle Navigation”, which is incorporated herein by reference. This application also claims the benefit of and priority under 35 U.S.C. § 119(e) to U.S. Provisional Application No. 61/433,124, filed Jan. 14, 2011, and titled “Inertial Sensor Aided Heading and Positioning for GNSS Vehicle Navigation”, which is incorporated herein by reference. This application further claims the benefit of and priority under 35 U.S.C. § 119(e) to U.S. Provisional Application No. 61/419,786, filed Dec. 3, 2010, and titled “Inertial Sensor Aided Heading and Positioning for GNSS Vehicle Navigation”, which is incorporated herein by reference. 
    
    
     BACKGROUND 
     I. Field of the Invention 
     This disclosure relates generally to apparatus and methods for determining headings in a wireless device, and more particularly to determining headings base on a combination of headings. 
     II. Background 
     Mobile devices used for navigation in a car or other vehicle sometimes use Global Navigation Satellite Systems (GNSS) positioning information in addition to accelerometer and gyroscope sensor measurements to formulate a current speed and heading. Such sensor measurements are most valuable when the mobile device “knows” how it is oriented with respect to the car. For example, the mobile device may be mounted in a cradle or other fixed structure in the car. Thus, when the mobile device experiences motion, the car is usually experiencing the same motion. On the other hand, if the mobile device is in a shirt pocket or sliding around on a seat or dashboard, then the mobile device motion and the car motion are correlated but not identical. 
     To determine whether a mobile device is mounted in a cradle, the cradle may have an electronic switch that is activated depending on whether the mobile device is in a mounted state. Each of these known cradles requires an extra switch on the cradle and an extra interface on the mobile device. Therefore, a means, without using extra cradle hardware, to detect whether a mobile device is mounted in a cradle is desired. Also, if a cradle provides pivoting or displacement with respect to the car, the relative relationship between the mobile device and car will change. Assuming that this relationship is permanently fixed while the mobile device is in its cradle is invalid with such pivoting cradles. Therefore, a means to detect when a mounted mobile device has been repositioned is desired. 
     In addition, many mobile devices provide heading information to a user for purposes of position location, navigation and routing. This heading information may be based on dead reckoning from sensor measurements and/or GNSS information. Such sensors include accelerometers and gyroscopes. Methods have long been desired to better select, weight and combine sensor measurements with GNSS information to provide a user with a more reliable and improved heading. 
     In addition to heading information, mobile devices include Kalman filters to predict a next GNSS position and velocity. The Kalman filter can better predicted the position and velocity with error feedback. Methods to provide an improve error feedback signal have long been desired. 
     Sensor calibration typically requires a mobile device to be stationary or traveling at a constant velocity. Methods to calibrate sensors, including gyroscopes, that have no such restraints are also desired. 
     BRIEF SUMMARY 
     Disclosed is an apparatus and method for providing and using an accurate and improved heading for a mobile device in a vehicle. Before an improved heading estimate is determined, the mobile device determines if the mobile device is in a mounted state in a cradle attached to the vehicle; if so, then inertia sensor data may be valid. If already in a mounted stated, the mobile device determines whether the mobile device has been rotated in the cradle; if so, then inertia sensor data may no longer be reliable and a recalibration to determine a new relative orientation between the vehicle and the mobile device is needed. If the mounted state of the device is known such that the mobile device is mounted and not recently rotated, heading data from multiple sensors (e.g., GPS, gyroscope, accelerometer) may be computed and combined to form an improved heading estimate. This improved heading estimate may be used to form an improved velocity estimate. The improved heading estimate may also be used to compute a bias to correct gyroscope calibration. 
     According to some aspects, disclosed is a method in a mobile device to detect if the mobile device is unmounted, the method comprising: receiving accelerometer measurements {right arrow over (a)}; determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; computing a parameter p based on the accelerometer measurements {right arrow over (a)}; computing a variance σ p   2  of the parameter; comparing the variance σ p   2  to a threshold; and declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: an inertial measurement unit comprising an accelerometer; a processor coupled to the inertial measurement unit; and memory coupled to the processor, comprising code for: receiving accelerometer measurements {right arrow over (α)}; determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; computing a parameter p based on the accelerometer measurements {right arrow over (a)}; computing a variance σ p   2  of the parameter; comparing the variance σ p   2  to a threshold; and declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: means for receiving accelerometer measurements {right arrow over (a)}; means for determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; means for computing a parameter p based on the accelerometer measurements {right arrow over (a)}; means for computing a variance σ p   2  of the parameter; means for comparing the variance σ p   2  to a threshold; and means for declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a method in a mobile device to detect if the mobile device is unmounted, the method comprising: receiving gyroscope measurements {right arrow over (ω)}; determining an average {right arrow over (ω)} AVG  of the gyroscope measurements {right arrow over (ω)}; computing a parameter p based on the gyroscope measurement {right arrow over (ω)}; computing a variance σ p   2  of the parameter; comparing the variance σ p   2  to a threshold; and declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: an inertial measurement unit comprising a gyroscope; a processor coupled to the inertial measurement unit; and memory coupled to the processor, comprising code for: receiving gyroscope measurements {right arrow over (ω)}; determining an average {right arrow over (ω)} AVG  of the gyroscope measurements {right arrow over (ω)}; computing a parameter p based on the gyroscope measurement {right arrow over (ω)}; computing a variance σ p   2  of the parameter; comparing the variance σ p   2  to a threshold; and declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: means for receiving gyroscope measurements {right arrow over (ω)}; means for determining an average {right arrow over (ω)} AVG  of the gyroscope measurements {right arrow over (ω)}; means for computing a parameter p based on the gyroscope measurement {right arrow over (ω)}; means for computing a variance σ p   2  of the parameter; means for comparing the variance σ p   2  to a threshold; and means for declaring the mobile device is unmounted based on the variance σ p   2  being greater than the threshold. 
     According to some aspects, disclosed is a method in a mobile device to detect if the mobile device is unmounted, the method comprising: receiving accelerometer measurements {right arrow over (a)}; determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; computing an angle θ between the average {right arrow over (a)} AVG  and an axis perpendicular to a viewable display on the mobile device; comparing the angle θ to 90 degrees; and declaring the mobile device is unmounted based on the angle θ being less than a threshold from 90 degrees. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: an inertial measurement unit comprising an accelerometer; a processor coupled to the inertial measurement unit; and memory coupled to the processor, comprising code for: receiving accelerometer measurements {right arrow over (a)}; determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; computing an angle θ between the average {right arrow over (a)} AVG  and an axis perpendicular to a viewable display on the mobile device; comparing the angle θ to 90 degrees; and declaring the mobile device is unmounted based on the angle θ being less than a threshold from 90 degrees. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: means for receiving accelerometer measurements {right arrow over (a)}; means for determining an average {right arrow over (a)} AVG  of the accelerometer measurements {right arrow over (a)}; means for computing an angle θ between the average {right arrow over (a)} AVG  and an axis perpendicular to a viewable display on the mobile device; means for comparing the angle θ to 90 degrees; and means for declaring the mobile device is unmounted based on the angle θ being less than a threshold from 90 degrees. 
     According to some aspects, disclosed is a method in a mobile device to detect if the mobile device is unmounted, the method comprising: computing variance values ∝ p   2  for at least one of: a sequence of accelerometer measurements ({right arrow over (a)}); a sequence of averages ({right arrow over (a)} AVG ) of accelerometer measurements; a sequence of gyroscope measurements ({right arrow over (ω)}); three sequences of scalar channelized gyroscope measurements (ω X ,ω Y ,ω Z ); and a virtual gyroscope heading rate ({dot over ( H )}); setting a flag if any of the variance values σ p   2  exceed a respective threshold; and declaring the mobile device is not in a mounted state based on the flag. 
     According to some aspects, disclosed is a mobile device to detect if the mobile device is unmounted, the mobile device comprising: an inertial measurement unit comprising an accelerometer; a processor coupled to the inertial measurement unit; and memory coupled to the processor, comprising code for: computing variance values σ p   2  for at least one of: a sequence of accelerometer measurements ({right arrow over (a)}); a sequence of averages ({right arrow over (a)} AVG ) of accelerometer measurements; a sequence of gyroscope measurements ({right arrow over (ω)}); three sequences of scalar channelized gyroscope measurements (ω X ,ω Y ,ω Z ); and a virtual gyroscope heading rate ({dot over ( H )}); setting a flag if any of the variance values σ p   2  exceed a respective threshold; and declaring the mobile device is not in a mounted state based on the flag. A mobile device to detect if the mobile device is unmounted, the mobile device comprising: means for computing variance values σ p   2  for at least one of: a sequence of accelerometer measurements ({right arrow over (a)}); a sequence of averages ({right arrow over (a)} AVG ) of accelerometer measurements; a sequence of gyroscope measurements ({right arrow over (ω)}); three sequences of scalar channelized gyroscope measurements (ω X ,ω Y ,ω Z ); and a virtual gyroscope heading rate ({dot over ( H )}); means for setting a flag if any of the variance values σ p   2  exceed a respective threshold; and means for declaring the mobile device is not in a mounted state based on the flag. 
     According to some aspects, disclosed is a method in a mobile device for providing an improved heading, the method comprising: receiving an accelerometer measurement ({right arrow over (a)}) from an accelerometer; receiving a gyroscope measurement ({right arrow over (ω)}) from a gyroscope; receiving a GNSS heading (H GNSS ) from a GNSS receiver; computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based on the gyroscope measurement ({right arrow over (ω)}) and the gravity vector ({right arrow over (g)}); and combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate ({dot over (H)} Gyro ) to form the improved heading. 
     According to some aspects, disclosed is a mobile device to provide an improved heading, the mobile device comprising: an inertial measurement unit comprising an accelerometer and a gyroscope; a Global Navigation Satellite Systems receiver (GNSS receiver); a processor coupled to the inertial measurement unit and the GNSS receiver; and memory coupled to the processor, comprising code for: receiving an accelerometer measurement ({right arrow over (a)}) from the accelerometer; receiving a gyroscope measurement ({right arrow over (ω)}) from the gyroscope; receiving a GNSS heading (H GNSS ) from the GNSS receiver; computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based on the gyroscope measurement ({right arrow over (ω)}) and the gravity vector ({right arrow over (g)}); and combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate ({dot over (H)} Gyro ) to form the improved heading. 
     According to some aspects, disclosed is a mobile device to provide an improved heading, the mobile device comprising: means for receiving an accelerometer measurement ({right arrow over (a)}); means for receiving a gyroscope measurement ({right arrow over (ω)}); means for receiving a GNSS heading (H GNSS ); means for computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); means for computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based a projection of the gyroscope measurement ({right arrow over (ω)}) and the gravity vector ({right arrow over (g)}); and means for combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate 
     According to some aspects, disclosed is a method in a mobile device for providing an improved velocity, the method comprising: receiving an accelerometer measurement ({right arrow over (a)}) from an accelerometer; receiving a gyroscope measurement ({right arrow over (ω)}) from a gyroscope; receiving a GNSS velocity ({right arrow over (V)} GNSS ) comprising a GNSS heading ({right arrow over (H)} GNSS ) from a GNSS receiver; computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based on a projection of the gyroscope measurement ({right arrow over (ω)})) and the gravity vector ({right arrow over (g)}); combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate ({dot over (H)} Gyro ) to form an improved heading (Ĥ); and computing the improved velocity from the improved heading (Ĥ). 
     According to some aspects, disclosed is a mobile device to provide an improved velocity, the mobile device comprising: an inertial measurement unit comprising an accelerometer and a gyroscope; a Global Navigation Satellite Systems receiver (GNSS receiver); a processor coupled to the inertial measurement unit and the GNSS receiver; and memory coupled to the processor, comprising code for: receiving an accelerometer measurement ({right arrow over (a)}) from the accelerometer; receiving a gyroscope measurement ({right arrow over (ω)}) from the gyroscope; receiving a GNSS velocity ({right arrow over (V)} GNSS ) comprising a GNSS heading ({right arrow over (H)} GNSS ) from the GNSS receiver; computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based on the gyroscope measurement ({right arrow over (ω)}) and the gravity vector ({right arrow over (g)}); combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate ({dot over (H)} Gyro ) to form an improved heading (Ĥ); and computing the improved velocity from the improved heading (Ĥ). 
     According to some aspects, disclosed is a mobile device to provide an improved velocity, the mobile device comprising: means for receiving an accelerometer measurement ({right arrow over (a)}) from an accelerometer; means for receiving a gyroscope measurement ({right arrow over (ω)}) from a gyroscope; means for receiving a GNSS velocity ({right arrow over (V)} GNSS ) comprising a GNSS heading ({right arrow over (H)} GNSS ) from a GNSS receiver; means for computing a gravity vector ({right arrow over (g)}) based on the accelerometer measurement ({right arrow over (a)}); means for computing a virtual gyroscope heading rate ({dot over (H)} Gyro ) based on the gyroscope measurement ({right arrow over (ω)}) and the gravity vector ({right arrow over (g)}); means for combining the GNSS heading (H GNSS ) and virtual gyroscope heading rate ({dot over (H)} Gyro ) to form an improved heading (Ĥ); and means for computing the improved velocity from the improved heading (Ĥ). 
     According to some aspects, disclosed is a method in a mobile device for generating a gyroscope bias, the method comprising: receiving at least two GNSS headings (H GNSS ) from a GNSS receiver; computing a GNSS heading difference (ΔH GNSS ) based on the GNSS headings (H GNSS ); converting the GNSS heading difference (ΔH GNSS ) to a negative GNSS heading rate (−{dot over (H)} GNSS ) by scaling by a GNSS time difference (−ΔT GNSS ); receiving gyroscope measurements ({right arrow over (ω)}) from a gyroscope; computing the virtual gyroscope heading rate ({dot over (H)} Gyro ) from the gyroscope measurements ({right arrow over (ω)}); forming a corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) from the virtual gyroscope heading rate ({dot over (H)} Gyro ); averaging the corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) to form the average virtual gyroscope heading rate ( {dot over (H)}   Gyro,CORR ); and summing the negative GNSS heading rate (−{dot over (H)} GNSS ) and the virtual gyroscope heading rate ( {dot over (H)}   Gyro ) to form the gyroscope bias. 
     According to some aspects, disclosed is a mobile device to generate a gyroscope bias, the mobile device comprising: an inertial measurement unit comprising an accelerometer and a gyroscope; a Global Navigation Satellite Systems receiver (GNSS receiver); a processor coupled to the inertial measurement unit and the GNSS receiver; and memory coupled to the processor, comprising code for: receiving GNSS headings (H GNSS ) from the GNSS receiver; computing a GNSS heading difference (ΔH GNSS ) based on the GNSS headings (H GNSS ); converting the GNSS heading difference (ΔH GNSS ) to a negative GNSS heading rate (−{dot over (H)} GNSS ) by scaling by a GNSS time difference (−ΔT GNSS ); receiving gyroscope measurements ({right arrow over (ω)}) from the gyroscope; computing the virtual gyroscope heading rate ({dot over (H)} Gyro ) from the gyroscope measurements ({right arrow over (ω)}); forming a corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) from the virtual gyroscope heading rate ({dot over (H)} Gyro ); averaging the corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) to form the virtual gyroscope heading rate ({dot over ( H )} Gyro,CORR ), and summing the average heading rate (−{dot over (H)} GNSS ) and the virtual gyroscope heading rate ({dot over ( H )} Gyro ) to form the gyroscope bias. 
     According to some aspects, disclosed is a mobile device to generate a gyroscope bias, the mobile device comprising: means for receiving at least two GNSS headings (H GNSS ) from a GNSS receiver; means for computing an GNSS heading difference (ΔH GNSS ) (based on the GNSS headings (H GNSS ); means for converting the GNSS heading difference (ΔH GNSS ) to a negative GNSS heading rate (−{dot over (H)} GNSS ) by scaling by a GNSS time difference (−ΔT GNSS ); means for receiving gyroscope measurements ({right arrow over (ω)}) from a gyroscope; means for computing the virtual gyroscope heading rate ({dot over (H)} Gyro ) from the gyroscope measurements ({right arrow over (ω)}); means for forming a corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) from the virtual gyroscope heading rate ({dot over (H)} Gyro ); means for averaging the corrected gyroscope heading rate ({dot over (H)} Gyro,CORR ) to form the virtual gyroscope heading rate ({dot over ( H )} Gyro,CORR ), and means for summing the negative GNSS heading rate (−{dot over (H)} GNSS ) and the virtual gyroscope heading rate ({dot over ( H )} Gyro ) to form the gyroscope bias. 
     According to some aspects, disclosed is a method in a mobile device for generating a gyroscope bias, the method comprising: receiving a GNSS heading (H GNSS ); receiving gyroscope measurements ({right arrow over (ω)}); and computing the gyroscope bias based on the GNSS heading (H GNSS ) and the gyroscope measurements ({right arrow over (ω)}). 
     According to some aspects, disclosed is a mobile device to generate a gyroscope bias, the mobile device comprising: an inertial measurement unit comprising an accelerometer and a gyroscope; a Global Navigation Satellite Systems receiver (GNSS receiver); a processor coupled to the inertial measurement unit and the GNSS receiver; and memory coupled to the processor, comprising code for: receiving a GNSS heading (H GNSS ); receiving gyroscope measurements ({right arrow over (ω)}); and computing the gyroscope bias based on the GNSS heading (H GNSS ) and the gyroscope measurements ({right arrow over (ω)}). 
     According to some aspects, disclosed is a mobile device to generate a gyroscope bias, the mobile device comprising: means for receiving a GNSS heading (H GNSS ); means for receiving gyroscope measurements ({right arrow over (ω)}); and means for computing the gyroscope bias based on the GNSS heading (H GNSS ) and the gyroscope measurements ({right arrow over (ω)}). 
     According to some aspects, disclosed is a method in a mobile device for detecting cradle rotation, the method comprising: determining the threshold (ω max ) based on a GNSS magnitude (∥{right arrow over (V)}∥); comparing an angular rotation rate (∥{right arrow over (ω)}∥) to a threshold (ω max ); and determining a cradle rotation state based on the comparison. 
     According to some aspects, disclosed is a mobile device to detect cradle rotation, the mobile device comprising: an inertial measurement unit comprising an accelerometer and a gyroscope; a Global Navigation Satellite Systems receiver (GNSS receiver); a processor coupled to the inertial measurement unit and the GNSS receiver; and memory coupled to the processor, comprising code for: determining the threshold (ω max ) based on a GNSS magnitude (∥{right arrow over (V)}∥); comparing an angular rotation rate (∥{right arrow over (ω)}∥) to a threshold (ω max ); and determining a cradle rotation state based on the comparison. 
     According to some aspects, disclosed is a mobile device to detect cradle rotation, the mobile device comprising: means for determining the threshold (ω max ) based on a GNSS magnitude (∥{right arrow over (V)}∥); means for comparing an angular rotation rate (∥{right arrow over (ω)}∥) to a threshold (ω max ); and means for determining a cradle rotation state based on the comparison. 
     It is understood that other aspects will become readily apparent to those skilled in the art from the following detailed description, wherein it is shown and described various aspects by way of illustration. The drawings and detailed description are to be regarded as illustrative in nature and not as restrictive. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWING 
       Embodiments of the invention will be described, by way of example only, with reference to the drawings. 
         FIG. 1  illustrates a GNSS system and a side view of a car with a mounted mobile device. 
         FIG. 2  shows a top view illustrating differences among headings from various sources. 
         FIG. 3  shows a block diagram of a mobile device, in accordance with some embodiments of the present invention. 
         FIG. 4  shows gravity vectors with respect to a mobile device, in accordance with some embodiments of the present invention. 
         FIG. 5  is a block diagram of a mount state detector, in accordance with some embodiments of the present invention. 
         FIG. 6  is a block diagram of a unit to compute a variance. 
         FIGS. 7-10  are block diagrams of other mount state detectors, in accordance with some embodiments of the present invention. 
         FIGS. 11 and 12  show two orientations of a mobile device  100 . 
         FIG. 13  shows a mount state detector, in accordance with some embodiments of the present invention. 
         FIGS. 14 and 15  show block diagrams of units to compute an improved heading, in accordance with some embodiments of the present invention. 
         FIG. 16  illustrates a projection used in a virtual gyroscope, in accordance with some embodiments of the present invention. 
         FIG. 17  is a block diagram of a heading filter, in accordance with some embodiments of the present invention. 
         FIGS. 18 and 19  show a relationship between a weighting factor and a duration of integration. 
         FIGS. 20, 21, 22 and 23  illustrate a method for computing an improved velocity, in accordance with some embodiments of the present invention. 
         FIG. 24  shows a method for generating a gyroscope bias, in accordance with some embodiments of the present invention. 
         FIG. 25  is a block diagram of a cradle rotation detector, in accordance with some embodiments of the present invention. 
     
    
    
     DETAILED DESCRIPTION 
     The detailed description set forth below in connection with the appended drawings is intended as a description of various aspects of the present disclosure and is not intended to represent the only aspects in which the present disclosure may be practiced. Each aspect described in this disclosure is provided merely as an example or illustration of the present disclosure, and should not necessarily be construed as preferred or advantageous over other aspects. The detailed description includes specific details for the purpose of providing a thorough understanding of the present disclosure. However, it will be apparent to those skilled in the art that the present disclosure may be practiced without these specific details. In some instances, well-known structures and devices are shown in block diagram form in order to avoid obscuring the concepts of the present disclosure. Acronyms and other descriptive terminology may be used merely for convenience and clarity and are not intended to limit the scope of the disclosure. 
     Position determination techniques described herein may be implemented in conjunction with various wireless communication networks such as a wireless wide area network (WWAN), a wireless local area network (WLAN), a wireless personal area network (WPAN), and so on. The term “network” and “system” are often used interchangeably. A WWAN may be a Code Division Multiple Access (CDMA) network, a Time Division Multiple Access (TDMA) network, a Frequency Division Multiple Access (FDMA) network, an Orthogonal Frequency Division Multiple Access (OFDMA) network, a Single-Carrier Frequency Division Multiple Access (SC-FDMA) network, Long Term Evolution (LTE), and so on. A CDMA network may implement one or more radio access technologies (RATs) such as cdma2000, Wideband-CDMA (W-CDMA), and so on. Cdma2000 includes IS-95, IS-2000, and IS-856 standards. A TDMA network may implement Global System for Mobile Communications (GSM), Digital Advanced Mobile Phone System (D-AMPS), or some other RAT. GSM and W-CDMA are described in documents from a consortium named “3rd Generation Partnership Project” (3GPP). Cdma2000 is described in documents from a consortium named “3rd Generation Partnership Project 2” (3GPP2). 3GPP and 3GPP2 documents are publicly available. A WLAN may be an IEEE 802.11x network, and a WPAN may be a Bluetooth network, an IEEE 802.15x, or some other type of network. The techniques may also be implemented in conjunction with any combination of WWAN, WLAN and/or WPAN. 
     A satellite positioning system (SPS) typically includes a system of transmitters positioned to enable entities to determine their location on or above the Earth based, at least in part, on signals received from the transmitters. Such a transmitter typically transmits a signal marked with a repeating pseudo-random noise (PN) code of a set number of chips and may be located on ground based control stations, user equipment and/or space vehicles. In a particular example, such transmitters may be located on Earth orbiting satellite vehicles (SVs). For example, a SV in a constellation of Global Navigation Satellite System (GNSS) such as Global Positioning System (GPS), Galileo, GLONASS or Compass may transmit a signal marked with a PN code that is distinguishable from PN codes transmitted by other SVs in the constellation (e.g., using different PN codes for each satellite as in GPS or using the same code on different frequencies as in GLONASS). In accordance with certain aspects, the techniques presented herein are not restricted to global systems (e.g., GNSS) for SPS. For example, the techniques provided herein may be applied to or otherwise enabled for use in various regional systems, such as, e.g., Quasi-Zenith Satellite System (QZSS) over Japan, Indian Regional Navigational Satellite System (IRNSS) over India, Beidou over China, etc., and/or various augmentation systems (e.g., an Satellite Based Augmentation System (SBAS)) that may be associated with or otherwise enabled for use with one or more global and/or regional navigation satellite systems. By way of example but not limitation, an SBAS may include an augmentation system(s) that provides integrity information, differential corrections, etc., such as, e.g., Wide Area Augmentation System (WAAS), European Geostationary Navigation Overlay Service (EGNOS), Multi-functional Satellite Augmentation System (MSAS), GPS Aided Geo Augmented Navigation or GPS and Geo Augmented Navigation system (GAGAN), and/or the like. Thus, as used herein an SPS may include any combination of one or more global and/or regional navigation satellite systems and/or augmentation systems, and SPS signals may include SPS, SPS-like, and/or other signals associated with such one or more SPS. 
     As used herein, a mobile device  100 , sometimes referred to as a mobile station (MS) or user equipment (UE), such as a cellular phone, mobile phone or other wireless communication device, personal communication system (PCS) device, personal navigation device (PND), Personal Information Manager (PIM), Personal Digital Assistant (PDA), laptop or other suitable mobile device which is capable of receiving wireless communication and/or navigation signals. The term “mobile station” is also intended to include devices which communicate with a personal navigation device (PND), such as by short-range wireless, infrared, wireline connection, or other connection—regardless of whether satellite signal reception, assistance data reception, and/or position-related processing occurs at the device or at the PND. Also, “mobile station” is intended to include all devices, including wireless communication devices, computers, laptops, etc. which are capable of communication with a server, such as via the Internet, WiFi, or other network, and regardless of whether satellite signal reception, assistance data reception, and/or position-related processing occurs at the device, at a server, or at another device associated with the network. Any operable combination of the above are also considered a “mobile station.” 
       FIG. 1  illustrates a satellite positioning system (SPS) and a side view of a car  10  with a mobile device  100  mounted in a cradle. A user may place a mobile device  100  in a cradle fixed to the car  10  or other vehicle to assist the user with navigation while traveling in the car  10 . The mobile device  100  acts as a hands-free device, may display local maps and may present audio and visual routing information. 
     The mobile device  100  may use GNSS signals received from GNSS satellites  99  in the satellite positioning system (SPS) as well as local sensor data to estimate a current position, velocity or heading of the car  10  within a horizontal plane. This horizontal plane may be defined as the X-Y plane perpendicular to the gravity vector ({right arrow over (g)}), which forms the Z-axis ({circumflex over (z)}). The X-axis ({circumflex over (x)}) may be defined as the direction the car  10  is facing and the Y-axis (ŷ) (not shown) may be the yaw or lateral direction perpendicular to both the forward direction ({circumflex over (x)}) and the gravity vector ({right arrow over (g)}) in the vertical direction ({circumflex over (z)}). 
     The X, Y, and Z-axes represent a reference system local ({circumflex over (x)},ŷ,{circumflex over (z)}), which is local to the car  10 . The global reference system may be represented by longitude and latitude or by longitude, latitude and elevation. GNSS data is generated with respect to the global reference system. A third reference system is the body reference system, which is defined relative to the body of the mobile device  100 . Sensor data is generated in the body reference system by sensors within the mobile device  100 . 
     Motion of the car  10  may be restricted using non-holonomic constraints in the local reference system. That is, the mobile device  100  may place bounds on the car&#39;s possible movement by restricting movement of the car  10  along the X-axis. 
       FIG. 2  shows a top view illustrating differences among headings from various sources. A first heading (car heading H {circumflex over (x)}  along {circumflex over (x)}) is defined by the direction the car  10  is heading or facing. In other words, the first heading is a car heading (H {circumflex over (x)} ) defined by the X-axis in the local reference system. 
     A second heading is a GNSS heading (H GNSS ) defined by signals from a GNSS receiver  140 . The second heading may be extracted from the GNSS velocity ({right arrow over (V)} GNSS ), which may be defined as a heading and a speed. 
     A third heading (H Gyro ) is from a gyroscope  130 . 
     The various headings in an ideal world are be identical. In the real world, however, these three headings are derived from different sources and over different periods; therefore, these three headings are often similar but distinct from one another. A fourth heading is an improved heading (Ĥ), which is a weighted combination of two or more of these three headings and is in the direction of an improved velocity ({circumflex over (V)}) discussed in more detail below. 
     Each heading has both advantages and disadvantages. The car heading (H {circumflex over (x)} ) is simple to determine but may only be correct for an instant or have an inherent bias. The GNSS heading (H GNSS ) is accurate over the long term but less inaccurate over the short term. The gyroscope heading (H Gyro ) may be accurate over the short term but inaccurate over the long term because of accumulated error. Two or three of the headings may be restricted (e.g., using non-holonomic constraints) and combined to form the improved heading (Ĥ), which attempts to combine the advantages of the individual headings while masking their disadvantages. 
       FIG. 3  shows a block diagram of a mobile device, in accordance with some embodiments of the present invention. The mobile device  100  includes sensors  110 , also referred to as an inertial measurement unit (IMU). In this case, the sensors  110  include both an accelerometer  120  and a gyroscope  130 . Both the accelerometer  120  and the gyroscope  130  may be devices generating three-dimensional measurements. 
     The mobile device  100  also includes a GNSS receiver  140 , a processor  150  and possible a display  160 . The processor  150  receives data from the accelerometer  120  in the form of three-dimensional accelerometer measurements ({right arrow over (a)}) referenced to the body reference system. The processor  150  receives from the gyroscope  130  an angular rate ({right arrow over (ω)}), which identifies an angular change from a previous measurement. The angular rate ({right arrow over (ω)}) is also a three-dimensional measurement referenced to the body reference system. 
     The GNSS receiver  140  provides a GNSS heading ( H ), which may be a scalar value referenced to North (0°). The processor  150  may include memory containing the code to execute the methods described herein. Alternatively, this memory may be externally located from the processor  150 . The display  160  is coupled to the processor and may be used to present map, routing information and directional information to the user. The mobile device  100  may also include a speaker for audio commands. 
       FIG. 4  shows gravity vectors with respect to a mobile device, in accordance with some embodiments of the present invention. When a user enters a car  10 , the user may mount the mobile device  100  to a cradle or other mounting structure fixed to the car  10 , for example, within the first 20 seconds. The cradle provides a fixed relationship between the body reference system of the mobile device  100  and the local reference system of the car  10 . Normally, a relative orientation between the mobile device  100  and the car  10  does not change over time while the mobile device  100  is mounted in the cradle. The fixed relationship may be disturbed by a user, for example, readjusting the mobile device  100  to obtain a better viewing angle. 
     When the mobile device  100  is positioned in the cradle, the accelerometer  120  and the gyroscope  130  generate data directly corresponding to movement of the car  10 . On the other hand, when the mobile device  100  is in a user&#39;s pocket, jacket or purse, the sensors  110  generate data only correlated to but not identical to movements of the car  10 . The figure shows an example when a gravitational vector ({right arrow over (g)}) changes between a first time (k) and a second time (k−1). If mounted, the computed gravitational vector only changes within an error threshold. 
     If the computed gravitational vector changes from a first gravitation ({right arrow over (g)}(k−1)) to a second gravitation ({right arrow over (g)}(k)) greater than a threshold amount, the processor  150  may declare the mobile device  100  is not in a mounted state (if this variation changes continuously with time) or rotated within the cradle (if this variation settles on a first gravitation vector then settles on a second gravitation vector). If the processor  150  determines the mobile device  100  is not mounted, then measurements from the sensor  110  will not be directly associated with movements of the car  10   
       FIG. 5  is a block diagram of a mount state detector, in accordance with some embodiments of the present invention. This process  200  determines two or more variances from difference sequences of variables. The example here shows five variances, however, some embodiments may only use just two, three or four of these variances. For example, an embodiment may use only one acceleration-based variance (e.g., a variance of {right arrow over (a)} or {right arrow over (a)} AVG ) and one gyroscope-based variance (e.g., a variance of {right arrow over (ω)} or ω X ,ω Y ,ω Z ). Another embodiment may use only an averaged acceleration variance (e.g., a variance of {right arrow over (a)} AVG ) and one gyroscope-based variance (e.g., a variance of {right arrow over (ω)}). 
     The sequence of variables include: (1) a three-dimensional accelerometer measurement ({right arrow over (a)}); (2) an averaged three-dimensional accelerometer measurement ({right arrow over (a)} AVG ); (3) a three-dimensional gyroscope measurement ({right arrow over (ω)}); (4) a three-dimensional gyroscope measurement treated as three separate channels providing three separate scalar values (ω X ,ω Y ,ω Z ); and (5) a virtual heading rate ({dot over ( H )}). The first three streams each result in one variance value per time index and the fourth stream results in three variance values per time index. 
     At step  210 , the processor  150  receives accelerometer measurements ({right arrow over (a)}(k)) from the accelerometer  120 , which may be provided to step  220 , step  240  and/or step  270  as measurements ({right arrow over (a)}). Alternatively, the three-dimensional accelerometer measurements ({right arrow over (a)}(k)) may be provided as one, two or three scalar values (a X ,a Y ,a Z  or a X (k),a Y (k),a Z (k)) where {right arrow over (a)}(k)=a X (k){circumflex over (x)}+a Y (k)ŷ+a Z (k){circumflex over (z)} in the body reference system. The accelerometer measurements ({right arrow over (a)}) may be represented as a temporal sequence a values:
 
 {right arrow over (a)} ( k ), {right arrow over (a)} ( k− 1), {right arrow over (a)} ( k− 2), {right arrow over (a)} ( k− 3), {right arrow over (a)} ( k− 4), . . .
 
     At step  220 , the processor  150  performs an average of a window of n previous measurements, if needed. For example: 
     
       
         
           
             
               
                 
                   a 
                   → 
                 
                 AVG 
               
               ⁡ 
               
                 ( 
                 k 
                 ) 
               
             
             = 
             
               
                 1 
                 n 
               
               ⁢ 
               
                 
                   ∑ 
                   
                     i 
                     = 
                     0 
                   
                   
                     n 
                     - 
                     1 
                   
                 
                 ⁢ 
                 
                   
                     a 
                     → 
                   
                   ⁡ 
                   
                     ( 
                     
                       k 
                       - 
                       i 
                     
                     ) 
                   
                 
               
             
           
         
       
     
     The three-dimensional averaged accelerometer measurements ({right arrow over (a)} AVG ) may be represented as a temporal sequence a values:
 
 {right arrow over (a)}   AVG ( k ), {right arrow over (a)}   AVG ( k− 1), {right arrow over (a)}   AVG ( k− 2), {right arrow over (a)}   AVG ( k− 3), {right arrow over (a)}   AVG ( k− 4), . . .
 
     At step  230 , the processor  150  receives gyroscope measurements ({right arrow over (ω)}(k)) from the gyroscope  130 , which may also be provided to step  220 , step  240  and/or step  270 , either as three-dimensional gyroscope measurements ({right arrow over (ω)}) or as the three separate channels (ω X ,ω Y ,ω Z ). The three-dimensional gyroscope measurements ({right arrow over (ω)}) may be represented in time as:
 
{right arrow over (ω)}( k ),{right arrow over (ω)}( k− 1),{right arrow over (ω)}( k− 2),{right arrow over (ω)}( k− 3),{right arrow over (ω)}( k− 4), . . .
 
     The three separate channels (ω X ,ω Y ,ω Z ) may be represented in time as:
 
ω X ( k ),ω X ( k− 1),ω X ( k− 2),ω X ( k− 3),ω X ( k− 4), . . . ,
 
ω Y ( k ),ω Y ( k− 1),ω Y ( k− 2),ω Y ( k− 3),ω Y ( k− 4), . . . and
 
ω Z ( k ),ω Z ( k− 1),ω Z ( k− 2),ω Z ( k− 3),ω Z ( k− 4), . . .
 
     At step  270 , the magnitude portion of the input value is passed as an output value to step  240 . The processor  150  computes a magnitude from an input vector {right arrow over (v)}(k) or input scalar v(k) as an output scalar ∥{right arrow over (v)}(k)∥ or |v(k)|. For streams of data comprising vectors, the processor  150  computes a magnitude and produces a scalar v(k), where the input data is {right arrow over (v)}(k)=v X (k){circumflex over (x)}+v Y (k)ŷ+v Z (k){circumflex over (z)} (with respect to the body reference system) and the output data is v(k)=√{square root over (v X (k) 2 +v Y (k) 2 +v Z (k) 2 )} (also with respect to the body reference system). For streams of data comprising scalars, the scalar values (a X ,a Y ,a Z ,ω X ,ω Y ,ω Z ) may undergo an absolute value operation (not shown) where, for example, v(k)=|v X (k)|, where the output data is |v X (k)| and the input scalar value is one or more of (a X ,a Y ,a Z ,ω X ,ω Y ,ω Z ). Output data may also be low pass filtered. 
     At step  240 , the processor  150  receives one, two, three, four or five streams of input variables and computes a variance (σ 2 ), based on an average acceleration (from step  220 ) or an average heading (from step  310 ), for each stream at each time k. The variances are computed as described with reference to the  FIG. 6  described below. This step computes a sequence of output variances corresponding to each set of input variables. For example, the processor  150  represents: the sequence of variances (σ a   2 ) computed from the three-dimensional accelerometer measurements ({right arrow over (a)}) as σ a   2 (k),σ a   2 (k−1),σ a   2 (k−2),σ a   2 (k−3),σ a   2 (k−4), . . . ; the sequence of variances (σ a   2 ) computed from the averaged three-dimensional accelerometer measurements ({right arrow over (a)}) as σ a   2 (k),σ a   2 (k−1),σ a   2 (k−2),σ a   2 (k−3),σ a   2 (k−4), . . . ; the sequence of variances (σ ω   2 ) computed from the three-dimensional gyroscope measurements ({right arrow over (ω)}) as σ ω   2 (k),σ ω   2 (k−1),σ ω   2 (k−2),σ ω   2 (k−3),σ ω   2 (k−4), . . . ; and the sequence of variances (σ ω   _   X   2 ,σ ω   _   Y   2 ,σ ω   _   Z   2 ) computed from the three separate channels (ω X ,ω Y ,ω Z ) as:
 
σ ω   _   X   2 ( k ),σ ω   _   X   2 ( k− 1),σ ω   _   X   2 ( k− 2),σ ω   _   X   2 ( k− 3),σ ω   _   X   2 ( k− 4), . . . ,
 
σ ω   _   Y   2 ( k ),σ ω   _   Y   2 ( k− 1),σ ω   _   Y   2 ( k− 2),σ ω   _   Y   2 ( k− 3),σ ω   _   Y   2 ( k− 4), . . . and
 
σ ω   _   Z   2 ( k ),σ ω   _   Z   2 ( k− 1),σ ω   _   Z   2 ( k− 2),σ ω   _   Z   2 ( k− 3),σ ω   _   Z   2 ( k− 4), . . . .
 
     At step  250 , each of the computed variances is compared to a respective threshold to determine if any excessive linear or angular acceleration occurred. In some embodiments, a single variance exceeding the threshold triggers the processor  150  into declaring the mobile device  100  is not in a mounted state, as shown at step  260 . 
     In other embodiments, a window of results is examined for each sequence of variances to determine if enough excessive events have occurred to declare the mobile device  100  is not in the mounted state. For example, if the variance of the acceleration measurements is greater than a fixed threshold for more than a predetermined number of times within a window of a predetermined length, then the processor  150  declares the mobile device  100  is not in the mounted state. This windowing may occur in parallel for each of the sequences of variances computed at step  240 . In this case, any one of the sequence of variances exceeding its respective threshold by more than the predetermined number of times within the window can trigger the processor  150  to make the declaration of step  260  that the mobile device  100  is not in a mounted state. 
     Alternatively, or in addition to, the processor  150  may declare the mobile device  100  is in the mounted state or remains in a mounted state (not shown) based on variances not exceeding a respective threshold for more than a predetermined number of times over a window of a predetermined time. A hysteresis may be used to transition between the mounted and unmounted states. 
     Alternatively, the yes/no output of step  250  may be windowed such that a predetermined threshold number of decisions within a previous predetermined number of computations must be ‘yes’ in order for the declaration at step  260  to be made. For example, two or more out of the previous five determinations must be ‘yes’ before the declaration at step  260  is made to conclude the mobile device  100  is in a mounted state. 
     If the mobile device  100  is mounted, then the processor  150  assumes the body reference system is fixed with respect to the local reference system. In this case, the sensor measurements from sensor  110  in the body reference system directly represent movement of the car  10  in the local reference system, as well as the mobile device  100 . That is, when processor  150  determines the mobile device  100  is mounted, the processor  150  may directly relate the two reference systems. When the processor  150  determines the mobile device  100  is not mounted, the processor  150  may disassociate the two reference systems. 
       FIG. 6  is a block diagram of a variances unit, which computes a variance (σ v   2 ). As described above, the processor  150  computes a variance at step  240  for each separate stream of data. At step  220  ( FIG. 5 ), the processor  150  computes an average (v AVG (k,n)) over a window. For example: 
                   v   AVG     ⁡     (     k   ,   n     )       =       1   n     ⁢       ∑     i   =   0       n   -   1       ⁢     v   ⁡     (     k   -   i     )             ,         
where the window size is n samples and k is the current index to measurements from the accelerometer  120  or gyroscope  130 .
 
     At step  246 , the processor  150  uses the vector value {right arrow over (v)}(k) or scalar value v(k) and/or the averaged value (v AVG (k)) to compute a variance (σ v   2 ). The variance may be denoted as σ v   2 =var{v(k)}. As a result, the processor  150  accepts one, two, three, four or five or more streams in parallel to produce as corresponding variance (σ v   2 ) for each stream. 
       FIGS. 7-10  are block diagrams of other mount state detectors, in accordance with some embodiments of the present invention. In  FIG. 7 , an angle θ(k), which represents an approximate instantaneous angle relative to gravity, is used to compute a variance   (shown as σ θ,a   2 ) of a sequence of angles θ(k). 
     An accelerometer  120  provides accelerometer measurements {right arrow over (a)}(k) (from a 3-D accelerometer) or a x (k), a y (k), and/or a z (k) (from a 1-D, 2-D or 3-D accelerometer). At step  210 , the processor  150  receives the accelerometer measurements {right arrow over (a)}(k) from the accelerometer  120  and forwards a vector or one or more scalars for processing to step  220  and step  235 . For example, the processor  150  may process one, two or three of the scalar components of the accelerometer measurements {right arrow over (a)}(k). 
     At step  220 , the processor  150  computes a running or windowed average 
               (       e   .   g   .     ,           a   →     AVG     ⁡     (     k   ,   n     )       =       1   n     ⁢       ∑     i   =   0       n   -   1       ⁢       a   →     ⁡     (     k   -   i     )               )     ,         
which represents a gravity vector {right arrow over (g)}. At step  235 , the processor  150  computes a parameter p, which is an angle θ(k) between the averaged vector represented by the gravity vector {right arrow over (g)} and the current accelerometer measurement {right arrow over (a)}(k). For example, the angle is computed as:
 
     
       
         
           
             
               θ 
               ⁡ 
               
                 ( 
                 k 
                 ) 
               
             
             = 
             
               
                 arccos 
                 ⁡ 
                 
                   ( 
                   
                     
                       
                         
                           
                             a 
                             → 
                           
                           AVG 
                         
                         ⁡ 
                         
                           ( 
                           
                             k 
                             , 
                             n 
                           
                           ) 
                         
                       
                       · 
                       
                         
                           a 
                           → 
                         
                         ⁡ 
                         
                           ( 
                           k 
                           ) 
                         
                       
                     
                     
                       
                          
                         
                           
                             
                               a 
                               → 
                             
                             AVG 
                           
                           ⁡ 
                           
                             ( 
                             
                               k 
                               , 
                               n 
                             
                             ) 
                           
                         
                          
                       
                       · 
                       
                          
                         
                           
                             a 
                             → 
                           
                           ⁡ 
                           
                             ( 
                             k 
                             ) 
                           
                         
                          
                       
                     
                   
                   ) 
                 
               
               . 
             
           
         
       
     
     Step  235  presents angle θ(k) to step  240 . At step  240  and based on angle θ(k), the processor  150  computes a variance  , which represents a variance of the angle formed between the accelerometer measurements {right arrow over (a)}(k) and vector {right arrow over (g)}. At step  250 , the processor  150  determines if this variance   is greater than a threshold variance. If so, the mobile device  100  is probably not in a mounting device and at step  260 , the processor  150  declares that the mobile device  100  is not in a mounted state. 
     In  FIG. 8 , an instantaneous magnitude (e.g., ∥{right arrow over (a)}(k)∥ or ∥{right arrow over (a)} y (k)∥) is compared to a magnitude of an approximation of the gravity to form a variance σ ∥a∥   2 . First, the accelerometer  120  provides accelerometer measurements {right arrow over (a)}(k) (from a 3-D accelerometer) or a x (k), a y (k) and/or a z (k) (from a 1-D, 2-D or 3-D accelerometer). Next at step  210 , the processor  150  receives the accelerometer measurements {right arrow over (a)}(k) and forwards a vector or one or more scalars for processing to step  270 . 
     At step  270 , the processor  150  determines a magnitude ∥{right arrow over (g)}∥ of the gravity vector {right arrow over (g)}, and determines a magnitude ∥{right arrow over (a)}(k)∥ the passed along accelerometer measurement {right arrow over (a)}(k) then passes the magnitude results to step  220  and step  240 . 
     At step  220 , the processor  150  determines an average 
               (       e   .   g   .     ,           a   →     AVG     ⁡     (     k   ,   n     )       =       1   n     ⁢       ∑     i   =   0       n   -   1       ⁢            a   →     ⁡     (     k   -   i     )                    )     ,         
which represents a magnitude of the gravity vector {right arrow over (g)}. At step  240 , the processor  150  computes a variance σ ∥a∥   2  based on the magnitude ∥{right arrow over (a)}(k)∥ and the magnitude ∥{right arrow over (g)}∥. The resulting variance σ ∥a∥   2  represents a variance of the magnitude formed between the accelerometer measurements {right arrow over (a)}(k) and gravity vector {right arrow over (g)}.
 
     At step  250 , the processor  150  determines if this variance σ ∥a∥   2  is greater than a threshold variance. If so, the mobile device  100  is probably not in a mounting device, and at step  260 , the processor  150  declares that mobile device  100  is not in a mounted state. 
     In  FIG. 9 , an angle θ(k) is shown, which represents an approximate instantaneous angle relative to a vehicle&#39;s rotation, is used to compute a variance of   of a sequence of angles θ(k). The gyroscope  130  provides gyroscope measurements {right arrow over (ω)}(k) (from a 3-D gyroscope) or ω x (k), ω y (k) and/or ω z (k) (from a 1-D, 2-D or 3-D gyroscope) to step  230 . At step  230 , the processor  150  receives the gyroscope measurements {right arrow over (ω)}(k) and forwards a vector or one or more scalars for processing. For example, the processor  150  may only collect one or two of the scalar components of the gyroscope measurements {right arrow over (ω)}(k). 
     At step  220 , the processor  150  computes a running or windowed average 
               (       e   .   g   .     ,           ω   →     AVG     ⁡     (     k   ,   n     )       =       1   n     ⁢       ∑     i   =   0       n   -   1       ⁢       ω   →     ⁡     (     k   -   i     )               )     ,         
which represents a turn rate or heading rate {dot over ( H )} of a vehicle. Alternatively, the method at step  310  ( FIG. 14 ) described below may be used to form a heading rate {dot over ( H )}. At step  235 , the processor  150  computes a parameter p, which is an angle θ(k) between the averaged vector (e.g., heading rate {dot over ( H )}) from step  220  and the current gyroscope measurement  ω (k) from step  230 . For example:
 
     
       
         
           
             
               θ 
               ⁡ 
               
                 ( 
                 k 
                 ) 
               
             
             = 
             
               
                 arccos 
                 ⁡ 
                 
                   ( 
                   
                     
                       
                         
                           
                             ω 
                             → 
                           
                           AVG 
                         
                         ⁡ 
                         
                           ( 
                           
                             k 
                             , 
                             n 
                           
                           ) 
                         
                       
                       · 
                       
                         
                           ω 
                           → 
                         
                         ⁡ 
                         
                           ( 
                           k 
                           ) 
                         
                       
                     
                     
                       
                          
                         
                           
                             
                               ω 
                               → 
                             
                             AVG 
                           
                           ⁡ 
                           
                             ( 
                             
                               k 
                               , 
                               n 
                             
                             ) 
                           
                         
                          
                       
                       · 
                       
                          
                         
                           
                             ω 
                             → 
                           
                           ⁡ 
                           
                             ( 
                             k 
                             ) 
                           
                         
                          
                       
                     
                   
                   ) 
                 
               
               . 
             
           
         
       
     
     Based on the angle θ(k), at step  240 , the processor  150  computes a variance  , which represents a variance of the angle formed between the gyroscope measurements {right arrow over (ω)}(k) and vehicle&#39;s heading rate {dot over ( H )}. At step  250 , the processor  150  determines if this variance   is greater than a threshold variance. If so, the mobile device  100  is probably not in a mounting device and at step  260 , the processor  150  declares that the mobile device  100  is not in a mounted state. 
     In  FIG. 10 , an instantaneous magnitude (e.g., ∥{right arrow over (ω)}(k)∥) is compared to a magnitude of an approximation of the vehicle&#39;s turn rate to form a variance σ ∥{right arrow over (ω)}∥   2 . First, the gyroscope  130  provides gyroscope measurements {right arrow over (ω)}(k) (from a 3-D gyroscope) or ω x (k), ω y (k) or ω z (k) (from a 1-D, 2-D or 3-D gyroscope) to step  230 . At step  230 , the processor  150  receives the gyroscope measurements {right arrow over (ω)}(k) and forwards a vector or one or more scalars for processing. 
     At step  270 , the processor  150  determines a magnitude of the rotation vector ∥{right arrow over (ω)}(k)∥ from the passed along gyroscope measurement {right arrow over (ω)}(k) then passes the results to step  220  and step  240 . 
     As described above, at step  220 , the processor  150  determines an average 
               (       e   .   g   .     ,           ω   →     AVG     ⁡     (     k   ,   n     )       =       1   n     ⁢       ∑     i   =   0       n   -   1       ⁢       ω   →     ⁡     (     k   -   i     )               )     ,         
which represents a heading rate {dot over ( H )}. Also at step  270 , the processor  150  determines a magnitude ∥{dot over ( H )}∥ of the heading rate vector.
 
     At step  240 , the processor  150  computes a variance σ μω∥   2 , which represents a variance of the magnitude formed between the gyroscope measurements {right arrow over (ω)}(k) and the heading rate {dot over ( H )} of the vehicle. 
     At step  250 , the processor  150  determines if this variance σ ∥ω∥   2  is greater than a threshold variance. If so, the mobile device  100  is probably not in a mounting device and at step  260 , the processor  150  declares that mobile device  100  is not in a mounted state. 
       FIGS. 11 and 12  show two orientations of a mobile device  100 . The mobile device  100  in a first orientation is probably viewable (thus, possibly in a mounting apparatus) and in a second orientation is probably non-viewable (thus, probably not in a mounting apparatus). 
     In  FIG. 11 , a mobile device  100  is shown in a relatively upright position (e.g., an orientation of the mobile device  100  while it is mounted). A body reference system is shown where a Z-axis ({circumflex over (z)}) protrudes perpendicular to the display  160 , an X-axis ({circumflex over (x)}) points to the left of the mobile device  100 , and a Y-axis (ŷ) points up. 
     Also shown is a gravity axis ({right arrow over (g)}), which is relatively perpendicular (within a threshold angle) to the Z-axis ({circumflex over (z)}). If the angle θ is perpendicular to and within a threshold of the Z-axis ({circumflex over (z)}), then the mobile device  100  is probably standing upright (as shown) or is standing horizontally (with its face horizontal). Thus, a processor  150  may declare the mobile device  100  is in a mounted state when the gravity axis ({right arrow over (g)}) is relatively perpendicular (within a threshold angle) to the Z-axis ({circumflex over (z)}). 
     In  FIG. 12 , a mobile device  100  is shown in a relatively flat position (e.g., an orientation of the mobile device  100  while it is on a car seat). In this case, the gravity axis ({right arrow over (g)}) is relatively parallel (within a threshold angle) to the Z-axis ({circumflex over (z)}). If the angle θ is parallel, within a threshold, to the Z-axis ({circumflex over (z)}), then the mobile device  100  is probably lying flat. Thus, a processor  150  may declare the mobile device  100  is in a non-mounted state. 
       FIG. 13  shows a mount state detector  200 , in accordance with some embodiments of the present invention. The mount state detector may accept two or more input values from the variance   (from  FIG. 7  and shown as σ θ,a   2 ), the 200 variance σ ∥a∥   2  (from  FIG. 8 ), the variance   (from  FIG. 9  and shown as σ θ,ω   2 ) the variance σ ∥ω∥   2  (from  FIG. 10 ), and the viewable orientation θ (from  FIGS. 11 and 12 ). 
     At step  255 , the processor  150  declares if the mobile device  100  is not in a mounted state. The processor  150  may declare the mobile is not in a mounted state if: (1) any one of the two or more input values declares the mobile device  100  is not in a mounted state; (2) a majority of the two or more input values declares the mobile device  100  is not in a mounted state; (3) all of the two or more input values declares the mobile device  100  is not in a mounted state; (4) a weighted combination of decisions from the two or more input values (e.g., based on detection accuracy) is greater than a threshold (e.g., 0.5); or (5) a weighted combination of the raw input values (e.g., based on detection accuracy) is greater than a threshold (e.g., 0.5). 
       FIGS. 14 and 15  show block diagrams of units to compute an improved heading, in accordance with some embodiments of the present invention. 
     In  FIG. 14 , the process provides a heading rate based on the accelerometer  123  and the gyroscope  130 . As described above, the accelerometer  120  produces acceleration measurements ({right arrow over (a)}) and the gyroscope  130  produces angular rate measurements ({right arrow over (ω)}). 
     At step  305 , the processor  150  computes a gravity vector ({right arrow over (g)}) based on a low pass filter of accelerometer measurements ({right arrow over (a)}). If the mobile device  100  is fixed in a mount and the car  10  is either stationary or moving at a constant velocity, the gravity vector stays constant or settles in on a constant value. 
     At step  310 , the processor  150  computes a virtual gyroscope heading rate ({dot over (H)} Gyro ), which is based on the gravity vector ({right arrow over (g)}) and the angular rate measurements ({right arrow over (ω)}) from the gyroscope  130 . The virtual gyroscope heading rate ({dot over (H)} Gyro ) is described in additional detail with reference to  FIG. 16 . 
     In  FIG. 15 , the process  300  combines various headings to compute the improved heading (Ĥ). As described above, the processor  150  produces a virtual gyroscope heading rate ({dot over (H)} Gyro ) using measurements from the accelerometer  120  and the gyroscope  130 . The GNSS receiver  140  produces a GNSS heading (H GNSS ) and a time ΔT GNSS  between GNSS headings. 
     At step  320 , a heading filter takes as input variables both the GNSS heading (H GNSS ) and the virtual gyroscope heading rate ({dot over (H)} GNSS ) to compute an improved heading ({dot over (H)}). Step  320  is described below with reference to  FIG. 17  in further detail. 
       FIG. 16  illustrates a projection used in a virtual gyroscope, in accordance with some embodiments of the present invention. At step  310  described above with reference to  FIG. 14 , the processor  150  converts the raw three-dimensional gyroscope measurements ({right arrow over (ω)}) to a one-dimensional virtual gyroscope heading rate ({dot over (H)} Gyro ), which is parallel to the gravity vector ({right arrow over (g)}) and represents a rate of change in yaw in the horizontal plane. The processor  150  computes the virtual gyroscope heading rate ({dot over (H)} Gyro ) by projecting the gyroscope measurements ({right arrow over (ω)}) onto the gravity vector. In other words, {dot over (H)} Gyro =−{right arrow over (ω)} ⊥{right arrow over (g)} (k) where θ defines the angle between the two vectors ({right arrow over (ω)},{right arrow over (g)}). 
     The figure shows a gyroscope measurement ({right arrow over (ω)}) defining a first plane perpendicular to the gyroscope measurement ({right arrow over (ω)}). The figure also shows a gravity vector ({right arrow over (g)}) defining a second plane perpendicular to the gravity vector ({right arrow over (g)}). The gravity vector ({right arrow over (g)}) is derived from the accelerometer measurements ({right arrow over (ω)}). The projection of the gyroscope measurement ({right arrow over (ω)}) onto the gravity vector ({right arrow over (g)}) results in the virtual gyroscope heading rate ({dot over (H)} Gyro ) shown perpendicular to the second plane. The projection is defined as 
     
       
         
           
             
               
                 H 
                 . 
               
               Gyro 
             
             = 
             
               
                 - 
                 
                   
                     
                       ω 
                       → 
                     
                     
                       ⊥ 
                       
                         g 
                         → 
                       
                     
                   
                   ⁡ 
                   
                     ( 
                     k 
                     ) 
                   
                 
               
               = 
               
                 
                   
                     - 
                     
                       
                         
                           g 
                           → 
                         
                         · 
                         
                           ω 
                           → 
                         
                       
                       
                          
                         
                           g 
                           → 
                         
                          
                       
                     
                   
                   · 
                   
                     
                       g 
                       → 
                     
                     
                        
                       
                         g 
                         → 
                       
                        
                     
                   
                 
                 = 
                 
                   
                     - 
                     
                        
                       
                         ω 
                         → 
                       
                        
                     
                   
                   ⁢ 
                   cos 
                   ⁢ 
                   
                       
                   
                   ⁢ 
                   
                     ( 
                     θ 
                     ) 
                   
                   ⁢ 
                   
                     
                       
                         g 
                         → 
                       
                       
                          
                         
                           g 
                           → 
                         
                          
                       
                     
                     . 
                   
                 
               
             
           
         
       
     
       FIG. 17  is a block diagram of a heading filter, in accordance with some embodiments of the present invention. The heading filter  320 , first described with reference to  FIG. 15 , receives the GNSS heading (H GNSS (k)) and the virtual gyroscope heading rate ({dot over (H)} Gyro (k)), processes and combines these two values, and then produces an improved heading (Ĥ(k). The improved heading (Ĥ(k)) is formed by a weighted combination of headings derived from the GNSS receiver  140  and the gyroscope  130  as shown in  FIGS. 14 and 15 . 
     Mathematically, the improved heading (Ĥ(k)) may be represented by the formula:
 
 Ĥ ( k )= w·H   GNSS ( k )+(1 −w )[ Ĥ ( k− 1)+Δ T   GNSS   ·{dot over (H)}   Gyro ( k )]
 
     where the weighting w may be represented by: 
     
       
         
           
             w 
             = 
             
               
                 ( 
                 
                   
                     σ 
                     
                       
                         H 
                         ^ 
                       
                       ⁡ 
                       
                         ( 
                         k 
                         ) 
                       
                     
                     2 
                   
                   + 
                   
                     Δ 
                     ⁢ 
                     
                         
                     
                     ⁢ 
                     
                       
                         T 
                         GNSS 
                         2 
                       
                       · 
                       
                         σ 
                         
                           
                             
                               H 
                               . 
                             
                             Gyro 
                           
                           ⁡ 
                           
                             ( 
                             k 
                             ) 
                           
                         
                         2 
                       
                     
                   
                 
                 ) 
               
               
                 ( 
                 
                   
                     σ 
                     
                       
                         H 
                         GNSS 
                       
                       ⁡ 
                       
                         ( 
                         k 
                         ) 
                       
                     
                     2 
                   
                   ⁢ 
                   
                       
                   
                   + 
                   
                     σ 
                     
                       
                         H 
                         ^ 
                       
                       ⁡ 
                       
                         ( 
                         k 
                         ) 
                       
                     
                     2 
                   
                   + 
                   
                     Δ 
                     ⁢ 
                     
                         
                     
                     ⁢ 
                     
                       
                         T 
                         GNSS 
                         2 
                       
                       · 
                       
                         σ 
                         
                           
                             
                               H 
                               . 
                             
                             Gyro 
                           
                           ⁡ 
                           
                             ( 
                             k 
                             ) 
                           
                         
                         2 
                       
                     
                   
                 
                 ) 
               
             
           
         
       
     
     where σ {dot over (H)}(k)   2  is the variance of the improved heading (Ĥ(k)), where σ {dot over (H)}     Gyro     (k)   2  is the variance of the virtual gyroscope heading rate ({dot over (H)} Gyro  (k)) from step  310  derived from measurements from the gyroscope  130 , where σ H     GNSS     (k)   2  is the variance of the GNSS heading (H GNSS (k)), and where ΔT GNSS  is the time separation between heading values from the GNSS receiver  140 . 
     The heading filter  320  comprises a first amplifier  321  that weights the GNSS heading (H GNSS (k)) by a weighing value (w) and feeds this first weighted heading w·H GNSS (k)) to a first input of a first summer  322 , which produces the improved heading (Ĥ(k)). A second input of the first summer  322  is provided by a chain that begins with scaling the virtual heading rate ({dot over (H)} Gyro (k)) by the time (ΔT GNSS , which represents a time between heading samples) with product operator  323 . The product is feds to a second summer  324  that is also fed by a delayed version (Ĥ(k−1)) of the improved heading (Ĥ(k)) from delay unit  325  labeled with z −1 . The resulting sum is weighted by a second amplifier  326  by a weighing value (1-w), which feeds the second input of the first summer  322 . Typically, both weighting values (w and 1-w) range somewhere between zero and one and sum to one. 
       FIGS. 18 and 19  show a relationship between a weighting factor and a duration of integration.  FIG. 18  shows an expected relationship between an integration time and an expected weighting factor. GNSS-based heading values (e.g., H GNSS (k)) taken over a short duration have less certainty (or equivalently, more uncertainty) than GNSS-based heading values taken over a long duration because of long-term trends. Therefore, GNSS-based heading values are typically given a higher weighting if the duration is longer. 
     In  FIG. 19 , an example inverse relationship is shown between integration time and an expected weighing factor. Gyro-based heading values (e.g., from {dot over (H)} Gyro (k)) taken over a short duration have more certainty (or equivalently, less uncertainty) than gyro-based heading values taken over a long duration because of accumulated error. Therefore, gyro-based heading values are typically given a higher weighting if the duration is shorter. 
       FIGS. 20, 21, 22 and 23  illustrate a method for computing an improved velocity, in accordance with some embodiments of the present invention. In  FIG. 20 , a top view of a car  10  is shown. The car  10  travels along a first direction indicated as along the X-axis ({circumflex over (x)}) in the local reference system. The improved heading (Ĥ), which is a function of the GNSS heading (H GNSS ) and the virtual gyroscope heading rate ({dot over (H)} Gyro ), often faces in a direction different than X-axis. The improved velocity ({right arrow over (V)} //Ĥ ) is parallel to or collinear with the improved heading (Ĥ). 
     Similarly, the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ), is parallel to or collinear with the Kalman-filtered GNSS heading ({right arrow over (H)} GNSS ) and is derived from the GNSS heading (H GNSS ). The improved velocity ({right arrow over (V)} //Ĥ ) has a direction component and a magnitude component. The direction of the improved velocity ({right arrow over (V)} //Ĥ ) may be formed by adopting the direction of the improved heading (Ĥ). The magnitude of the improved velocity ({right arrow over (V)} //Ĥ ) may be formed from a projection of the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) on the improved heading (Ĥ), thus 
                 V   →       //   H       =           V   →     GNSS       cos   ⁡     (   θ   )         ⁢   ∠   ⁢           ⁢     ang   ⁡     (     H   ^     )               
where θ defines the angle formed between {right arrow over (V)} GNSS  and Ĥ, and ∠ang(Ĥ) is the angular direction of Ĥ.
 
     In  FIG. 21 , another top view of a car  10  is shown similar to that described above and shown in  FIG. 20  except the magnitude of the improved velocity ({right arrow over (V)} //Ĥ ) is calculated in an alternative fashion. As before, the improved velocity ({right arrow over (V)} //Ĥ ) includes a direction component formed by adopting the direction of the improved heading (Ĥ). In this alternative embodiment, the magnitude of the improved velocity ({right arrow over (V)} //Ĥ ) may be formed by keeping the magnitude of the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ), thus {right arrow over (V)} //Ĥ =∥{right arrow over (V)} GNSS ∥∠ang(Ĥ) where ∥{right arrow over (V)} GNSS ∥ the magnitude of {right arrow over (V)} GNSS . 
     In comparing the methods of  FIGS. 20 and 21 , the former forms the improved velocity ({right arrow over (V)} //Ĥ ) using a formal mathematical projection on the improved heading (Ĥ), whereas the latter forms the improved velocity ({right arrow over (V)} //Ĥ ) by an informal projection (rotation) on the improved heading (Ĥ). Both of these methods are presented as projecting the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) on the improved heading (Ĥ). The methods described above utilized the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ). Alternative methods use a velocity ({right arrow over (V)} GNSS-based ) based on the GNSS heading ({right arrow over (H)} GNSS ), where the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) is an example of the GNSS based velocity ({right arrow over (V)} GNSS-based ). 
     The difference between the improved velocity ({right arrow over (V)} //Ĥ ) and the Kalman filtered GNSS velocity ({right arrow over (V)} GNSS ) (or generally, the GNSS based velocity ({right arrow over (V)} GNSS-based )) forms a velocity error (Δ{right arrow over (V)}), which is fed back to the Kalman filter  410  as a correction signal. In this manner, the velocity error (Δ{right arrow over (V)}) is used by the Kalman filter  410  to improve future velocity estimates as described below. 
     In  FIG. 22 , the block diagram shows steps a processor  150  executes to generate an improved velocity ({right arrow over (V)} //Ĥ ) and a velocity error (Δ{right arrow over (V)}). At step  410 , the processor  150  receives a GNSS velocity ({right arrow over (V)} GNSS ) from the GNSS receiver  140  and passes the GNSS velocity ({right arrow over (V)} GNSS ) through a Kalman filter to produce a Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ). 
     At step  420 , the processor  150  projects the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) against the improved heading (Ĥ) to compute an improved velocity ({right arrow over (V)} //Ĥ ), which is parallel to the improved heading (Ĥ). Step  420  also computes the difference between the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) and the improved velocity vector ({right arrow over (V)} //Ĥ ) to generate the velocity error (Δ{right arrow over (V)}). As described above, the velocity error (Δ{right arrow over (V)}) is used by the Kalman filter  410  as a correction value to improve the next Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ). In essence, the velocity error (Δ{right arrow over (V)}) is determined using a non-holonomic constraint and is used to correct Kalman filter. 
     In  FIG. 23 , the block diagram shows another set of steps a processor  150  executes to generate an improved velocity ({right arrow over (V)} //Ĥ ) and a velocity error (Δ{right arrow over (V)}). At step  415 , the processor  150  receives a GNSS velocity ({right arrow over (V)} GNSS ) from the GNSS receiver  140  and passes the GNSS velocity ({right arrow over (V)} GNSS ) through a position/velocity (PV) module to produce a PV filtered GNSS velocity ({right arrow over (V)} GNSS ). 
     Again, at step  420 , the processor  150  projects the PV filtered GNSS velocity ({right arrow over (V)} GNSS ) against the improved heading (Ĥ) to compute an improved velocity ({right arrow over (V)} //Ĥ ), which is parallel to the improved heading (Ĥ). Again, step  420  computes the difference between the PV filtered GNSS velocity ({right arrow over (V)} GNSS ) and the improved velocity vector ({right arrow over (V)} //Ĥ ) to generate the velocity error (Δ{right arrow over (V)}). The velocity error (Δ{right arrow over (V)}) is used by the PV module  415  as a correction value to improve the next PV filtered GNSS velocity ({right arrow over (V)} GNSS ). The velocity error (Δ{right arrow over (V)}) is determined using a non-holonomic constraint and is used to correct Kalman filter. 
       FIG. 24  shows a method for generating a gyroscope bias, in accordance with some embodiments of the present invention. Mathematically, the gyroscope bias may be represented as: 
     
       
         
           
             GyroscopeBias 
             = 
             
               
                 
                   
                     H 
                     
                       . 
                       _ 
                     
                   
                   
                     Gyro 
                     , 
                     CORR 
                   
                 
                 ⁡ 
                 
                   ( 
                   k 
                   ) 
                 
               
               - 
               
                 
                   [ 
                   
                     Δ 
                     ⁢ 
                     
                         
                     
                     ⁢ 
                     
                       
                         H 
                         GNSS 
                       
                       ⁡ 
                       
                         ( 
                         k 
                         ) 
                       
                     
                   
                   ] 
                 
                 
                   Δ 
                   ⁢ 
                   
                       
                   
                   ⁢ 
                   
                     T 
                     GNSS 
                   
                 
               
             
           
         
       
       
         
           
             
               where 
               ⁢ 
               
                   
               
               [ 
               
                 Δ 
                 ⁢ 
                 
                     
                 
                 ⁢ 
                 
                   
                     H 
                     GNSS 
                   
                   ⁡ 
                   
                     ( 
                     k 
                     ) 
                   
                 
               
               ] 
             
             = 
             
               
                 
                   H 
                   GNSS 
                 
                 ⁡ 
                 
                   ( 
                   k 
                   ) 
                 
               
               - 
               
                 
                   
                     H 
                     GNSS 
                   
                   ⁡ 
                   
                     ( 
                     
                       k 
                       - 
                       n 
                       + 
                       1 
                     
                     ) 
                   
                 
                 ⁢ 
                 
                     
                 
                 ⁢ 
                 and 
               
             
           
         
       
       
         
           
             
               where 
               ⁢ 
               
                   
               
               ⁢ 
               
                 
                   
                     H 
                     . 
                   
                   
                     Gyro 
                     , 
                     CORR 
                   
                 
                 ⁡ 
                 
                   ( 
                   k 
                   ) 
                 
               
             
             = 
             
               
                 1 
                 n 
               
               ⁢ 
               
                 
                   ∑ 
                   
                     i 
                     = 
                     0 
                   
                   
                     n 
                     - 
                     1 
                   
                 
                 ⁢ 
                 
                   
                     
                       
                         H 
                         . 
                       
                       Gyro 
                     
                     ⁡ 
                     
                       ( 
                       
                         k 
                         - 
                         i 
                       
                       ) 
                     
                   
                   . 
                 
               
             
           
         
       
     
     At step  510 , the processor  150  receives a GNSS heading (H(k)) from the GNSS receiver  140  and computes a GNSS heading change over a window ([ΔH GNSS (k)]). At step  520 , the processor  150  converts the GNSS heading change (ΔH GNSS ) from a heading to a rate by scaling or dividing by a negative of the GNSS time difference (−ΔT GNSS ) to form a GNSS heading rate (− H   GNSS ), which is fed as a first input to a first summer  530 . A second input of the first summer  530  is fed an average of the virtual gyroscope heading rate ({dot over (H)} Gyro,CORR (k)) and the sum of these two inputs (or equivalently, a differences between the two average rates) forms the gyroscope bias signal (GyroscopeBias). 
     The processor  150  forms the average gyroscope heading rate ({dot over (H)} Gyro,CORR (k)) from a chain beginning at step  310  of  FIG. 14 , which receives the gyroscopic measurements ({right arrow over (ω)}) and computes a virtual gyroscope heading rate ({dot over (H)} Gyro ) as described above. The virtual gyroscope heading rate ({dot over (H)} Gyro ) is fed to a second summer  540  as a first input. A second input to the second summer  540  may be feedback as a preliminary gyroscope bias, which may be set by the previously determined gyroscope bias, where GryoscopeCorrection=−GryoscopeBias(error). The second summer  540  produces a corrected gyroscope heading rate ({dot over (H)} Gyro,CORR (k)={dot over (H)} Gyro +GyroscopeBias). In step  550 , the processor  150  averages the corrected gyroscope heading rate ({dot over (H)} Gyro,CORR (k)) to form the average gyroscope heading rate ({dot over (H)} Gyro,CORR (k)) in the average gyroscope heading rate module. A new gyroscope bias may be computed at each iteration k or after a predetermined number of iterations. 
       FIG. 25  is a block diagram of a cradle rotation detector, in accordance with some embodiments of the present invention. The process  600  begins at step  610  where the processor  150  converts the Kalman-filtered GNSS velocity ({right arrow over (V)} GNSS ) to a magnitude (∥{right arrow over (V)}∥=∥{right arrow over (V)} GNSS ∥). 
     At step  620 , the processor  150  compares the magnitude (∥{right arrow over (V)}∥) to a velocity threshold to show if the mobile device  100  is relatively still in its cradle or being rotated within the cradle by the user. Depending on the level of relative movement, a second threshold (ω max ) is set. When the processor  150  determines the mobile device  100  is still or moving below the threshold (at a value less than the magnitude threshold) with respect to the cradle, the second threshold (ω max ) is set based on a division of the magnitude (∥{right arrow over (V)}∥) and the minimum radius of curvature (R min ) expected of a car  10  as shown at step  630 . 
     When the processor  150  determines the mobile device  100  is moving or rotating (at a value greater than the magnitude threshold) relative to the cradle, the second threshold (ω max ) is set based on a division of the maximum acceleration (a max ) expected of a car  10  and the magnitude (∥{right arrow over (V)}∥) as shown at step  640 . Therefore, a selection of how the second threshold (ω max ) is set is based on whether the car  10  is nearly still 
     
       
         
           
             
               ( 
               
                 
                   ω 
                   
                     ma 
                     ⁢ 
                     
                         
                     
                     ⁢ 
                     x 
                   
                 
                 = 
                 
                   
                      
                     
                       V 
                       → 
                     
                      
                   
                   
                     R 
                     
                       m 
                       ⁢ 
                       
                           
                       
                       ⁢ 
                       i 
                       ⁢ 
                       
                           
                       
                       ⁢ 
                       n 
                     
                   
                 
               
               ) 
             
             ⁢ 
             
                 
             
             ⁢ 
             or 
             ⁢ 
             
                 
             
             ⁢ 
             in 
             ⁢ 
             
                 
             
             ⁢ 
             motion 
             ⁢ 
             
                 
             
             ⁢ 
             
               
                 ( 
                 
                   
                     ω 
                     
                       ma 
                       ⁢ 
                       
                           
                       
                       ⁢ 
                       x 
                     
                   
                   = 
                   
                     
                       a 
                       
                         ma 
                         ⁢ 
                         
                             
                         
                         ⁢ 
                         x 
                       
                     
                     
                        
                       
                         V 
                         → 
                       
                        
                     
                   
                 
                 ) 
               
               . 
             
           
         
       
     
     At step  650 , the processor  150  compares a magnitude of the angular rotation rate (∥{right arrow over (ω)}∥) from the gyroscope  130  to this second threshold (ω max ). If the magnitude of the angular rotation rate (∥{right arrow over (ω)}∥) is greater than the second threshold (ω max ) the processor  150  may take no interruptive acts and declare that the cradle has experienced no or insignificant cradle rotation, as shown at step  660 . If the magnitude of the angular rotation rate (∥{right arrow over (ω)}∥) is less than the second threshold (ω max ), the processor  150  declares that the mobile device  100  has recently been moved within the cradle as shown at step  670 . 
     At step  680 , the processor  150  may de-weight any results that are based on measurements from the sensor  110  until the relative orientation between the local reference system of the car  10  and the body reference system of the mobile device  100  may be reassessed. As an alternative to de-weighting results, the processor  150  may bar the use of sensor measurements altogether and reset any ongoing computation until the relative position of the mobile device  100  in the cradle or mount may be determined again. 
     The methodologies described herein may be implemented by various means depending upon the application. For example, these methodologies may be implemented in hardware, firmware, software, or any combination thereof. For a hardware implementation, the processing units may be implemented within one or more application specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field programmable gate arrays (FPGAs), processors, controllers, micro-controllers, microprocessors, electronic devices, other electronic units designed to perform the functions described herein, or a combination thereof. 
     For a firmware and/or software implementation, the methodologies may be implemented with modules (e.g., procedures, functions, and so on) that perform the functions described herein. Any machine-readable medium tangibly embodying instructions may be used in implementing the methodologies described herein. For example, software codes may be stored in a memory and executed by a processor unit. Memory may be implemented within the processor unit or external to the processor unit. As used herein the term “memory” refers to any type of long term, short term, volatile, nonvolatile, or other memory and is not to be limited to any particular type of memory or number of memories, or type of media upon which memory is stored. 
     If implemented in firmware and/or software, the functions may be stored as one or more instructions or code on a computer-readable medium. Examples include computer-readable media encoded with a data structure and computer-readable media encoded with a computer program. Computer-readable media includes physical computer storage media. A storage medium may be any available medium that can be accessed by a computer. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer; disk and disc, as used herein, includes compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk and blu-ray disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of computer-readable media. 
     In addition to storage on computer readable medium, instructions and/or data may be provided as signals on transmission media included in a communication apparatus. For example, a communication apparatus may include a transceiver having signals indicative of instructions and data. The instructions and data are configured to cause one or more processors to implement the functions outlined in the claims. That is, the communication apparatus includes transmission media with signals indicative of information to perform disclosed functions. At a first time, the transmission media included in the communication apparatus may include a first portion of the information to perform the disclosed functions, while at a second time the transmission media included in the communication apparatus may include a second portion of the information to perform the disclosed functions. 
     The previous description of the disclosed aspects is provided to enable any person skilled in the art to make or use the present disclosure. Various modifications to these aspects will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other aspects without departing from the spirit or scope of the disclosure.