FIR 速率转换
基于 FIR 滤波器的多相采样率转换器
类型: SubSystem
图书馆中的路径:
|
说明
该模块 FIR 速率转换 使用沿第一维度的有理 系数执行高效的多相采样率转换。该程序块将输入信号的每一列视为一个单独的通道,并对其中的数据进行独立的重新采样。
从概念上讲,频率转换器结合了 FIR 内插器和 FIR 去矩器。下图所示电路包含一个升压元件,该元件结合了重构和抗混叠滤波器以及一个降采样元件。
频率转换器执行以下操作:
-
通过在输入采样之间添加 0,将输入数据的采样频率提升至更高频率。
-
将采样数据通过 FIR 滤波器。
-
通过丢弃块存储的每个采样之后的 连续采样,将滤波数据的采样率降低到较低的采样率。
需要注意的是,实际的分块算法是通过多相分解来实现的,与上述概念相比效率更高。更多详情见第…节。 算法.
端口
输入
输入 - 输入信号
标量 | 向量 | 矩阵
输入信号可以指定为标量、矢量或矩阵,其大小为 by 。在后一种情况下,输入信号的列代表 独立通道。
详情请参阅基于帧的处理。
数据类型: Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, UInt8
, UInt16
, UInt32
, UInt64
*支持复数:是
输出
输出 - 转换后的信号
标量 | 向量 | 矩阵
频率转换后的输出数据可以用标量、矢量或矩阵表示。
块的行为取决于 Rate options 参数的值:
-
强制单速率处理"--程序块保持输入信号的采样频率,但对维度进行转换,使输出信号的通道大小与输入信号相差 倍。 对于大小为 至 的输入信号,输出信号的上限为 至 。
-
允许多信道处理"- 该模块对信号进行抽取,使输出信号的采样率是输入信号采样率的 倍。输出帧大小与输入帧大小相同,但采样率为 。
所有连接到输出端的块都以 的采样频率工作,所有连接到输入端的块都以 的采样频率工作。
数据类型: Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, UInt8
, UInt16
, UInt32
, UInt64
*支持复数:是
参数
系数源 - 设置滤波器系数的方法
对话框参数(默认值
如果参数具有 "对话框参数 "值,则滤波系数将在参数设置窗口中设置。
插值系数 - 插值系数
3(默认值) | `正标量
指定一个整数系数 。在滤波之前,程序块会根据该系数提高输入序列的采样率。
依赖关系
要使用此参数,请将*系数源*参数设置为 "对话框参数"。
数据类型: Int8
, Int16
, Int32
, Int64
FIR 滤波器系数 - 低通 FIR 滤波器系数
[0 -0.000129061486199961 -0.000228040316280948 0 0.000554613738572437 0.000802607430267054 0 -0.00152912350278902 -0.00203638780675590 0 0.00342230705979440 0.00433928347039265 0 -0.00673109372352446 -0.00825637814441869 0 0.0121125402586868 0.0145130044012328 0 -0.0204721583515830 -0.0241392529239787 0 0.0332125142618354 0.0388230898504630 0 -0.0529640018790903 -0.0619837024555044 0 0.0860610417481775 0.102712774109103 0 -0.154048515452570 -0.197567026018057 0 0.408837525145054 0.824655115145336 1 0.824655115145336 0.408837525145054 0 -0.197567026018057 -0.154048515452570 0 0.102712774109103 0.0860610417481775 0 -0.0619837024555044 -0.0529640018790903 0 0.0388230898504630 0.0332125142618354 0 -0.0241392529239787 -0.0204721583515830 0 0.0145130044012328 0.0121125402586868 0 -0.00825637814441869 -0.00673109372352446 0 0.00433928347039265 0.00342230705979440 0 -0.00203638780675590 -0.00152912350278902 0 0.000802607430267054 0.000554613738572437 0 -0.000228040316280948 -0.000129061486199961] (default)
| vector
从 开始按降序指定 FIR 滤波器系数。
依赖关系
要使用此参数,请将*系数源*参数设置为 "对话框参数"。
数据类型: Int8
, Int16
, Int32
, Int64
*支持复数:是
抽取因子 - 抽取因子
2(默认)` | `正标量'。
指定一个整数系数 。在滤波后,程序块将根据该系数降低输入序列的采样率。
依赖关系
要使用此参数,请将*系数源*参数设置为 "对话框参数"。
数据类型: Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, UInt8
, UInt16
, UInt32
, UInt64
速率选项 - 执行单速率处理或允许多速率处理
强制执行单速率处理(默认)` | 允许多速率处理
。
指定使用哪种处理方式。可选择的选项:
-
强制单速率处理"--输出帧大小 等于输入帧大小 乘以 ,其中 是插值因子, 是抽取因子。
.
输出信号的采样频率等于输入信号的采样频率:
.
-
允许多信道处理"- 输出帧大小等于输入帧大小:
.
输出采样率等于输入采样率乘以 :
.
所有连接到输出端的模块都以 的采样频率工作,所有连接到输入端的模块都以 的采样频率工作。
允许固定大小输入信号的任意帧长度 - 允许固定大小输入信号的任意帧长度
已禁用(默认) | 已启用
指定是否可以将固定大小的输入信号(其大小在仿真过程中不会改变)转换为任意帧长的输入信号,在这种情况下,输入帧长不必是抽取因子的倍数。
适用于固定大小的输入信号:
-
如果输入信号的帧长不必是抽取因子的倍数,请选择 允许固定尺寸输入信号的任意帧长 复选框。如果输入信号的第一个维度不是抽取因子的倍数,输出通常是可变大小的信号。因此,要支持任意尺寸的输入信号,程序块还必须支持可变尺寸信号操作,这可以通过选择 允许固定尺寸输入信号的任意帧长度 复选框来实现。
-
如果输入帧长必须是抽取因子的倍数,则取消选中 允许固定大小输入信号的任意帧长。
依赖关系
要使用此选项,请将*速率选项*设为 "强制单速率处理"。
更多信息
设置 FIR 滤波器系数
在 FIR 滤波器系数 参数中,需要将 FIR 滤波器分子系数设置为矢量。
FIR 滤波器的传递函数 设置为
系数向量的长度必须大于插值系数 ( ) 。FIR 滤波器必须是归一化截止频率不超过 的低通滤波器。程序块内部将所有滤波器状态初始化为零。
设置采样频率
本节仅适用于*速率选项*设置为 "强制单速率处理 "时的单速率处理模式。
块的采样率 FIR 速率转换 的采样率是通过*衰减系数*和*插值系数*参数设置的。对于 至 的输入矩阵,渐减因子 和*内插因子* 参数必须满足以下要求:
-
和 必须是互质数。也就是说, 的关系不能简化为较小整数的关系。
-
, 其中 和 分别是输入帧和输出帧的整数大小。我们可以通过设置 * 递减因子* 等于输入帧大小 来满足第二个要求。在这种情况下,输出帧大小 将等于*插值因子* 。
通过这种方式改变帧大小,程序块能够保持帧周期不变 ( ) 并实现所需的采样周期转换,即
其中 为输出采样周期。
下图显示了该程序块如何 FIR 速率转换 如何将采样周期为 3/4`的 4乘 1 维输入信号转换为采样周期为 `1`的 3乘 1 维输出信号。帧周期 ( ) `3
保持不变。本例的参数值为
-
*插值因子*的值为
3
; -
*消减因子*的值为
4
; -
*速率选项*设置为 "强制单速率处理"。
基于帧的处理
块 FIR 速率转换 对输入信号的每一列按时间进行重复采样。在此模式下,程序块可执行单速或多速处理。您可以使用*速率选项*参数来指定程序块对输入数据的重新采样方式:
-
如果*速率选项*参数设置为 "强制单速率处理",则程序块的输入和输出数据具有相同的采样速率。为了在保持输入采样率的同时对输出进行重新采样,程序块会对每一列输入数据进行转换,使输出帧长度的上限值为 ,其中 是*插值因子*参数中指定的插值因子, 是输入帧长度, 是*抽取因子*参数中指定的抽取因子。
在此模式下,如果输入的是固定大小的信号(帧长在仿真过程中不会改变),且*允许固定大小输入信号的任意帧长*复选框被选中,则输入帧长可以是任意的,不必是去微系数的倍数。如果未选中 允许固定大小输入信号的任意帧长度 复选框,则输入帧长度必须是抽取因子的倍数。
-
如果*速率选项*设置为 "允许多速率处理",则输入和输出数据大小相同,但输出信号的采样率比输入信号高 倍。在此模式下,程序块将输入矩阵 至 作为 独立通道进行处理。程序块对输入信号的每一列进行时间上的去角化处理,保持帧大小不变,并使输出帧 ( ) 的周期为输入帧 ( ) 的周期的 倍。
算法
FIR 滤波器的频率转换可通过多相表示法有效实现。
要实现多相表示,我们首先要定义 FIR 滤波器的传递函数,它是重建滤波器和平滑滤波器的组合:
其中 是 FIR 滤波器的长度。
我们可以将这个等式重新排列如下
其中 是多相分量的个数,该值等于参数设置窗口中设置的插值系数。
我们可以将该等式写成
其中 , , …, 是 FIR 滤波器 的多相分量。
从概念上讲,FIR 滤波器频率转换器包含一个上采样元件,然后是一个组合 FIR 滤波器 ,接着是一个下采样元件。
让我们用它的多相表示法替换 。
这里给出了多元插值的特性。
应用内插法的特性可将零采样加法运算(上采样运算)移至滤波运算之后。这样可以降低信号的滤波速度。
您可以用一个开关来取代上采样元件、延迟单元和加法器。为适应后续的降采样元件,开关以 为增量移动。开关从 0 号分支接收第一个采样,然后逆时针移动,每次都跳过 分支。
例如,将 设置为 5,将 设置为 3 的速率转换器。多相分量为 , , , , 和 。开关从第一个分支 0 开始,跳过分支 1 和 2,从分支 3 获得下一个采样,然后跳过分支 4 和 0,从分支 2 获得下一个采样,依此类推。交换机获取数据样本的分支序列为 [0、3、1、4、2、0、3、1、….]。
因此, 频率转换过程首先对输入数据应用插值因子 ,然后利用开关从 M 个数据样本中只提取 1 个样本,这就有效地考虑了抽取因子 。转换器输出端的最终采样频率为 。