New to signal processing, but I figured I’d give a basic BPSK decoder a shot. A window of six peaks/valleys to one bit seems to fit the signal well enough.
Going with start-lull/start-peak thresholds of about 1000/1200, at least for my 16-bit TASCAM recordings over line out.
Here’s what I have so far for a possible analog decoding of the factory default configuration. Of course, the digital backup format inside of the analog signal is still unknown.
Snippet:
00000000 66 66 66 66 66 66 66 66
00000008 66 66 66 66 66 66 66 66
00000016 66 66 66 66 66 66 66 66
00000024 66 66 66 66 66 66 66 66
00000032 66 66 66 66 66 66 66 66
00000040 66 66 66 66 66 66 66 66
00000048 66 66 66 66 66 66 66 66
00000056 66 66 66 66 66 66 66 66
00000064 66 66 66 66 66 66 66 66
00000072 66 66 66 66 66 66 66 66
00000080 66 66 66 66 66 66 66 66
00000088 66 66 66 66 66 66 66 66
00000096 66 66 66 66 66 66 66 66
00000104 66 66 66 66 66 66 66 66
00000112 66 66 66 66 66 66 66 66
00000120 66 66 66 66 66 66 66 66
00000128 66 66 66 66 66 66 66 66
00000136 66 66 66 66 66 66 66 66
00000144 66 66 66 66 66 66 66 66
00000152 66 66 66 66 66 66 66 66
00000160 66 66 66 66 66 66 66 66
00000168 66 66 66 66 66 66 66 66
00000176 66 66 66 66 66 66 66 66
00000184 66 66 66 66 66 66 66 66
00000192 66 66 66 66 66 66 66 66
00000200 66 66 66 66 66 66 66 66
00000208 66 66 66 66 66 66 66 66
00000216 66 66 66 66 66 66 66 66
00000224 66 66 66 66 66 66 66 66
00000232 66 66 66 66 66 66 66 66
00000240 66 66 66 66 66 66 66 66
00000248 66 66 66 66 9a 45 84 08
00000256 57 7d 16 b3 a3 df 56 b7
00000264 7c 13 f9 f5 b1 f0 25 49
00000272 ab b6 73 d7 a6 dd 76 98
00000280 ef b8 0b 10 55 a6 3c f9
00000288 f9 81 3b 68 dd 03 69 a9
00000296 f7 fe c8 28 d8 35 33 c6
00000304 f4 66 86 6c 51 65 1b e2
00000312 b2 01 c9 3f 96 3a 91 3a
...
0000112 ea 64 4c 2b 57 29 19 e8
00000120 ff 1b f4 d6 fd 8b 32 3d
00000128 1a 76 b8 e7 2b a6 94 53
00000136 83 6e fc d9 6b 28 64 42
00000144 34 8b fd 5f 20 3d 79 fb
00000152 42 b4 de 64 19 88 21 a9
00000160 40 54 22 54 99 e4 83 4c
00000168 e5 ee fe 5d 7c f9 55 55
00000176 55
I changed the active pattern from the first to the second and reran. The byte difference between these two backups is quite small:
--- /tmp/pattern-0-hex.txt 2020-05-02 22:23:54.000000000 -0500
+++ /tmp/pattern-1-hex.txt 2020-05-02 22:23:57.000000000 -0500
@@ -658,6 +658,6 @@
00000136 83 6e fc d9 6b 28 64 42
00000144 34 8b fd 5f 20 3d 79 fb
00000152 42 b4 de 64 19 88 21 a9
-00000160 40 54 22 54 99 e4 83 4c
-00000168 e5 ee fe 5d 7c f9 55 55
-00000176 55
+00000160 40 54 22 54 99 e4 7c cf
+00000168 42 62 73 bf 41 ac aa aa
+00000176 aa
That’s an eleven byte difference, not too shabby.
Am I correct in assuming that the active pattern is specified toward the end of the signal? Note that the final three bytes are repeated. Checksums? Seems promising!
All of this is under the assumption that Tonic uses a simple BPSK as opposed to a more gnarly QPSK, DPSK, etc. That would be even harder to crack. Maybe Thrift is encoding the configuration structs. Maybe protobuf. Maybe the bits are inverted. Who knows!