What is Incremental Frequency Keying?

Incremental frequency keying (IFK) is a modulation scheme where the transmitted bits are represented by an increase or decrease in the frequency of the signal.

Example

For example, a bitstring 1010011 can be transmitted with IFK with a base frequency of 500 Hz and a shift of 50 Hz can be sent as follows.

  1. 550 Hz
  2. 500 Hz
  3. 550 Hz
  4. 500 Hz
  5. 450 Hz
  6. 500 Hz
  7. 550 Hz

Useful properties

IFK is useful because it is a self-clocking signal. Each transmitted bit causes a shift in the frequency, and can be detected easily.

Downsides

If there are long runs of 0’s or 1’s, the tone will deviate too much from the base frequency. To prevent this,

Example code

Implementation in C++

const auto DATA = "0101010111001101010100010101010100010111101000";

// Incremental frequency keying
auto freq = 900;

for (size_t i = 0; i < strlen(DATA); i++) {
    auto c = DATA[i];
    auto shift = 200;
    if (c == '0')
        shift = -shift;
    freq += shift;

    play_tone(freq);
}

References and related links