<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sensor Platforms</title>
	<atom:link href="http://www.sensorplatforms.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sensorplatforms.com</link>
	<description>Bridging the Gap between Sensing and Knowing in Mobile Devices</description>
	<lastBuildDate>Fri, 11 May 2012 18:19:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Understanding Sensor Data Sheets</title>
		<link>http://www.sensorplatforms.com/understanding-datasheets</link>
		<comments>http://www.sensorplatforms.com/understanding-datasheets#comments</comments>
		<pubDate>Fri, 16 Mar 2012 00:08:32 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=482</guid>
		<description><![CDATA[Many datasheets serve both as technical specificationsand promotional collateral. As such, “specsmanship” often makes comparing two sensor components on paper complicated. This article focuses on a few key parameters that system designers should consider. Measurement Range Measurement range refers to the span of measurement values the sensor can record between the lowest and highest possible values. Dynamic range of a sensor refers to the span between the largest and smallest values two consecutive samples can take. Some sensors have dynamic ranges that cover their whole measurement range; for others, dynamic range is a subset of the total measurement range (see figure). In the latter cases, the bias can be charged either through register settings or be adjusted automatically by an &#8230; <a href="http://www.sensorplatforms.com/understanding-datasheets">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many datasheets serve both as technical specificationsand promotional collateral. As such, “specsmanship” often makes comparing two sensor components on paper complicated. This article focuses on a few key parameters that system designers should consider.</p>
<h3><strong>Measurement Range</strong></h3>
<p>Measurement range refers to the span of measurement values the sensor can record between the lowest and highest possible values. Dynamic range of a sensor refers to the span between the largest and smallest values two consecutive samples can take. Some sensors have dynamic ranges that cover their whole measurement range; for others, dynamic range is a subset of the total measurement range (see figure). In the latter cases, the bias can be charged either through register settings or be adjusted automatically by an intelligent sensor based on the recent history of the incoming signal levels.</p>
<p>Many sensors offer a number of preset options of measurement and dynamic ranges that designers can select based on the signals they are trying to observe. A <a href="http://www.sensorplatforms.com/usecase-drive">previous article</a> gave the recommended range settings for common use cases for mobile devices.</p>
<h3><strong>Sensitivity</strong></h3>
<p>Often designers would talk about using a 12-bit sensor versus an 8-bit sensor as shorthand to represent the sensitivity they wish to deploy. Sensitivity refers to the smallest signal resolvable by a sensor. It is affected by dynamic range, quantization level and the noise of a sensor.</p>
<p>Characterizing a sensor as a 12-bit sensor is to say that it has 4096 (nominally uniform) quantization levels across its dynamic range. Sensor sensitivity is rarely limited solely by the size of its quantization level. The determinant usually lies with the measurement noise of the sensor.</p>
<p>The RMS measurement noise of a sensor is the product of its noise power spectrum density and the square root of its measurement bandwidth. Hence the following equation gives the sensitivity of a sensor.</p>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2012/03/sensitivity-equation.png"><img class="alignleft size-full wp-image-491" title="sensitivity equation" src="http://www.sensorplatforms.com/wp-content/uploads/2012/03/sensitivity-equation.png" alt="" width="977" height="71" /></a></p>
<p><strong>Zero-Offset Drift</strong></p>
<p>Sometimes zero-offset drift is simply called “drift” of a sensor. By the nature of their design, the zero reference of a sensor changes slowly over time. Drift occurs due to a combination of reasons stemming from the design of the sensing element and the associated electronics. Drift increases over the life of a sensor so it is important to understand if the drift performance specified in a datasheet represent zero-offset shift over a ten year product life or just the initial value when the device is fresh off the manufacturing line.</p>
<p>Among inertial sensors, drift in gyroscopes are most significant. However, that can be mitigated by intelligent algorithms which, for example, can use magnetometer and accelerometer data to mitigate against gyroscope drift.</p>
<h3>                                                      <strong>Sampling Scheme and Bandwidth</strong></h3>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2012/03/measurement-ranges.png"><img class="alignleft size-medium wp-image-494" title="measurement ranges" src="http://www.sensorplatforms.com/wp-content/uploads/2012/03/measurement-ranges-242x300.png" alt="" width="194" height="240" /></a>Sensor bandwidth can often be configured through a register. As Nyquist Theorem teaches, a sensor subsystem using a uniform sampling scheme must sample at twice the frequency of the desired bandwidth. Some sensors provide a mechanism for an external device to trigger the taking of a sample. That can be useful when the system sampling scheme requires all sensors to be sampled synchronously. Alternatively, sensors can provide sample at a regularly period based on its own time base. This mode is easier to configure but algorithms and system designs need to allow each sensor to free run on its own time base.</p>
<h3><strong>Abstracting over Sensor Component Difference</strong>s</h3>
<p>Understanding datasheet specifications can help designers differentiate among sensors from different vendors. However, designers need the freedom to use sensors from multiple suppliers without materially affecting the user experience of their systems. This challenge can only be answered by intelligent sensor fusion algorithms, like that offered as part of our FreeMotion™ Library.</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets&text=Understanding+Sensor+Data+Sheets" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets&title=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets&title=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Understanding+Sensor+Data+Sheets&u=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/understanding-datasheets']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-datasheets" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/understanding-datasheets']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/understanding-datasheets/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Use Cases Drive Sensor Component Selection</title>
		<link>http://www.sensorplatforms.com/usecase-drive</link>
		<comments>http://www.sensorplatforms.com/usecase-drive#comments</comments>
		<pubDate>Sat, 18 Feb 2012 02:34:36 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=452</guid>
		<description><![CDATA[Many system designers have faced the challenge to optimize sensor components selection based on use cases they plan to support. This article examines the key classes of use cases and discusses their demands on the resolution, bandwidth and dynamic range of various sensors. The resolution of a sensor refers to the finest measurement it can discern. This depends on two factors: the number of quantization levels available to a digital measurement and the noise experienced by the sensor.  For example, a 12-bit sensor can cover a 72dB range while a 16-bit sensor covers a 96dB range. But if background noise for a sensor is higher than -72dB, a 16-bit sample would not capture any more useful information than a 12-bit &#8230; <a href="http://www.sensorplatforms.com/usecase-drive">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many system designers have faced the challenge to optimize sensor components selection based on use cases they plan to support. This article examines the key classes of use cases and discusses their demands on the resolution, bandwidth and dynamic range of various sensors.</p>
<p>The resolution of a sensor refers to the finest measurement it can discern. This depends on two factors: the number of quantization levels available to a digital measurement and the noise experienced by the sensor.  For example, a 12-bit sensor can cover a 72dB range while a 16-bit sensor covers a 96dB range. But if background noise for a sensor is higher than -72dB, a 16-bit sample would not capture any more useful information than a 12-bit sample.</p>
<p>Bandwidth refers to the frequency range a sensor measures with fidelity. For inertial sensors, low bandwidth measurements result from slow motions. A sensor set to capture low bandwidth data will distort the result of a fast movement.  As discussed in our<a href="http://www.sensorplatforms.com/making-sense-of-noises"> previous blog</a>, it is prudent to optimize inertial sensor bandwidth to the movement it is expected to capture.</p>
<p>The dynamic range of a sensor determines the largest amplitude the device can capture. If the dynamic range of a sensor is set too high, part of the available precision would be wasted. If the range is set too low, the sensor could be saturated in normal operations and negatively affect output fidelity.</p>
<p>Use cases for inertial sensors in a mobile device fall broadly into three categories.  The first class of use cases monitors largely an infrequently changing status, for example, landscape or portrait screen orientation.  Conventionally, Android refers to this class of use cases as “UI.” The second class of use cases involves user interaction for which the user is actively moving the mobile device. Conventionally, Android refers to this as “gaming.”  The third class of use cases involves dead reckoning (DR), estimating a user’s position based on a cumulative series of estimated motions over time.</p>
<p>The table at the end of this article summarizes the sensor component selection criteria driven by each class of use cases. The bandwidth requirement for the first classes (“UI”) of use cases is very low, because the status they monitor rarely changes. The bandwidth needed for user interaction (“gaming”) is 20 Hz (see the <a href="http://www.sensorplatforms.com/making-sense-of-noises">previous blog</a>). If an application allows users to move the mobile device when it is performing dead reckoning, it must conform to the “gaming” bandwidth requirement, 20 Hz.  Similarly, the amount of movements anticipated in a use case also affects the accelerometer dynamic range required.</p>
<p>The magnetometer should have sufficient dynamic range to handle any ambient magnetic anomaly, 0.6mT regardless if the use case includes any significant movement.  It should be noted that most mobile devices contain a large magnetic field bias due to hard and soft iron on their bodies. Consequently, magnetometers often need to accommodate a large static offset in addition to the 0.6mT dynamic range.</p>
<p>Resolution requirements are use case dependent.  For example, if an application expects to resolve orientation of 1°, it will require 10-bit resolution.  However, many games and user interaction use cases can be satisfied with much coarser resolution. Because of dead reckoning error accumulates over time, a useful dead reckoning application will typically require 16-bit or better resolution.</p>
<p>Our future articles will discuss implementation and validation best practices to turn optimal sensor selection into optimal sensor systems.</p>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2012/02/use-case-and-components.png"><img class="aligncenter size-full wp-image-456" title="use case and components" src="http://www.sensorplatforms.com/wp-content/uploads/2012/02/use-case-and-components.png" alt="" width="987" height="194" /></a></p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive&text=How+Use+Cases+Drive+Sensor+Component+Selection" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=How+Use+Cases+Drive+Sensor+Component+Selection&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/usecase-drive']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fusecase-drive" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/usecase-drive']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/usecase-drive/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Sense of Noises</title>
		<link>http://www.sensorplatforms.com/making-sense-of-noises</link>
		<comments>http://www.sensorplatforms.com/making-sense-of-noises#comments</comments>
		<pubDate>Fri, 02 Dec 2011 22:09:32 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=406</guid>
		<description><![CDATA[As the saying goes, “garbage in, garbage out.” Although sensor fusion can mitigate many aspects of sensor fragmentation found in various smartphone platforms, there is a minimum requirement needed to achieve a level of performance consummate with the use-cases of interest. The two classes of use-cases normally considered for inertial sensors on handheld devices are user interaction and pedestrian navigation.  The former includes normal user interface to access phone, email, and browser functions as well as scenarios involving motion or augmented reality games.  The latter refers to using inertial sensors to augment other location services, like Wi-Fi and cell tower tri-lateration, to determine indoor positions. The bandwidth of user movement ranges from near DC up to frequencies reaching 15Hz with &#8230; <a href="http://www.sensorplatforms.com/making-sense-of-noises">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As the saying goes, “garbage in, garbage out.” Although sensor fusion can mitigate many aspects of sensor fragmentation found in various smartphone platforms, there is a minimum requirement needed to achieve a level of performance consummate with the use-cases of interest.</p>
<p>The two classes of use-cases normally considered for inertial sensors on handheld devices are user interaction and pedestrian navigation.  The former includes normal user interface to access phone, email, and browser functions as well as scenarios involving motion or augmented reality games.  The latter refers to using inertial sensors to augment other location services, like Wi-Fi and cell tower tri-lateration, to determine indoor positions.</p>
<p style="text-align: left;">The bandwidth of user movement ranges from near DC up to frequencies reaching 15Hz with biological signals such as muscle tremors (see Fig. 1).  So overall, measuring sensor signals up to 20Hz is sufficient to capture human generated movements.  The Nyquist-Shannon sampling theorem states a uniform sampling rate of 40Hz is needed to capture this information.<a href="http://www.sensorplatforms.com/wp-content/uploads/2011/12/gyro+tremor1.png"><img class="size-medium wp-image-418 aligncenter" title="gyro+tremor" src="http://www.sensorplatforms.com/wp-content/uploads/2011/12/gyro+tremor1-300x255.png" alt="" width="300" height="255" /></a></p>
<p>Increasing sampling much beyond this for user interaction could be a detriment as it leads to more integrated noise without gaining more information.  For example, take an accelerometer with a white noise density of 0.2mg/√Hz. Sampling at 50Hz leads to an RMS noise of 1.4mg but sampling at 1000Hz leads to an RMS noise of 6mg, or a loss of over two bits of accuracy without gaining any more information regarding user generated movements.</p>
<p>Noise density is the primary measurement of a sensor’s performance.  It can be visualized as representing sensor measurement jitter.  The larger this is, the less accurate sensor fusion results can be.  For example, if a magnetometer&#8217;s measure of North jumps around by 5 degrees, then the orientation output can also be off by 5 degrees.  Taking the Earth&#8217;s field to be 30µT (near the Equator) this means a magnetometer with an RMS noise of 30µT tan(5°)/ √2 = 1.9µT cannot achieve heading accuracy better than 5 degrees.  Note this is a noise density of 0.65µT/√Hz at 8Hz output data rate (ODR).</p>
<p>As human motion occurs within a 20Hz bandwidth, a magnetometer with an 8Hz ODR would not be able to capture most of the movement.  Using sensor fusion, gyroscope data can be combined with the magnetometer data to cover for the missing high frequency data.  However, activating a gyroscope adds significantly to power consumption.  So an alternative is to cover more frequency spectrum with the magnetometer.  Sampled at 40Hz, the magnetometer will be able to capture all human movements at significantly lower power consumption than using a gyro.  But to maintain the same 5 degree accuracy, the magnetometer noise must be kept at 1.9µT (RMS).  Consequently, the magnetometer noise density should be better than 0.13µT/√Hz.</p>
<p>Noise density also constrains the ability of a gyroscope to provide orientation dynamically.  A gyroscope with a noise density of σ introduces an orientation error of σ √(t/2) over time t.  If the magnetometer can be trusted, this integrated drift can be zeroed out periodically using sensor fusion.  But in the case of operating in an anomalous magnetic field (such as in a tall building or subway station) this error increases.  Requiring 5 degrees of heading accuracy after 2 minutes of free running gyro implies the noise density should be 0.06dps/√Hz at 200Hz ODR.</p>
<p>The sensor digital resolution should be enough to at least allow the desired noise floor to be achieved.  For example, a gyroscope with RMS noise of N<sub>0</sub> and range of ±2000dps requires log<sub>2</sub>(2000/N<sub>0</sub>) bits + sign bit + margin bit.  So if the gyroscope requirement is a noise density of 0.06dps/√Hz running at 200Hz, that indicates a 14-bit or better part is needed.  Depending on the use-case of the angular rate, it may be acceptable to saturate at 500dps, which would allow a 12-bit part to be used.</p>
<p>One other important sensor requirement is measurement repeatability. That is the variation in the sensor measurement against the same input signal.  For example, a sensor that exhibits hysteresis or some other non-linear effect degrades the ability to trust the measurement.  Although not reported in sensor datasheets, this repeatability error is sometimes a major contributor to the overall noise level.  It can only be neglected if it is at least 3dB less than the static noise.</p>
<p>The above analysis provides a method to estimate the resultant orientation accuracy for user interaction based on sensor noises.  Sensor performance in a system can also be affected by the properties of the specific sensor component and its environment.  We shall discuss in a future article how these can be eliminated by an algorithm performing an accurate background calibration.</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises&text=Making+Sense+of+Noises" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Making+Sense+of+Noises&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/making-sense-of-noises']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fmaking-sense-of-noises" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/making-sense-of-noises']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/making-sense-of-noises/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sensing Subsystem: Sensor Hubs, Smart Sensors and Application Processors</title>
		<link>http://www.sensorplatforms.com/sensing-subsystem</link>
		<comments>http://www.sensorplatforms.com/sensing-subsystem#comments</comments>
		<pubDate>Tue, 01 Nov 2011 23:26:45 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=390</guid>
		<description><![CDATA[Modern mobile devices have up to 16 different ways to sense their environments.  Count them: 4 inertial sensors (accelerometer, magnetometer, gyroscopes, barometer), 3 microphones, 2 cameras, 1 light sensor, 1 proximity sensor, 1 touch sensor, and 4 radios (GPS, WiFi, Bluetooth, NFC) that can be used to infer position.  The number of featured sensors is continuously increasing and the underlying architecture is still evolving. The simplest sensor subsystems simply connect sensors to the application processor.  This arrangement has the benefit of being the lowest cost but it requires designers to have good control over the architecture of system software.  We have previously shown sampling a sensor at 100 Hz from the Java layer of Android results in so much time &#8230; <a href="http://www.sensorplatforms.com/sensing-subsystem">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Modern mobile devices have up to 16 different ways to sense their environments.  Count them: 4 inertial sensors (accelerometer, magnetometer, gyroscopes, barometer), 3 microphones, 2 cameras, 1 light sensor, 1 proximity sensor, 1 touch sensor, and 4 radios (GPS, WiFi, Bluetooth, NFC) that can be used to infer position.  The number of featured sensors is continuously increasing and the underlying architecture is still evolving.</p>
<p>The simplest sensor subsystems simply connect sensors to the application processor.  This arrangement has the benefit of being the lowest cost but it requires designers to have good control over the architecture of system software.  We have previously shown sampling a sensor at 100 Hz from the Java layer of Android results in so much time stamp jitter as to degrade the performance.  So doing would also takes up 50% of the application processors computing bandwidth and could cause other performance problems for the application.  Using native methods in Android drops the time stamp error to a manageable ±15% and CPU bandwidth to below 10%.  Better results are possible but only by replacing the Sensor Manager in Android to connect the hardware interrupts directly to software callbacks.</p>
<p>The most significant drawback of the simple architecture is power consumption.  Many sensor tasks like context or complex event recognition, step counting, and background sensor calibration needs to occur continuously in the background.  Waking the applications processor periodically to process background tasks can be expensive for battery life.</p>
<p>An architecture alternative often suggested involves a sensor hub.  A sensor hub is a processing element that can be dedicated to dealing with real-time demands from sensors.  It could be a standalone IC, integrated with sensors as a system in package (SIP), or implemented as a low-power core in a multi-cored application processor.  A sensor hub can better perform sensor tasks near real time and would consume significantly less power than the application processor when left running continuously for background tasks.  It can also combine sensor data and interpret them as events and interrupt the applications processor as warranted, infrequently.</p>
<p>The sensor hub adds cost to the system solution.  Their utility could also be limited by the amount of memory or computing resources available to the hub.  However, sensor hub implemented as a low-power core can leverage system memory and avoid memory limitation.</p>
<p>An intelligent sensor contains some or all the processing needed to convert sensor data to meaningful information.  Touch sensors, for example, have integrated controllers that convert capacitance changes into position information.  Smart sensors can support very fast sampling rates and be customized to the needs of the integrated sensor elements.  As such, they can perform context feature set detection or reduce sensor startup latency in ways unavailable to sensor hubs.  However, processing deployed on smart sensors are typically less flexible in function than those performed in sensor hubs.</p>
<p>&nbsp;</p>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2011/11/sensor-hub1.png"><img class="aligncenter size-full wp-image-393" title="sensor hub" src="http://www.sensorplatforms.com/wp-content/uploads/2011/11/sensor-hub1.png" alt="" width="802" height="313" /></a>Readers interested in reading more about sensor subsystem architecture should also look at the article <em><a href="http://www.mobiledevmag.com/2011/07/using-available-sensors-in-the-android-platform-current-limitations-and-expected-improvements%e2%80%a8/" target="_blank">Using available sensors in the Android Platform</a></em> published in Mobile Developer Magazine.</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem&text=Sensing+Subsystem%3A+Sensor+Hubs%2C+Smart+Sensors+and+Application+Processors" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Sensing+Subsystem%3A+Sensor+Hubs%2C+Smart+Sensors+and+Application+Processors&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/sensing-subsystem']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fsensing-subsystem" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/sensing-subsystem']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/sensing-subsystem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting More Reliable Sampling in Android using Native Methods</title>
		<link>http://www.sensorplatforms.com/native-sampling</link>
		<comments>http://www.sensorplatforms.com/native-sampling#comments</comments>
		<pubDate>Tue, 18 Oct 2011 18:49:15 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=345</guid>
		<description><![CDATA[There are three methods to access sensors in Android: Java Activity using a SensorEventListener: the standard method to access sensors. NativeActivity using a ASensorEventQueue: provides a way to bypass the Java overhead, but requires activity registered in Manifest and utilization of android_native_app_glue. ALooper using ASensorEventQueue: little known method to add sensor sampling to any thread at the native level. Java sensor sampling is easiest to implement but has large sampling time stamp uncertainties as covered in a previous blog entry.  It also can take over 50% CPU usage on a 1GHz processor to sample 9-axes of sensors at 100Hz.  This becomes prohibitive for heavy sensor usage. In contrast, native sensor sampling on the same device takes less than 10% CPU &#8230; <a href="http://www.sensorplatforms.com/native-sampling">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There are three methods to access sensors in Android:</p>
<ul>
<li>Java Activity using a SensorEventListener: the standard method to access sensors.</li>
<li>NativeActivity using a ASensorEventQueue: provides a way to bypass the Java overhead, but requires activity registered in Manifest and utilization of android_native_app_glue.</li>
<li>ALooper using ASensorEventQueue: little known method to add sensor sampling to any thread at the native level.</li>
</ul>
<p>Java sensor sampling is easiest to implement but has large sampling time stamp uncertainties as covered in a<a title="Smartphone Performance Fundamentals: Sensor Sampling" href="http://www.sensorplatforms.com/smartphone-performance-fundamentals-sensor-sampling"> previous blog entry</a>.  It also can take over 50% CPU usage on a 1GHz processor to sample 9-axes of sensors at 100Hz.  This becomes prohibitive for heavy sensor usage.</p>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2011/10/NativeAccessThrive_histogram.png"><img class="alignleft size-full wp-image-355" title="NativeAccessThrive_histogram" src="http://www.sensorplatforms.com/wp-content/uploads/2011/10/NativeAccessThrive_histogram.png" alt="" width="391" height="286" /></a>In contrast, native sensor sampling on the same device takes less than 10% CPU usage to sample 9-axes of sensors at 100Hz.  Furthermore, the sampling is much more regular as shown in the figure.  Note that compared to Java-level access, virtually all the large deviations from nominal sampling are removed.  Furthermore, native-level access provides finer control over sensor sampling rate.  Rather than specifying a device-dependent SENSOR_RATE_GAME, it is possible to specifically request a sampling rate, such as 100Hz.  (Of course, whether the device can provide such sampling is still dependent on the underlying hardware.)</p>
<p>The Java method for sensor acquisition is well known and the NativeActivity method is provided as an example with the Android NDK.  Therefore, only the ALooper method will be discussed in some detail  here.  The ALooper method allows a shared library to access sensors without the Java side having to reference them at all.  This is how the Android version of the FreeMotion™ Library accesses sensors.</p>
<p>The steps to native-level access without a NativeActivity are:</p>
<ol>
<li>Identify the looper associated with the calling thread, or create one if it does not exist.  A looper is a message loop for a thread and will handle the sensor event callbacks.<br />
<span class="Apple-style-span" style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 15px; line-height: 21px;"><br />
ALooper* looper = ALooper_forThread();<br />
if(looper == NULL)<br />
looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);<br />
</span>&nbsp;</li>
<li> As in a NativeActivity, get an instance of the Sensor Manager and each sensor<br />
<span class="Apple-style-span" style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 15px; line-height: 21px;"><br />
sensorManager = ASensorManager_getInstance();<br />
accelerometerSensor = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_ACCELEROMETER);<br />
</span>&nbsp;</li>
<li>Create a sensor event queue from the sensor manager and register it with the looper.  This needs to have a callback method (e.g. get_sensor_events) which is called when an event occurs.<br />
<span class="Apple-style-span" style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 15px; line-height: 21px;"><br />
sensorEventQueue =   ASensorManager_createEventQueue(sensorManager, looper,  LOOPER_ID_USER, get_sensor_events, sensor_data);<br />
</span>&nbsp;</li>
<li>Implement the callback method with the logic to use the sensor data.  It must have the following<br />
<span class="Apple-style-span" style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 15px; line-height: 21px;"><br />
typedef int (*ALooper_callbackFunc)(int fd, int events, void* data);<br />
</span>&nbsp;</li>
<li>Register the sampling frequency of the sensorEventQueue.<br />
<span class="Apple-style-span" style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace; font-size: 15px; line-height: 21px;"><br />
ASensorEventQueue_setEventRate(sensorEventQueue, accelerometerSensor,<br />
(1000L/SAMP_PER_SEC)*1000);</span>&nbsp;</li>
</ol>
<p>Regular sampling and low computing overhead are the foundations of a sophisticated sensor library.  Although this provides a much better method to access sensors, there is still room for improvement.  Sensors are built to provide regular sampling of data.  Therefore it is natural to use an interrupt-based method.  While it seems that is being done in Android, the callback is performed by the Sensor Manager (step 3) which itself uses polling to access the sensor (step 5).  To get the best sampling performance, our FreeMotion™ library replaces the libsensors.so sensor library and work with the sensor drivers directly in embedded Linux.</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling&text=Getting+More+Reliable+Sampling+in+Android+using+Native+Methods" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Getting+More+Reliable+Sampling+in+Android+using+Native+Methods&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/native-sampling']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fnative-sampling" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/native-sampling']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/native-sampling/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>System Architecture for Sensors Needs Better Standards</title>
		<link>http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards</link>
		<comments>http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards#comments</comments>
		<pubDate>Fri, 30 Sep 2011 14:52:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dev-wp.sensorplatforms.com/?p=333</guid>
		<description><![CDATA[In an earlier article, we discussed that sensors and sensor subsystem architecture can be a major source of fragmentation that would continue to frustrate app developers for smart phone and mobile devices.  As the industry embarks on creating a new class of situation aware mobile devices, it is key to establish and improve sensor system standards. For example, the Khronos Group through its StreamInput working group has identified “system-wide sensor synchronization for advanced multi-sensor applications” as an area in which standards is lacking. Indeed, for an application to, say, use inertial sensors to track camera angles it is necessary for the accelerometer, magnetometer, and image sensors to share the same timing reference. Each sensor, today, runs on its own free-running clock &#8230; <a href="http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>
<p>In an <a href="http://www.sensorplatforms.com/despite-ice-cream-sandwich-fragmentation-will-continue">earlier article</a>, we discussed that sensors and sensor subsystem architecture can be a major source of fragmentation that would continue to frustrate app developers for smart phone and mobile devices.  As the industry embarks on creating a new class of situation aware mobile devices, it is key to establish and improve sensor system standards.</p>
<p>For example, the Khronos Group through its StreamInput working group has identified “system-wide sensor synchronization for advanced multi-sensor applications” as an area in which standards is lacking. Indeed, for an application to, say, use inertial sensors to track camera angles it is necessary for the accelerometer, magnetometer, and image sensors to share the same timing reference.</p>
<p>Each sensor, today, runs on its own free-running clock and relative timing among samples are not defined.  Synching up sensor data with video would mean that every set of sensor data is tagged with a corresponding video frame number.  At 60 frames per second, this would be a relatively simple task that can be handled using only software.  However, if the application requires synchronization to occur at a scan line, or about 64kHz, it will require some hardware support to generate a time stamp for each set of sensor data.</p>
<p>Establishing a timing standard is but one fundamental area an open standards group like Khronos can contribute.  A minimum guaranteed sensor performance is another aspect that needs to be established.  Performance characteristics such as sensor bandwidth, accuracy and repeatability and latency are different among smartphone models running the same operating system.  We are hopeful that new operating systems like Android and Windows 8 will start to establish some of these requirements.</p>
<p>Going beyond minimum performance, an open standard is necessary to allow innovators access to richer sensor content.  For example, a smart algorithm might be able to use inertial sensors to detect when a smartphone is inside an elevator.  Such a new function would be released in a sensor library and an open standard will have to establish a method by which a mall map application can see that the capability exists and use it to serve up different maps to the mobile user.</p>
</div>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards&text=System+Architecture+for+Sensors+Needs+Better+Standards" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=System+Architecture+for+Sensors+Needs+Better+Standards&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fsystem-architecture-for-sensors-needs-better-standards" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/system-architecture-for-sensors-needs-better-standards/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which Sensors in Android gets Direct Input? What are Virtual Sensors?</title>
		<link>http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors</link>
		<comments>http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors#comments</comments>
		<pubDate>Tue, 27 Sep 2011 15:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dev-wp.sensorplatforms.com/?p=337</guid>
		<description><![CDATA[We receive many recurring questions from Android developers.  This is a series of articles to help with clarification. &#160; Developers often ask for clarification with respect to the list of sensor types list in Android documentation (see below).  The list can be confusing because it includes both physical sensors and sensor types with values derived from physical sensors, sometimes these are called virtual sensors. Physical sensors include the accelerometer, gyroscope, light sensor, magnet field sensor (often called magnetometer), pressure sensor, proximity sensor, and temperature sensor.  The values from these sensors are provided by hardware components directly measuring changes in the physical property of their environment. The quality of data from these sensor types depends fundamentally on the accuracy, resolution, inherent &#8230; <a href="http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>
<p><em>We receive many recurring questions from Android developers.  This is a series of articles to help with clarification.</em></p>
<p>&nbsp;</p>
<p>Developers often ask for clarification with respect to the list of sensor types list in Android documentation (see below).  The list can be confusing because it includes both physical sensors and sensor types with values derived from physical sensors, sometimes these are called virtual sensors.</p>
<p><em><a href="http://dev-wp.sensorplatforms.com/wp-content/uploads/2011/10/android-sensor.png"><img title="android-sensor" src="http://dev-wp.sensorplatforms.com/wp-content/uploads/2011/10/android-sensor.png" alt="" width="468" height="265" /></a></em></p>
<p>Physical sensors include the accelerometer, gyroscope, light sensor, magnet field sensor (often called magnetometer), pressure sensor, proximity sensor, and temperature sensor.  The values from these sensors are provided by hardware components directly measuring changes in the physical property of their environment.</p>
<p>The quality of data from these sensor types depends fundamentally on the accuracy, resolution, inherent noise, and repeatability of the physical sensors.  However, proper system implementations such as sampling scheme and calibration are necessary to take advantage of the full potential of the underlying hardware.</p>
<p>The virtual sensors types (gravity, linear acceleration, and rotation vector) provide values derived by combining the results from physical sensors intelligently.  The rotation vector is a combination of the accelerometer, the magnetometer, and sometimes the gyroscope to determine the three-dimensional angle along which the Android device lays with respect to the Earth frame coordinates.  By knowing the rotation vector of a device, accelerometer data can be separated into gravity and linear acceleration.</p>
<p>The quality of virtual sensors depends not only on the quality of physical data but also on the sophistication of the algorithms used to derive them.  Because the rotation vector depends on accelerometer and magnetometer values, its accuracy is affected by user movements and ambient magnetic anomalies.  Gyroscopes can be used to mitigate these issues at the expense of higher system cost and higher power consumption.  Heuristics and better models of human body dynamics can also be used to overcome these problems for normal usages.</p>
<p>Cameras, GPS, WiFi and the microphones can all be used to sense movements and locations.  However, they do not have any influence on the results from the sensors.  It remains for applications, or for intelligent middleware like our FreeMotion sensor library, to combine all the sensory data available on an Android platform to provide the best available information.</p>
</div>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors&text=Which+Sensors+in+Android+gets+Direct+Input%3F+What+are+Virtual+Sensors%3F" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Which+Sensors+in+Android+gets+Direct+Input%3F+What+are+Virtual+Sensors%3F&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fwhich-sensors-in-android-gets-direct-input-what-are-virtual-sensors" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracking Position Indoors: moving from Hype to Reality</title>
		<link>http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality</link>
		<comments>http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality#comments</comments>
		<pubDate>Wed, 31 Aug 2011 22:48:58 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=311</guid>
		<description><![CDATA[While dead reckoning solutions have been deployed for many first responder applications, allowing pedestrians to find their location indoors remains the elusive Holy Grail for location based mobile services.   However, progress along many fronts suggests that a solution may be at hand in the near future. Pedestrian maps are becoming more useful.  Not long ago, mobile mapping applications like Google Maps in pedestrian mode often gives the same directions as in vehicle mode except it would ignore one-way traffic restrictions.  Now, pedestrian mode direction will take the user to overpasses and underpasses to cross a street.  Of course, indoor maps are still emerging and a standard way to handle maps for multi-storied buildings remains lacking.  However, proprietary and open source &#8230; <a href="http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While dead reckoning solutions have been deployed for many first responder applications, allowing pedestrians to find their location indoors remains the elusive Holy Grail for location based mobile services.   However, progress along many fronts suggests that a solution may be at hand in the near future.</p>
<p>Pedestrian maps are becoming more useful.  Not long ago, mobile mapping applications like Google Maps in pedestrian mode often gives the same directions as in vehicle mode except it would ignore one-way traffic restrictions.  Now, pedestrian mode direction will take the user to overpasses and underpasses to cross a street.  Of course, indoor maps are still emerging and a standard way to handle maps for multi-storied buildings remains lacking.  However, proprietary and open source libraries of indoor maps and 3D mirror worlds continue to increase.</p>
<p>Sensor and RF hardware used for position tracking are inexpensive and becoming prevalent in smartphones and tablets.  Although the primary location provider on these devices today is GPS, GPS signals are not reliably available.   While designers are improving the sensitivity of GPS receivers to make them work better indoors, the mobile industry is also investing in alternatives to GPS for location services.</p>
<p>One alternative to GPS is to use the cellular signals to estimate the users’ distance from nearby cell towers.  Using estimated distance from three or more cell towers, users can trilaterate and estimate locations.  However, cell phone users, already frustrated by poor coverage and dropped calls, understand that cellular signals are not always reliable either.  Signal reflections can also result in large position estimate errors.</p>
<p>Another alternative is to use Wi-Fi fingerprint matching.  There are many databases that record the Wi-Fi signatures of physical locations.  A program can compare the Wi-Fi signature detected by a smartphone against one of these databases, and make an educated guess on the user’s location.  This method is obviously limited by the coverage and accuracy of the fingerprint databases.  Accessing the fingerprint databases could also be expensive depending on the users’ data plans.</p>
<p>A third alternative  is to use sensors (accelerometers, magnetometers, gyroscopes, and soon, barometers) on smartphones to implement dead reckoning, which is the process of estimating a user’s current position based upon a previously determined position, and then advancing that position based upon known or estimated speeds over elapsed time and course.  The advantage of dead reckoning over cell tower trilateration, or Wi-Fi fingerprint matching, or even GPS, is its always-on availability to the user.  However, since the new position is calculated solely based on the previous position, the estimation error accumulates over time.  Today, dead reckoning solutions are commonly deployed with first responders; for example, to guide a rescuer in a fire scene.  In these applications, sensors used for dead reckoning are securely attached to the clothing or footwear of the users.  Moving the sensors to a smartphone will require a dead reckoning solution to differentiate between movement of the users’ travel from extraneous and incidental hand motions.</p>
<p>As none of the three alternatives above alone can resolve all the challenges, the final and necessary ingredient to bring pedestrian navigation to fruition is an intelligent algorithm.  GPS, cellular signals and Wi-Fi can be used to put an upper limit on the estimation error from dead reckoning, while dead reckoning can fill in the gaps when the other methods are unavailable.  While each method by itself can be prone to errors and outages, a smart algorithm can use all the methods together to compensate for the weakness of each other.  It can also leverage maps and even camera images to further refine and pin point the user’s location.  As these pieces come together, true pedestrian navigation will be at hand.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality&text=Tracking+Position+Indoors%3A+moving+from+Hype+to+Reality" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality&title=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality&title=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Tracking+Position+Indoors%3A+moving+from+Hype+to+Reality&u=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Ftracking-position-indoors-moving-from-hype-to-reality" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/tracking-position-indoors-moving-from-hype-to-reality/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Sensors to Understand User Contexts</title>
		<link>http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts</link>
		<comments>http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts#comments</comments>
		<pubDate>Mon, 15 Aug 2011 18:02:23 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=307</guid>
		<description><![CDATA[Market analysts now project that five billion MEMS sensors will be shipped in 2016 to support applications like navigation, dead reckoning, image stabilization, and augmented reality in smart phones, e-readers, tablets and gaming platforms.  Although these applications are all extremely useful, we think they represent only a fraction of the functions sensors will perform.  After all, most consumers don’t need directions, take pictures, or play games more than a few hours a day.  But sensors, and intelligent algorithms, will be working all the time to help applications understand user contexts. Today, smart phones and tablets use sensors to understand user context in a few primitive ways.  Turn the tablet from portrait to landscape orientation and the content of the display &#8230; <a href="http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Market analysts now project that five billion MEMS sensors will be shipped in 2016 to support applications like navigation, dead reckoning, image stabilization, and augmented reality in smart phones, e-readers, tablets and gaming platforms.  Although these applications are all extremely useful, we think they represent only a fraction of the functions sensors will perform.  After all, most consumers don’t need directions, take pictures, or play games more than a few hours a day.  But sensors, and intelligent algorithms, will be working all the time to help applications understand user contexts.</p>
<p>Today, smart phones and tablets use sensors to understand user context in a few primitive ways.  Turn the tablet from portrait to landscape orientation and the content of the display reorganizes to try and fit the display.  Bring the smart phone to your ear and the touch screen turns off (OK, many phones still needs to work on that one).  But with more sophisticated algorithms and heuristics, the sensors can do much more.</p>
<p>How about a smart sensor system that knows when you are getting in or getting out of a car?  For starters, users can send all incoming calls, except those coming from their families, to voicemail while they are driving.  Then there are those “car finder” apps today that can bring a driver back to his car if he starts the app after he has parked.  We have been suspicious of the utility of such an app: if we had the presence of mind to start an app when we left the car, we would probably be able remember where we has left it without any navigation aid.  So it would be more useful if smart sensors automatically trigger the navigation system to remember the location where we got out of our car for those absent minded moments we all have.</p>
<p>A new smart phone now contains two cameras, an accelerometer, a magnetometer, a gyroscope, a proximity sensor, a light sensor, and two or more microphones.  These sensors capture a huge amount of data that can be used to inform and entertain consumers.  At the same time, these data also capture the reality surrounding the users.  Applications running on the phone can process the data and mine for information that help them adjust their configurations automatically to better match where the users are and what they are doing.</p>
<p>Concerns for privacy notwithstanding, consumers do look forward to smart phones that can become truly smart, mind-reading, assistants.  The first step towards that is having smart phones that can automatically infer user context.  Kenneth Noland, the America abstract painter said it well, “<em>context is the key – from that comes the understanding of everything</em>.”</p>
<p>&nbsp;</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts&text=Using+Sensors+to+Understand+User+Contexts" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts&title=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Using+Sensors+to+Understand+User+Contexts&u=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Fusing-sensors-to-understand-user-contexts" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/using-sensors-to-understand-user-contexts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding Smart Phone Sensor Performance: Magnetometer</title>
		<link>http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2</link>
		<comments>http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2#comments</comments>
		<pubDate>Fri, 29 Jul 2011 00:31:32 +0000</pubDate>
		<dc:creator>ian</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.sensorplatforms.com/?p=289</guid>
		<description><![CDATA[One of the most common questions we hear from mobile applications developers is, “how good are the sensors on my phone?”  This article is part of a series that provides a framework to understand sensor performance. This series has previously touched upon the importance of system architecture and intelligent algorithms in providing optimal sensor performance in a smartphone or a tablet.  To complete the discussion of the sensor system, platform designers also need to select good sensor components.  This article uses the magnetometer to highlight the impact of these three factors. The magnetometer is commonly found on mobile devices such as smart phones and tablets, but it is one of the most difficult sensors to interpret.  It is commonly called &#8230; <a href="http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>One of the most common questions we hear from mobile applications developers is, “how good are the sensors on my phone?”  This article is part of a series that provides a framework to understand sensor performance.</em></p>
<p>This series has previously touched upon the importance of system architecture and intelligent algorithms in providing optimal sensor performance in a smartphone or a tablet.  To complete the discussion of the sensor system, platform designers also need to select good sensor components.  This article uses the magnetometer to highlight the impact of these three factors.</p>
<p>The magnetometer is commonly found on mobile devices such as smart phones and tablets, but it is one of the most difficult sensors to interpret.  It is commonly called a compass since it measures the strength of the magnetic field in three dimensions, but does not necessarily point north.  In fact magnetic interference can cause it to behave unpredictably, as often seen in augmented reality apps.</p>
<p>In an environment free of magnetic interference, the magnetometer measures Earth’s magnetic field which combined with gravity (measured by an accelerometer) can be used to determine the 3-dimensional orientation in which the phone is being held.  The cardinal directions with respect to any orientation of the device can then be determined and used to display contextual information, such as tracking the nearest subway stations as a phone is moved around.  If the phone also knows its rough geographical location, a compass app can translate magnetic north into true north.</p>
<p><a href="http://www.sensorplatforms.com/wp-content/uploads/2011/07/mag-psd.png"><img class="aligncenter size-full wp-image-290" title="mag psd" src="http://www.sensorplatforms.com/wp-content/uploads/2011/07/mag-psd.png" alt="" width="1139" height="440" /></a>The figure above shows the power spectral density (PSD) of two stationary magnetometers measuring the same ambient magnetic field.  Yet, their results look different in many ways:</p>
<ul>
<li>The two sensors have different noise floors (sensitivities).</li>
<li>The maximum measurable frequency for magnetometer A is 25 Hz but for B is 50 Hz.</li>
<li>The shape of the PSD is completely different.  The spectrum from Magnetometer A shows a 3.3 Hz ripple.  The spectrum from Magnetometer B is largely flat (as expected for white noise).</li>
</ul>
<p>Differences in sensor physics account for the noise disparity.  Magnetometer A is a Hall effect sensor, a transducer that varies its output voltage in response to changing magnetic fields.  Hall effect sensors are inexpensive to make but consume higher power and provide less precision than many alternative sensing technologies.  Magnetometer B is an anisotropic magneto-resistive (AMR) sensor.  AMR sensors use a thin film of ferromagnetic alloy that changes resistance according to an ambient magnetic field.  They offer better accuracy, higher bandwidth, and more temperature stability than Hall effect sensors.</p>
<p>The PSD plot for Magnetometer A shows noise density envelope higher than -65 dB at 5Hz.  In contrast, the noise density for Magnetometer B is around -80dB.  Since human movements occur at low frequencies, noise spectral density below 10 Hz is an important performance determinant.  Higher noise power will interfere with the sensors ability to detect small changes, or fine movements.  Furthermore, filtering or averaging to reduce noise limits the utility of the sensors: a point we shall discuss later in this article.</p>
<p>Second, the upper limits of the PSD plots reflect the sampling rate used for each sensor.  Magnetometer A is sampled at 50 Hz while Magnetometer B is sampled at 100 Hz.  Higher sampling rates can improve filter and algorithm responsiveness but could also consume more power.  An optimal system design should include an intelligent resource manager that throttles sampling rate based on application demand to conserve system battery life.</p>
<p>Third, the ripple in Magnetometer A’s spectrum is the result of an averaging filter.  Apparently, to reduce the effect of sensor noise, each data point provided by the sensor is actually a running average of the current raw sample and the 14 preceding raw samples.  This results in a low passed signal that erodes motion data faster than 3.3 Hz and makes Magnetometer A poorly suited to measure user movements.  As Magnetometer A is commonly used in many smartphone models, this averaging filter contributed to the erroneous conception that magnetometer has low bandwidth.</p>
<p>Indeed, the spectrum for Magnetometer B is largely flat.  It suggests that the sensor data has not been artificially altered in any way and high frequency response has not been compromised.  Incidentally, the peaks at 20 and 40 Hz are the aliases of the first and third harmonic of the magnetic field created by 60Hz A/C currents (in the United States).</p>
<p>So far, we have focused on the noise and bandwidth of the magnetometer measurements.  However, even with the cleanest sensor data, a compass app still requires an algorithm to interpret them to find magnetic north.  Specifically, calibration is needed to remove the effects of ferromagnetic materials in a mobile device so that Earth’s magnetic field can be properly detected.  These materials include the maganese found in the battery (which constitutes hard-iron effects) and nickel found on the printed circuit boards and on component leads (which constitute soft-iron effects).  The magnetic alignment of these materials change when exposed to external magnetic fields, such as electro-magnetic field of a refrigerator motor or the permanent magnet on the buckle of a smartphone holster.  Many smartphones in production today, feature inferior calibration algorithms that can be confused by external magnetic fields and lose their compass heading (<strong><a title="Magnetometer calibration error" href="http://www.youtube.com/watch?v=f_5jqnrgRK0" target="_blank">video link</a></strong>).</p>
<p>In summary, this article has illustrated some of the key sensor system considerations to create a useful compass app.  Good sensor performance relies on proper designs in three aspects: sensor component selection, sensor system architecture, and intelligent sensor algorithms.  Failure in any one will compromise the utility of the sensor.</p>
<div class="trackable_sharing"><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Facebook','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//facebook.png" alt="Facebook" width="32" height="32"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2&text=Understanding+Smart+Phone+Sensor+Performance%3A+Magnetometer" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Twitter','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//twitter.png" alt="Twitter" width="32" height="32"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2&title=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Linkedin','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//linkedin.png" alt="Linkedin" width="32" height="32"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2&title=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Stumbleupon','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//stumbleupon.png" alt="Stumbleupon" width="32" height="32"></a> <a href="http://www.tumblr.com/login?s=&t=Understanding+Smart+Phone+Sensor+Performance%3A+Magnetometer&u=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Tumblr','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//tumblr.png" alt="Tumblr" width="32" height="32"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Posterous','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); _trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//posterous.png" alt="Posterous" width="32" height="32"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fwww.sensorplatforms.com%2Funderstanding-smart-phone-sensor-performance-magnetometer-2" style="text-decoration: none; white-space: nowrap;" title="Email" onclick="that=this;_gaq.push(['_trackEvent','SocialSharing','Email','http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2']); "><img align="absmiddle" src="http://www.sensorplatforms.com/wp-content/plugins/trackable-social-share-icons/buttons/1//email.png" alt="Email" width="32" height="32"></a> </div>]]></content:encoded>
			<wfw:commentRss>http://www.sensorplatforms.com/understanding-smart-phone-sensor-performance-magnetometer-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: sensorplatforms.com @ 2012-05-18 08:45:26 -->
