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

В этом примере показано, как загрузить и изменить данные с помощью интерфейса командной строки 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 в качестве входа к методу Значения. Постройте первые 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.

Похожие темы