我是靠谱客的博主 平常保温杯,最近开发中收集的这篇文章主要介绍bode函数_在matlab中使用frestimate函数来进行频率响应分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:

    本文基于Matlab2018版本。

   前几天蓝总告诉了我,matlab的一个功能可以直接扫描系统的频率响应,再根据频率响应数据来得到传递函数的办法。于是我跟着Help文件研究了一下,下文是基本实现:

S1,设置扰动信号注入的点和响应信号的捕获点,如下面的代码是把扰动注入到占空比上,响应信号是采样输出电压。

a1a0e0b41d31d5ceb03204c5509e8a84.png

% 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

运行波形:

a01851696fcf1d19882e6fcbf7c91d1e.png

  上图是正在扫频率响应的波形,是不是有内味了。

S3 设置频率响应数据:

[sysData,simlog] = frestimate(mdl,ios,in);

bopt               = bodeoptions;

bopt.Grid          = 'on';

bopt.PhaseMatching = 'on';

figure, bode(sysData,'*r',bopt)

输出频率响应测试的增益和相位图:

cce498ff6b9b68db613aff5c72dcf8e1.png

frest.simView(simlog,in,sysData);

输出频率响应测试数据:

5d2f6431a7c141b8158b1c0462680023.png

S4 根据频率响应数据拟合生成传递函数:

sysA = tfest(sysData,4, 3)  %4P,3Z分析

figure, bode(sysData,'r*',sysA,bopt)

输出Bode图:

1951abdc8314f0f179952276c1294bb0.png

传递函数:

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,期间使用过多款仿真软件,也积累了一些使用心得。本着交流技术,分享经验的理念开通了公众号,欢迎大家关注。

73e9dde6bd7423dd8125b1eac5a85e6d.png

最后

以上就是平常保温杯为你收集整理的bode函数_在matlab中使用frestimate函数来进行频率响应分析的全部内容,希望文章能够帮你解决bode函数_在matlab中使用frestimate函数来进行频率响应分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部