减少 iPad 加速度计中的噪声
Reducing Noise in iPad Accelerometer
我正在从 iPad 的加速度计收集一个方向的数据,结果噪音很大。我四处寻找降噪滤波器,但没有找到我理解的滤波器(例如,卡尔曼滤波器)。我想我有两个问题,是否存在与加速度计相关的实际显着噪声,如它所显示的那样,如果是,我该如何减少它?即使您有 link 噪声过滤器的解释,我也会非常感激。
我的应用程序本身是用 swift 编写的,我的数据分析是用 python 编写的,如果重要的话。
我使用了一些简单的缓动来消除值中的任何尖峰。它会增加一点延迟,但您可以通过调整 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
}
}
我正在从 iPad 的加速度计收集一个方向的数据,结果噪音很大。我四处寻找降噪滤波器,但没有找到我理解的滤波器(例如,卡尔曼滤波器)。我想我有两个问题,是否存在与加速度计相关的实际显着噪声,如它所显示的那样,如果是,我该如何减少它?即使您有 link 噪声过滤器的解释,我也会非常感激。
我的应用程序本身是用 swift 编写的,我的数据分析是用 python 编写的,如果重要的话。
我使用了一些简单的缓动来消除值中的任何尖峰。它会增加一点延迟,但您可以通过调整 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
}
}