如何将从先前算法中获得的多个数值添加到数组中,以便在MU python编辑器中进行微位计算?

问题描述

我是编程的新手,我正在构建一个超声波传感器来计算物体与微比特之间的距离。我已经编写了一些代码来在1秒内测量50次距离,但是由于每次测量都略有不同,因此我想使用以距离为元素的数组查找所有50次测量的平均值。如何将全部50个测量值添加到阵列中?这是我到目前为止编写的代码

from microbit import *
from machine import time_pulse_us
from utime import sleep_us

trig = pin2
echo = pin1

i = 0
while i <= 50:
    trig.write_digital(0)
    echo.read_digital()
    trig.write_digital(1)
    sleep_us(10)
    trig.write_digital(0)
    time = time_pulse_us(echo,1)
    distance = (time/2) / 29.1
    print(distance)
    sleep(20)
    i += 1

解决方法

ukBaz提供了良好而全面的answer。另一种方法是保持所有读数的总计。一旦获得50个读数,就将总数除以50。

只有50个样本,这种方法与ukBaz所展示的方法相比并没有真正的优势,在ukBaz中,样本在求平均值之前存储在列表中。如果您有大量样本,那么保持运行总计而不是使用列表可以节省RAM。 microbit v1没有太多的RAM。

请在下面找到一个代码片段来说明这个想法。

NUM_SAMPLES = 50
...
distance = 0
for i in range (NUM_SAMPLES):
    distance += fake_distance()
distance = distance / NUM_SAMPLES
顺便说一句,用于测量的信噪比通过采样数量的平方根得到了改善。因此,进行50次测量可使单次测量的信噪比提高约7倍。 ,

这个问题的简短答案是创建一个值列表,然后取这些值的平均值。 下面,我修改了您的示例以执行此操作。我创建了一个名为all_readings的空列表,然后将每个新的读数附加到该列表中。一旦我们获得了50个读数,就可以对列表中的所有值求平均值。

我对您的代码做了一些其他更改,希望对您有所帮助。

  1. 将代码从传感器读取值放入函数中,以帮助识别代码的哪些位在做什么
  2. 由于我的micro:bit上没有连接传感器,因此read_distance函数无法正常工作,因此我创建了一个名为fake_distance的新函数,因此可以测试{{1} }函数
  3. 创建了一个名为average_reading的函数来进行求平均值
  4. 使用了average_reading循环,以便读数将永远持续下去
  5. 创建了一个for循环,该循环将在对值求平均值之前读取传感器50次

使用传感器在micro:bit上运行它时,您可以删除该行:

while True

然后从该行上方的行中取消注释(删除 all_readings.append(fake_distance())

#

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...