主要内容

firpmord

帕克斯-麦克莱伦最优 FIR 滤波器阶数估计

说明

[n,fo,ao,w] = firpmord(f,a,dev) 返回满足输入设定 fadev 的阶数估计值 n、归一化频带边缘 fo、频带振幅 ao 和权重 w

[___] = firpmord(___,fs) 指定采样率 fsfs 默认为 2 Hz,意味着奈奎斯特频率为 1 Hz。

示例

c = firpmord(___,"cell") 返回元胞数组 c,其元素是 firpm 的参数。

示例

示例

全部折叠

设计最小阶低通滤波器,其通带截止频率为 500 Hz,阻带截止频率为 600 Hz。指定采样率为 2000 Hz。要求阻带衰减至少为 40 dB,通带波纹小于 3 dB。

rp = 3;           % Passband ripple in dB 
rs = 40;          % Stopband ripple in dB
fs = 2000;        % Sample rate
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")

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (kHz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Lowpass Filter Designed to Specifications, xlabel Frequency (kHz), ylabel Magnitude (dB) contains an object of type line.

该滤波器未能满足阻带衰减和通带波纹设定,但相差不远。在对 firpm 的调用中使用 n+1(而不是 n)可以实现所需的振幅特性。

设计一个低通滤波器,其通带截止频率为 1500 Hz,阻带截止频率为 2000 Hz。指定采样率为 8000 Hz。要求最大阻带振幅为 0.1,最大通带误差(波纹)为 0.01。

[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.01 0.1],8000);
b = firpm(n,fo,ao,w);

通过让 firpmord 生成元胞数组来获得等效结果。可视化该滤波器的频率响应。

c = firpmord([1500 2000],[1 0],[0.01 0.1],8000,"cell");
B = firpm(c{:});
freqz(B,1,1024,8000)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Frequency (kHz), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Frequency (kHz), ylabel Magnitude (dB) contains an object of type line.

输入参数

全部折叠

频带边缘,指定为具有偶数个元素的实数值向量。参量必须在 [0, Fs/2] 范围内,其中 Fs 为奈奎斯特频率。向量中的元素数始终是 2 的倍数。各频率必须按递增顺序排列。

f 中包含的点处的期望振幅,指定为向量。fa 必须满足条件 length(f) = 2length(a) – 2

允许的最大偏差,指定为与 a 大小相同的向量,其元素在区间 (0, 1) 内。

此参量指定每个频带的期望振幅与估计的帕克斯-麦克莱伦最优 FIR 滤波器的振幅响应之间的最大偏差或波纹。

采样率,指定为实数标量。

输出参量

全部折叠

滤波器阶数估计值,以非负整数形式返回。

归一化频率点,指定为实数值向量。参量必须在 [0, 1] 范围内,其中 1 对应于奈奎斯特频率。向量中的元素数始终是 2 的倍数。各频率必须按递增顺序排列。

振幅响应,以实数值向量形式返回。

用于调整每个频带拟合情况的权重,指定为实数值向量。w 的长度是 fa 长度的一半,因此每个频带恰好有一个权重。

FIR 滤波器参数,以元胞数组形式返回。

算法

firpmord 函数使用在 [1] 中提出的算法。对于接近 0 或奈奎斯特频率 fs/2 的频带边缘,此函数会产生不准确的结果。

注意

  • 在某些情况下,firpmord 会低估或高估阶数 n。如果滤波器不能满足设定,请尝试更高的阶数,例如 n+1n+2

  • 在某些情况下,算法对滤波器阶数的估计值为负值。如果发生这种情况,函数以 0 形式返回 n

参考

[1] Rabiner, Lawrence R., and Otto Herrmann. “The Predictability of Certain Optimum Finite-Impulse-Response Digital Filters.” IEEE® Transactions on Circuit Theory. Vol. 20, Number 4, 1973, pp. 401–408.

[2] Rabiner, Lawrence R., and Bernard Gold. Theory and Application of Digital Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1975, pp. 156–157.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出