diff options
| author | 2017-07-12 22:38:43 +0000 | |
|---|---|---|
| committer | 2017-07-12 22:38:43 +0000 | |
| commit | e7f5c6aa38b0e5ba9c5dab036688a5817cec7a55 (patch) | |
| tree | 6a1d955b1c9e9080b9cd59faafa25f64094e32c6 | |
| parent | fbb85140f847e3cff946c7c742e467692f4c73c4 (diff) | |
| parent | 168f12a056f7ef3adb9f9d52aaa51977b4082213 (diff) | |
Merge "Average of top 4 CNO" into oc-dr1-dev
3 files changed, 54 insertions, 0 deletions
diff --git a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java index f5f102467998..833376cfa057 100644 --- a/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java +++ b/location/java/com/android/internal/location/gnssmetrics/GnssMetrics.java @@ -21,6 +21,8 @@ import android.os.SystemClock; import android.util.Base64; import android.util.TimeUtils; +import java.util.Arrays; + import com.android.internal.location.nano.GnssLogsProto.GnssLog; /** @@ -40,6 +42,7 @@ public class GnssMetrics { locationFailureStatistics = new Statistics(); timeToFirstFixSecStatistics = new Statistics(); positionAccuracyMeterStatistics = new Statistics(); + topFourAverageCn0Statistics = new Statistics(); reset(); } @@ -95,6 +98,27 @@ public class GnssMetrics { return; } + /* + * Logs CN0 when at least 4 SVs are available + * + */ + public void logCn0(float[] cn0s, int numSv) { + if (numSv < 4) { + return; + } + float[] cn0Array = Arrays.copyOf(cn0s, numSv); + Arrays.sort(cn0Array); + if (cn0Array[numSv - 4] > 0.0) { + double top4AvgCn0 = 0.0; + for (int i = numSv - 4; i < numSv; i++) { + top4AvgCn0 += (double) cn0Array[i]; + } + top4AvgCn0 /= 4; + topFourAverageCn0Statistics.addItem(top4AvgCn0); + } + return; + } + /** * Dumps GNSS metrics as a proto string * @return @@ -117,6 +141,12 @@ public class GnssMetrics { msg.standardDeviationPositionAccuracyMeters = (int) positionAccuracyMeterStatistics.getStandardDeviation(); } + if (topFourAverageCn0Statistics.getCount() > 0) { + msg.numTopFourAverageCn0Processed = topFourAverageCn0Statistics.getCount(); + msg.meanTopFourAverageCn0DbHz = topFourAverageCn0Statistics.getMean(); + msg.standardDeviationTopFourAverageCn0DbHz + = topFourAverageCn0Statistics.getStandardDeviation(); + } String s = Base64.encodeToString(GnssLog.toByteArray(msg), Base64.DEFAULT); reset(); return s; @@ -155,6 +185,14 @@ public class GnssMetrics { s.append(" Position accuracy standard deviation (m): ").append( positionAccuracyMeterStatistics.getStandardDeviation()).append("\n"); } + s.append(" Number of CN0 reports: ").append( + topFourAverageCn0Statistics.getCount()).append("\n"); + if (topFourAverageCn0Statistics.getCount() > 0) { + s.append(" Top 4 Avg CN0 mean (dB-Hz): ").append( + topFourAverageCn0Statistics.getMean()).append("\n"); + s.append(" Top 4 Avg CN0 standard deviation (dB-Hz): ").append( + topFourAverageCn0Statistics.getStandardDeviation()).append("\n"); + } s.append("GNSS_KPI_END").append("\n"); return s.toString(); } @@ -211,6 +249,9 @@ public class GnssMetrics { /** Position accuracy statistics */ private Statistics positionAccuracyMeterStatistics; + /** Top 4 average CN0 statistics */ + private Statistics topFourAverageCn0Statistics; + /** * Resets GNSS metrics */ @@ -221,6 +262,7 @@ public class GnssMetrics { locationFailureStatistics.reset(); timeToFirstFixSecStatistics.reset(); positionAccuracyMeterStatistics.reset(); + topFourAverageCn0Statistics.reset(); return; } }
\ No newline at end of file diff --git a/proto/src/gnss.proto b/proto/src/gnss.proto index 33a5584f327b..c54ddadd07df 100644 --- a/proto/src/gnss.proto +++ b/proto/src/gnss.proto @@ -33,4 +33,13 @@ message GnssLog { // Standard deviation of position accuracy (in meters) optional int32 standard_deviation_position_accuracy_meters = 8; + + // Number of top 4 average CN0 processed + optional int32 num_top_four_average_cn0_processed = 9; + + // Mean of top 4 average CN0 (dB-Hz) + optional double mean_top_four_average_cn0_db_hz = 10; + + // Standard deviation of top 4 average CN0 (dB-Hz) + optional double standard_deviation_top_four_average_cn0_db_hz = 11; }
\ No newline at end of file diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 4511aa9390c6..601dd9454118 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -1651,6 +1651,9 @@ public class GnssLocationProvider implements LocationProviderInterface { mSvAzimuths, mSvCarrierFreqs); + // Log CN0 as part of GNSS metrics + mGnssMetrics.logCn0(mCn0s, svCount); + if (VERBOSE) { Log.v(TAG, "SV count: " + svCount); } |