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

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

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

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

dataFile = fullfile( matlabroot, 'toolbox', 'mbc', 'mbctraining', 'holliday_data.mat' );
data = mbcmodel.CreateData( dataFile );
get( data )
data.SignalNames
              Name: 'holliday_data'
        NumRecords: 270
        NumSignals: 7
          NumTests: 27
    RecordsPerTest: [1x27 double]
        IsEditable: 1
     IsBeingEdited: 0
             Owner: []
       SignalNames: [7x1 string]
       SignalUnits: [7x1 string]
           Filters: [0x0 struct]
       TestFilters: [0x0 struct]
     UserVariables: [0x0 struct]


ans = 

  7x1 string array

    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"

Отображение данных на графике

Можно использовать SignalName в качестве входа к методу Значения. Постройте первые 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
% 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
signalNamesBefore = 

  8x1 string array

    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"
    "POWER"


signalNamesAfter = 

  9x1 string array

    "afr"
    "egr"
    "load"
    "n"
    "spark"
    "logno"
    "tq"
    "POWER"
    "POWER_SQUARED"

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

Добавьте фильтр, чтобы вести только учет, где скорость больше, чем 1 000.

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