返回工具箱EMA / 滑动平均
平滑系数、窗口响应、延迟与 C 实现。
EMA
yn=yn−1+α(xn−yn−1),保存一个历史输出。α 越小,平滑越强、响应越慢。
按离散 −3 dB 截止频率求系数,令 s=sin(πfc/fs):
α=1+s2+s2sfs=1000Hz,fc=10Hzα≈0.0608792低频群延迟为 (1−α)/(αfs),随频率变化。
滑动平均
最近 N 个样本取均值,群延迟为 (N−1)/(2fs);N ≥ 2 时,第一个零点为 fs/N。−3 dB 截止频率由离散频响求解。
fs=1000Hz,N=16τg=7.5ms,fzero=62.5HzN=1 为直通。滑动平均有旁瓣,适合平滑及抑制与窗口对齐的周期干扰。
C 接口
每通道一个 Filter,以 fs 调用 filter_step()。filter_reset(&state, 0) 从零开始;传入首个样本值则从该直流值开始。
滑动平均采用固定环形缓冲区;浮点版使用 double 累加器,定点版使用 int64_t 累加器。16 点 float 缓冲区占 64 字节,另加累加器和索引。两种头文件使用同名 API,按所需算法选用。
Q 定点
在“数值格式”中选 Q 定点,可设 16 / 32 位与小数位数。Qm.f 的 m 包含符号位,原始整数 r 表示 r/2f。默认 Q4.28,范围 −8≤x<8,分辨率 2−28。
下载 fl_filter.h 和公共 fl_q.h,放在同一包含路径。公共头的完整源码、下载和编译示例见Q定点数C库。FilterSample 是原始定点整数;fl_q_from_double(x, filter_q) / fl_q_to_double(y, filter_q) 用于单位转换,采样循环只做整数运算。
乘积最近舍入,半值远离零;宽累加后饱和。EMA 使用两项加权和,滑动平均保留精确整数和后除以 N。模拟器执行同一整数递推,超限时显示累计饱和次数。频响是量化系数的线性响应,限幅和极限环在时域波形中观察。
二阶低通、高通、带通和陷波见 二阶数字滤波器。