Simple Bell 202 implementation

For discussing the 65xx hardware itself or electronics projects.
User avatar
AndersNielsen
Posts: 185
Joined: 26 Dec 2021
Contact:

Re: Simple Bell 202 implementation

Post by AndersNielsen »

BigEd wrote:
I'm quite intrigued by this challenge, and I think I do have an answer, which is of course entirely theoretical... but let me try to say a bit more.
Nice work! :D

So basically:

Start a counter.
Note static bit boundaries in counter time. We can precalculate those for T1
IRQ and note zero crossings.
Check if middle of each bit boundary belongs to a "1" or a "0" period.
Reset T1 every 8 bits.

TI has a pretty ok appnote about using the 4046 as an FSK modem. Sadly they note that the frequency should be 100-fold the bitrate.
User avatar
BigEd
Posts: 11463
Joined: 11 Dec 2008
Location: England
Contact:

Re: Simple Bell 202 implementation

Post by BigEd »

Thanks!

I'm sure my pedestrian working-out could be streamlined... I'm not sure if just a few timings in hand would be enough or if a buffer of say 8 edges might be needed.

I think there are two subproblems though - interpolating a transition between high and low to guess at the bitcell boundary on the one hand, and on the other hand sampling in the middle of bitcells.

BTW I found a page with some waveform diagrams
https://www.notblackmagic.com/bitsnpieces/afsk/
but I don't think it helps us here... everything I find expects us to be reading from an ADC at a reasonable oversampling rate and doing DSP work. Working from edge timings isn't covered...
User avatar
MichaelM
Posts: 761
Joined: 23 Apr 2012
Location: Huntsville, AL

Re: Simple Bell 202 implementation

Post by MichaelM »

I don’t have access to the document at the moment, but IIRC, Texas Instruments wrote a very detailed application note on implementation of a Bell 202 modem with one of their DSPs. It described all of the modules required in detail, especially clock recovery. Maybe such a recipe may help your efforts in this project.
Michael A.
User avatar
MichaelM
Posts: 761
Joined: 23 Apr 2012
Location: Huntsville, AL

Re: Simple Bell 202 implementation

Post by MichaelM »

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.
Michael A.
User avatar
AndersNielsen
Posts: 185
Joined: 26 Dec 2021
Contact:

Re: Simple Bell 202 implementation

Post by AndersNielsen »

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 :)
Post Reply