allow choice of wave forms

This commit is contained in:
Lewis Moten
2024-05-06 23:47:45 -04:00
parent 047902cb1f
commit 027035c97b
2 changed files with 16 additions and 6 deletions

View File

@@ -59,6 +59,12 @@
</div>
<div>
<h2>Configuration</h2>
Wave Form: <select id="wave-form" value="sine">
<option value="sine">Sine Wave</option>
<option value="square">Square Wave</option>
<option value="sawtooth">Sawtooth Wave</option>
<option value="triangle">Triangle Wave</option>
</select><br>
Segment Duration: <input id="bit-duration-text" type="number" min="0" max="1000" value="190">ms<br>
Amplitude Threshold: <input id="amplitude-threshold-text" type="number" min="0" max="100" value="75"><br>
Minimum Frequency: <input id="minimum-frequency" type="number" min="20" max="20000" value="900"><br>

View File

@@ -20,8 +20,8 @@ var MAX_BITS_DISPLAYED_ON_GRAPH = 79;
var SEGMENT_DURATION = 30;
var AMPLITUDE_THRESHOLD_PERCENT = .75;
var AMPLITUDE_THRESHOLD = 160;
var MINIMUM_FREQUENCY = 80;
var MAXIMUM_FREQUENCY = 18017;
var MINIMUM_FREQUENCY = 400;
var MAXIMUM_FREQUENCY = 14650;
var LAST_SEGMENT_PERCENT = 0.6;
var FFT_SIZE_POWER = 9;
var FREQUENCY_RESOLUTION_MULTIPLIER = 2;
@@ -29,6 +29,7 @@ let CHANNEL_FREQUENCY_RESOLUTION_PADDING = 2;
var SMOOTHING_TIME_CONSTANT = 0;
var HAMMING_ERROR_CORRECTION = true;
let PERIODIC_INTERLEAVING = true;
let WAVE_FORM = "triangle";
const ERROR_CORRECTION_BLOCK_SIZE = 7;
let CHANNEL_OVER = -1;
@@ -75,7 +76,10 @@ function handleWindowLoad() {
receivedChannelGraph.addEventListener('mouseout', handleReceivedChannelGraphMouseout);
receivedChannelGraph.addEventListener('mousemove', handleReceivedChannelGraphMousemove);
receivedChannelGraph.addEventListener('click', handleReceivedChannelGraphClick);
document.getElementById('wave-form').value = WAVE_FORM;
document.getElementById('wave-form').addEventListener('change', (event) => {
WAVE_FORM = event.target.value;
})
document.getElementById('pause-after-end').checked = PAUSE_AFTER_END;
document.getElementById('error-correction-hamming').checked = HAMMING_ERROR_CORRECTION;
document.getElementById('error-correction-hamming').addEventListener('change', event => {
@@ -447,7 +451,7 @@ function sendBits(bits) {
var oscillator = audioContext.createOscillator();
oscillator.connect(destination);
oscillator.type = 'sawtooth';
oscillator.type = WAVE_FORM;
oscillators.push(oscillator);
}
@@ -706,10 +710,10 @@ if((sampleDuration / SEGMENT_DURATION) < LAST_SEGMENT_PERCENT) return;
const correctEncodedBits = packetReceivedBits.filter((b, i) => i < encodedBitCount && b === EXPECTED_ENCODED_BITS[i]).length;
const correctedDecodedBits = packetDecodedBits.filter((b, i) => i < decodedBitCount && b === EXPECTED_BITS[i]).length;
document.getElementById('received-data-error-percent').innerText = (
Math.floor((1 - (correctEncodedBits / encodedBitCount)) * 1000) * 0.1
Math.floor((1 - (correctEncodedBits / packetReceivedBits.length)) * 1000) * 0.1
).toLocaleString();
document.getElementById('decoded-data-error-percent').innerText = (
Math.floor((1 - (correctedDecodedBits / decodedBitCount)) * 1000) * 0.1
Math.floor((1 - (correctedDecodedBits / packetDecodedBits.length)) * 1000) * 0.1
).toLocaleString();
document.getElementById('decoded-text').innerHTML = packetDecodedBits.reduce(textExpectorReducer(EXPECTED_TEXT), '');
}