ASK modulation python code | ASK python script

This page covers ASK modulation python code. ASK python script plots ASK modulated waveform and binary data waveform as output.

Introduction: ASK stands for Amplitude Shift Keying. This is the digital modulation scheme in which binary 1 and binary 0 are represented by different amplitude levels. It is also called as ON-OFF keying when binary 1 is represented by presence of carrier signal and binary 0 is represented by absence of carrier. The figure-1 depicts the same and same is implemented in ASK python script. Random binary data is generated using Binarygen.py python script.

ASK or OOK modulation

ASK modulation can be represented by following equation:
sig(t) = A* sin(2*π*fc*t) for Binary Logic-1
sig(t) = 0 for Binary Logic-0

Binary data generator Python script | Binarygen.py

Following python script can be used to generate random binary data. This is used as baseband data in ASK modulation.

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

ASK Python script

Following ASK python script can be used to generate ASK modulated waveform for random binary data given as input.

# This python script generates ASK 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 waveform configuration parameters
Fs = 1000 # Samples per second
fc = 25 # Carrier frequency 100 Hz, 100 cycles/sec
T = 1 # Total simulation time in seconds
t = np.arange(0, T, 1/Fs)
x =np.sin(2*pi*fc*t)
Td = 0.1 # Bit duration
Nsamples = int(Td*Fs) # Samples in one bit duration
Nsym = int(np.floor(np.size(t)/Nsamples))
# Python code to generate binary stream of data
sig = binary(Nsym, Nsamples)
# ASK waveform generation
Xask = x * sig
# Binary waveform and ASK waveform Plots
figure, axis = plt.subplots(2)
axis[0].plot(t,sig)
axis[0].set_title("Binary digital data")
axis[1].plot(t, Xask)
axis[1].set_title("ASK modulated signal")
plt.tight_layout()
plt.show()

Output plots of ASK modulation python code

Following are the output plots (Binary input data and ASK modulated waveform) of above ASK modulation python script.

ASK modulation python plots

Other useful DSP codes in Python

Useful Links to MATLAB codes

RF and Wireless tutorials