2026a

# grpdelay


平均滤波器延迟(群延迟)

函数库: TySignalProcessing

# 语法

gd, w = grpdelay(b, a, n)
gd, w = grpdelay(sos, n)
gd, w = grpdelay(b, a, w)
gd, w = grpdelay(sos, w)
gd, w = grpdelay(___, "whole")
gd, f = grpdelay(___, n, fs)
gd, f = grpdelay(___, n, "whole", fs)

gd, w = grpdelay(b, a, win)
gd, w = grpdelay(sos, win)

gd, f = grpdelay(b, a, fin, fs)
gd, f = grpdelay(sos, fin, fs)

# 说明

gd, w = grpdelay(b, a, n) 返回传递函数系数存储在 b 和 a 中的数字滤波器的 n 点群延迟响应向量 gd 和相应的角频率向量 w。


gd, w = grpdelay(sos, n) 返回对应于二阶基本节矩阵 sos 的 n 点群延迟响应。


gd, w = grpdelay(___, "whole") 返回围绕整个单位圆的 n 个样本点处的群延迟。


gd, f = grpdelay(___, n, fs) 返回群延迟响应向量 gd 和相应的物理频率向量 f,用于数字滤波器,该滤波器旨在滤波以 fs 速率采样的信号。


gd, f = grpdelay(___, n, "whole", fs) 返回范围在 0 和 fs 之间的 n 个点的频率向量。

# 示例

巴特沃斯滤波器的群延迟

设计一个具有归一化 3 dB 频率 0.2π rad/sample的 6 阶巴特沃斯滤波器。使用 grpdelay 显示群延迟。

using TySignalProcessing
using TyPlot
using TyMath
z, p, k = butter(6, 0.2, "lowpass", otype = "zpk")
sos = zp2sos(z, p, k; g_flag = false)
grpdelay(sos, 128, plotfig = true)
hold("on")

绘制以分贝表示的幅度响应。

gd, = grpdelay(sos,512)
h,w = freqz(sos,512)
pd = -unwrap(angle.(h))./w[:]
figure()
plot(w/pi,gd,w/pi,pd)
grid("on")
xlabel("Normalized Frequency (×Π rad/sample)")
ylabel("Group and phase delays")
legend(["Group delay","Phase delay"])
hold("off")
巴特沃斯数字滤波器的群延迟响应

使用 fdesign_lowpass 设计一个 6 阶巴特沃斯滤波器,其归一化 3 dB 频率为 0.2π rad/sample。 显示其群延迟响应。

using TySignalProcessing
using TyDSPSystem

D = fdesign_lowpass("N,F3db", 6, 0.2)
d = design(D, "butter", "SystemObject", true)
include(pkgdir(TySignalProcessing) * "/examples/Resource/embedsos_scale_values.jl")
d.SOSMatrix = embedsos_scale_values(d.SOSMatrix, d.ScaleValues)
grpdelay(d.SOSMatrix; plotfig=true)

# 输入参数

b,a - 传递函数系数
向量

传递函数系数,指定为向量。 用 b 和 a 表示传递函数为:

示例: b = [1 3 3 1]/6 和 a = [3 0 1 0]/3 指定具有归一化 3 dB 频率 0.5π rad/sample 的 3 阶巴特沃斯滤波器。

数据类型: Float

n - 评估点数
512(默认) | 正整数标量

评估点数,指定为不小于 2 的正整数标量。当 n 不存在时,默认为 512。为获得最佳结果,请将 n 设置为大于滤波器阶数的值。

数据类型: Int

win,fin - 频率向量
向量

评估滤波器在输入的频率向量中的群延迟。

sos - 二阶基本节系数
矩阵

二阶基本节系数,指定为矩阵。 sos 是一个 K×6 矩阵,其中段数 K 必须大于或等于 2。如果段数小于 2,函数将输入视为分子向量。 sos 的每一行对应一个二阶(双二阶)滤波器的系数。 sos 的第 i 行对应 [bi[1] bi[2] bi[3] ai[1] ai[2] ai[3]]。

数据类型: Float

fs - 采样率
正标量

采样率,指定为正标量。 当时间单位为秒时,fs 以赫兹表示。

数据类型: Float

# 输出参数

gd - 群延迟响应
向量

群延迟响应,以向量形式返回。 如果指定 n,则 gd 的长度为 n。 如果不指定 n,或指定 n 作为空向量,则 gd 的长度为 512。

数据类型: Float

w - 角频率
向量

角频率,以向量形式返回。 w 的值范围从 0 到 π。 如果您在输入中指定 "whole",则 w 中的值范围从 0 到 2π。

如果指定 n,则 w 的长度为 n。 如果不指定 n,或指定 n 作为空向量,则 w 的长度为 512。

f - 频率
向量

频率,以赫兹表示的向量形式返回。 f 的值范围从 0 到 fs/2 Hz。 如果您在输入中指定 "whole",则 f 中的值范围从 0 到 fs Hz。 如果指定 n,则 f 的长度为 n。 如果不指定 n,或指定 n 作为空向量,则 f 的长度为 512。

# 详细信息

滤波器的群延迟响应是作为频率函数的滤波器平均延迟的量度,它是滤波器相位响应的负一阶导数。如果滤波器的频率响应为 ,则群延迟为:

其中 θ(ω) 是 的相位或参数。

# 版本历史记录

在 2024a 之前推出

2025b SP1:grpdelay 输出频率修改为总是向量

grpdleay(sos,w) 和 grpdelay(sos,f,fs) 用法,输出的频率更改为总是向量,例如:

b,a = butter(10,0.6)
sos, = tf2sos(b,a)
_, wout = grpdelay(sos,(pi/10:pi/10:pi)')

更新前结果:

wout
1×10 adjoint(::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}) with eltype Float64:
 0.314159  0.628319  0.942478  1.25664  1.5708  1.88496  2.19911  2.51327  2.82743  3.14159

2025b SP1 更新后结果:

wout
10-element Vector{Float64}:
 0.3141592653589793
 0.6283185307179586
 0.9424777960769379
 1.2566370614359172
 1.5707963267948966
 1.8849555921538759
 2.199114857512855
 2.5132741228718345
 2.827433388230814
 3.141592653589793

# 另请参阅

cceps | freqz | fft | rceps | icceps | hilbert