The robots use inductive coupling for short-range wireless communications. Each robot has 4 small (3mm x 2mm) coils, one on ecah face. They are mounted flush with the face, so that when two robots properly mate on a face, the coils are always within a couple mm of each other. Recall that we are using a simple 8-bit microcontroller with 1K of RAM, maximum analog-to-digital sampling rate of 10khz, and total clock rate of 8Mhz. There is no digital-to-analog circuitry at all. So I doubt that it is possible to transmit or receive AM or FM since the coil's resonant frequency is higher than the A/D sample rate, and there is no way to generate sine waves anyway. Also there is not enough computing power for much FFT. So instead we realized that we had very little data to send, so we could do it very slowly. We simply send electromagnetic pulses by turning on and off the comm coil. Each time the coil is turned on or off, it generates a short EM pulse train at its natural frequency. Any nearby coil is magnetically coupled, and generates corresponding pulses at its output. We just look for those pulses using the A/D on the microcontroller. Since the pulse frequency is higher than the A/D sample rate, we can't count on seeing every pulse. So we send a lot of pulses and do a lot of looking. It works. The Biggest Hack Ever! Once there are a bunch of these robots all bouncing around on the air table, the environment gets pretty chaotic. We kept adding layers of error-detection and correction in the software, and eventually got the comms reliabilty up to perhaps 1 error per hour for 50 randomly colliding units. After all this, the data transfer rate between two robots is 2 bytes every 2 seconds. That's Bytes, not kilo-bytes. Maximum, assuming no data collisions or errors. Each coil is used for both sending and receiving data, so there sometimes is a collision requiring retransmit. Sending data takes about 200ms and is done randomly within a 2000ms window, with retransmit on collision.