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

В этом примере показов, как загрузить и изменить данный 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.

Похожие темы