当前位置: 首页 > 面试题库 >

以高精度恒定速率循环进行信号采样

缑修齐
2023-03-14
问题内容

我正在尝试在Python中以10Khz采样信号。尝试运行此代码(1KHz)时没有问题:

import sched, time

i = 0
def f(): # sampling function
    s.enter(0.001, 1, f, ())
    global i
    i += 1
    if i == 1000:
        i = 0
        print "one second"

s = sched.scheduler(time.time, time.sleep)

s.enter(0.001, 1, f, ())
s.run()

当我尝试减少时间时,它开始超过一秒(在我的计算机中,在10e-6时为1.66s)。是否可以在Python中以特定频率运行采样函数


问题答案:

您没有考虑代码的开销。每次迭代,此错误加起来并歪曲“时钟”。

我建议改为使用一个循环time.sleep()),并计算从下一个_参考_ 时刻开始的睡眠时间,这样就不会出现不可避免的错误:

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

请注意,由于其他进程必须不时地抢占您的操作系统,因此OS调度将不允许您达到超过特定水平的精度。在这种情况下,您需要为多媒体应用程序使用某些特定于OS的功能,或者制定一种不需要这种准确性级别的解决方案(例如,使用专用应用程序对信号进行采样并使用其保存的输出)。



 类似资料:
  • 我正在尝试用JavaFX创建一个Snake克隆。游戏的一个要求是要有一种能量食物,它可以提高蛇的速度。 对于我的游戏循环,我使用带有单个的,它充当游戏刻度。每个游戏对象都渲染到上。 蛇在21x21的网格中移动,每个细胞的长度为40像素。在我的实现中,蛇每滴答移动一个细胞(通过设计)。每个身体部分本质上是在当前方向上移动40像素。这意味着蛇的速度由游戏的滴答持续时间固定。 为了增加蛇的速度,我必须改

  • 问题内容: 我有一个简单的BASH命令,看起来像 运行此命令时,输出会输出到终端,而数据文件(out.dat)不会输出任何内容 我希望标准输出能够像直接执行命令那样重定向到out.dat 问题答案: 删除分号。 建议 同样按照Fredrik Pihl的建议,在不需要二进制二进制文件时,或者至少在实际上不使用它们时,请尽量不要使用它们: 另外,请注意可能导致路径名扩展的输出。 将显示文件而不只是文字

  • 我想从MU、MG、PU、PG中取样70次而不替换,以创建一个矩阵(ncol=4,nrow=70),例如。 到目前为止,我有:矩阵(样本(c(“MU”,“MG”,“PU”,“PG”),70*4,F),nrow=70,byrow=TRUE),这是不正确的,因为行可能有不止一个MU,MG,PU,PG的实例。我可以用for循环或更简单的方法来完成吗?

  • 我正在分析一个在200Hz采样6-8秒的信号,重要的部分是尖峰,最大持续1秒。比如地震... 我必须将信号的采样率降低2倍。我试过: 我得到了相同的结果与这两个函数:信号被重新采样,但尖峰,积极和消极的,是减少。 我搞错了函数,或者我必须通过一个定制的FIR滤波器?

  • 我有一个神经网络,它对3个输出进行分类。我的数据集非常小,我有340张火车图像和60张测试图像。我构建了一个模型,当我编译时,我的结果是: 纪元97/100 306/306 [==============================] - 46s 151ms/阶跃损失: 0.2453-精度: 0.8824-val_loss: 0.3557-val_accuracy: 0.8922纪元98/10

  • 我想在数据库中得到一些电子邮件,每个电子邮件都有一个状态。所有可能的状态都是一个表中的stock,在该表中它们都有权限(如show、edit、delete等)。那些电子邮件不是用户通过一个站点的权限,而是一个用户添加的电子邮件列表。 下面是表的结构: 电子邮件表 状态表 谢谢