3、一阶低通滤波策略:原理与数学模型、截止频率设计、在MATLAB/Simulink中的实现

各位工程师朋友,咱们今天聊聊混合储能系统里最经典、也最实用的策略——一阶低通滤波。说实话,我入行那会儿,第一个接触的能量分配方法就是它。为什么?因为它简单、直观,而且效果立竿见影。你想想看,电池和超级电容这对搭档,一个适合扛低频大能量,一个擅长处理高频冲击。怎么把这两种需求分开?低通滤波就是最直接的答案。

3.1 原理与数学模型

一阶低通滤波的核心思想,说白了就是一句话:让慢变信号通过,把快变信号滤掉。在储能系统里,我们把负载功率需求看作一个混合信号,里面既有平缓的基波分量,也有剧烈的波动分量。低通滤波器就像个筛子,把低频部分(平缓变化)分给电池,高频部分(剧烈波动)甩给超级电容。

数学模型其实不复杂。一阶低通滤波器的传递函数是:

G(s) = 1 / (τ·s + 1)

其中,τ 是时间常数,单位是秒。这个 τ 决定了滤波器的“松紧程度”。τ 越大,滤波越狠,输出越平滑;τ 越小,滤波越弱,输出越接近原始信号。

在离散域(也就是咱们数字控制器里用的),对应的差分方程是:

y(k) = α · y(k-1) + (1-α) · x(k)

这里 α 是滤波系数,取值范围 0 到 1。α 越接近 1,滤波效果越强。α 和时间常数 τ 的关系是:

α = exp(-Ts / τ)

Ts 是采样周期。嗯,这里要注意,α 的计算一定要用指数函数,别图省事用近似公式,我在项目里吃过这个亏。

核心公式总结:

  • 连续域:G(s) = 1 / (τ·s + 1)
  • 离散域:y(k) = α·y(k-1) + (1-α)·x(k)
  • 系数关系:α = exp(-Ts / τ)

3.2 截止频率设计

截止频率 f_c 是低通滤波策略里最关键的参数。它和时间常数的关系是:

f_c = 1 / (2π · τ)

截止频率决定了“分水岭”的位置。低于 f_c 的频率成分,会被分配给电池;高于 f_c 的,则交给超级电容。那么问题来了:这个 f_c 到底取多少合适?

我个人习惯从两个角度来考虑:

  1. 电池的承受能力:电池对高频充放电很敏感,频繁的电流波动会加速老化。一般来说,锂电池能承受的电流变化率建议不超过 0.5C/s(C 是电池容量)。根据这个约束,可以反推出一个最低的截止频率。
  2. 超级电容的容量:超级电容虽然功率密度高,但能量密度低。如果截止频率设得太高,超级电容要处理的能量就多,很容易被“灌满”或“放空”。所以,截止频率的上限受超级电容容量限制。

我曾经在一个微电网项目里,一开始把截止频率设成了 0.1 Hz,结果超级电容频繁过压报警。后来我改成 0.05 Hz,系统就稳定了。你看,这个参数不是拍脑袋定的,得结合实际硬件来调。

避坑指南:

我曾经遇到过一个问题:仿真跑得好好的,一上硬件就出乱子。后来发现是采样频率 Ts 没设对。数字滤波器的性能严重依赖采样频率,Ts 必须远小于 τ(一般建议 Ts ≤ τ/10),否则滤波效果会严重失真。

下面这张图展示了一阶低通滤波在混合储能系统中的核心逻辑:

一阶低通滤波能量分配策略 负载功率 P_load 一阶低通滤波器 低频分量 P_bat 高频分量 P_sc 低频通道(电池) 高频通道(超级电容) P_load = P_bat + P_sc P_bat = LPF(P_load),P_sc = P_load - P_bat

3.3 在MATLAB/Simulink中的实现

好,理论讲完了,咱们看看怎么在 Simulink 里搭这个模型。我个人习惯用两种方式:一种是直接用现成的模块,另一种是自己写代码实现。两种各有优劣,我分别说说。

3.3.1 方法一:使用 Discrete Filter 模块

Simulink 里有个 Discrete Filter 模块,可以直接配置成低通滤波器。步骤如下:

  1. 从 DSP System Toolbox 里拖出 Discrete Filter 模块。
  2. 双击模块,在 Numerator(分子)里填 [1-alpha],Denominator(分母)里填 [1, -alpha]
  3. 设置采样时间 Ts。

举个例子,假设 Ts = 0.01 秒,τ = 1 秒,那么 α = exp(-0.01/1) ≈ 0.99。分子填 [0.01],分母填 [1, -0.99]

注意: Discrete Filter 模块的分子和分母系数顺序不能搞反。分子是 [b0, b1, ...],分母是 [1, a1, a2, ...]。一阶情况下,分子只有一个系数 b0 = 1-α,分母有两个系数 [1, -α]。

3.3.2 方法二:自己写 MATLAB Function

有时候项目需要更灵活的控制,我会选择自己写代码。下面是一个简单的 MATLAB Function 实现:

function [P_bat, P_sc] = LPF_energy_split(P_load, alpha, y_prev)
% 一阶低通滤波能量分配
% 输入:
%   P_load  - 当前负载功率
%   alpha   - 滤波系数
%   y_prev  - 上一时刻的滤波输出
% 输出:
%   P_bat   - 分配给电池的功率
%   P_sc    - 分配给超级电容的功率

% 低通滤波计算
P_bat = alpha * y_prev + (1 - alpha) * P_load;

% 高频分量 = 总功率 - 低频分量
P_sc = P_load - P_bat;

end

在 Simulink 里,把这个函数封装成 MATLAB Function 模块,然后用一个 Unit Delay 模块把上一时刻的输出反馈回来。结构很简单,但要注意初始值 y_prev 的设置。我一般取第一次采样时的 P_load 作为初始值,这样启动时不会有大的冲击。

3.3.3 参数整定示例

咱们用一个实际案例来演示参数怎么调。假设有一个混合储能系统,电池额定功率 100 kW,超级电容额定功率 50 kW。负载功率波动范围在 0~120 kW 之间。

参数 取值 说明
采样周期 Ts 0.01 s 控制器采样间隔
时间常数 τ 0.5 s 初始试探值
滤波系数 α exp(-0.01/0.5) ≈ 0.9802 由 τ 和 Ts 计算
截止频率 f_c 1/(2π·0.5) ≈ 0.318 Hz 分频点

仿真跑下来,如果发现超级电容的 SOC 波动太大,说明截止频率偏高了,需要增大 τ(也就是降低 f_c)。反过来,如果电池电流波动仍然剧烈,说明滤波不够,需要减小 τ。

我的调试经验:

我一般先设 τ = 1 s 作为起点,然后观察电池电流的波动幅度。如果电池电流变化率超过 0.3C/s,我就把 τ 增大 0.2 s,直到满足要求。这个过程有点像调 PID,需要耐心。

好了,一阶低通滤波策略的核心内容就这些。从原理到数学模型,再到截止频率设计和 Simulink 实现,每一步都有它的门道。你想想看,这个策略虽然简单,但用好了,能让电池寿命延长不少。我在好几个项目里都验证过这一点。

公众号:蓝海资料掘金营,微信deep3321