二阶广义积分器

二阶广义积分器

1.引言

二阶广义积分器 SOGI 是一种谐振型二阶闭环滤波器,凭借计算量小、基波提取能力强、能同时输出同相与正交两路信号等优势,成为目前最常用的正交生成模块。本文仅针对基础传统 SOGI 展开学习整理,介绍其内部拓扑结构、传递函数推导、谐振滤波特性以及简单工作过程,方便理解 SOGI 如何分离基波、生成正交分量。

2.SOGI的直观理解

SOGI的结构图

如图所示,标准的SOGI可以上图这个闭环:

误差经过增益,再和正交反馈做交叉耦合,然后经过积分器得到。同时,再经过另一路积分器得到​。

我们使用状态方程进行结构描述:

其中:

: 输入信号

:同相输出信号

:正交输出信号

:是 SOGI 设定的谐振角频率

: 是阻尼系数,也可以理解成 SOGI 的动态调节强度。

3.连续域下的数学推导

3.1 连续域下传递函数的推导

前面得到:

对两边做拉普拉斯变换:

由第二式可得:

代入第一式:

整理:

两边同时乘以 s:

因此同相输出传递函数为:

再由:

得到正交支路传递函数:

将同相支路传递函数代入:

通过上面推导,我们就得到了同相支路和正交支路的传递函数。

3.2 谐振频率处的幅值与相位

令复频率变量:

代入同相支路传递函数,可得频率特性:

由虚数单位性质:

将其代入并整理分母:

取谐振点条件,代入上式:

化简后得到谐振点频率响应:

所以:

也就是说,在谐振频率处,和输入幅值相同、相位相同

再对正交支路进行分析:

当:

代入传递函数:

由虚数单位性质:

所以:

因此正交支路在谐振点的幅值与相位:

这就严格证明了:当输入频率等于 SOGI 设定频率时,同相输出幅值为 1、相位为 0°;正交输出幅值为 1、相位滞后 90°。

3.3 特征方程与极点分析

SOGI传递函数的分母多项式为:

令分母等于零得到系统特征方程:

对比标准二阶系统特征方程:

等式两边同次项系数对应相等,可得关系:

所以:

由一元二次方程求根公式求解系统极点:

当满足条件:

系统为欠阻尼,极点表达式:

此时系统稳定,阶跃响应具备振荡收敛特性。

工程上常用参数:

因为此时:

4.离散化实现

对SOGI进行离散化,我们采用双线性变换

Tustin双线性变换公式:

令简化系数:

SOGI连续域特征分母多项式:

将Tustin变换代入分母,整理后得到z域统一分母形式:

其中各项系数:

同相支路连续传递函数:

离散化后同相支路分子系数:

正交支路连续域传递函数:

离散后分子系数为:

归一化后:

最终可以得到差分方程:

5.Matlab频率分析

我们构建matlab仿真角度,完成以下工作

  • 搭建SOGI传递函数
  • 绘制 Bode 图
  • 验证谐振频率处验证幅值和相位

matlab脚本实现:

clear; clc; close all; %% SOGI 参数 f0 = 50; % 基波频率 Hz w0 = 2*pi*f0; % 谐振角频率 rad/s k = sqrt(2); % SOGI 阻尼系数,常用 sqrt(2) s = tf('s'); %% SOGI 传递函数 Hd = (k*w0*s) / (s^2 + k*w0*s + w0^2); % 同相输出 Hq = (k*w0^2) / (s^2 + k*w0*s + w0^2); % 正交输出 %% 绘制 Bode 图 figure; bode(Hd, Hq, {2*pi*1, 2*pi*1000}); grid on; legend('H_d(s) 同相输出', 'H_q(s) 正交输出'); title('SOGI 同相与正交输出 Bode 图'); %% 在谐振频率处验证幅值和相位 [mag_d, phase_d] = bode(Hd, w0); [mag_q, phase_q] = bode(Hq, w0); mag_d = squeeze(mag_d); phase_d = squeeze(phase_d); mag_q = squeeze(mag_q); phase_q = squeeze(phase_q); fprintf('在 f0 = %.1f Hz 处:\n', f0); fprintf('Hd 幅值 = %.6f, 幅值(dB) = %.3f dB, 相位 = %.3f deg\n', ... mag_d, 20*log10(mag_d), phase_d); fprintf('Hq 幅值 = %.6f, 幅值(dB) = %.3f dB, 相位 = %.3f deg\n', ... mag_q, 20*log10(mag_q), phase_q);

仿真输出结果:

在 f0 = 50.0 Hz 处: Hd 幅值 = 1.000000, 幅值(dB) = -0.000 dB, 相位 = 0.000 deg Hq 幅值 = 1.000000, 幅值(dB) = -0.000 dB, 相位 = -90.000 deg

从仿真结果可以看出,在设定谐振频率 处,SOGI 同相输出的幅值为 1,相位为 0,说明其能够无幅值衰减、无相位偏移地跟踪基波输入。正交输出的幅值同样为 1,相位为 -90,说明其成功生成了与输入信号幅值一致、相位正交的信号。该结果验证了 SOGI 在谐振频率处具备理想的同相提取与正交信号生成能力。6.

从频域结果可以看出,SOGI 在设定谐振频率附近,同相支路 Hd(s) 呈现明显的带通特性,在 ω0处增益达到 0 dB0,相位约为 0,说明该支路能够准确提取输入基波分量。正交支路 Hq(s)在 ω0处同样保持 0 dB增益,但相位为 −90∘,说明其能够生成与输入基波幅值一致、相位正交的信号。

6.Simulink离散化仿真验证

搭建离散化测试环境,模型设置定步长,时间为1e-4,输入信号为频率50hz正弦波与方差为0.1的噪声叠加信号,SOGI部分由M函数实现。

SOGI部分:

模块内部实现:

function [vd, vq] = SOGI_MFunc(vin) %% Parameters Ts = 1e-4; % sampling time, 10 kHz f0 = 50.0; % fundamental frequency k = 1.41421356237; % SOGI damping coefficient w0 = 2.0 * pi * f0; % Pre-warping for Tustin transform % This makes the digital resonant frequency closer to 50 Hz w_pre = (2.0 / Ts) * tan(w0 * Ts / 2.0); %% Persistent states persistent x1 x2 persistent vd1 vd2 persistent vq1 vq2 if isempty(x1) x1 = 0.0; x2 = 0.0; vd1 = 0.0; vd2 = 0.0; vq1 = 0.0; vq2 = 0.0; end %% Tustin coefficient calculation A = 2.0 / Ts; A0 = A*A + k*w_pre*A + w_pre*w_pre; A1 = -2.0*A*A + 2.0*w_pre*w_pre; A2 = A*A - k*w_pre*A + w_pre*w_pre; a1 = A1 / A0; a2 = A2 / A0; % Hd(s) = k*w0*s / (s^2 + k*w0*s + w0^2) bd0 = k*w_pre*A / A0; bd1 = 0.0; bd2 = -k*w_pre*A / A0; % Hq(s) = k*w0^2 / (s^2 + k*w0*s + w0^2) bq0 = k*w_pre*w_pre / A0; bq1 = 2.0*k*w_pre*w_pre / A0; bq2 = k*w_pre*w_pre / A0; %% Difference equation vd = bd0 * vin ... + bd1 * x1 ... + bd2 * x2 ... - a1 * vd1 ... - a2 * vd2; vq = bq0 * vin ... + bq1 * x1 ... + bq2 * x2 ... - a1 * vq1 ... - a2 * vq2; %% State update x2 = x1; x1 = vin; vd2 = vd1; vd1 = vd; vq2 = vq1; vq1 = vq; end

整体仿真结构:

仿真结果:

离散 SOGI 仿真结果表明,在输入信号含有噪声的情况下,SOGI 同相输出 vd 能够有效提取 50 Hz 基波分量,并明显抑制高频噪声。正交输出 vq与 vd保持约 90∘相位差,验证了 SOGI 具备良好的滤波能力和正交信号生成能力。启动初期存在短暂暂态过程,系统稳定后输出幅值和相位关系均符合理论预期。

7.嵌入式平台代码实现与验证

代码实现:

.H文件

/*二阶广义积分器*/ typedef struct { float Fs; //采用频率 float Ts; //采用周期 float F0; //基波频率 float w0; //基波角频率 float K; //阻尼系数 float a1; //差分系数 float a2; float bd0; float bd1; float bd2; float bq0; float bq1; float bq2; float X1; float X2; float Vd1; //差分历史值 float Vd2; float vq1; float vq2; float Vin; //输入 float Vd; //输出 float Vq; }SOGI;

.C文件

//SOGI差分系数计算 void Foc_SOGI_CalCoeff(SOGI *Sp) { //预畸变 float W_Pre = (2.0f / Sp->Ts) * tanf(Sp->w0 * Sp->Ts *0.5f); float A = 2.0f / Sp->Ts; float A0 = A * A + Sp->K * W_Pre *A + W_Pre * W_Pre; float A1 = -2.0f * A * A + 2.0f * W_Pre * W_Pre; float A2 = A * A - Sp->K * W_Pre * A + W_Pre * W_Pre; Sp->a1 = A1 / A0; Sp->a2 = A2 / A0; //同相支路 Sp->bd0 = Sp->K * W_Pre * A / A0; Sp->bd1 = 0.0f; Sp->bd2 = -Sp->K * W_Pre * A / A0; //正交支路 Sp->bq0 = Sp->K * W_Pre * W_Pre / A0; Sp->bq1 = 2.0f * Sp->K * W_Pre * W_Pre / A0; Sp->bq2 = Sp->K * W_Pre * W_Pre / A0; } //SOGI数据更新 void Foc_SOGI_Update(SOGI *Sp) { //输出计算 Sp->Vd = Sp->bd0 * Sp->Vin + Sp->bd1 * Sp->X1 + Sp->bd2 * Sp->X2 - Sp->a1 * Sp->Vd1 - Sp->a2 * Sp->Vd2; Sp->Vq = Sp->bq0 * Sp->Vin + Sp->bq1 * Sp->X1 + Sp->bq2 * Sp->X2 - Sp->a1 * Sp->vq1 - Sp->a2 * Sp->vq2; //状态跟新 Sp->X2 = Sp->X1; Sp->X1 = Sp->Vin; Sp->Vd2 = Sp->Vd1; Sp->Vd1 = Sp->Vd; Sp->vq2 = Sp->vq1; Sp->vq1 = Sp->Vq; }

主控平台为stm32G474,软件生成基波频率为50HZ,幅值为1,叠加噪声频率为2KHZ,幅值为0.3,采用周期为10Kh。

最终输出波形,绿色为带有噪声的信号波形,蓝色为Vd输出,黄色为Vq输出。