iPhone中的低通滤波器

时间:2011-05-23 13:23:18

标签: objective-c ios filter filtering signal-processing

我的代码实现了低通滤波器,以便检测麦克风上的一击。 我无法理解如何确定频率并选择我自己的ALPHA:

lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;

这应该可以检测到麦克风受到的打击。

我想获得一个新的ALPHA来实现fc = 1 khz或更高的低通滤波器。

我如何选择其他ALPHA来做到这一点?

他们服用ALPHA = 0.05并且根据维基百科公式,他们的采样率为每秒30次,我的fc为1.2 Hz。

或者我应该采用44.1 kHz的采样率?我们以30 Hz的频率对信号进行采样。

2 个答案:

答案 0 :(得分:5)

这是一个简单的递归低通滤波器,仅用于平滑麦克风的测量(瞬时)功率。通常,您需要一个低截止频率,例如1 Hz,这样您就可以滤除所有噪声,并获得平滑的功率测量。增加截止频率(增加ALPHA)将使输出响应更快但会引入更多噪声。相反,降低截止频率(减少ALPHA)将使输出响应更慢,但也会减少噪声量。

请注意,如果您仅以30 Hz更新滤波器,则无法将截止频率设置为1 kHz。 Nyquist rate为15 Hz,因此您只能以低于此值的频率进行过滤。此外,如果您想要做的就是检测麦克风上的吹气,那么尝试以如此高的频率进行过滤是没有意义的。

答案 1 :(得分:0)

This page可能会给出一个更清晰的公式版本,其中包含选择alpha的代码:

void lowPassFrequency(double* input, double* output, int points)
{
    double RC = 1.0/(CUTOFF*2*3.14); 
    double dt = 1.0/SAMPLE_RATE; 
    double alpha = dt/(RC+dt);
    output[0] = input[0]
    for(int i = 1; i < points; ++i)
    { 
        output[i] = output[i-1] + (alpha*(input[i] - output[i-1]));
    }
}    

请注意,它可以同时适用于所有采样点,而不是像原始问题那样随时间推移。