В этом примере показано, как загружать и изменять данные с помощью интерфейса командной строки Калибровка на основе модели (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.SignalNamessignalNamesBefore = 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.