# FSK Modulation/ demodulation

Started by May 30, 2005
```Hi

I have to communicate with telephone which is sending us data that is
in voice band and FSK
modulated. I dont have an fsk modem so i am trying to do FSK
demodulation in software. I'll record that data in a wave file and then
analyise it. i dont have any signal processing background and i am

according to the standard:
Mark is represented by 1300Hz, space is represented by 2100Hz and baud
rate is 1200.

using tapi I are sampling the signal at 8000 samples per second, PCM
format.

It means that we have 8000/1200 = 6.66 samples to check for mark or
space

now 1300/1200 = 1.08 and 2100/1200 = 1.72

means that I have to check those 6.66 samples for 1.08 cycles or 1.72
cycles.
if the number of cycles is 1.08 it means it was a mark and if 1.72 it
means it was a space

how to do this ?
it wont be quite much of a problem if it were 6 samples to check for 1
cycle or 6 samples to check for 2 cycles. The decimal values create the
actual confusion.

For Generating Signal:
I can generate samples for signal with 1300Hz frequency with 8000
samples per second like this

F1 = 1300
For  I = 0 to 1, step 1/8000
s(i) = cos (2 * pi * F1 * I );

this generates 8000 samples for 1300Hz frequency, i.e tone 1
Samples for tone 0 can also be generated in the similar manner.
Now I want to generate signal with both tones. Let say alternating 1s
and 0s. and still I have to keep sample rate 8000. Means that I'll be
having 6.66 samples to represent one bit.

How could this be done ?

Somia.

```
```Somia wrote:
> Hi
>
> I have to communicate with telephone which is sending us data that is
> in voice band and FSK
> modulated. I dont have an fsk modem so i am trying to do FSK
> demodulation in software. I'll record that data in a wave file and then
> analyise it. i dont have any signal processing background and i am
>
> according to the standard:
> Mark is represented by 1300Hz, space is represented by 2100Hz and baud
> rate is 1200.
>
> using tapi I are sampling the signal at 8000 samples per second, PCM
> format.
>
> It means that we have 8000/1200 = 6.66 samples to check for mark or
> space
>
> now 1300/1200 = 1.08 and 2100/1200 = 1.72
>
> means that I have to check those 6.66 samples for 1.08 cycles or 1.72
> cycles.
> if the number of cycles is 1.08 it means it was a mark and if 1.72 it
> means it was a space
>
> how to do this ?
> it wont be quite much of a problem if it were 6 samples to check for 1
> cycle or 6 samples to check for 2 cycles. The decimal values create the
> actual confusion.
>
> For Generating Signal:
> I can generate samples for signal with 1300Hz frequency with 8000
> samples per second like this
>
> F1 = 1300
> For  I = 0 to 1, step 1/8000
> s(i) = cos (2 * pi * F1 * I );
>
> this generates 8000 samples for 1300Hz frequency, i.e tone 1
> Samples for tone 0 can also be generated in the similar manner.
> Now I want to generate signal with both tones. Let say alternating 1s
> and 0s. and still I have to keep sample rate 8000. Means that I'll be
> having 6.66 samples to represent one bit.
>
> How could this be done ?
>