I have implemented a simple V.23-like FSK modem in C here.

The peculiarity of the chosen modulation is such that 0's and 1's are sent as tones of two different frequencies (2100 Hz and 1300 Hz respectively) and the duration of each symbol is 1/1200th of a second, which is between one and two full periods of the symbol tone frequency.

The band-pass filter that I used in the receiver is from about 875 Hz to about 2350 Hz. This range was determined empirically.

The question is, how do you calculate this frequency range for a signal like that from the tone frequencies and symbol duration?

EDIT: A similarity with amplitude modulation has been suggested, where the modulated signal falls into the band from Fcarrier - Message Bandwidth to Fcarrier + Message Bandwidth Hz.

If I try to apply this logic directly to my case, then I should expect the bandwidth of my FSK signal to be the union of:

F1 - bit rate to F1 + bit rate
F0 - bit rate to F0 + bit rate

Or, if I plug in the numbers, the union of:

1300-1200=100 to 1300+1200=2500
2100-1200=900 to 2100+1200=3300

Or, simply, from 100 to 3300 Hz.

If I look at the spectrum of my FSK signal, however, it looks like it's roughly contained in the band from 2100-1200=900 to 1300+1200=2500 Hz instead of from 1300-1200=100 to 2100+1200=3300 Hz. Can this empirical result be explained and proven?

EDIT2: Here's the spectrum as I'm seeing it in Audacity:

enter image description here

  • $\begingroup$ -1 The calculation of the spectrum of a frequency-modulated signal has been well-studied: searching for "FSK spectrum" on Google throws up over 700,000 hits, many tutorial in nature. As even the beginning sentences of most of the hits on the first page say, the calculation requires quite a bit of work. The final answer depends a lot on details that you do not provide in your description, such as, is the FSK signal continuous-phase, what is the transfer function of the bandpass filter, etc. Yes, someone could read your C code and figure out the details, but why should we bother? $\endgroup$ Jul 4, 2012 at 12:23
  • 1
    $\begingroup$ @DilipSarwate You could ask, if you're interested. And if you are, the phase is continuous. The filter is FIR, 1 for the frequencies in the pass band, 0 elsewhere. The reason why I'm asking is because this is a special case and there's probably a relatively simple logic leading to the answer, not requiring to understand the general case and then specialize it. Could you provide a relevant link other than just pointing at Google? I can see a lot of related stuff there too. $\endgroup$ Jul 4, 2012 at 12:39
  • $\begingroup$ You have an FIR filter that gives you a brick-wall frequency response, passing all frequencies between 875 Hz and 2350 Hz with unit gain and blocking all other frequencies? Run as quickly as you can to the nearest Patent Office and file your patent application! $\endgroup$ Jul 4, 2012 at 12:44
  • $\begingroup$ @DilipSarwate You're not being constructive. Pedantic, sure. $\endgroup$ Jul 4, 2012 at 12:52
  • $\begingroup$ If I get your question right, you'd like to determine the signal bandwidth before the bandpass filter anyway. Otherwise the answer simply is "825 Hz to about 2350 Hz" $\endgroup$
    – Deve
    Jul 4, 2012 at 12:57

2 Answers 2


With Frequency Shift Keying, the modulation (digital data) takes up bandwidth, so you can't just keep only the frequencies of the mark and space tones. A firm lower bound on how little bandwidth you can use is the distance between the mark and space frequencies, plus half the baud rate on either side. So for 1200 baud with frequencies of 1300 hertz and 2100 hertz, the absolute minimum bandwidth is (1300-(1200/2)) [700 hertz] to (2100+(1200/2)) [2700 hertz] which is a bandwidth of 2 kHz. People have tried to filter it tighter but if the reception still provides the correct data, it is only because of chance. Usually there is also some pulse shaping in the FSK signal before modulation to make the filter's job easier.


You design and use bandpass filter to filterout noise and unwanted signal out of band. Since your signal has two components: 1300 Hz and 2100 Hz, your bandpass filter has to pass these frequencies. However since your actual signal has some side lobes, you can not practically generate signal that has only these two frequency components, then you need some gaurd band on both sides of these frequencies. It ooks the gaurd band you have chosen in non symmetric, you could choose a filter with pass band frequency of 1000 Hz to 2400 Hz for example.

  • $\begingroup$ Seems to me the real question would be what filter would produce the minimum bandwidth while still allowing the demodulator to properly discriminate between the two frequencies. That would depend in part on the demodulator. $\endgroup$ Jul 4, 2012 at 18:57
  • $\begingroup$ I know I need to include more frequencies than just 1300 and 2100. The question is how I calculate which based on 3 values: 1300 Hz, 2100 Hz, 1200 bits/second. Your answer isn't answering it. $\endgroup$ Jul 4, 2012 at 21:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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