Skip to content
Advertisement

Using only numpy, is there a way to create a square wave?

I have tried using masks and making lists like x = [0,0.5,0.51,1,1.01], y = [1,1,-1,-1,1] works ofcourse, but is quite tedious and not as nice as i want to make a square wave from x = 0 to 5.

Advertisement

Answer

You could write a little function like this to populate x and y

import matplotlib.pyplot as plt
import math

def SquareWave(high, low, start, end, width):
    print("Square Wave")
    ##Calculate how many cycles
    ncycles = int(math.ceil((end - start)/width)) #Round up
    print(ncycles)
    x=[]
    y=[]
    x.append(start)
    y.append(high)
    xstep = width / 2 
    for n in range(ncycles):
        start += xstep #Increment by the step width
        x.append(start)
        y.append(high)
        x.append(start)
        y.append(low)
        start += xstep #Increment by the step width
        x.append(start)
        y.append(low)
        x.append(start)
        y.append(high)
    return(x,y)
        
        

x,y = SquareWave(1,-1, 0, 5, 1)

plt.plot(x,y)

Output

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement