CTS Verifier fix latency estimation for Loopback test
Fixed correlation computation by filtering out low level noise
from signal.
Bug: 25011345
Change-Id: I31995af998a59f1762819af2dbe4e85e44f1eaf3
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/Correlation.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/Correlation.java
index 75b04eb..98d1365 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/Correlation.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/Correlation.java
@@ -30,6 +30,8 @@
public double mEstimatedLatencyMs = 0;
public double mEstimatedLatencyConfidence = 0.0;
+ private double mAmplitudeThreshold = 0.001; // 0.001 = -60 dB noise
+
public void init(int blockSize, int samplingRate) {
mBlockSize = blockSize;
mSamplingRate = samplingRate;
@@ -40,7 +42,7 @@
log("Started Auto Correlation for data with " + data.length + " points");
mSamplingRate = samplingRate;
- downsampleData(data, mDataDownsampled);
+ downsampleData(data, mDataDownsampled, mAmplitudeThreshold);
//correlation vector
autocorrelation(mDataDownsampled, mDataAutocorrelated);
@@ -95,7 +97,7 @@
return status;
}
- private boolean downsampleData(double [] data, double [] dataDownsampled) {
+ private boolean downsampleData(double [] data, double [] dataDownsampled, double threshold) {
boolean status = false;
// mDataDownsampled = new double[mBlockSize];
@@ -106,6 +108,8 @@
int N = data.length; //all samples available
double groupSize = (double) N / mBlockSize;
+ int ignored = 0;
+
int currentIndex = 0;
double nextGroup = groupSize;
for (int i = 0; i<N && currentIndex<mBlockSize; i++) {
@@ -118,9 +122,18 @@
if (currentIndex>=mBlockSize) {
break;
}
- dataDownsampled[currentIndex] += Math.abs(data[i]);
+
+ double value = Math.abs(data[i]);
+ if (value >= threshold) {
+ dataDownsampled[currentIndex] += value;
+ } else {
+ ignored++;
+ }
}
+ log(String.format(" Threshold: %.3f, ignored:%d/%d (%%.2f)", threshold, ignored, N,
+ (double) ignored/(double)N));
+
status = true;
return status;
}