Plot square wave

Discussion in 'Python' started by Yigit Turgut, Jan 18, 2012.

1. Yigit TurgutGuest

Hi all,

I am trying to generate a pseudo pwm signal, low-high transition will
take place when screen goes from black to white and high-low
transition when white to black. As a result I am trying to plot the
signal. Here is my code;

import time, pylab, numpy, scipy, pygame

def _func1():
global end
global white
global k
global t
global i
k = numpy.arange(4)
t = numpy.arange(4)
i = 0
f = open("test.txt", "w")
white = True
start = time.time()
end = time.time() - start
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
timer = pygame.time.Clock()
test = repr(time.time())
while(end<8.00):
end = time.time() - start
if white:
screen.fill((255, 255, 255))
time.sleep(1)
k = 0
t = end
f.write(str(t) + "\t" + str(k) + "\n")
i = i + 1
print repr(end)

else:
screen.fill((0, 0, 0))
time.sleep(1)
k = 1
t = end
f.write(str(t) + "\t" + str(k) + "\n")
i = i+ 1
print repr(end)

white = not white
pygame.display.update()
pygame.quit()

if __name__ == "__main__":
_func1()
print k
print t
print i
pylab.plot(time,data)
pylab.show()

Problem is I get a sawtooth instead of a square wave. I know that I
need to define points between 0,1,2 time integer values to achieve
this. But I hope there is a python trick that will yield this
time,data plot to a square wave?

Yigit Turgut, Jan 18, 2012

2. Peter OttenGuest

Yigit Turgut wrote:

> Problem is I get a sawtooth instead of a square wave. I know that I
> need to define points between 0,1,2 time integer values to achieve
> this. But I hope there is a python trick that will yield this
> time,data plot to a square wave?

There is no "Python trick", pylab is showing the data you provide. To get a
square wave you need two y values per x value, for example

import pylab

time = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
data = [0, 1, 1, 0, 0, 1, 1, 0, 0, 1]
pylab.plot(time, data)
pylab.ylim(-.1, 1.1) # so you see the horizontal lines of the graph
pylab.xlim(-.1, 4.1)
pylab.show()