mirror of
https://github.com/xdsopl/robot36.git
synced 2026-01-07 08:49:56 +01:00
adjust alpha for second order
This commit is contained in:
parent
1f221aa79a
commit
c0cfc62636
|
|
@ -18,8 +18,15 @@ public class ExponentialMovingAverage {
|
|||
return prev = prev * (1 - alpha) + alpha * input;
|
||||
}
|
||||
|
||||
public void reset(float alpha) {
|
||||
public void alpha(float alpha) {
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
public void alpha(float alpha, int order) {
|
||||
alpha((float) Math.pow(alpha, 1.0 / order));
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
prev = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,10 +58,11 @@ public class PaulDon implements Mode {
|
|||
public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples, float frequencyOffset) {
|
||||
if (prevPulseIndex + beginSamples < 0 || prevPulseIndex + endSamples > scanLineBuffer.length)
|
||||
return 0;
|
||||
lowPassFilter.reset(evenBuffer.length / (float) channelSamples);
|
||||
lowPassFilter.alpha(evenBuffer.length / (float) channelSamples, 2);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + beginSamples; i < prevPulseIndex + endSamples; ++i)
|
||||
scanLineBuffer[i] = lowPassFilter.avg(scanLineBuffer[i]);
|
||||
lowPassFilter.reset(evenBuffer.length / (float) channelSamples);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + endSamples - 1; i >= prevPulseIndex + beginSamples; --i)
|
||||
scanLineBuffer[i] = freqToLevel(lowPassFilter.avg(scanLineBuffer[i]), frequencyOffset);
|
||||
for (int i = 0; i < evenBuffer.length; ++i) {
|
||||
|
|
|
|||
|
|
@ -51,10 +51,11 @@ public class RGBDecoder implements Mode {
|
|||
public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples, float frequencyOffset) {
|
||||
if (prevPulseIndex + beginSamples < 0 || prevPulseIndex + endSamples > scanLineBuffer.length)
|
||||
return 0;
|
||||
lowPassFilter.reset(evenBuffer.length / (float) greenSamples);
|
||||
lowPassFilter.alpha(evenBuffer.length / (float) greenSamples, 2);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + beginSamples; i < prevPulseIndex + endSamples; ++i)
|
||||
scanLineBuffer[i] = lowPassFilter.avg(scanLineBuffer[i]);
|
||||
lowPassFilter.reset(evenBuffer.length / (float) greenSamples);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + endSamples - 1; i >= prevPulseIndex + beginSamples; --i)
|
||||
scanLineBuffer[i] = freqToLevel(lowPassFilter.avg(scanLineBuffer[i]), frequencyOffset);
|
||||
for (int i = 0; i < evenBuffer.length; ++i) {
|
||||
|
|
|
|||
|
|
@ -31,10 +31,11 @@ public class RawDecoder implements Mode {
|
|||
public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples, float frequencyOffset) {
|
||||
if (prevPulseIndex < 0 || prevPulseIndex + scanLineSamples > scanLineBuffer.length)
|
||||
return 0;
|
||||
lowPassFilter.reset(evenBuffer.length / (float) scanLineSamples);
|
||||
lowPassFilter.alpha(evenBuffer.length / (float) scanLineSamples, 2);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex; i < prevPulseIndex + scanLineSamples; ++i)
|
||||
scanLineBuffer[i] = lowPassFilter.avg(scanLineBuffer[i]);
|
||||
lowPassFilter.reset(evenBuffer.length / (float) scanLineSamples);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + scanLineSamples - 1; i >= prevPulseIndex; --i)
|
||||
scanLineBuffer[i] = freqToLevel(lowPassFilter.avg(scanLineBuffer[i]), frequencyOffset);
|
||||
for (int i = 0; i < evenBuffer.length; ++i) {
|
||||
|
|
|
|||
|
|
@ -67,10 +67,11 @@ public class Robot_36_Color implements Mode {
|
|||
separator += scanLineBuffer[prevPulseIndex + separatorBeginSamples + i];
|
||||
separator /= separatorSamples;
|
||||
boolean even = separator < 0;
|
||||
lowPassFilter.reset(evenBuffer.length / (float) luminanceSamples);
|
||||
lowPassFilter.alpha(evenBuffer.length / (float) luminanceSamples, 2);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + beginSamples; i < prevPulseIndex + endSamples; ++i)
|
||||
scanLineBuffer[i] = lowPassFilter.avg(scanLineBuffer[i]);
|
||||
lowPassFilter.reset(evenBuffer.length / (float) luminanceSamples);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + endSamples - 1; i >= prevPulseIndex + beginSamples; --i)
|
||||
scanLineBuffer[i] = freqToLevel(lowPassFilter.avg(scanLineBuffer[i]), frequencyOffset);
|
||||
for (int i = 0; i < evenBuffer.length; ++i) {
|
||||
|
|
|
|||
|
|
@ -61,10 +61,11 @@ public class Robot_72_Color implements Mode {
|
|||
public int decodeScanLine(int[] evenBuffer, int[] oddBuffer, float[] scanLineBuffer, int prevPulseIndex, int scanLineSamples, float frequencyOffset) {
|
||||
if (prevPulseIndex + beginSamples < 0 || prevPulseIndex + endSamples > scanLineBuffer.length)
|
||||
return 0;
|
||||
lowPassFilter.reset(evenBuffer.length / (float) luminanceSamples);
|
||||
lowPassFilter.alpha(evenBuffer.length / (float) luminanceSamples, 2);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + beginSamples; i < prevPulseIndex + endSamples; ++i)
|
||||
scanLineBuffer[i] = lowPassFilter.avg(scanLineBuffer[i]);
|
||||
lowPassFilter.reset(evenBuffer.length / (float) luminanceSamples);
|
||||
lowPassFilter.reset();
|
||||
for (int i = prevPulseIndex + endSamples - 1; i >= prevPulseIndex + beginSamples; --i)
|
||||
scanLineBuffer[i] = freqToLevel(lowPassFilter.avg(scanLineBuffer[i]), frequencyOffset);
|
||||
for (int i = 0; i < evenBuffer.length; ++i) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue