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