# dsp_IIRHalfbandInterpolator
使用多相 IIR 按两倍的因数进行插值
函数库: TyDSPSystem
# 说明
dsp_IIRHalfbandInterpolator 系统对象对输入信号进行有效的多相插值,插值系数为 2。为了设计半带滤波器,你可以指定该对象使用椭圆设计或准线性相位设计。该对象使用这些设计方法来计算滤波器的系数。为了对输入进行过滤,该对象使用多相结构。多相结构中的全通滤波器采用最小乘法形式。
椭圆设计引入了非线性相位,并使用比准线性设计更少的系数创建滤波器。准线性相位设计以额外的系数为代价克服了相位非线性。
另外,你可以不使用设计方法来设计半带滤波器,而是直接指定滤波器的系数。当你选择这个选项时,多相实现的两个分支中的全通滤波器可以是最小乘法的形式,也可以是波数的形式。
你也可以使用 dsp_IIRHalfbandInterpolator 对象来实现双频滤波器组的合成部分,从低通和高通子带合成一个信号。
对数据进行上采样和插值:
创建 dsp_IIRHalfbandInterpolator 对象并设置其属性;
用 step 调用该对象。
# 构造
# 语法
iirhalfbandinterp = dsp_IIRHalfbandInterpolator()
iirhalfbandinterp = dsp_IIRHalfbandInterpolator(; Name = Value)
# 说明
iirhalfbandinterp = dsp_IIRHalfbandInterpolator() 返回一个 IIR 半带插值滤波器 iirhalfbandinterp 默认设置。在默认设置下,系统对象使用 22050 Hz 的半带频率、4100 Hz 的过渡宽度和 80 dB 的停止带衰减对输入数据进行上采样和插值。
iirhalfbandinterp = dsp_IIRHalfbandInterpolator(; Name = Value) 返回一个 IIR 半带插值滤波器,其附加属性由一个或多个 Name = Value 参数对指定。
# 属性
除非另有说明,属性是不可调整的,这意味着你在调用对象后不能改变其值。
如果一个属性是可调整的,你可以在任何时候改变它的值。
Specification - 滤波器设计参数"Transition width and stopband attenuation"(默认) | "Filter order and stopband attenuation" | "Filter order and transition width" | "Coefficients"
滤波器设计参数,指定为字符向量。将 Specification 设置为滤波器设计选项之一时,可以使用相应的 FilterOrder 、StopbandAttenuation 和 TransitionWidth 属性指定滤波器设计参数。此外,您还可以使用 DesignMethod 指定设计方法。当你把 Specification 设置为 "Coefficients" 时,你可以直接指定系数。
FilterOrder - IIR 半带滤波器的阶数9 (默认)| 正整数标量
IIR 半带滤波器的阶数,指定为正整数标量。如果将 DesignMethod 设置为 "Elliptic" ,则 FilterOrder 必须是大于 1 的奇数整数。如果将 DesignMethod 设置为"Quasi-linear phase" ,则 FilterOrder 必须是 4 的倍数。
此属性仅在您将 Specification 设置为 "Filter order and stopband attenuation" 或 "Filter order and transition width" 时适用。
StopbandAttenuation - 阻带所需的最小衰减80 (默认)| 正实数标量
IIR 半带滤波器阻带所需的最小衰减,指定为正实数标量。单位为 dB。
此属性仅在您将 Specification 设置为 "Filter order and stopband attenuation" 或 "Transition width and stopband attenuation" 时适用。
TransitionWidth - 过渡宽度4100 (默认)| 正实数标量
IIR 半带滤波器的过渡宽度,指定为正实数标量。单位为 Hz。过渡宽度的值必须小于输入采样率的一半。
此属性仅在您将 Specification 设置为 "Transition width and stopband attenuation" 或 "Filter order and transition width" 时适用。
DesignMethod - 设计方法"Elliptic" (默认)| "Quasi-linear phase"
IIR 半带滤波器的设计方法,指定为 "Elliptic" 或 "Quasi-linear phase" 。当属性设置为 "Quasi-linear phase" 时,多相结构的第一个分支是纯延迟,从而产生近似线性的相位响应。
仅当您将 Specification 参数设置为除 "Coefficients" 之外的任何可接受的值时,此属性才适用。
SampleRate - 输入采样频率22050 (默认)| 正实数标量
输入采样率,指定为正实标量。单位为 HZ 。
仅当您将 Specification 参数设置为除 "Coefficients" 之外的任何可接受的值时,此属性才适用。
FilterBankInputPort - 选择使用对象作为合成滤波器组false (默认)| true
使用对象作为合成滤波器组的选项,指定为逻辑值。如果此属性为 false,则 dsp_IIRHalfbandInterpolator 将充当插值器。如果此属性为 true,则 dsp_IIRHalfbandInterpolator 将充当合成滤波器组,并且算法接受两个输入:低通和高通子带。
仅当您将 Specification 参数设置为除 "Coefficients" 之外的任何可接受的值时,此属性才适用。
Structure - 内部全通滤波器的实现结构"Minimum multiplier" (默认)| "Wave Digital Filter"
内部全通滤波器实现结构,指定为 "Minimum multiplier" 或 "Wave Digital Filter"。
此属性仅在您将 Specification 设置为 "Coefficients" 时适用。每个结构使用不同的系数集,独立存储在相应的对象属性中。
AllpassCoefficients1 - 第一分支的全通多项式滤波器系数[0.1284563; 0.7906755] (默认) | [0.1284563 0.1534; 0.7906755 0.6745]
第一分支的全通多项式滤波器系数,指定为 N×1 或 N×2 的矩阵。N 是 1 阶或 2 阶全通段的数量。
此属性仅在您将 Specification 设置为 "Coefficients" , Structure 设置为 "Minimum multiplier" 时适用。
AllpassCoefficients2 - 第二分支的全通多项式滤波器系数[0.4295667] (默认) | [0.7906755 0.1534]
第二分支的全通多项式滤波器系数,指定为 N×1 或 N×2 的矩阵。N 是 1 阶或 2 阶全通段的数量。
此属性仅在您将 Specification 设置为 "Coefficients" , Structure 设置为 "Minimum multiplier" 时适用。
WDFCoefficients1 - 波形数字滤波器中第一分支的全通滤波器系数[0.1284563; 0.7906755] (默认) | [0.1284563 0.1534; 0.7906755 0.6745]
波行数字滤波器形式的第一支路的全通滤波器系数,指定为 N×1 或 N×2 的矩阵。N 是 1 阶或 2 阶全通段的数量。每个元素的绝对值必须小于或等于 1。
此属性仅在您将 Specification 设置为 "Coefficients",Structure 设置为 "Wave Digital Filter" 时适用。
WDFCoefficients2 - 波形数字滤波器中第二分支的全通滤波器系数[0.4295667] (默认) | [0.7906755 0.1534]
波动数字滤波器形式的第二分支的全通滤波器系数,指定为 N×1 或 N×2 的矩阵。N 是 1 阶或 2 阶全通段的数量。每个元素的绝对值必须小于或等于 1。
此属性仅在您将 Specification 设置为 "Coefficients" , Structure 设置为 "Wave Digital Filter" 时适用。
HasPureDelayBranch - 使第一个分支成为纯延迟false (默认) | true
使第一个全通分支成为延迟的标志,以 Bool 形式指定。当此属性为 true 时,第一个分支被视为纯延迟,AllpassCoefficients1 和 WDFCoefficients1 属性不适用。
此属性仅在您将 Specification 设置为 "Coefficients" 时适用。
Delay - 延迟的长度1 (默认) | 有限正标量
第一分支延迟的长度,指定为一个有限的正标量。这个属性的值指定了第一个分支的输入可以延迟的样本数。
此属性仅在您将 Specification 设置为 "Coefficients" ,HasPureDelayBranch 设置为 true 时适用。
HasTrailingFirstOrderSection - 将第二分支的最后一节视为 1 阶1 (默认) | 有限正标量
当这个属性被设置为 0 时,第二分支的最后一节是 2 阶节。当第二分支的系数在一个 N×1 的矩阵中时,这个属性被忽略。
此属性仅在您将 Specification 设置为 "Coefficients" 时适用。
# 用法
# 语法
y = step(iirhalfbandinterp, x1)
y = step(iirhalfbandinterp, x1,x2)
# 说明
y = step(iirhalfbandinterp, x1) 2 倍上采样,并使用 IIR 半带插值器 iirhalfbandinterp 对输入信号 x1 进行插值。
y = step(iirhalfbandinterp, x1, x2) 为输入 x1 和 x2 实现半带合成滤波器组。x1 是半带分析滤波器组的低通输出,x2 是半带分析滤波器组的高通输出。仅当 FilterBankInputPort 属性为 true 时,dsp.IIRHalfbandInterpolator 才实现合成滤波器组。
# 输入参数
x1 - 输入数据列向量 | 矩阵
输入到 IIR 半带插值器的数据,指定为一个列向量或矩阵。这个信号是一个半带分析滤波器组的低通输出。如果输入信号是一个矩阵,矩阵的每一列被视为一个独立的信道。
x1 - 输入数据列向量 | 矩阵
合成滤波器组的第二个数据输入,指定为列向量或矩阵。此信号是半带分析滤波器组的高通输出。如果输入信号是矩阵,则矩阵的每一列都被视为独立通道。
两个输入的大小、数据类型和复杂度必须相同。
# 输出参数
y - 插值器的输出列向量 | 矩阵
插值器的输出,以列向量或矩阵形式返回。插值器输出中的行数是输入信号中行数的两倍。
# 对象函数
要使用对象函数,请将系统对象指定为第一个输入参数。
对系统对象通用的操作
| 函数 | 说明 |
|---|---|
| step | 运行系统对象算法 |
| reset | 重置系统对象的内部状态 |
| release | 释放资源并允许更改系统对象属性值和输入特征 |
# 示例
准线性相位 IIR 半带插值器的频率响应
using TyDSPSystem
using TyPlot
IIRHalfbandInterp = dsp_IIRHalfbandInterpolator(; DesignMethod="Quasi-linear phase")
c = coeffs(IIRHalfbandInterp)
h, w = freqz(IIRHalfbandInterp)
plot(w / pi, 20 * log10.(abs.(h)))

使用 IIR 半带插值器对多通道输入进行上采样和插值
using TyDSPSystem
using TyMath
Fs = 44.1e3
filterspec = "Filter order and transition width"
Order = 51
TW = 4.1e3
iirhalfbandinterp = dsp_IIRHalfbandInterpolator(;
Specification=filterspec, FilterOrder=Order, TransitionWidth=TW, SampleRate=Fs
)
rng = MT19937ar(1234)
x = randn(rng, 1024, 4)
y = step(iirhalfbandinterp, x)
y = 2048×4 Matrix{Float64}:
-3.21316e-8 2.37843e-8 8.08877e-9 -2.78059e-8
-7.73898e-7 5.72852e-7 1.9482e-7 -6.69712e-7
-9.2298e-6 6.82171e-6 2.33093e-6 -7.99724e-6
-7.24091e-5 5.33495e-5 1.84072e-5 -6.2902e-5
-0.000418685 0.000306976 0.000107521 -0.000365238
-0.00189467 0.00137981 0.000493386 -0.00166319
-0.00695285 0.00501949 0.00184332 -0.00615965
-0.0211457 0.0151027 0.00573235 -0.0189875
-0.053967 0.0380611 0.0150345 -0.0494457
⋮
0.879071 -1.21371 1.47935 -0.184997
1.75433 -0.152742 1.02734 0.638864
1.87848 0.722452 -1.15954 1.10767
0.936059 0.0149628 -1.91943 0.736344
-0.308079 -0.845909 -0.141609 -0.0827741
-0.674894 -0.161835 1.55171 -0.416319
-0.075967 1.07839 0.940943 -0.0147252
0.475276 0.986889 -0.733069 0.504295
# 参考文献
[1] Lang, M. Allpass Filter Design and Applications. IEEE Transactions on Signal Processing. Vol. 46, No. 9, Sept 1998, pp. 2505–2514.
[2] Harris, F.J. Multirate Signal Processing for Communication Systems. Prentice Hall. 2004, pp. 208–209.
[3] Regalia, Phillip A., Sanjit K. Mitra, and P. P. Vaidyanathan. "The Digital All-Pass Filter: A Versatile Signal Processing Building Block." Proceedings of the IEEE. Vol. 76, Number 1, 1988, pp. 19-37.