数据滤波算法的具体实现步骤是怎样的?

电子说

1.4w人已加入

描述

 

数据滤波算法在电能质量在线监测装置中的具体实现,需围绕 “数据采集→预处理→算法执行→参数适配→效果验证→结果输出” 的全流程展开,核心是结合装置硬件特性(采样率、ADC 精度)和干扰类型(高频电磁、瞬时脉冲等),选择适配的滤波算法并落地。以下以电能质量监测中最常用的IIR 低通滤波(抗高频干扰)、滑动平均滤波(抗瞬时脉冲)、卡尔曼滤波(抗动态波动) 为例,详解具体实现步骤:

一、前置准备:明确滤波目标与硬件基础(实现前提)

在编写或配置滤波算法前,需先确定 “滤除什么干扰”“基于什么硬件实现”,避免算法与实际场景脱节:

1. 确定滤波目标(针对具体干扰)

干扰类型与滤波算法匹配

高频电磁干扰(如变频器 1kHz-10MHz 杂波)→ 选IIR 低通滤波(保留 50Hz 基波 + 2-50 次谐波,滤除高频噪声);

瞬时脉冲干扰(如雷电尖峰、静电放电)→ 选滑动平均滤波(平滑瞬时跳变,避免单组数据异常);

动态波动干扰(如振动导致的电流时断时续)→ 选卡尔曼滤波(动态跟踪真实值,抑制随机波动)。

关键指标要求

滤波延迟:≤1 个周波(50Hz 系统 20ms,避免影响暂态事件捕捉);

幅值衰减:对目标频段(如 50Hz 基波)衰减≤0.1%(保证测量精度),对干扰频段(如 1kHz 以上)衰减≥20dB(滤除效果)。

2. 确认硬件支撑条件

采样率:滤波算法需与装置采样率匹配(如 IIR 低通滤波要求采样率≥2 倍干扰频率,即 “奈奎斯特准则”)。例如:滤除 1kHz 高频干扰,采样率需≥2kHz(电能质量装置常规采样率为 12.8kHz/51.2kHz,完全满足);

ADC 精度:24 位 ADC(如 AD7794)支持更高滤波精度,16 位 ADC(如 ADS1115)需简化滤波阶数(避免计算误差叠加);

计算资源:复杂算法(如 8 阶 IIR、卡尔曼滤波)需 FPGA / 高性能 MCU(如 STM32H7)支撑,低端 MCU(如 STM32F1)优先选滑动平均等轻量级算法。

二、通用核心步骤:以 “IIR 低通滤波(抗高频电磁干扰)” 为例

IIR(无限脉冲响应)低通滤波是电能质量装置抗高频干扰的核心算法,常用 “巴特沃斯滤波器”(通带平坦、阻带衰减陡峭),具体实现分 6 步:

1. 步骤 1:算法参数设计(确定滤波 “规则”)

确定关键参数

通带截止频率(fc):500Hz(保留 50Hz 基波 + 2-50 次谐波,50 次谐波为 2500Hz?此处需修正:50 次谐波为 50×50=2500Hz,若需保留 50 次谐波,fc 应设为≥2500Hz,实际滤除 10kHz 以上高频干扰,fc 设为 10kHz);

阻带截止频率(fs):20kHz(对 20kHz 以上干扰衰减≥40dB);

通带波纹(Rp):≤1dB(保证通带内数据平滑);

阻带衰减(Rs):≥40dB(确保高频干扰滤除彻底)。

计算滤波系数:通过 MATLAB “Filter Design Toolbox” 或 Python“scipy.signal” 工具,输入上述参数生成 IIR 滤波系数(分子 b、分母 a)。例如:8 阶巴特沃斯低通滤波,生成 b=[b0,b1,...,b8]、a=[a0,a1,...,a8](a0 通常归一化为 1)。

2. 步骤 2:数据采集与缓存(获取原始采样数据)

多通道同步采样:装置对电压 / 电流的 3 个通道(A/B/C 相)同步采样(时间误差≤1μs),每个通道连续采集 N 个采样点(如 N=1024 点 / 周波,50Hz 系统对应 20ms),存储在 “原始数据缓存数组”(如 uint16_t raw_data [3][1024]);

数据格式转换:将 ADC 采集的 “无符号整数”(如 0-65535)转换为 “有符号电压 / 电流值”(如 - 10V~+10V),公式:real_value = (raw_data - 32768) * 20.0 / 65536(假设 ADC 参考电压为 10V,16 位精度)。

3. 步骤 3:预处理(消除原始数据 “异常点”)

去极值处理:若原始数据中存在 “超出合理范围的尖峰”(如电压突然跳至 300V,远超 220V 系统正常范围),用 “相邻 3 点中值替换”(如第 i 点值>1.5× 第 i-1 点且>1.5× 第 i+1 点,判定为极值,替换为(第 i-1 点 + 第 i+1 点)/2),避免极值影响滤波系数计算;

数据对齐:若多通道采样存在微小延迟(如 A 相比 B 相延迟 1 个采样点),通过 “插值法” 调整为完全同步(保证三相数据相位一致性)。

4. 步骤 4:滤波算法执行(核心计算过程)

按 IIR 滤波递归公式对每个通道的采样数据逐点计算,公式为:y(n) = (b0*x(n) + b1*x(n-1) + ... + bN*x(n-N)) - (a1*y(n-1) + ... + aN*y(n-N))

其中:

x (n):当前原始采样值,x (n-1)~x (n-N):历史原始采样值(N 为滤波阶数,如 8 阶取前 8 个值);

y (n):当前滤波后值,y (n-1)~y (n-N):历史滤波后值(需缓存历史结果,占用 RAM 资源);

实现细节:

在装置软件中定义 “历史数据缓存数组”(如 float x_hist [8]、float y_hist [8]),存储前 8 个 x 和 y 值;

每采集 1 个新 x (n),先将 x_hist 数组 “右移”(x_hist [7]=x_hist [6], ..., x_hist [0]=x (n)),y_hist 同理;

代入公式计算 y (n),注意使用 “浮点运算”(避免整数运算截断误差),高性能 MCU 可启用硬件 FPU(浮点运算单元)加速。

5. 步骤 5:滤波效果验证(判断是否达标)

频域验证:通过 “快速傅里叶变换(FFT)” 对比滤波前后的频谱:

滤波前:频谱中存在 1kHz、5kHz 等高频干扰峰值;

滤波后:高频干扰峰值衰减≥40dB(几乎消失),50Hz 基波、2-50 次谐波峰值无明显衰减(幅值误差≤0.1%);

时域验证:查看滤波前后的电压 / 电流波形:

滤波前:波形存在 “毛刺”(高频噪声);

滤波后:波形平滑,无毛刺,且与标准源输出波形(如纯正弦波)对比,偏差≤0.2%(A 级装置要求)。

6. 步骤 6:结果输出与应用(对接后续模块)

将滤波后的 y (n) 值(如电压 220.05V、电流 99.98A)存储至 “滤波后数据缓存”,用于:

实时显示:在 LCD 屏展示当前电压 / 电流有效值(需进一步计算有效值:RMS = sqrt(1/N * sum(y(n)^2)));

暂态事件监测:若滤波后数据满足 “电压≤85% Un 且持续≥100ms”,判定为电压暂降,触发报警;

历史数据存储:按 1 分钟 / 1 小时间隔统计有效值、谐波等参数,存入 SD 卡或上传至后台。

三、其他常用算法实现步骤(简化版)

1. 滑动平均滤波(抗瞬时脉冲干扰)

核心逻辑:取连续 M 个采样点的平均值,平滑瞬时尖峰,步骤:

确定窗口宽度 M:5-10 个采样点(如 M=5,50Hz 系统采样率 12.8kHz,5 个点对应≈0.39ms,避免延迟过大);

缓存 M 个原始采样值(如 x1~x5);

新采样 x6 接入时,移除 x1,加入 x6,计算平均值:y = (x2+x3+x4+x5+x6)/5;

验证:对 100ms 内的瞬时尖峰(如电流从 100A 跳至 120A),M=5 时滤波后值约 104A,无明显跳变。

2. 卡尔曼滤波(抗动态波动干扰)

核心逻辑:通过 “预测 - 更新” 迭代,动态跟踪真实值,适用于振动导致的电流波动,步骤:

建立状态方程:x(k) = A*x(k-1) + w(k)(A=1,假设电流缓慢变化;w (k) 为过程噪声,方差 Q=0.01);

建立观测方程:z(k) = H*x(k) + v(k)(H=1,观测值 = 真实值 + 观测噪声;v (k) 方差 R=0.1,基于 ADC 精度);

预测阶段:x_hat(k|k-1) = A*x_hat(k-1|k-1)(预测当前真实值),P(k|k-1) = A*P(k-1|k-1)*A^T + Q(预测误差协方差);

更新阶段:K(k) = P(k|k-1)*H^T/(H*P(k|k-1)*H^T + R)(卡尔曼增益),x_hat(k|k) = x_hat(k|k-1) + K(k)*(z(k)-H*x_hat(k|k-1))(更新真实值),P(k|k) = (I-K(k)*H)*P(k|k-1)(更新误差协方差);

输出:x_hat(k|k)即为滤波后值,对振动导致的 ±5A 电流波动,滤波后波动可降至 ±0.5A。

四、关键注意事项(避免实现误区)

避免滤波延迟过大:高阶 IIR(如 16 阶)会导致 2-3 个周波延迟,需在 “滤波阶数” 与 “延迟” 间平衡(A 级装置常用 8 阶 IIR,延迟≤1 个周波);

防止数值溢出:滤波计算中(尤其是 IIR),多组数据累加可能超出 MCU 浮点精度范围,需定期 “归一化”(如将 y (n) 限制在 ±10V 范围内,超出时截断并标记异常);

适配多参数监测:对谐波、暂降等不同参数,需切换滤波算法(如计算谐波时用 “带通滤波”,捕捉暂降时用 “卡尔曼滤波”),避免单一算法影响多参数精度;

现场调试优化:若滤波后数据仍有干扰,需调整参数(如 IIR 截止频率从 10kHz 降至 5kHz),或结合硬件措施(如屏蔽线缆),软件滤波无法完全解决强干扰。

总结:实现流程的核心逻辑

数据滤波算法的实现,本质是 “先定义规则(参数设计)→ 再处理数据(采集 + 计算)→ 最后验证效果(频域 + 时域)”,需紧扣 3 个核心:

场景适配:高频干扰用 IIR 低通,瞬时脉冲用滑动平均,动态波动用卡尔曼,不盲目追求复杂算法;

硬件匹配:根据采样率、MCU 性能选择算法复杂度,避免 “算法先进但硬件跑不动”;

精度优先:滤波后需保证电能质量核心参数(有效值、谐波、暂降)的测量误差≤装置精度等级(A 级≤±0.1%,S 级≤±0.5%)。

实际操作中,多数装置会将滤波算法集成在 “数据处理模块” 中,用户可通过软件菜单(如 “滤波配置”)调整参数(如窗口宽度、截止频率),无需手动编写代码;若需定制算法(如特殊场景抗干扰),则需结合 MATLAB/Python 工具设计系数,再移植到装置 MCU/FPGA 中。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分