Merge "Average of top 4 CNO" into oc-dr1-dev

This commit is contained in:
TreeHugger Robot
2017-07-12 22:38:43 +00:00
committed by Android (Google) Code Review
3 changed files with 54 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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);
}