summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrago <rago@google.com>2015-10-15 19:12:17 -0700
committerrago <rago@google.com>2015-10-15 19:12:17 -0700
commitd8ec0bbad2303bfe8fc60fdc77383e33e7a7589a (patch)
tree144bd0158f473f5ed112a3b7abe2780949937f0a
parent39b0cffceb8efd9cb30e5554fb3fcb6520692e61 (diff)
downloaddrrickorang-d8ec0bbad2303bfe8fc60fdc77383e33e7a7589a.tar.gz
Added energy threshold to correlation/noise gate to improve confidence level. Using -60 dB threshold
-rw-r--r--LoopbackApp/app/src/main/AndroidManifest.xml2
-rw-r--r--LoopbackApp/app/src/main/java/org/drrickorang/loopback/Correlation.java19
2 files changed, 17 insertions, 4 deletions
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 class Correlation {
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 @@ public class Correlation {
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 @@ public class Correlation {
}
- 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 @@ public class Correlation {
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 @@ public class Correlation {
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;
}