С помощью Diagnostic Feature Designer можно создать код MATLAB ®, который автоматизирует вычисления для выбранных функций и переменных. Этот созданный код принимает любые данные ансамбля, настроенные так же, как данные ансамбля, импортированные в приложение, и генерирует новую таблицу функций, а также вычисленные сигналы, спектры и таблицы ранжирования, которые могут использоваться для анализа функций или обучения модели. Код реплицирует различные параметры, заданные в приложении, и может выполнять следующие действия:
Полносигнальное вычисление сигналов и характеристик для каждого члена
Ранжирование для функций
Вычисления на уровне ансамбля для характеристики поведения ансамбля
Параллельная обработка
Обработка сегментированных сигналов, также известная как обработка на основе кадров
Управление ансамблем является фундаментальной составляющей генерируемого кода. Сведения об ансамблях данных и типах переменных ансамблей см. в разделе Ансамбли данных для мониторинга условий и предиктивного обслуживания.
Это функциональное описание можно сравнить с фактическим кодом путем создания собственного кода в приложении. Дополнительные сведения см. в разделе Автоматическое извлечение признаков с использованием сгенерированного кода MATLAB. Пример создания кода см. в разделе Создание функции MATLAB в конструкторе диагностических функций. Пример настройки генерации кода на основе кадра см. в разделе Выполнение ранжирования прогностических функций для деградирующей системы с помощью конструктора диагностических функций.
На рисунке показан основной функциональный поток сгенерированного кода. На этой диаграмме функция возвращает как признаки, так и производные переменные, использует последовательную обработку и оперирует полными сигналами.

Рисунок разбивает поток кода на три основных раздела: Инициализация (Initialize), Петля через элементы (Loop through Members) и Создание выходных данных (Create Outputs).
Блок Initialize выполняет начальную настройку. Конкретные операции зависят от типа первоначально импортированных данных и переменных и элементов, заданных для создания кода.
Операции блока Loop Through Members выполняют все вычисления переменных и элементов по одному элементу за раз.
Создание выходных данных извлекает и форматирует таблицу элементов и полный ансамбль.
Функция работает с входными данными, совместимыми с данными, первоначально импортированными в приложение. Если планируется создать код из приложения, рекомендуется импортировать данные в том же формате, что и данные, к которым планируется применить код.
При импорте из памяти переменной рабочей области, такой как таблица ансамбля или массив ячеек, для функции требуется таблица ансамбля или массив ячеек.
При импорте файла или хранилища данных ансамбля моделирования для этой функции требуется хранилище данных ансамбля моделирования или файла.
Входные данные для кода должны иметь переменную структуру, аналогичную данным, импортированным в приложение. Набор входных данных также может включать дополнительные переменные. Код игнорирует дополнительные переменные и не помечает их как ошибки.
В блоке Initialize код настраивает ансамбль, который содержит переменные как для входов, так и для выходов, которые функция вычисляет в блоке Loop Through Members. Эти вычисленные выходные данные включают переменные и элементы, явно выбранные при создании кода, и любые дополнительные переменные, такие как tsa сигнал, который требуется любой из ваших функций.
Если входные данные являются таблицей или массивом ячеек, код создает workspaceEnsemble объект, включающий переменные, соответствующие переменным входных данных. Этот объект аналогичен объекту хранилища данных ансамбля, но работает с данными в памяти, а не во внешних файлах.
Если входные данные являются simulationEnsembleDatastore или fileEnsembleDatastore , код работает непосредственно с объектом.
Как только код инициализирует ансамбль, код добавляет все переменные и элементы, которые будут вычисляться во время вычислений элементов. Код устраняет избыточные переменные с помощью unique функция.
На рисунке показан пример ансамбля рабочей области и его переменных данных. Переменные данных идентифицируют входные сигналы, выходные сигналы, спектры и характеристики.

Ключевые функции, связанные с ансамблем, во время инициализации включают в себя:
reset - Восстановить исходное непрочитанное состояние ансамбля, чтобы код считывался с самого начала
workspaceEnsemble - объект Ensemble, управляющий данными в памяти;
fileEnsembleDatastore - объект Ensemble, управляющий данными во внешних файлах;
simulationEnsembleDatastore - объект Ensemble, управляющий моделируемыми данными во внешних журналах или файлах;
Примечание
Во время инициализации функция не выделяет массивы для использования во время обработки. Это отсутствие предварительного распределения для ясности и гибкости, поскольку код должен работать на входном ансамбле с любым количеством членов. Во время последующих циклов вычислений, которые добавляют только что вычисленные данные к промежуточным таблицам результатов, код подавляет предупреждения анализатора кода MATLAB о предварительном выделении с помощью строчного комментария %#ok<AGROW>. Дополнительные сведения о настройках сообщений анализатора кода см. в разделе Настройки анализатора кода.
В цикле вычисления элемента функция выполняет все вычисления, специфичные для элемента, по одному элементу за раз.
Серия read вызов функции инициирует цикл, считывая каждого члена ансамбля последовательно до тех пор, пока не останется участников ансамбля. Вычисления, следующие за каждым read предоставляет для этого элемента все указанные переменные и элементы.
Выполняемая таблица результатов на уровне элемента собирает результаты при вычислении каждой переменной или набора элементов.
На рисунке показан пример таблицы результатов уровня элемента. Здесь таблица результатов содержит две встроенные таблицы, которые содержат элементы, и встроенное расписание, которое содержит вычисленный сигнал.

После завершения всех вычислений код добавляет таблицу результатов полного элемента обратно в основной ансамбль.
В расчетах элементов используется try/catch для обработки входных данных, которые не могут быть обработаны. Этот подход предотвращает остановку выполнения кода плохими данными.
Код использует следующие ключевые функции управления ансамблем:
read - Читайте следующего участника ансамбля
readMemberData - Извлечение данных из члена ансамбля для определенной переменной
writeToLastMemberRead - Запись данных члену ансамбля
table - массив Ensemble, содержащий переменные и элементы в именованных столбцах и элементы в строках;
array2table - Преобразование массива в таблицу
timetable - специализированная таблица элементов, содержащая сигналы в именованных переменных столбцах и определенное время для каждой строки;
array2timetable - Преобразование массива в расписание
Основным выходом сгенерированной функции является таблица признаков, которую код извлекает с помощью функции. readFeatureTable. Эти выходные данные совпадают независимо от того, используется ли в качестве входных данных ансамбль рабочей области или хранилище данных ансамбля. Таблица элементов содержит сами скалярные элементы, а также переменные условия.
На рисунке показан пример таблицы элементов. Каждая строка представляет элемент. Первый столбец содержит переменную условия, а последующие столбцы содержат значение скалярного элемента.

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

Если функция основана на исходном импорте объекта хранилища данных ансамбля, функция возвращает обновленный объект хранилища данных.
Код включает следующие ключевые функции для выходных данных:
readFeatureTable - Считывание переменной условия и данных элемента из набора данных ансамбля в таблицу
readall - Считывание всех данных из набора данных ансамбля в таблицу
При выборе одной или нескольких таблиц ранжирования при создании кода функция включает раздел ранжирования, который следует за извлечением таблицы элементов, как показано на рисунке. На рисунке показаны детали только для частей блок-схемы, которые изменяются по сравнению с фигурой «Basic Function Flow». На рисунке в разделе Создание выходных данных показаны все выходные аргументы при использовании ранжирования.

Для инициализации ранжирования код извлекает значения признаков и метки (значения переменных условий) из таблицы признаков. Затем код определяет группы классов путем преобразования меток в числовые значения с помощью функции grp2idx назначение индекса группы каждой функции. Например, если переменная условия FaultCode имеет метки "Faulty", "Degraded", и "Healthy", grp2idx группирует элементы с этими метками в группы 1, 2 и 3.
Для каждого метода ранжирования код вычисляет оценку для каждой функции с помощью следующих шагов:
Нормализуйте элементы с помощью указанной схемы нормализации.
Вызовите функцию для метода ранжирования, используя маску group-index для разделения групп. Конкретный синтаксис зависит от функции метода ранжирования.
Если указан фактор важности корреляции, обновите оценку с помощью correlationWeightedScore. Взвешивание корреляции снижает количество признаков, которые сильно коррелированы с признаками более высокого ранга и, следовательно, являются избыточными.
Добавьте баллы в матрицу оценки и метод в список методов.
Затем код создает таблицу ранжирования с помощью sortrows для сортировки строк по результатам метода Sort By, указанному в приложении во время создания кода.
На рисунке показан пример таблицы ранжирования для четырех функций, отсортированной по результатам T-Test.

Код использует следующие ключевые функции для управления ранжированием:
grp2idx - Преобразование меток в числовые значения
correlationWeightedScore - Оценка характеристик веса с коэффициентом корреляции
sortrows - Ранжирование признаков путем сортировки строк по баллам
Статистика ансамбля - это статистическая метрика, которая представляет весь ансамбль, а не отдельного члена. Например, в приложении можно указать максимум ансамбля для сигнала вибрации. Полученная в результате однокомпонентная статистика содержит для каждой выборки времени значение вибрации, которое является максимальным из всех значений вибрации элемента.
Статистику ансамбля можно использовать для вычисления остатков путем вычитания одной и той же метрики ансамбля из всех сигналов элементов для определенной переменной. Например, если среднее значение ансамбля представляет среднюю рабочую точку, можно вычесть среднее значение из всех элементов, чтобы изолировать поведение вокруг рабочей точки. Изолированный сигнал представляет собой форму остатка.
На рисунке показан поток кода при задании элементов на основе среднего остаточного сигнала.

В этом потоке имеются два отдельных контура элементов. Первый цикл элемента вычисляет статистику ансамбля. Второй контур элемента выполняет обработку сигнала, спектра и характеристик. На блок-схеме блок обработки второго элемента иллюстрирует этапы обработки сигнала остатка и элемента на основе остатка.
Чтобы вычислить статистику ансамбля для указанной переменной, код сначала проходит через элементы с сохранением накопителя. В данной точке в последовательности закольцовывания накопитель может содержать, например:
Рассчитанное на данный момент максимальное значение сигнала
Текущая сумма всех значений данных и количество итераций
Рассчитанное на данный момент минимальное значение сигнала
На рисунке показан пример содержимого накопителя и текущей суммы и количества в mean переменная.

В конце итераций цикла код передает сигналы ensemble max и min из накопителя в статистические переменные ensemble max и min. Код вычисляет среднее значение ансамбля, деля сумму ансамбля на количество отсчетов.
На рисунке показан пример итоговой таблицы статистики ансамбля и финальной таблицы mean переменная, которая теперь содержит средний сигнал.

В цикле обработки основного элемента код создает переменные остаточного сигнала, вычитая указанную статистику из указанных сигналов, и упаковывает эти остатки таким же образом, как и другие сигналы и признаки.
На рисунке показан пример таблицы результатов элемента с остатками. Таблица содержит два остаточных сигнала и два набора признаков, вычисленных из этих сигналов.

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

Если основным ансамблем является workspaceEnsemble объект, затем в конце каждого цикла обработки секционирования код сохраняет обновленный подсборку в виде ячейки в массиве, который сохраняет результаты для всех подсистем. На следующем рисунке показан пример этого массива вместе с первыми двумя ячейками. На этом рисунке каждый раздел содержит 13 элементов.

Если основным ансамблем является ансамбль рабочего пространства, то после завершения обработки всех разделов код повторно собирает результирующие разделы и обновляет основной ансамбль с помощью refresh команда.
Если основным ансамблем является объект хранилища данных ансамбля, то код обновляет объект непосредственно при записи результатов в элемент субсамбля в конце каждого цикла элемента.
Код использует следующие ключевые функции для параллельной обработки:
numpartitions - Количество перегородок для разделения участников ансамбля на
partition - Разделение ансамбля
refresh - Обновление ансамбля рабочей области с результатами повторной сборки разделов
Если в приложении задана обработка на основе кадров, сгенерированный код разделяет каждый сигнал полного элемента на сегменты или кадры. Размер и частота этих кадров сохраняются в политике кадров.
На рисунке показан поток. Код выполняет цикл кадра в каждом цикле элемента. При выборе функций для создания кода приложение ограничивает выбор функций одной кадровой политикой. Поэтому сгенерированная функция никогда не содержит более одного цикла кадров.

Во время части инициализации код добавляет только входные переменные и идентификатор кадровой политики, такие как FRM_2, к переменным данных. Код не добавляет вычисляемые переменные. Эти переменные хранятся в FRM_ переменная.
Во время первой части цикла элемента код:
Считывает сигнал полного элемента.
Создает таблицу интервалов кадров, которая охватывает временной диапазон полного сигнала и содержит время начала и окончания для каждого кадра, используя frameintervals.
Инициализирует таблицу фреймов на уровне элементов. Эта таблица в конечном итоге содержит вычисленные значения переменных для всех кадров в элементе.
Вторая часть контура элемента является контуром кадра. Для каждого кадра код:
Использует информацию о интервале кадров для извлечения данных для этого кадра из полного сигнала.
Вычисляет сигналы, спектры и признаки таким же образом, как для обработки полного сигнала на уровне элемента. После вычисления каждой новой переменной код добавляет переменную к таблице результатов кадра. На рисунке показан пример таблицы рамок элементов. Первые два элемента содержат время начала и окончания интервала кадра. Последний элемент содержит элементы, вычисленные для этого кадра.

Когда вычисления переменных завершены, код добавляет таблицу результатов завершенных кадров к таблице кадров уровня элементов. На рисунке показан пример таблицы уровня элемента, которая содержит результаты фрейма для всех элементов.

Заключительной операцией в цикле элементов является запись завершенной таблицы рамок элементов в элемент ансамбля.
Создание выходных данных таблицы элементов является по существу тем же самым, что и в базовом случае, но теперь каждая переменная элемента включает все сегменты.

correlationWeightedScore | fileEnsembleDatastore | frameintervals | grp2idx | read | readall | readMemberData | refresh | reset | simulationEnsembleDatastore | unique | workspaceEnsemble | writeToLastMemberRead