collapse

Представляйте многомерный сигнал как один сигнал с нескалярными демонстрационными значениями

    Синтаксис

    Описание

    пример

    collapse(sigObj) преобразует представление сигнала, который соответствует Simulink.sdi.Signal объект sigObj от набора сигналов со скалярными демонстрационными значениями к одному сигналу с нескалярными демонстрационными значениями.

    Когда вы преобразуете представление многомерного сигнала от набора скалярных сигналов, названных channels, к одному сигналу с нескалярными демонстрационными значениями:

    • Signal возразите, что ранее содержал данные для первого канала, содержит данные для многомерного сигнала.

    • Signal объекты для всех других каналов больше не содержат данные.

    • Идентификаторы сигнала для всех других каналов становятся недопустимыми.

    Примеры

    свернуть все

    Когда вы анализируете многомерные данные сигнала с помощью Инспектора Данных моделирования, можно выбрать, представлять ли данные как один сигнал с многомерными демонстрационными значениями или в виде набора сигналов, названных каналами, со скалярными демонстрационными значениями. Используйте Инспектора Данных моделирования программируемый интерфейс, чтобы преобразовать представление сигнала, созданного путем логгирования выхода блока Mux в модели vdp.

    Откройте и симулируйте модель

    Откройте модель vdp, отметьте выход блока Mux для логгирования и назовите блок Mux otuput сигналом. Затем simultate модель.

    open_system('vdp');
    
    MuxPort = get_param('vdp/Mux','PortHandles');
    set_param(MuxPort.Outport,'DataLogging','on');
    
    MuxSig = get_param(MuxPort.Outport,'Line');
    set_param(MuxSig,'Name','Mux');
    
    sim('vdp');

    Доступ к запуску и данным сигнала

    По умолчанию выход блока Mux представлен как каналы в Инспекторе Данных моделирования, потому что это содержит меньше чем четыре канала, таким образом, запуск содержит два сигнала: один для каждого канала в блоке Mux выводится.

    Используйте Simulink.sdi.getCurrentSimulationRun функционируйте, чтобы получить доступ к Simulink.sdi.Run объект, который содержит данные моделирования. Затем проверяйте сколько Simulink.sdi.Signal возражает Run объект содержит использование SignalCount свойство на Run объект.

    runObj = Simulink.sdi.getCurrentSimulationRun('vdp');
    runObj.SignalCount
    ans = int32
        2
    

    Сигналы с многомерными данными имеют Signal верхнего уровня объект, который не содержит данные. Children свойство объекта сигнала верхнего уровня содержит один или несколько Signal объекты сопоставили с составным сигналом верхнего уровня, которые содержат данные. Поскольку сигналы верхнего уровня не содержат данные, они не считаются, чтобы определить значение SignalCount свойство для Run объект.

    Используйте getSignalsByName функционируйте, чтобы получить доступ к Signal верхнего уровня объект для блока Mux выводится.

    topSig = getSignalsByName(runObj,'Mux');

    Используйте Children свойство получить доступ к Signal объект для каждого канала.

    sig1 = topSig.Children(1);
    sig1.Name
    ans = 
    'Mux(1)'
    
    sig2 = topSig.Children(2);
    sig2.Name
    ans = 
    'Mux(2)'
    

    Преобразуйте каналы в многомерный сигнал

    Используйте collapse функционируйте, чтобы преобразовать представление блока Mux выход, таким образом, вы получаете доступ к данным как к одному сигналу с многомерными демонстрационными значениями.

    collapse(sig1)

    Run объект теперь содержит только один сигнал с многомерными демонстрационными значениями.

    runObj.SignalCount
    ans = int32
        1
    

    Children свойство Signal верхнего уровня объект теперь содержит только один сигнал.

    size(topSig.Children)
    ans = 1×2
    
         1     1
    
    

    После того, как вы преобразуете сигнал от каналов до многомерного представления, Signal возразите, что ранее содержал данные для первого канала, содержит данные для многомерного сигнала.

    sig1.Values.Data
    ans = 64×2
    
        2.0000         0
        2.0000   -0.0002
        2.0000   -0.0012
        2.0000   -0.0062
        1.9998   -0.0306
        1.9943   -0.1398
        1.9379   -0.3840
        1.8155   -0.5570
        1.5990   -0.7204
        1.2687   -0.9452
          ⋮
    
    

    После преобразования, идентификаторов сигнала для Signal объекты, которые содержали данные для других каналов, становятся недопустимыми.

    isValidSignalID(runObj,sig2.ID)
    ans = logical
       0
    
    

    Преобразуйте многомерный сигнал в каналы

    Используйте expand функционируйте, чтобы преобразовать Mux выход назад к каналам.

    expand(sig1)

    После преобразования многомерного сигнала к каналам, Signal возразите, что ранее содержал данные для многомерного сигнала, содержит данные для первого канала. Новый Signal объекты создаются для других каналов.

    sig1.Name
    ans = 
    'Mux(1)'
    

    Run возразите и Children свойство Signal верхнего уровня возразите, что оба содержат два сигнала.

    runObj.SignalCount
    ans = int32
        2
    
    size(topSig.Children)
    ans = 1×2
    
         1     2
    
    

    Доступ к новому Signal объект, который содержит данные для второго канала.

    newSig = topSig.Children(2);
    newSig.Name
    ans = 
    'Mux(2)'
    

    Входные параметры

    свернуть все

    Канал многомерного сигнала преобразовать в один сигнал в виде Simulink.sdi.Signal объект.

    Смотрите также

    Объекты

    Функции

    Введенный в R2021b