gpt4 book ai didi

algorithm - 过滤陀螺仪数据的自适应算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:37:58 25 4
gpt4 key购买 nike

是否有自适应算法过滤陀螺仪噪声?

我的应用程序目前有一个校准陀螺仪的启动对话框,它要求用户将手机放在 table 上 5 秒,并记录这 5 秒内收集的陀螺仪数据的最小值/最大值,然后应用程序丢弃所有值在该最小值/最大值之间,这在技术上是一个高通滤波器。

自适应算法会随时间自动确定这些最小/最大值,无需任何对话。

类似于存储最后 100 个值,并找到这些值的最小值/最大值,但我如何知道哪些值代表运动,哪些是零运动 + 噪声?

我研究过卡尔曼滤波器,但它适用于组合的陀螺仪 + 加速度计传感器。

我手机里的陀螺仪不仅有噪音,而且还偏移了零坐标,所以当手机完全静止时,陀螺仪报告不断的小旋转。

Gyroscope data graph

最佳答案

如果我理解正确,一个非常简单的启发式方法(例如找到数据的平均值和定义表示真实运动的阈值)应该既能对抗偏移零坐标,又能提供相当准确的峰值识别。

// Initialize starting mean and threshold
mean = 0
dataCount = 0
thresholdDelta = 0.1

def findPeaks(data) {
mean = updateMean(data)

for point in data {
if (point > mean + thresholdDelta) || (point < mean - thresholdDelta) {
peaks.append(point)
}
}
max = peaks.max()
min = peaks.min()

thresholdDelta = updateThreshold(max, min, mean)

return {max, min}
}

def updateThreshold(max, min) {
// 1 will make threshold equal the average peak value, 0 will make threshold equal mean
weight = 0.5

newThreshold = (weight * (max - min)) / 2
return newThreshold
}

def updateMean(data) {
newMean = (sum(data) + (dataCount * mean)) / (dataCount + data.size)
dataCount += data.size
return newMean
}

这里我们有一个阈值,意味着它会随着时间的推移而更新,以变得更准确地呈现数据。

如果您的峰值变化非常大(比如您的最大峰值可以是最小峰值的四倍),您需要相应地设置您的阈值权重(对于我们的示例,0.25 将只是捕获最小的理论上你的峰值。)

编辑:

我认为做一些事情,比如平均你的阈值可能会使它更能抵抗小峰的衰减。

thresholdCount = 0

def updateThreshold(max, min) {
// 1 will make threshold equal the average peak value, 0 will make threshold equal mean
weight = 0.5

newThreshold = (weight * (max - min)) / 2
averagedThreshold = (newThreshold + (thresholdCount * thresholdDelta)) / (thresholdCount + 1)
return averagedThreshold
}

关于algorithm - 过滤陀螺仪数据的自适应算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33553355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com