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

Simulink R2021b中如何批量比较多路信号?

针对你需要判断信号过去x步长内始终为正的需求,在R2021b版本下有两种比逐个连接AND模块更高效的方法:

方法1:移位寄存器 + 关系运算 + Reduce模块

  • 拖入Shift Register模块,设置寄存器长度为x,输入目标信号。模块输出会是包含过去x步信号的向量。
  • 用Relational Operator模块,将移位寄存器的输出与0比较(操作符选>),得到一个布尔向量,每个元素对应某一步信号是否为正。
  • 添加Reduce模块,设置操作符为Logical AND,输入布尔向量后,模块会输出单个布尔值:若所有元素为真(即过去x步全为正)则输出1,否则输出0。
  • 若需要延迟x步的原始信号,直接取移位寄存器输出的最后一个元素(可通过Selector模块实现)。

方法2:MATLAB Function模块

直接用代码实现移位和判断逻辑,不需要拼接多个模块:

  1. 拖入MATLAB Function模块,双击打开编辑界面,输入以下代码:
function [is_all_pos, delayed_signal] = fcn(input_signal, step_count)
    persistent signal_buffer
    % 初始化缓冲区
    if isempty(signal_buffer)
        signal_buffer = zeros(1, step_count);
    end
    % 更新缓冲区:新信号入队,最旧信号出队
    signal_buffer = [input_signal, signal_buffer(1:end-1)];
    % 判断所有步长内信号是否为正
    is_all_pos = all(signal_buffer > 0);
    % 输出延迟step_count步的信号
    delayed_signal = signal_buffer(end);
end
  1. 配置模块输入:分别连接目标信号和设置x步长的常数模块;输出可同时得到判断结果和延迟后的信号。

这个方法优势是逻辑集中,步长x可通过输入参数灵活调整,不需要修改模块结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:15