omit transition in the sum

This commit is contained in:
Ahmet Inan 2024-04-29 06:46:54 +02:00
parent af06ae6fdc
commit 6f3cea00b2

View file

@ -33,6 +33,7 @@ public class Decoder {
private final int scanLineToleranceSamples; private final int scanLineToleranceSamples;
private final int leaderToneSamples; private final int leaderToneSamples;
private final int leaderBreakSamples; private final int leaderBreakSamples;
private final int transitionSamples;
private final int visCodeBitSamples; private final int visCodeBitSamples;
private final int visCodeSamples; private final int visCodeSamples;
private final Mode rawMode; private final Mode rawMode;
@ -62,6 +63,8 @@ public class Decoder {
leaderToneSamples = (int) Math.round(leaderToneSeconds * sampleRate); leaderToneSamples = (int) Math.round(leaderToneSeconds * sampleRate);
double leaderBreakSeconds = 0.01; double leaderBreakSeconds = 0.01;
leaderBreakSamples = (int) Math.round(leaderBreakSeconds * sampleRate); leaderBreakSamples = (int) Math.round(leaderBreakSeconds * sampleRate);
double transitionSeconds = 0.0005;
transitionSamples = (int) Math.round(transitionSeconds * sampleRate);
double visCodeBitSeconds = 0.03; double visCodeBitSeconds = 0.03;
visCodeBitSamples = (int) Math.round(visCodeBitSeconds * sampleRate); visCodeBitSamples = (int) Math.round(visCodeBitSeconds * sampleRate);
double visCodeSeconds = 0.3; double visCodeSeconds = 0.3;
@ -203,17 +206,17 @@ public class Decoder {
if (preBreakFreq < 1850 || preBreakFreq > 1950) if (preBreakFreq < 1850 || preBreakFreq > 1950)
return false; return false;
float postBreakFreq = 0; float postBreakFreq = 0;
for (int i = 0; i < leaderToneSamples; ++i) for (int i = transitionSamples; i < leaderToneSamples - transitionSamples; ++i)
postBreakFreq += scanLineBuffer[syncPulseIndex + i]; postBreakFreq += scanLineBuffer[syncPulseIndex + i];
postBreakFreq = postBreakFreq * halfBandWidth / leaderToneSamples + centerFreq; postBreakFreq = postBreakFreq * halfBandWidth / (leaderToneSamples - 2 * transitionSamples) + centerFreq;
if (postBreakFreq < 1850 || postBreakFreq > 1950) if (postBreakFreq < 1850 || postBreakFreq > 1950)
return false; return false;
Arrays.fill(visCodeBitFreqs, 0); Arrays.fill(visCodeBitFreqs, 0);
for (int j = 0; j < 10; ++j) for (int j = 0; j < 10; ++j)
for (int i = 0; i < visCodeBitSamples; ++i) for (int i = transitionSamples; i < visCodeBitSamples - transitionSamples; ++i)
visCodeBitFreqs[j] += scanLineBuffer[syncPulseIndex + leaderToneSamples + visCodeBitSamples * j + i]; visCodeBitFreqs[j] += scanLineBuffer[syncPulseIndex + leaderToneSamples + visCodeBitSamples * j + i];
for (int i = 0; i < 10; ++i) for (int i = 0; i < 10; ++i)
visCodeBitFreqs[i] = visCodeBitFreqs[i] * halfBandWidth / visCodeBitSamples + centerFreq; visCodeBitFreqs[i] = visCodeBitFreqs[i] * halfBandWidth / (visCodeBitSamples - 2 * transitionSamples) + centerFreq;
if (visCodeBitFreqs[0] < 1150 || visCodeBitFreqs[0] > 1250 || visCodeBitFreqs[9] < 1150 || visCodeBitFreqs[9] > 1250) if (visCodeBitFreqs[0] < 1150 || visCodeBitFreqs[0] > 1250 || visCodeBitFreqs[9] < 1150 || visCodeBitFreqs[9] > 1250)
return false; return false;
for (int i = 1; i < 9; ++i) for (int i = 1; i < 9; ++i)