如何根据采样率和单极低通滤波器 alpha 系数计算截止频率?

how do I calculate cutoff frequency from sampling rate and single pole lowpass filter alpha coefficient?

我一直在使用一些代码对每 100 微秒 采样的音频信号数据实施低通滤波器(编辑:我最初错误地输入了 nano)(又名 10Khz)和然后从原始信号中减去该低通数据以产生高通信号。如果我没记错的话,这段代码是 here.

中描述的单极点低通滤波器的实现

我的问题是我如何计算这段代码给我的截止频率?

编辑:添加了 valueLowpassed

的声明
void hw_timer_sample_fn(void) {

  // init this to typical bias level from op amp
  static float valueLowpassed = 555.0f;

  // read a sample from the Analog to Digital Converter (ADC)
  uint16_t adcValue = system_adc_read();

  // single pole, low-pass filter -- what is FREQUENCY?
  valueLowpassed = valueLowpassed + (adcValue - valueLowpassed) / 64.0f;

  // remove lowpassed from original signal
  const float valueHighpassed = adcValue - valueLowpassed;

  // etc. etc. 
}

我有一种模糊的感觉,如果我增加 64.0f,这会使滤波器变得不那么剧烈,但它的效果会更加缓慢和稳定——这是降低还是提高截止频率?我减少了这个数字,它比原始信号更活跃 'correction'。

  • 在文章中,过滤器的代码是 y += alpha * (x - y),因此您使用的 alpha 为 1.0/64.0 = 0.015625。
  • 在文章中,当 deltaT 小于 tau 时,alpha 的方程式是 alpha = 1 - exp(-deltaT/tau) 或近似为 alpha ~= deltaT/tau。当 deltaT 小于 alpha.
  • 时,求解 tau 给出 tau = -deltaT/log(1 - alpha) 或大约 tau ~= deltaT/alpha
  • 对于以 10 kHz 采样的信号,deltaT = 0.0001
  • 文章中,tau是“截止频率”的倒数。这是文章中的错误术语,因为 3dB 降频实际上是 1/(2*pi*tau)。但是使用文章的定义,截止频率是1/tau ~= alpha/deltaT = 0.015625/0.0001 = 156.25 Hz。 3dB 下降频率是 1/(2*pi) 的一个因子,在 24.868 Hz。
  • 请注意 deltaT 确实比 alpha 小,因此近似值应该很好。使用更复杂的公式,您将得到 1/tau = -log(1-alpha)/deltaT = -log(1-0.015625)/0.0001 = 157.48357 Hz,并且 3dB 下降频率将为 25.064 Hz。
  • 增加 常量 64 会降低 alpha,从而增加 tau,从而 降低 截止频率。所以低通滤波器会过滤掉更多的信号,而高通滤波器会让更多的信号通过。