Looping at a constant rate with high precision for signal sampling

前端 未结 1 1745
醉梦人生
醉梦人生 2020-12-04 03:11

I am trying to sample a signal at 10Khz in Python. There is no problem when try to run this code(at 1KHz):

import sched, time

i = 0
def f(): # sampling func         


        
相关标签:
1条回答
  • 2020-12-04 03:40

    You didn't account for the code's overhead. Each iteration, this error adds up and skews the "clock".

    I'd suggest to use a loop with time.sleep() instead (see comments to https://stackoverflow.com/a/14813874/648265) and count the time to sleep from the next reference moment so the inevitable error doesn't add up:

    period=0.001
    t=time.time()
    while True:
        t+=period
        <...>
        time.sleep(max(0,t-time.time()))     #max is needed in Windows due to
                                             #sleep's behaviour with negative argument
    

    Note that the OS scheduling will not allow you to reach precisions beyond a certain level since other processes have to preempt yours from time to time. In this case, you'll need to use some OS-specific facilities for multimedia applications or work out a solution that doesn't need this level of accuracy (e.g. sample the signal with a specialized app and work with its saved output).

    0 讨论(0)
提交回复
热议问题