
我有一个一维加速度计信号(仅一个轴)。我想创建一个强大的算法,它能够识别信号中的某些形状。
首先,我对原始信号应用移动平均滤波器。在附图中,原始信号为红色,平均信号为黑色。从图中可以看出,从平均(黑色)信号中可以看到一些趋势 - 该信号包含 10 次类似峰值模式的重复,其中加速度攀升至最大值,然后又下降。我用十字标记了这些模式的开始和结束。
所以我的目标是自动找到标记的位置。导致模式提取困难的问题是:
我尝试过不同的方法,这些方法几乎都是自制的,所以我不会提及它们 - 我不想让你因为我的思维方式而产生偏见。是否有一些标准或书本方法来进行这种模式提取?或者也许有人知道如何以稳健的方式解决这个问题?
任何想法将不胜感激。
我正在使用这个设备(http://www.sparkfun.com/products/10724),并且基于这个http://www.sparkfun.com/products/10724的磁力计、加速度计和陀螺仪数据的融合,成功地实现了相当好的工作方向估计。 x-io.co.uk/node/8#open_source_imu_and_ahrs_algorithms实现。现在我想计算动态加速度(测量没有静态重力加速度的加速度)。为此,我想到了以下想法。
计算原始加速度计数据的运行平均值。如果原始加速度稳定一段时间(运行平均值与当前测量的原始数据之间的微小差异),我们假设设备没有移动,并且我们正在测量原始重力。现在将重力矢量和当前方向保存为四元数。这种方法假设我们的设备在没有重力的情况下无法持续加速。
为了计算没有重力的加速度,我现在正在进行以下四元数计算:
RA = Quaternion with current x,y,z raw acceleration values
GA = Quaternion with x,y,z raw acceleration values of estimated gravity
CO = Quaternion of current orientation
GO = saved gravity orientation
DQ = GO^-1 * CO // difference of orientation between last gravity estimation and current orientation
DQ = DQ^-1 // get the inverse of the difference
SQ = DQ * GA * DQ^1 // rotate gravity vector
DA = RA - …Run Code Online (Sandbox Code Playgroud) 当提到加速度计算法时,低通滤波器和高通滤波器与声音工程(音频处理)时的低通滤波器和高通滤波器本质上是否相同?
在声音工程中,高通滤波器会滤除与低音相关的低频,而低通滤波器会滤除与高音相关的高频。
我想了解这些滤波器在应用于加速度计数据时是什么以及它们是如何使用的,并且想知道是否与声音物理学有相似之处。这都是物理学,对吧?
如果它们以某种方式联系起来,可能会让我比从头开始学习更快地理解如何测量加速度计运动。
谢谢
我成功检测到手机绕轴的 0-360 度旋转(滚动),但现在我很难设计一种有效的算法来检测一整圈。我的工作但我认为不像我想要的那样优雅和有效的算法是:
private boolean detectRoll;
private boolean[] checkpointsR = new boolean[4];
private boolean fullRollTurn;
public void detectingRoll() {
setDetectRoll(true);
checkpointsR[0] = true;
for (int i = 1; i < 4; i++) {
if (roll > 90 * i && roll < 90 * (i + 1)
&& checkpointsR[i - 1] == true) {
checkpointsR[i] = true;
}
}
if (areAllTrue(checkpointsR) && roll > 0 && roll < 45) {
fullRollTurn = true;
// reset rollCheckpoints
for (int i = …Run Code Online (Sandbox Code Playgroud) 是否有任何使用加速度计和陀螺仪传感器数据计算线性距离的方法,因为加速度的二重积分似乎会产生很多漂移。
注意:使用相机/GPS 的图像处理技术似乎对电池消耗很大。
我知道这是一个非常开放的问题,但有谁知道如何确定用户是否乘坐公共交通工具?理想情况下,我应该运行一个后台服务,以便只有乘坐公共交通工具的订阅者才能收到我的警报。
我的平板电脑中有一个加速度计,我可以从 javascript 中读取它。
我如何在Python中访问这些数据?是否有一些 ctypes 技巧可以用来调用 Windows 8 传感器 API 函数?
我正在使用 iBeacons 构建一个基于室内位置的应用程序,但是我使用了很多 iPhone 传感器来获得准确的运动表示(速度、方向等)。我目前一直在使用 CoreMotion 计步器及其计步属性。我有一段代码,可以简单地计算步数并将其打印在标签中,我注意到设备需要大约 10 步才能记录我的动作,然后每三步或四步更新一次标签。“步行”状态下的这些更新很好,但我很想知道是否可以加快初始响应和从静止到步行的转换,而不是从 10 减少到 5,这是可以接受的。这是计算步数的代码:
if(CMPedometer.isStepCountingAvailable()){
self.pedoMeter.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) { (data : CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还将更新间隔增加到最大
manager.deviceMotionUpdateInterval = 0
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的课程
let activityManager = CMMotionActivityManager()
let manager = CMMotionManager()
let pedoMeter = …Run Code Online (Sandbox Code Playgroud) accelerometer ios core-motion indoor-positioning-system swift
我正在尝试使用 Android 设备上的加速度计计算位移 ( Sensor.TYPE_LINEAR_ACCELERATION)。这是我的OnSensorChanged()方法:
public void onSensorChanged(SensorEvent event) {
accelX = event.values[0];
accelY = event.values[1];
accelZ = event.values[2];
long currentTime = System.currentTimeMillis() / 1000;
if(prevTime == 0) prevTime = currentTime;
long interval = currentTime - prevTime;
prevTime = currentTime;
velX += accelX * interval;
velY += accelY * interval;
velZ += accelZ * interval;
distX += prevVelX + velX * interval;
distY += prevVelY + velY * interval;
distZ += prevVelZ + velZ * interval;
prevAccelX …Run Code Online (Sandbox Code Playgroud) 我正在使用 STM32L476RG 板和 HAL SPI 功能:
HAL_SPI_Transmit(&hspi2, &ReadAddr, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi2, pBuffer, 4, HAL_MAX_DELAY);
Run Code Online (Sandbox Code Playgroud)
我需要以最大速度从加速度计的缓冲区接收数据,但这些功能存在延迟问题。正如您在示波器屏幕截图中看到的那样,有几微秒没有任何反应。我不知道如何最小化传输间隙。
我尝试使用 HAL_SPI_Receive_DMA 函数,这个延迟更大。您知道如何使用 HAL 函数或有关如何在没有这些延迟的情况下编写 SPI 函数的任何指针来解决此问题吗?