exponenta event banner

Загрузка и изменение данных

В этом примере показано, как загружать и изменять данные с помощью интерфейса командной строки Калибровка на основе модели (Model-Based Calibration Toolbox™). Данные могут быть загружены из файлов (файлы Excel ®, файлы MATLAB ®, текстовые файлы) и из рабочей области MATLAB ®. Можно определить новые переменные, применить фильтры для удаления нежелательных данных и применить примечания к фильтруемым тестам.

Загрузить данные из Excel

®

Загрузить данные из holliday.xlsx.

dataFile = fullfile( matlabroot, 'toolbox',...
    'mbc', 'mbctraining', 'holliday_data.mat' );
data = mbcmodel.CreateData( dataFile );
get( data )
              Name: 'holliday_data'
        NumRecords: 270
        NumSignals: 7
          NumTests: 27
    RecordsPerTest: [10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10]
        IsEditable: 1
     IsBeingEdited: 0
             Owner: []
       SignalNames: [7×1 string]
       SignalUnits: [7×1 string]
           Filters: [0×0 struct]
       TestFilters: [0×0 struct]
     UserVariables: [0×0 struct]
data.SignalNames
ans = 7×1 string
    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"

Данные графика

Можно использовать SignalName в качестве входных данных метода Value. Постройте график первых 5 тестов.

x = zeros(10,5);
y = zeros(10,5);
name = cell(1,5);
% Collect the data as columns to pass to plot.
for tn = 1:5
    x(:,tn) = data.Value( 'spark', tn );
    y(:,tn) = data.Value( 'tq', tn );
    name{tn} = sprintf( 'Test %d', tn );
end
plot( x, y, 'x-' );
legend( name );
grid on
xlabel( sprintf( '%s [%s]', 'spark', data.SignalUnits{5} ) );
ylabel( sprintf( '%s [%s]', 'tq', data.SignalUnits{5} ) );
title( 'tq vs. spark' );

Удаление отклонений и проблемных тестов

Добавить фильтр для проведения испытаний, в которых средний крутящий момент превышает 10. Фильтр - это ограничение для набора данных, который можно использовать для исключения некоторых тестов (тестовый фильтр) или записей (фильтр). Перед внесением изменений необходимо вызвать BeginEdit. Данные обновляются только при вызове CommitEdit.

numberOfTestsBefore = data.NumberOfTests;
data.BeginEdit;
data.AddTestFilter( 'mean(tq)>10' );
data.CommitEdit;
numberOfTestsAfter = data.NumberOfTests;
fprintf( 'Removed %d tests.\n', numberOfTestsBefore-numberOfTestsAfter );
Removed 9 tests.

Добавить новую переменную

В набор данных можно добавить новые переменные.

data.BeginEdit;
data.AddVariable( 'POWER=tq*n' );
data.CommitEdit;
signalNamesBefore = data.SignalNames
signalNamesBefore = 8×1 string
    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"
    "POWER"

% POWER is now in the list of SignalNames, and can be used to define other
% new variables.
data.BeginEdit;
data.AddVariable( 'POWER_SQUARED=POWER^2' );
data.CommitEdit;
signalNamesAfter = data.SignalNames
signalNamesAfter = 9×1 string
    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"
    "POWER"
    "POWER_SQUARED"

Применить фильтр

Добавьте фильтр для хранения только тех записей, скорость которых превышает 1000.

numberOfRecordsBefore = data.NumberOfRecords;
data.BeginEdit;
data.AddFilter( 'n>1000' );
data.CommitEdit;
numberOfRecordsAfter = data.NumberOfRecords;
fprintf( 'Removed %d records.\n', numberOfRecordsBefore-numberOfRecordsAfter);
Removed 38 records.

Связанные темы