减少iPad加速度计中的噪音

时间:2015-07-07 23:50:00

标签: python ios swift accelerometer noise

我只从一个方向收集iPad加速度计的数据,而且噪音非常大。我已经四处寻找降噪滤波器,但还没找到我理解的滤波器(例如卡尔曼滤波器)。我想我有两个问题,是否存在与加速度计相关的实际显着噪音,如果出现的话,我该怎样才能减少它?即使您有一个带有解释的噪声滤波器链接,我也将非常感激。

我的应用程序本身是用swift编写的,如果重要的话,我的数据分析是用python编写的。

2 个答案:

答案 0 :(得分:5)

我使用了一些简单的缓动来平滑值中的任何尖峰。它会增加一些延迟,但您可以通过调整easing属性来确定延迟与平滑度的平衡以适合您的应用。

import UIKit
import CoreMotion

class MyViewController: UIViewController {

    var displayLink: CADisplayLink?
    let motionQueue = NSOperationQueue()

    var acceleration = CMAcceleration()

    var smoothAcceleration = CMAcceleration() {
        didSet {
            // Update whatever needs acceleration data
        }
    }

    var easing: Double = 10.0

    override func viewDidLoad() {
        super.viewDidLoad()

        self.displayLink = CADisplayLink(target: self, selector: "updateDisplay:" )
        self.displayLink?.addToRunLoop( NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode )

        var coreMotionManager = CMMotionManager()
        coreMotionManager.startAccelerometerUpdatesToQueue( self.motionQueue ) { (data: CMAccelerometerData!, error: NSError!) in
            self.acceleration = data.acceleration
        }
    }

    func updateDisplay( displayLink: CADisplayLink ) {
        var newAcceleration = self.smoothAcceleration
        newAcceleration.x += (self.acceleration.x - self.smoothAcceleration.x) / self.easing
        newAcceleration.y += (self.acceleration.y - self.smoothAcceleration.y) / self.easing
        newAcceleration.z += (self.acceleration.z - self.smoothAcceleration.z) / self.easing

        self.smoothAcceleration = newAcceleration
    }
}

答案 1 :(得分:2)

如果您不需要高精度,则可以使用简单的低通滤波器。例如,请参阅此文章:http://blog.thomnichols.org/2011/08/smoothing-sensor-data-with-a-low-pass-filter