功能描述
- 设置滤波器参数:
-
阶数:确定滤波器的阶数,即滤波器的复杂程度。
-
配置系数 A 和 系数 B:决定滤波器的频率响应特性,可根据滤波器设计方法计算并设置滤波器的系数。
系数将分别存储在两组寄存器中,详情可查看系数寄存器配置。
-
配置控制寄存器 FLTR_COEFF_SEL 来选择当前使用的系数组。
-
- 数据处理(可选)。
-
缩放处理(SCALA 和 SCALB 模块):如果系数较大或较小,可以使用缩放模块调整系数,以避免数值溢出或精度损失。
- 限值处理(LIM 模块):在部分应用中,可能需要对输出数据进行限值处理,以确保数据在预期范围内。
-
- 系数切换(可选)。
- 如果需要切换系数组,首先等待滤波器完成当前计算(检查 FLTR_DNE 标志位)。
- 更新控制寄存器 FLTR_COEFF_SEL 以选择新的系数组。
滤波阶数配置
-
x[n] 为输入数据
-
y[n] 为输出数据
-
A[1]~A[4] 为系数 A,即 A[k]
-
B[0]~B[4] 为系数 B,即 B[k]
- SCALA 和 SCALB 模块均为缩小模块,支持对数据进行最多 231 倍的缩小
- LIM 模块为限值模块,支持设定最大 64 bits 的限值
滤波器的阶数 N 可通过寄存器 FLTR_ODR 配置,最高可以支持四阶滤波器 (N = 1、2、3、4)。
系数寄存器配置
在需要动态调整滤波参数的应用场景中,可以使用滤波器的系数切换功能。在本芯片设计中,每个滤波器都有独立的两套系数寄存器,通过寄存器 FLTR_COEFF_SEL 控制系数的切换。
- 第一组系数寄存器为 FLTRn_FGP_A1\A2\A3\A4 和 FLTRn_FGP_ B0\B1\B2\B3\B4,用于存储第一组滤波器系数。
- 第二组系数寄存器为 FLTRn_SGP_A1\A2\A3\A4 和 FLTRn_SGP_ B0\B1\B2\B3\B4,用于存储第二组滤波器系数。
寄存器 FLTR_COEFF_SEL 为影子更新,即只有在每次滤波器完成计算(FLTR_DNE 标志位被置位)后才更新切换控制值。
输出数据 ( y[n] ) 计算
根据当前选择的系数组和滤波器的阶数,使用下列滤波器公式计算输出数据:
滤波器计算流程
- BlockA 部分:利用当前输入的 x[n] 以及上次计算积累的 last[n] 计算当前滤波的结果 y[n]。
在触发滤波器的进行计算后,BlockA 部分的计算属于第一阶段 (Phase1)。计算完成后,滤波器的结果会被更新到结果寄存器中,软件可通过读取结果寄存器获得结果。
- BlockB 部分:计算积累部分,用于下一次的滤波计算使用。
在触发滤波器的进行计算后,BlockB 部分的计算属于第二阶段 (Phase2)。计算完成后,视为完成此次滤波器计算,并产生 FLTR _DNE 信号。
多滤波器级联设置
- 确定需要级联的滤波器数量及其顺序。
- 配置每个滤波器的触发信号和数据源。如图所示:
-
通过寄存器选择每个滤波计算的 START 触发信号,默认选择各自滤波器的触发信号。
-
通过寄存器 FLTR_IN_SRC_SEL 选择输入的数据源,默认选择各自滤波器的输入数据寄存器。
表 1. 多滤波器级联配置示例 滤波器
触发信号 START
数据源
实现效果
FLTR0
选择默认值,即使用 FLTR0 自身的触发信号。
选择默认值,即 FLTR0 的输入数据寄存器 FLTR0_DAT_IN。
- FLTR0_DAT_IN 的输入为级联滤波器 FLTR0 + FLTR1 的数据输入。
- FLTR1_DAT_OUT 的输出为级联滤波器 FLTR0 + FLTR1 的数据输出。
- 软件在判断 FLTR0_DNE 和 FLTR1_DNE 的信号都有效后,才视为级联滤波器 FLTR0 + FLTR1 的本次计算结果结束,且可以进行下一次的计算触发。
FLTR1
选择 FLTR0 的第一阶段完成信号 FLTR0_PH1_DNE。
选择 FLTR0 的输出数据寄存器 FLTR0_DAT_OUT。
以下是上述配置达到的效果图示:
-
中断
PFM 模块支持产生中断信号,如图所示,根据用户的需要,通过寄存器使能相应的信号源作为中断信号即可。
其中,中断信号源说明如下:
-
FLTRn_DNE(n=0/1/2/.../5):指示滤波器完成计算的标记信号
-
FLTRn_ERR(n=0/1/2/.../5):指示滤波器发生错误的标记信号