Android开发人员示例:
public void onSensorChanged(SensorEvent event)
{
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}阿尔法= 0.8,算出的是哪种数值?我想问一下t和dT的具体值。
发布于 2016-02-04 11:25:37
为了回答你的问题,我必须深入到低通滤波器,因为alpha几乎是我们得到的最后一个值。
低通滤波器通常按以下顺序生成:
τ = 1/(2 * π * fc)∆t = t2 - t1alpha的功能是或多或少地重视一个值。要工作,过滤器需要一个0到1之间的α。在这种情况下,以前的输出(重力)权重为新输出的80%,新输入(event.values)权重为20% => new gravity = 80% old gravity + 20% acceleration。
∆t是通过传感器的实现给出的。通常对SENSOR_DELAY_NORMAL来说是0.2s。
τ是根据α= 0.8和∆t = 0.2s计算的。
从τ中提取α将提供:
τ = (∆t * α) / (1 - α)使用前面的值,您会发现
τ = 0.2 * 0.8 / (1 - 0.8) = 0.8使用τ,您可以计算fc:
fc = 1 / (2 * π * τ) = 1/( 2 * 3.14 * 0.8) = 0.2Hz.发布于 2022-07-14 10:26:45
@小米
您的答案是:平滑因子α,在本例中是αα=τ/(τ+∆t)
但我是从维基百科获得的:低通滤波器
// Return RC low-pass filter output samples, given input samples,
// time interval dt, and time constant RC
function lowpass(real[0..n] x, real dt, real RC)
var real[0..n] y
var real α := dt / (RC + dt)
y[0] := α * x[0]
for i from 1 to n
y[i] := α * x[i] + (1-α) * y[i-1]
return yvar实 := dt / (RC + dt).不符合你的说法,我想知道哪一个是对的
https://stackoverflow.com/questions/35190839
复制相似问题