4. 经典偏航算法:风向跟踪算法、风向滤波算法、偏航启动阈值
各位好,我是老张。在风场摸爬滚打十几年,今天咱们聊聊偏航算法里最核心的三个东西:风向跟踪、风向滤波、还有偏航启动阈值。
说白了,偏航控制就是让机头始终对准来风方向。但现实中的风,可不是实验室里那种乖乖的层流。它乱、它跳、它还会突然变向。你想想看,如果风机像个愣头青一样,风一变就跟着转,那偏航电机一天得烧多少次?
所以,经典算法要解决三个问题:怎么跟踪风向?怎么滤掉噪声?什么时候该动?
4.1 风向跟踪算法
风向跟踪,听起来高大上,其实核心就一句话:算出机舱轴线与来风方向的夹角。
我习惯用矢量平均法。为什么?因为简单可靠。具体做法是:
- 采集风速仪的风向数据(通常是0°~360°)
- 将角度分解为sin和cos分量
- 对一段时间内的分量求平均
- 再反算出平均风向角
嗯,这里要注意:直接对角度求平均是错的。比如350°和10°,直接平均是180°,但实际风向应该是0°。用矢量法就能完美避开这个坑。
核心公式:
θ_avg = atan2( Σsin(θ_i), Σcos(θ_i) )
其中θ_i是每个采样点的风向角,N是采样点数。
我在项目中遇到过一个问题:风速仪安装在机舱尾部,受叶片尾流影响,测出来的风向总是偏几度。后来我加了一个静态偏差补偿,在跟踪算法里直接减去这个固定偏移量。效果立竿见影。
4.2 风向滤波算法
风向信号有多脏?我举个例子:阵风来的时候,风向能在1秒内跳30°。如果风机跟着这个信号跑,偏航电机得累死,而且对发电量没任何好处。
所以,滤波是必须的。我个人最常用的是一阶低通滤波和中值滤波。
| 滤波方法 | 原理 | 适用场景 | 我踩过的坑 |
|---|---|---|---|
| 一阶低通滤波 | y(n) = α·x(n) + (1-α)·y(n-1) | 平稳风况,噪声较小 | α太小,响应太慢;α太大,滤不干净 |
| 中值滤波 | 取滑动窗口内的中间值 | 有尖峰噪声的场景 | 窗口长度选3~5最合适,太长会滞后 |
| 卡尔曼滤波 | 基于状态空间模型 | 复杂风况,需要高精度 | 计算量大,调试参数费劲 |
我曾经在一个沿海风场调试,那里的风又乱又急。一阶滤波怎么调都不对——要么滞后严重,要么噪声滤不掉。后来换成中值滤波+一阶滤波串联,先去掉尖峰,再平滑曲线,效果才满意。
我的经验:滤波时间常数建议设为5~15秒。太短了滤不干净,太长了风机反应迟钝。具体值要根据风场的湍流强度来调。
4.3 偏航启动阈值
滤波之后,风向信号平滑了。但问题来了:偏差多大才值得偏航?
这就是启动阈值要干的事。说白了,就是设置一个死区——偏差小于某个角度,风机就不动。
为什么要有死区?
- 偏航电机启动有磨损,频繁动作会缩短寿命
- 偏航过程中风机发电量会下降(机舱不在正对风向)
- 小角度偏差对发电量影响很小,不值得动
我建议的阈值设置原则:
- 基础阈值:通常设为8°~15°。低于这个值,不偏航。
- 滞后比较:启动阈值和停止阈值不同。比如偏差>12°启动,偏差<5°停止。这样可以防止频繁启停。
- 风速加权:低风速时阈值可以大一点,高风速时阈值要小一点。因为高风速下,偏航误差对发电量影响更大。
警告:阈值设得太大,风机长期对不准风,发电量损失严重。我见过一个风场,阈值设到20°,结果年发电量少了3%。
这里给一个我常用的阈值逻辑伪代码:
// 偏航启动判断
if (abs(wind_dir_error) > start_threshold) {
// 且持续超过T秒
if (persist_time > T) {
start_yaw();
}
} else if (abs(wind_dir_error) < stop_threshold) {
stop_yaw();
}
为什么要加持续判断?因为有时候风向只是短暂跳一下,滤波后可能还有残余。加一个延时(比如3~5秒),能避免误动作。
嗯,说到这我想起一个案例。有一次在山区风场,风向变化特别频繁。按照常规阈值,风机一天偏航上百次。后来我把启动阈值从10°调到14°,同时把持续判断时间从3秒延长到8秒。偏航次数降到了每天30次左右,发电量反而还涨了一点。为什么?因为减少了偏航过程中的功率损失。
所以,阈值不是死的。你得根据现场风况、机组特性、电网要求来综合权衡。
最后总结一下:风向跟踪是基础,风向滤波是保障,启动阈值是决策。三者缺一不可。你想想看,如果跟踪不准,后面全白搭;如果滤波不好,阈值再大也白费;如果阈值不合理,前面做得再好也白干。
好了,这一章就到这里。记住,算法是死的,风是活的。多去现场看看数据,比闷头调参数管用得多。