Introduction
Frequency Shift Keying is a digital modulation scheme in which digital data (in the form of binary 0s and 1s) is represented by carrier frequencies.
Binary 1 is represented by frequency f1 and binary 0 is represented by frequency f2.
In the Python FSK script, f1 = 45 Hz while f2 =30 Hz.
- Binary FSK can be represented by following equation:
- s(t) = A* sin(2*π*f1*t) for Binary 1, f1 = 45 Hz in python code below
- s(t) = A* sin(2*π*f2*t) for Binary 0, f2 = 30 Hz in python code below
Python Script – Binary Data Generator
def binary(sym, sym_len):
import numpy as np
rand_n = np.random.rand(sym)
rand_n[np.where(rand_n >= 0.5)] = 1
rand_n[np.where(rand_n <= 0.5)] = 0
sig = np.zeros(int(sym*sym_len))
# generating symbols
id1 = np.where(rand_n == 1)
for i in id1[0]:
temp = int(i*sym_len)
sig[temp:temp+sym_len] = 1
return sig
FSK Python Script
# This python script generates FSK modulated waveforms
# Library files
import matplotlib.pyplot as plt
import numpy as np
from Binarygen import binary
from math import pi
plt.close('all')
# Carrier wave and binary signal configuration parameters
Fs = 1000 # Samples per second
fc = 30 # Carrier frequency 30 Hz, 30 cycles/sec
T = 1 # Total simulation time in seconds, 1sec
t = np.arange(0, T, 1/Fs)
Td = 0.1 # Bit duration
Nsamples = int(Td*Fs) # Samples in one bit duration
Nsym = int(np.floor(np.size(t)/Nsamples))
# Binary waveform generation
sig = binary(Nsym,Nsamples)
# FSK waveform generation
f = fc + fc*sig/2
Xfsk = np.sin(2*pi*f*t)
# Binary waveform and FSK modulation waveform Plots
figure, axis = plt.subplots(2)
axis[0].plot(t, sig)
axis[0].set_title("Binary digital data")
axis[1].plot(t, Xfsk, 'r')
axis[1].set_title("FSK modulated signal")
plt.tight_layout()
plt.show()
Output Plot