【问题标题】:Low pass filter in iPhoneiPhone中的低通滤波器
【发布时间】:2011-08-31 03:59:33
【问题描述】:

我的代码实现了一个低通滤波器,以检测对麦克风的打击。 我不明白如何确定频率并选择我自己的 ALPHA:

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

这应该会检测到麦克风受到打击。

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

我如何选择另一个 ALPHA 来做到这一点?

他们采用 ALPHA=0.05,根据 Wikipedia 公式,以每秒 30 次的采样率,我得到了 1.2 Hz 的 fc。

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

【问题讨论】:

  • 我不知道我必须接受答案!我现在才提到.. :)

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答,我不想检测到打击。最终目标是通过 SUB 在 2 个低通滤波器之间检测某个频率,得到一个带通滤波器。这对你来说似乎是逻辑???他们如何仅以 30hz 采样?他们需要检测低于 400hz 吗?这是链接:mobileorchard.com/…
  • 好的 - 那么你真的应该重新考虑你的方法 - 使用 FFT 来获得功率谱,然后检查箱中感兴趣的频率范围 - 已经有很多关于 SO 的帖子介绍如何做到这一点。
  • FFT 很棒,但我找不到这么简单的东西。 aurioTouch 没那么简单。你能指导我到一个帖子,我可以拿我的代码并用它实现一个 fft 吗???谢谢。
  • 看看 KissFFT - 它与实用的 FFT 一样简单。 sourceforge.net/projects/kissfft
  • @Rant:你真的读过 KissFFT 发行版中的README 文件吗?首先向您展示如何在两行代码中实现 FFT。
【解决方案2】:

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]));
    }
}    

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

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 2014-07-29
    • 2012-04-08
    • 2015-01-22
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多