# dsp_FIRHalfbandDecimator
半带抽取器
函数库: TyDSPSystem
# 说明
dsp_FIRHalfbandDecimator 系统对象对输入信号进行高效的多相抽取。你可以使用 dsp_FIRHalfbandDecimator 实现双带滤波器组的分析部分,将信号滤波为低通和高通子带。dsp_FIRHalfbandDecimator 使用 FIR 等纹波设计或 Kaiser 窗口设计来构造半带滤波器和多相实现来过滤输入。
过滤和减少数据样本;
创建 dsp_FIRHalfbandDecimator 对象,并设置其属性。
用 step 调用该对象。
# 构造
# 语法
firhalfbanddecim = dsp_FIRHalfbandDecimator()
firhalfbanddecim = dsp_FIRHalfbandDecimator(; Name = Value)
# 说明
firhalfbanddecim = dsp_FIRHalfbandDecimator() 返回一个半带抽取器 firhalfbanddecim。在默认设置下,系统对象对输入数据进行滤波和下采样,半带频率为 11025 Hz,过渡宽度为 4.1 kHz,阻带衰减为 80 dB。
firhalfbanddecim = dsp_FIRHalfbandDecimator(; Name = Value) 返回一个半带抽取器,带有由一个或多个“名 = 值”参数对指定的附加属性。
# 属性
除非另有说明,属性是不可调整的,这意味着你在调用对象后不能改变其值。
如果一个属性是可调整的,你可以在任何时候改变它的值。
Specification - 滤波器设计参数"Filter order and stopband attenuation" | "Filter order and transition width" | "Coefficients"
滤波器设计参数,指定为字符向量。当您将规格设置为以下之一时,您将从三个可用设计参数中选择两个来设计 FIR 半带滤波器。
"Filter order and stopband attenuation" - 滤波器阶数和阻带衰减是设计参数;
"Filter order and transition width" - 滤波器阶数和过渡宽度是设计参数。
该滤波器采用最优等纹波滤波器设计方法或基于凯撒窗的设计方法进行设计。
当您将规格设置为 "Coefficients" 时,您可以直接通过分子属性指定半带滤波器系数。
FilterOrder - 滤波器阶数52(默认)| 偶数正整数
滤波器阶数,指定为一个偶数正整数。
StopbandAttenuation - 阻带衰减80(默认)| 正实数标量
阻带衰减,单位是 dB,指定为正实数标量。
TransitionWidth - 过渡带宽度4100(默认)| 正实数标量
第二分支的全通多项式滤波器系数,指定为 N×1 或 N×2 的矩阵。N 是 1 阶或 2 阶全通段的数量。
此属性仅在您将 Specification 设置为 "Coefficients",Structure 设置为 "Minimum multiplier" 时适用。
Numerator - FIR 半带滤波器系数行向量
FIR 半带滤波器系数,指定为行向量。系数必须符合 FIR 半波段脉冲响应格式。如果滤波器的一半阶 (length(molecator) - 1)/2 是偶数,那么从第一个系数开始的其他所有系数都必须是零,除了中心系数必须是 0.5。如果滤波器的一半阶数是奇数,则中心为 0.5 的交替零序列从第二个系数开始。
DesignMethod - 滤波器的设计方法"Auto" (默认) | "Equiripple" | "Kaiser"
指定滤波器的设计方法为以下之一。
"Auto" - 算法会根据滤波器设计参数自动选择滤波器设计方法。该算法使用等波纹或凯撒窗法来设计滤波器;
如果设计限制非常严格,例如非常高的阻带衰减或非常窄的过渡宽度,那么算法会自动选择 Kaiser 方法,因为这种方法是设计规格非常严格的滤波器的最佳方法。但是,如果设计约束条件不严格,那么算法就会选择等波纹方法。
当你将 DesignMethod 属性设置为 "Auto" 时,你可以通过检查所设计的滤波器的通带和阻带纹波特性来确定算法所使用的方法。如果对象使用的是等波纹法,那么设计的滤波器的通带和阻带波纹在频率响应中的振幅是恒定的。如果对象在 "Auto" 模式下选择的滤波器设计方法不适合你的应用,可以手动指定 DesignMethod 为 "Equiripple" 或 "Kaiser"。
"Equiripple" - 该算法使用等波纹方法;
"Kaiser" - 该算法使用 Kaiser 窗口法。
SampleRate - 输入采样率44100(默认)| 正实数标量
输入采样率,单位是 Hz,指定为一个正的实数标量。输入采样率默认为 44100 Hz。如果你指定过渡宽度为你的滤波器设计参数之一,过渡宽度不能超过输入采样率的 1/2。
# 用法
# 语法
ylow = step(firhalfbanddecim, x)
ylow, yhigh = step(firhalfbanddecim, x)
# 说明
ylow = step(firhalfbanddecim, x) 使用 FIR 半带滤波器 firhalfbanddecim 对输入信号 x 进行滤波,并对输出进行 2 倍的下采样。
ylow, yhigh = step(firhalfbanddecim, x) 计算输入 x 的分析滤波器组的 ylow 和 yhigh。一个 Ki×N 输入矩阵被视为 N 个独立的通道。系统对象通过分别加减两个多相分支输出产生两个功率互补的输出信号。ylow 和 yhigh 具有相同的大小(Ko×N)和数据类型。Ko = Ki/2,其中 2 是抽取因子。
# 输入参数
x - 输入数据列向量 | 矩阵
该对象支持可变大小的输入信号。
# 输出参数
ylow - 抽取滤波器输出的低通子带向量 | 矩阵
抽取滤波器输出的低通子带,以列向量或矩阵形式返回。输出,ylow 是输入 x 的低通半带滤波和下采样版本。由于滤波器的半带性质,下采样系数总是 2。
yhigh - 抽取滤波器输出的高通子带向量 | 矩阵
抽取滤波器输出的高通子带,以列向量或矩阵形式返回。输出,yhigh 是输入 x 的高通半带滤波和下采样版本。由于滤波器的半带性质,下采样系数总是 2。
# 对象函数
要使用对象函数,请将系统对象指定为第一个输入参数。
对系统对象通用的操作
| 函数 | 说明 |
|---|---|
| step | 运行系统对象算法 |
| reset | 重置系统对象的内部状态 |
| release | 释放资源并允许更改系统对象属性值和输入特征 |
# 示例
利用 FIR 半带 Decimator 对信号滤波输入到低通和高通子带
为 44.1 kHz 采样的数据创建一个半波段 decimator。使用滤波器阶数为 52 和过渡宽度为 2 kHz 的设计。
将设计方法设置为 "Kaiser"。
using TyDSPSystem
using TyMath
hfirhalfbanddecim = dsp_FIRHalfbandDecimator(;
Specification="Filter order and transition width",
TransitionWidth=2000,
StopbandAttenuation=60,
DesignMethod="Kaiser",
SampleRate=44.1e3,
)
x = randn(mt19937ar(34767), 1024, 2)
ylow, yhigh = step(hfirhalfbanddecim, x)
ylow = 512×2 Matrix{Float64}:
0.0 0.0
-0.00475362 -0.00258464
0.00739625 0.00831304
-0.0112983 -0.0152681
0.0118248 0.0250098
⋮
-0.0842291 -1.02321
-0.342637 0.516116
0.0864758 -0.473785
0.459161 0.932045
yhigh = 512×2 Matrix{Float64}:
0.0 0.0
0.00475362 0.00258464
-0.00739625 -0.00831304
0.0112983 0.0152681
-0.0118248 -0.0250098
⋮
0.106215 0.025347
-0.0174811 -0.365215
-0.911734 0.917925
-0.647402 -0.538331
# 参考文献
[1] Harris, F.J. Multirate Signal Processing for Communication Systems, Prentice Hall, 2004, pp. 208–209.