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−20log10(δ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≈ΔFD∞(δ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(log10δp)2+0.07114log10δp−0.4761)log10δs−(0.00266(log10δp)2+0.5941log10δ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(log10δp−log10δ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讲座:https://eeweb.engineering.nyu.edu/iselesni/EL713/remez/remez.pdf
- matlab函数(firpmord)说明:https://ww2.mathworks.cn/help/signal/ref/firpmord.html
- Python scipy库文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.remez.html
- 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.