问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Matlab扫频法求系统传递函数

创作时间:
作者:
@小白创作中心

Matlab扫频法求系统传递函数

引用
CSDN
1.
https://blog.csdn.net/wanrenqi/article/details/123714046

在控制系统和信号处理领域,传递函数是描述系统输入输出关系的重要数学工具。对于一些复杂的系统,直接通过建模方法求解传递函数可能较为困难。此时,扫频法(Sweep Frequency Method)提供了一种通过实验测量来获取系统传递函数的有效途径。本文将以一阶RC滤波电路为例,详细介绍如何使用Matlab的Simulink和相关工具箱来实现扫频法求解传递函数的过程。

一、在Simulink中建立一阶RC低通滤波电路模型

首先,在Simulink中搭建一阶RC低通滤波电路模型。具体电路结构如下:

二、设置系统的输入和输出

如上图所示,将受控电压源的输入设置为系统输入,电压表的输出设置为系统输出。

三、使用Model Linearizer进行扫频设置

  1. 打开Model Linearizer工具箱,选择ESTIMATION模式。
  2. 设置输入信号为正弦输入。
  3. 对输入正弦信号的参数进行设置:
  • 输入正弦的单位设置为HZ。
  • 扫频范围设置为1HZ至1000HZ。
  • 扫频点数设置为20个点。
  1. 将所有点的参数设置一致,振幅设置为受控电压源输入的1/10。

四、获取伯德图并估算传递函数

  1. 点击Bode按钮,根据扫描点绘制伯德图。
  2. 在Linear Analysis Workspace中会生成两个变量。
  3. 将生成的变量estsys1拖入MATLAB Workspace。
  4. 在MATLAB命令行中输入以下命令来估算传递函数:
    sys = tfest(estsys1, 1)
    
    其中,n表示系统阶数,这里n为1。

五、结果分析

通过建模得到的传递函数为:
$$
sys = \frac{212.7}{s + 212.7}
$$
估算得到的传递函数与建模结果基本一致,验证了扫频法的有效性。

六、使用命名方式估算伯德图

除了使用Model Linearizer工具箱外,还可以通过命令行方式获取更详细的信息。以下是具体的MATLAB代码示例:

mdl = 'RC_Filter';
open_system(mdl); % 打开模型 RC_Filter

%%%%%%%%%% 收集频率响应的数据
ios = [...      % 指定频率响应的输入和输出点
    linio([mdl,'/volin'],1,'input'); ...
    linio([mdl,'/volout'],1,'output')];

f = logspace(log10(10),log10(20000),10);
in = frest.Sinestream('Frequency',f,'Amplitude',1); % 使用frest.Sinestream命令来定义要在输入点注入的正弦曲线的频率范围,离散的点数和幅值

[sysData,simlog] = frestimate(mdl,ios,in); % 利用frestimate计算频率响应曲线上离散的点

bopt               = bodeoptions;
bopt.Grid          = 'on';
bopt.PhaseMatching = 'on';

figure, bode(sysData,'*r',bopt)
% 利用frest.simView命令在一个图形界面中查看注入信号、测量输出和频率响应
frest.simView(simlog,in,sysData);

% 估算传递函数
sysA = tfest(sysData,1) % 估算一个1阶的传递函数

figure, bode(sysData,'r*',sysA,bopt) % 画出这个传函的伯德图

通过上述步骤,可以更详细地分析系统的频率响应特性,并估算出准确的传递函数。

参考资料

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号