Added energy threshold to correlation/noise gate to improve confidence level.  Using -60 dB threshold
diff --git a/LoopbackApp/app/src/main/AndroidManifest.xml b/LoopbackApp/app/src/main/AndroidManifest.xml
index 1122313..6e62d7a 100644
--- a/LoopbackApp/app/src/main/AndroidManifest.xml
+++ b/LoopbackApp/app/src/main/AndroidManifest.xml
@@ -24,7 +24,7 @@
     package="org.drrickorang.loopback"
 
     android:versionCode="7"
-    android:versionName="0.5">
+    android:versionName="0.6">
 
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
diff --git a/LoopbackApp/app/src/main/java/org/drrickorang/loopback/Correlation.java b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/Correlation.java
index 8cb8479..1e92fca 100644
--- a/LoopbackApp/app/src/main/java/org/drrickorang/loopback/Correlation.java
+++ b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/Correlation.java
@@ -35,6 +35,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;
@@ -47,7 +49,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);
@@ -101,7 +103,7 @@
     }
 
 
-    private boolean downsampleData(double [] data, double [] dataDownsampled) {
+    private boolean downsampleData(double [] data, double [] dataDownsampled, double threshold) {
 
         boolean status;
         for (int i = 0; i < mBlockSize; i++) {
@@ -111,6 +113,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++) {
@@ -123,9 +127,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;
     }