MichaelM wrote:
Never mind. The application note that I was thinking applied to the Bell 202 modem instead applies to the Bell 212A/V.22 modem. It is a good backgrounder on the elements / modules needed for a modem, but the modulation scheme is Differential Phase Shift Keying (DPSK), and not the Frequency Shift Keying (FSK) used by the Bell 202 modem.
If interested, the application note can be found in the
TI/Components/TMS320xx section of bitsavers.org in
Chapter 9 of the 1990_TI_DSP_Applications_Vol_2 book.
The following chapter describes the implementation for an FSK split-band modem, i.e., a Bell 103 modem. The information provided in that chapter may be applicable to your efforts.
Thanks for the tip! 103 is certainly not far off - I think they tried to make it a thing on the HF bands downunder for APRS. I need think I need a better understanding of a few things to pull this off and that will certainly help - I feel a bit "early" on the dunning kruger scale... Which I guess might mean I'm not? XD
In other news I actually got it to work.. Ish.. Very -ish.. Basically what I did was to take advantage of the perfect sample from wiki and check where it went wrong. That gave me rules like, "if it's the second crossing for the bit and the first crossing matched 2200Hz but it looks more like a 1200Hz pulse we can assume it's a 2200Hz pulse followed by a 1200Hz pulse == finish the 2200Hz bit and also add the 1200Hz bit" ...
Rules like that actually made me end up with a decoded APRS packet, but it feels a bit silly - if tolerances are that tight, it's never going to work in real life.
I tried recording a few packets, threw them into Audacity and tried with filtering them a bit. Considering I'm counting the time between zero crossings there really isn't room for a lot of noise and 2 meter VHF has plenty of that. Even with good amount of luck and a 20dB SNR it doesn't really seem possible.
Looking at the waveforms I can see that they do consist of 1200 and 2200Hz waves - but variations in amplitude makes the zero crossing counting method useless. No matter how sharp I make the filters I don't think I'll see nice clean sine waves.
Looking at a Gnuradio implementation isn't much help when trying to do this with retro hardware... But that's a different kind of fun