- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
仍在 BigNerdRanch iOS 开发书籍中。
在加速度计一章中,他们首先实现了加速度计跟踪,但它相当不稳定。然后他们建议通过更改原始代码对其应用低通滤波器:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
[hv setXShift:10.0 * [acceleration x]];
[hv setYShift:10.0 * [acceleration y]];
[hv setNeedsDisplay];
}
为此:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
float xShift = [hv xShift] * 0.8 + [accel x] * 2.0;
float yShift = [hv yShift] * 0.8 + [accel y] * 2.0;
[hv setXShift:xShift];
[hv setYShift:yShift];
[hv setNeedsDisplay];
}
非常简单的问题:他们从哪里获得这些值?我一直在浏览文档,发现了一些关于低通滤波器的内容,建议使用以下代码:
#define kFilteringFactor 0.1
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to keep only the gravity component of each axis.
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));
// Use the acceleration data.
}
但是,我首先尝试使用该代码,但出现错误(通过分析我的应用程序),提示“'*' 的左值是垃圾值”。我的加速度计跟踪也不起作用。
我对这些值的含义相当困惑。例如,在代码的第一部分中,为什么要将加速度值乘以 10?为了获得“更大”的运动?我可以从中理解一些意义,但第二个带有低通滤波器的代码对我来说完全没有意义。
最佳答案
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
这段代码中发生了什么,您将此时的加速度乘以过滤因子 0.1,然后将其添加到上次调用更新时过滤后的加速度 0.9。
这几乎是获取新值并将其添加为总 accelX 的 10%,其他 90% 由先前的值组成,这取决于之前的值,这取决于之前的值等等.这会删除高频值,因为只允许 10% 的任何更改传递到新的 accelX 值。
0.1 的 KFilteringFactor 使该滤波器滤除所有高频。您一定会想要通过更改此值来进行试验以适合您的特定应用。
关于iphone - 加速度计低通滤波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942626/
我正在执行以下操作:执行 FFT/削减 FFT 结果中高于 100Hz 的每个频率/执行逆 FFT 如果原始数据集没有偏移量,它效果很好!如果它有偏移,则输出结果幅度会被损坏。 示例: Without
我从这里得到了 Bw BP C 代码,https://www-users.cs.york.ac.uk/~fisher/mkfilter ,正如其他操作系统主题中所评论的那样,并进行了 250Hz,第
我想使用窗口函数制作一个 FIR 滤波器。我有一些样本数据,size 变量是样本数。 windowSize 变量是窗口函数的大小。首先我创建窗口函数(blackman 窗口):变量 window然后我
我是一名优秀的程序员,十分优秀!