4
\$\begingroup\$

Im working on a Visible light communication project. Its a simplex transmitter receiver setup using an LED to send data to a photodiode receiver. Im thinking of ways to encode the data for transmission and was wondering how exactly i would implement a Frequency Modulation setup. I know the basic concept of FM but dont understand how the receiver perceives these shifts in frequency(wouldnt it take a few cycles of high/low to even calculate frequency, and if so wouldnt this be a limit to max bitrate). Ill be using an arduino board to interpret the received signal. How would I go about using FM to send data from an LED to a receiver and decodw that information?

\$\endgroup\$
  • 1
    \$\begingroup\$ Analog FM receivers (as FM radios) use PLLs : The VCO control voltage is the demodulated signal. For simple digital FM (as "FSK"), you measure with a timer the delay between times where the signal crosses zero (using a comparator with small hysteresis). \$\endgroup\$ – TEMLIB Oct 9 '16 at 13:10
  • \$\begingroup\$ Why use fm to transmit the data? \$\endgroup\$ – Andy aka Oct 9 '16 at 13:45
  • 1
    \$\begingroup\$ As long as the requirements are not to high a carrier on/off system would be enough. If you want the carrier to remain on you could use FSK or frequency shift keying. In that case you only shift the VCO between two frequencies. \$\endgroup\$ – Decapod Oct 9 '16 at 15:11
3
\$\begingroup\$

There are several ways to detect FM.

Today, this is generally done with a PLL (phase-locked loop). It's a voltage-controlled oscillator in a feedback loop. Via feedback, the voltage into the voltage-controlled oscillator is adjusted so that its output matches the input signal. This control voltage is the FM-demodulated signal.

In past days, other techniques were used, like ratio detectors. If the carrier is slow enough, you can use digital techniques to outright measure the time between zero crossings, or the number of zero crossings in a particular interval. Think of a low-pass and high-pass filter adjusted so that they both attenuate the carrier frequency equally. Any change in the carrier frequency will cause a relative difference in the amplitudes. There are more methods. Look up "FM demodulation".

\$\endgroup\$
  • \$\begingroup\$ I grew up in the old days when detectors based on the Foster Seely principle were widely used. Now that is all over no more discrete components. Tried to send this to Olin but @ does not work. \$\endgroup\$ – Decapod Oct 9 '16 at 13:38
3
\$\begingroup\$

You seem to wish for a high bit rate, using a low carrier frequency, when you suggest that few cycles should encode each bit. One extreme form of FM (or frequency-shift-keying FSK) is Manchester encoding (see its wiki page). In this encoding scheme, one could say that one of two frequencies are possible:

  • a string of "1's" encode to one cycle of the "carrier" per bit
  • a string of "0's" encode to one cycle of the "carrier" per bit
  • a string of alternating "010101..." encode to one-half cycle per bit.

This modulation scheme can also be described as a form of phase-shift-keying. It can be decoded by looking for and locking to a bit-transition (both positive and negative bit transitions should be equally lockable). At the beginning of a transmission, a string of "01010101..." is sent, allowing the receiver to find and lock onto those edges. A phase-locked loop is helpful to clean up noisy edges. A phase-locked loop also provides edge memory, where it anticipates the time span to the next lockable edge. It is possible to use your Arduino's timer function to implement an appropriate software locking loop, provided your serial bit rate is not too high (too involved to describe here).
Noise that can be interpreted as a bit transition will seriously disrupt decoding, so this method should not be used to extract a weak signal from noise. In this case, having many carrier cycles spanning each transmitted bit allows filtering to reduce errors caused by noise. Now you're into more classic "FM" or "PM".

\$\endgroup\$
  • \$\begingroup\$ Thanks so much, this helped alot and has me thinking of more ideas! \$\endgroup\$ – Winter Oct 10 '16 at 14:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.