在Android应用程序中实现低通滤波器 - 如何确定alpha的值?

时间:2012-11-06 02:14:40

标签: java android filter signal-processing android-sensors

实现低通滤波器的算法如下(来自维基百科):

for i from 1 to n
   y[i] := y[i-1] + α * (x[i] - y[i-1])

,其中

α = T/(tau + T)

T,是周期,换句话说,是接收数据的时间间隔。而且,tau是时间常数,定义为:

tau = RC.

好的,一切都很清楚。每个人似乎都为α提出了不同的价值观,但它打败了我 - 如何才能达到这个价值的逻辑决策?

当然,R和C的值无法使用 - 或者是它?

有人知道如何确定α的值,以及α的值吗?

感谢所有人!

4 个答案:

答案 0 :(得分:1)

T:抽样期。

tau:时间常数。

fc:滤波器的截止频率。 fc = 1 / tau

然后

alpha = T /(T + 1 / fc)

最好的问候!

答案 1 :(得分:0)

使用低通滤波器计算罗盘传感器数据的平滑参数(ALPHA)时遇到了同样的问题。

我已经想通了,计算出的ALPHA值对我的应用程序有效。

有关更多理解和讨论,请参阅以下文章

How to calculate the value of the smoothing parameter for lowpass filter (in case of smoothing of compass sensor data)

答案 2 :(得分:-1)

对于不同的低通滤波器,您可能需要考虑RBJ双二阶:

http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

此处详细描述了其实施:

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

答案 3 :(得分:-1)

wikipedia's RC time constant entry截止频率 - 时间常数与截止频率fc有关,这是RC电路的另一个参数

tau = 1 / (2π * f)

为什么2π?来自wikipedia's time constant entry

ω = 2π * f is the frequency in radians per second.

same entry开始,Tau相当于RC,是系统的上升时间。低上升时间意味着较高频率的输入不会激励系统。然后它很容易成像,它连接到低通滤波器的截止频率。最终它控制了多少反馈信号与新输入信号的混合。

在我的二阶低通滤波器中,我将以下内容用于alpha。

α = 1 / (T * tau)

在我的音频应用程序中,二阶滤波器是两个单链滤波器链接,我像这样计算滤波器输出。 filter1Outfilter2out是过滤器的当前值,这是收到input后的更新。

filter1Out = filter1Out + (alpha * (input - filter1Out));
filter2Out = filter2Out + (alpha * (filter1Out - filter2Out));

要确定您希望截止频率与Android指南针的关系,我首先不会实施任何过滤并尝试使用提供的数据。截止点实际上取决于您对信号的处理方式。你在屏幕动画上平滑它吗?你是否在进行路径追踪?您要拒绝的信号中是否有噪音?每个人都需要一个不同的设置。如果未经过滤的信号变化太频繁,那么就要弄清楚您希望它改变的频率,并将其作为滤波器截止点的起点。

我希望这会有所帮助。 DSP数学的推导超出了我的技能,但我已经为音频应用实现了几次低通滤波器。