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