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,阻带衰减
注意,上述几个值不是独立得,任意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
。
参考文献
- remez讲座:
- matlab函数(firpmord)说明:
- Python scipy库文档:
- 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.