目录

Python数字信号处理之最佳等波纹滤波器阶数估计原理

Python数字信号处理之最佳等波纹滤波器阶数估计原理

Matlab中的阶数估计函数

在MATLAB中,使用 firpmord 函数可以估算等波纹FIR滤波器的最小阶数。该方法基于Parks-McClellan算法,通过通带和阻带的频率边界、幅度响应及允许的最大误差来自动计算参数。

rp = 3;           % Passband ripple in dB 
rs = 40;          % Stopband ripple in dB
fs = 2000;        % Sampling frequency
f = [500 600];    % Cutoff frequencies
a = [1 0];        % Desired amplitudes
dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; 
[n,fo,ao,w] = firpmord(f,a,dev,fs);
b = firpm(n,fo,ao,w);
freqz(b,1,1024,fs)
title('Lowpass Filter Designed to Specifications')
  • 输入参数f (频率边界), a (幅度), dev (误差), fs (采样频率,可选)
  • 输出参数n (估算的阶数), fo (归一化频率边界), ao (幅度响应), w (加权系数)

阶数估计公式

对于给定的通带波纹大小xdB,阻带衰减

https://i-blog.csdnimg.cn/direct/073f8d070cec4f1aa8dcbcb31266ae93.png

注意,上述几个值不是独立得,任意4个值就能确定5个。用于预测所需滤波器长度的公式清楚地表明了这一点。Kaiser开发了以下近似关系来估计满足规范的滤波器长度:

N ≈ − 20 log ⁡ 10 ( δ p δ s ) − 13 14.6 Δ F + 1 N \approx \frac{-20\log_{10}(\sqrt{\delta_p\delta_s})-13}{14.6\Delta F}+1

N

14.6Δ

F

20

lo g

10

(

δ

p

δ

s

)

13

1

其中

Δ F

( ω s − ω p ) / ( 2 π ) \begin{aligned}\Delta F = (\omega_s - \omega_p) / (2\pi)\end{aligned}

Δ

F

=

(

ω

s

ω

p

)

/

(

2

π

)

,即过渡带带宽。Herrmann等人[3]给出了一个更准确的公式

N ≈ D ∞ ( δ p , δ s ) − f ( δ p , δ s ) ( Δ F ) 2 Δ F + 1 N \approx \frac{D_{\infty}(\delta_p, \delta_s) - f(\delta_p, \delta_s)(\Delta F)^2}{\Delta F} + 1

N

Δ

F

D

(

δ

p

,

δ

s

)

f

(

δ

p

,

δ

s

)

(

Δ

F

)

2

1

其中:

D ∞ ( δ p , δ s )

( 0.005309 ( log ⁡ 10 δ p ) 2 + 0.07114 log ⁡ 10 δ p − 0.4761 ) log ⁡ 10 δ s − ( 0.00266 ( log ⁡ 10 δ p ) 2 + 0.5941 log ⁡ 10 δ p + 0.4278 ) , \begin{aligned}\D_{\infty}(\delta_p, \delta_s) &= (0.005309 (\log_{10} \delta_p)^2 + 0.07114 \log_{10} \delta_p - 0.4761) \log_{10} \delta_s \\&- (0.00266 (\log_{10} \delta_p)^2 + 0.5941 \log_{10} \delta_p + 0.4278),\\end{aligned}

D

(

δ

p

,

δ

s

)

=

(

0.005309

(

lo g

10

δ

p

)

2

0.07114

lo g

10

δ

p

0.4761

)

lo g

10

δ

s

(

0.00266

(

lo g

10

δ

p

)

2

0.5941

lo g

10

δ

p

0.4278

)

,

f ( δ p , δ s )

11.01217 + 0.51244 ( log ⁡ 10 δ p − log ⁡ 10 δ s ) f(\delta_{p},\delta_{s})=11.01217+0.51244(\log_{10}\delta_{p}-\log_{10}\delta_{s})

f

(

δ

p

,

δ

s

)

=

11.01217

0.51244

(

lo g

10

δ

p

lo g

10

δ

s

)

这些公式假设δs<δp。否则,必须交换δp和δs。该公式在信号处理工具箱中的Matlab函数中实现。

请注意,上述估计公式都表明 滤波器长度N和过渡宽度∆F成反比 (对于(16),当

Δ F \Delta F

Δ

F 变为0时)。这与最大平坦对称滤波器(maximally flat symmetric filters)的对应关系形成鲜明对比。对于具有固定δp和δs的等波纹滤波器,∆F减小为1/N;而 对于最大平坦滤波器,∆F减小为

1 / N 1/\sqrt{N}

1/

N

参考文献

  1. remez讲座:
  2. matlab函数(firpmord)说明:
  3. Python scipy库文档:
  4. O. Herrmann, L. R. Rabiner, and D. S. K. Chan. Practical design rules for optimum finite impulse response lowpass digital filters. The Bell System Technical Journal, 52:769–799, 1973.