Liam
Liam

Reputation: 11

I am trying to sample at 100hz instead of just as quick as the program will run. How would I do that?

I have a program in which I am just printing to a csv and I want exactly 100 sample points every second but I have no clue where to start with this or how to do it!!! Please help!

from datetime import datetime
import pandas as pd


i = 0
data = []

filename = 'Data.csv'
hz = 0
count = 0
while True:
    #start = process_time()
    if i == 0:
        Emptydf = pd.DataFrame([], columns = ['COUNT', 'TIME'])
        (Emptydf).to_csv('Data.csv', index = False)

    curr_time = datetime.now()
    str_milli = curr_time.strftime("%f")[:2]
    milliseconds = int(str_milli)
    timestamp = curr_time.strftime("%H:%M:%S.%f")
    datarow = {'Count': i, 'TIME' : timestamp}

    #diff = curr_time -  past time of 0.01 milli seconds

    #if diff >= 0.01:
        data.append(datarow)



    #time.sleep(.006)
    if i%10 == 0:
        dataframe = pd.DataFrame(data)
        (dataframe).to_csv('Data.csv', mode = 'a', header = False, index = False)


    #print(dataframe)

    data.clear()

i += 1

Upvotes: 1

Views: 312

Answers (2)

Roland Smith
Roland Smith

Reputation: 43533

Basically, what you do is the following;

import time

cycletime = 0.01  # seconds

while True:
    start = time.monotonic()
    # << Do whatever you need to do here. >>
    delta = time.monotonic() - start
    if delta < cycletime:  # Did we finish in time?
        time.sleep(cycletime - delta)  # Sleep the rest of the time.
    else:
        print('WARNING: cycle too long!')

Note that for such applications time.monotonic is preferred over time.time because the latter can decrease when the system clock is changed.

Upvotes: 0

NPE
NPE

Reputation: 500883

Here is an example that increments a counter 100 times per second:

import time

FREQ_HZ = 100.

count = 0
start_time = time.time()
try:
  while True:
    count += 1
    time.sleep(count / FREQ_HZ - (time.time() - start_time))
except:
  print("%.2f iter/second\n" % (count / (time.time() - start_time)))

To test, let it run for a bit and then hit ^C.

Upvotes: 1

Related Questions