如何根据采样率和单极低通滤波器 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,从而 降低 截止频率。所以低通滤波器会过滤掉更多的信号,而高通滤波器会让更多的信号通过。
我一直在使用一些代码对每 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 给出 - 对于以 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,从而 降低 截止频率。所以低通滤波器会过滤掉更多的信号,而高通滤波器会让更多的信号通过。
tau = -deltaT/log(1 - alpha)
或大约 tau ~= deltaT/alpha