Этот пример показывает, как загрузить и изменить данные с помощью интерфейса командной строки Model-Based Calibration Toolbox™. Данные могут загрузиться из файлов (файлы Excel®, файлы MATLAB®, текстовые файлы) и из рабочей области MATLAB®. Можно задать новые переменные, применить фильтры, чтобы удалить нежелательные данные и применить тестовые примечания к отфильтрованным тестам.
Загрузите данные из holiday.xlsx.
dataFile = fullfile( matlabroot, 'toolbox', 'mbc', 'mbctraining', 'holliday_data.mat' ); data = mbcmodel.CreateData( dataFile ); get( data ) data.SignalNames
Name: 'holliday_data' NumRecords: 270 NumSignals: 7 NumTests: 27 RecordsPerTest: [1x27 double] IsEditable: 1 IsBeingEdited: 0 Owner: [] SignalNames: [7x1 string] SignalUnits: [7x1 string] Filters: [0x0 struct] TestFilters: [0x0 struct] UserVariables: [0x0 struct] ans = 7x1 string array "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 % 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
signalNamesBefore = 8x1 string array "afr" "egr" "load" "n" "spark" "logno" "tq" "POWER" signalNamesAfter = 9x1 string array "afr" "egr" "load" "n" "spark" "logno" "tq" "POWER" "POWER_SQUARED"
Добавьте фильтр, чтобы вести только учет, где скорость больше, чем 1 000.
numberOfRecordsBefore = data.NumberOfRecords; data.BeginEdit; data.AddFilter( 'n>1000' ); data.CommitEdit; numberOfRecordsAfter = data.NumberOfRecords; fprintf( 'Removed %d records.\n', numberOfRecordsBefore-numberOfRecordsAfter );
Removed 38 records.