前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何对scope输出的波形提取超调量和上升时间等

如何对scope输出的波形提取超调量和上升时间等

作者头像
用户9925864
发布2022-07-27 09:34:00
2.6K0
发布2022-07-27 09:34:00
举报
文章被收录于专栏:算法工程师的学习日志

一位读者朋友后台咨询了一个问题:如何对scope输出的波形提取超调量和上升时间等

针对这个问题分享一下方法

这个问题首先分成两步:

1、导出来scope的数据

2、对数据进行计算得到超调量和上升时间等

1、导出数据

simulink数据导出到变量空间主要有2种方法:

1)通过out模块

对于低版本的matlab(15a之前的)要取消勾选limit data points to last,不然导出来的数据最多只有100个

在Simulation>Configuration Parameters

在变量空间就可以看到tout和yout的变量,这样就可以对数据进行处理了

for example:

代码语言:javascript
复制
figure
plot(yout(:,1),yout(:,2),'k')
xlabel \Psi(\alpha)/Wb
ylabel \Psi(\beta)/Wb
xlim([-0.03 0.03])
ylim([-0.03 0.03])
set(gcf,'color','w')

2)通过To Workspace模块

simout这个变量会直接保存在变量区,

对于simout这个变量有4种格式

Save format指定将仿真输出保存到工作区中时使用的格式,包括:

“Timeseries”(默认值)

将非总线信号另存为 MATLAB timeseries 对象,将总线信号另存为 MATLAB timeseries 对象的结构体。

调用方法: plot(simout.Time,simout.Data)

“Array”

就一个输出的数组,类似yout,没有时间信息

调用方法:plot(simout)

“Structure”

这个就只有value,没时间信息,plot(simout.signals.values)

“Structure With Time”

调用方法:plot(simout.time,simout.signals.values)

2、数据计算

对于一个常规的传递函数,在进行了阶跃仿真后经常需要给出对应的响应指标,

代码语言:javascript
复制
sys = tf(1,[1 2 3])
y = step(sys)
figure
plot(y)

求解对应的阶跃指标结果,其计算方法就是按照对应的名称定义来的,

代码语言:javascript
复制
%% 求阶跃响应的典型指标
function [OverShoot, RiseTime, PeakTime, AdjustTime, SteadyStateError] = GetPerformanceOfStepResponse(t, y, stepvalue, gTolerance)
% 超调量Mp:最大超调量规定为在暂态期间输出超过对应于输入的终值的最大偏离量
% 上升时间tr:在暂态过程中,输出第一次达到对应于输入的终值的时间(从t=0开始计时)
% 峰值时间tp:对应于最大超调量发生的时间(从t=0开始计时)
% 调整时间ts:输出与其对应于输入的终值之间的偏差达到容许范围(一般取5%或2%)所经历的暂态过程时间(从t=0开始计时)
% 稳态误差err:给定输入与稳态输出的差值
% 超调量和峰值时间
[OSValue, OSIndex] = max(y);
OverShoot = (OSValue - stepvalue)/stepvalue*100;
PeakTime = t(OSIndex);
 
% 上升时间
index = find(y >= stepvalue, 1, 'first');
RiseTime = t(index);
 
% 调整时间和稳态误差
index1 = find(y <= stepvalue*(1 - gTolerance), 1, 'last'); % 容许范围由全局变量指定
index2 = find(y >= stepvalue*(1 + gTolerance), 1, 'last');
 
if isempty(index2) % 如果没有超调量,此值为空
    index = index1;
else
    index = max(index1, index2);
end
 
 
index = max(index1, index2);
AdjustTime = t(index);
 
SteadyStateError = mean(y(index:end)) - stepvalue; % 这里的稳态误差计算为调整时间后的数据平均值与给定输入的差,概念上是最后时刻的值与给定输入的差
 
end

其中 t为时间,y为响应结果,stepvalue为阶跃数值,gTolerance为调整时间的误差

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档