Hey everyone,
Testing acoustic payloads (USBL beacons, acoustic releases, wireless sensors) in a concrete tank or near a harbor wall is notoriously frustrating. Waves bounce off the walls, arrive out of phase, and carve out silent frequency nulls right where your carrier sits. Standard MFSK drops the packet, and you’re left guessing whether it’s a hardware bug or just pool physics.
I got tired of this and built an approach around harmonic dual-tier redundancy: pairing base tones with synchronized upper-octave duplicates so when a reflection wipes out the low note, the backup still gets through.
Rather than just claiming it works, I put together an interactive test bench so you can stress-test the math and try to break it:
What I was aiming for:
- Zero expensive hardware: Demodulation doesn’t need dedicated $2k DSP boards. The processing fits inside standard ARM Cortex-M4/M7 chips (<48 KB RAM, ~15% CPU load), so it can run right alongside normal flight/autopilot code.
- No babysitting the vehicle: It locks onto relative speeds up to ±2 m/s to compensate for Doppler without needing external gyro feeds.
- Resilience against standing waves: Survives -20 dB multipath notches where single-carrier links instantly collapse.
Real-world test (if you don’t trust web sliders):
Browser simulations only prove so much, so you can test this with actual hardware in your own tank:
- Hit Export WAV to download a clean 48 kHz acoustic packet.
- Play it through an underwater speaker or piezoceramic transducer in your pool.
- Record the signal with a hydrophone into a standard
.wavfile. - Upload that recording back via Import WAV.
The decoder will run completely blind against your raw recording to pull the payload and verify CRC integrity.
Throw your worst-case scenarios at it — extreme reverberation, close-wall reflections, or propeller wash. If you manage to desync or break the demodulator, post the audio file or failure case here.