本文共 2125 字,大约阅读时间需要 7 分钟。
前言:
本文基于Matlab2018版本。
前几天蓝总告诉了我,matlab的一个功能可以直接扫描系统的频率响应,再根据频率响应数据来得到传递函数的办法。于是我跟着Help文件研究了一下,下文是基本实现:
S1,设置扰动信号注入的点和响应信号的捕获点,如下面的代码是把扰动注入到占空比上,响应信号是采样输出电压。
% Open the Simulink model.
mdl = 'ZVSFB1';
open_system(mdl);
ios = [...
linio([mdl,'/DutyCycle'],1,'input'); ...
linio([mdl,'/Volt_sen'],1,'output')];
S2 然后开始设置输入扰动信号的频率范围,这里我设置 100 ~ 20000的频率范围,扰动是正弦波注入,幅度是0.05。
f = logspace(log10(100),log10(200000),30);
in = frest.Sinestream('Frequency',f,'Amplitude',0.05);
getSimulationTime(in)/0.02
运行波形:
上图是正在扫频率响应的波形,是不是有内味了。
S3 设置频率响应数据:
[sysData,simlog] = frestimate(mdl,ios,in);
bopt = bodeoptions;
bopt.Grid = 'on';
bopt.PhaseMatching = 'on';
figure, bode(sysData,'*r',bopt)
输出频率响应测试的增益和相位图:
frest.simView(simlog,in,sysData);
输出频率响应测试数据:
S4 根据频率响应数据拟合生成传递函数:
sysA = tfest(sysData,4, 3) %4P,3Z分析
figure, bode(sysData,'r*',sysA,bopt)
输出Bode图:
传递函数:
sysA =
From input "DutyCycle" to output "Volt_sen":
2.114e04 s^3 + 8.295e08 s^2 + 3.499e10 s - 1.652e13
---------------------------------------------------------
s^4 + 1.532e04 s^3 + 2.136e08 s^2 + 3.971e09 s - 4.254e12
Continuous-time identified transfer function.
Parameterization:
Number of poles: 4 Number of zeros: 3
Number of free coefficients: 8
Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.
Status:
Estimated using TFEST on frequency response data "sysData".
Fit to estimation data: 94.78%
FPE: 0.0214, MSE: 0.01239
end~~~
附录matlb code:
% Open the Simulink model.
mdl = 'ZVSFB1';
open_system(mdl);
ios = [...
linio([mdl,'/DutyCycle'],1,'input'); ...
linio([mdl,'/Volt_sen'],1,'output')];
f = logspace(log10(100),log10(200000),30);
in = frest.Sinestream('Frequency',f,'Amplitude',0.05);
getSimulationTime(in)/0.02
[sysData,simlog] = frestimate(mdl,ios,in);
bopt = bodeoptions;
bopt.Grid = 'on';
bopt.PhaseMatching = 'on';
figure, bode(sysData,'*r',bopt)
frest.simView(simlog,in,sysData);
sysA = tfest(sysData,4, 3)
figure, bode(sysData,'r*',sysA,bopt)
仿真文件下载:
微信回复 ZVSFB_FRESR
致谢:
感谢蓝总的帮助与分享,非常感谢。
关于本人:
我是杨帅,是有六年电源硬件开发和三年软件开发的电源农民工,使用仿真软件已有六年。从模拟控制开始使用pspice和simlpis,到现在数字控制使用matlab和plecs,期间使用过多款仿真软件,也积累了一些使用心得。本着交流技术,分享经验的理念开通了公众号,欢迎大家关注。
转载地址:http://lguhp.baihongyu.com/