如何在Simulink模型中测量信号的接收时刻?
在Simulink中测量信号接收时刻的方法
这里分享几个实测有效的方案,覆盖不同场景需求:
触发子系统+Clock模块
这是最直接的实时检测方案:- 拖入
Clock模块,确保其采样模式与仿真步长匹配(离散仿真选固定步长,连续仿真选连续采样); - 搭建触发子系统,将目标信号接入触发端口,设置触发条件为上升沿/下降沿(对应信号"接收"的判定逻辑,比如从无到有的上升沿);
- 将
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函数。数据后处理提取时刻(离线场景)
如果不需要实时获取,可在仿真结束后通过脚本提取:- 用
To Workspace模块导出目标信号,设置保存格式为Structure with time; - 仿真结束后在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创建全局存储变量:- 添加
Data Store Memory模块,定义变量名(比如recv_time_store); - 在触发子系统内用
Data Store Write模块,将Clock的输出写入该变量; - 其他需要使用该时刻的模块用
Data Store Read读取即可。
- 添加
内容的提问来源于stack exchange,提问作者user18430327
相关产品推荐
相关产品推荐

