You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab Simulink中对10秒整数倍时刻的信号峰值求和?

解决积分器复位峰值求和的几种实用方法

方法1:时钟触发捕获+累加

  • 拖入Clock模块获取当前时间,用Relational Operator模块判断abs(mod(t,10)) < 1e-6(别直接用mod(t,10)==0,浮点数精度容易出问题),这个条件会精准命中10s、20s等整数倍时刻。
  • 将判断结果接到Triggered Subsystem的上升沿触发端,子系统内放置Sum模块:一端接积分器输出,另一端用Memory模块存储之前的累加值,每次触发就把当前峰值加入总和,输出更新后的结果。

方法2:Matlab Function模块直接实现逻辑

  • 添加Matlab Function模块,输入端口设为积分器输出和时钟的t值,内部用持久变量保存累加值,代码示例:
function sum_peaks = fcn(signal, t)
    persistent total;
    if isempty(total)
        total = 0;
    end
    % 捕获10s整数倍时刻的信号
    if abs(mod(t,10)) < 1e-6
        total = total + signal;
    end
    sum_peaks = total;
end
  • 若担心仿真重启时变量残留,可替换为Data Store Memory模块存储累加值,稳定性更强。

方法3:复用复位信号做触发

  • 既然积分器是通过阶梯函数复位的,那这个阶梯函数的上升沿就是峰值出现的时刻!直接把复位信号传入Edge Detector模块检测上升沿,用该边沿信号控制Switch模块:触发时将积分器输出接入Sum模块,否则接入0。Sum模块的输出反馈回来完成累加,每次复位前的峰值会自动被计入总和。

重要提示:Simulink处理时间判断时,必须给浮点数比较加容差,否则仿真步长的细微变化可能导致漏触发或误触发。

内容的提问来源于stack exchange,提问作者Diodendomme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:56:00