二阶广义积分器
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输出。
