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

如何在Simulink模型中测量信号的接收时刻?

在Simulink中测量信号接收时刻的方法

这里分享几个实测有效的方案,覆盖不同场景需求:

  • 触发子系统+Clock模块
    这是最直接的实时检测方案:

    1. 拖入Clock模块,确保其采样模式与仿真步长匹配(离散仿真选固定步长,连续仿真选连续采样);
    2. 搭建触发子系统,将目标信号接入触发端口,设置触发条件为上升沿/下降沿(对应信号"接收"的判定逻辑,比如从无到有的上升沿);
    3. 将Clock模块的输出接入子系统内的Memory模块(用于存储时刻)或To Workspace模块(直接导出到MATLAB工作区)。
      触发子系统会在信号到来的瞬间捕获当前仿真时间,实现时刻记录。
  • MATLAB Function模块自定义检测
    适合需要灵活判定信号接收逻辑的场景,比如非标准边沿的信号:
    在MATLAB Function模块中编写如下逻辑(以检测0到1的上升沿为例):

    function recv_time = fcn(signal)
        persistent last_signal;
        if isempty(last_signal)
            last_signal = 0;
        end
        recv_time = NaN; % 初始值表示未检测到
        % 自定义接收判定:信号从0变为1时触发
        if signal && ~last_signal
            recv_time = clock; % 获取当前仿真时间
        end
        last_signal = signal;
    end
    

    注意:需要在模块的"配置参数"中勾选**"启用对时钟的访问"**,才能调用clock函数。

  • 数据后处理提取时刻(离线场景)
    如果不需要实时获取,可在仿真结束后通过脚本提取:

    1. 用To Workspace模块导出目标信号,设置保存格式为Structure with time;
    2. 仿真结束后在MATLAB命令行处理数据:
    sim_out = sim('your_model_name.slx');
    signal_struct = sim_out.your_signal;
    % 找到信号首次满足接收条件的时间点
    trigger_idx = find(signal_struct.signals.values == 1, 1, 'first');
    receive_time = signal_struct.time(trigger_idx);
    

    这种方法适合批量仿真后的数据分析。

  • Data Store Memory跨模块共享时刻
    若需要在多个模块间共享接收时刻,可使用Data Store Memory创建全局存储变量:

    1. 添加Data Store Memory模块,定义变量名(比如recv_time_store);
    2. 在触发子系统内用Data Store Write模块,将Clock的输出写入该变量;
    3. 其他需要使用该时刻的模块用Data Store Read读取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:19