From 0a506406f836b0bdf4ea4323193efc33f34a9f24 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Mon, 29 Apr 2024 07:23:08 +0200 Subject: [PATCH] estimate frequency offset using leader tone --- app/src/main/java/xdsopl/robot36/Decoder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java index d1ffa96..b7b493c 100644 --- a/app/src/main/java/xdsopl/robot36/Decoder.java +++ b/app/src/main/java/xdsopl/robot36/Decoder.java @@ -208,13 +208,14 @@ public class Decoder { float postBreakFreq = 0; for (int i = transitionSamples; i < leaderToneSamples - transitionSamples; ++i) postBreakFreq += scanLineBuffer[syncPulseIndex + i]; + float freqOffset = postBreakFreq / (leaderToneSamples - 2 * transitionSamples); postBreakFreq = postBreakFreq * halfBandWidth / (leaderToneSamples - 2 * transitionSamples) + centerFreq; if (postBreakFreq < 1850 || postBreakFreq > 1950) return false; Arrays.fill(visCodeBitFreqs, 0); for (int j = 0; j < 10; ++j) for (int i = transitionSamples; i < visCodeBitSamples - transitionSamples; ++i) - visCodeBitFreqs[j] += scanLineBuffer[syncPulseIndex + leaderToneSamples + visCodeBitSamples * j + i]; + visCodeBitFreqs[j] += scanLineBuffer[syncPulseIndex + leaderToneSamples + visCodeBitSamples * j + i] - freqOffset; for (int i = 0; i < 10; ++i) visCodeBitFreqs[i] = visCodeBitFreqs[i] * halfBandWidth / (visCodeBitSamples - 2 * transitionSamples) + centerFreq; if (visCodeBitFreqs[0] < 1150 || visCodeBitFreqs[0] > 1250 || visCodeBitFreqs[9] < 1150 || visCodeBitFreqs[9] > 1250)