iddata ОбъектыДля создания iddata необходимо импортировать данные в рабочую область MATLAB ®, как описано в разделе Представление данных в рабочей области MATLAB.
Используйте следующий синтаксис для создания временной области iddata объект data:
data = iddata(y,u,Ts)
Можно также задать дополнительные свойства следующим образом:
data = iddata(y,u,Ts,'Property1',Value1,...,'PropertyN',ValueN)
Дополнительные сведения о доступе к свойствам объекта см. в разделе Свойства.
В этом примере: Ts - время выборки или интервал времени между последовательными выборками данных. Для данных с равномерной выборкой, Ts скалярное значение, равное времени выборки эксперимента. По умолчанию единицей времени являются секунды, но можно установить новое значение с помощью TimeUnit собственность. Для получения дополнительной информации о iddata временные свойства см. в разделе Изменение векторов времени и частоты.
Для данных с неравномерной выборкой укажите Ts как []и задайте значение SamplingInstants свойство как вектор столбца, содержащий отдельные значения времени. Например:
data = iddata(y,u,[],'SamplingInstants',TimeVector)
Где TimeVector представляет вектор значений времени.
Примечание
Можно изменить свойство SamplingInstants путем установки его в новый вектор с длиной, равной количеству выборок данных.
Для представления данных временных рядов используйте следующий синтаксис:
ts_data = iddata(y,[],Ts)
где y - выходные данные, [] указывает пустые входные данные, и Ts - время выборки.
В следующем примере показано, как создать iddata объект с использованием данных с одним входом/одним выходом (SISO) из dryer2.mat. Каждый из входных и выходных данных содержит 1000 образцов с временем выборки 0.08 второй.
% Load input u2 and output y2 . load dryer2 % Create iddata object. data = iddata(y2,u2,0.08)
data =
Time domain data set with 1000 samples.
Sample time: 0.08 seconds
Outputs Unit (if specified)
y1
Inputs Unit (if specified)
u1
Имя канала по умолчанию 'y1' назначается первому и единственному выходному каналу. Когда y2 содержит несколько каналов, каналам присваиваются имена по умолчанию 'y1','y2','y2',...,'yn'. Аналогично, имя канала по умолчанию 'u1' назначается первому и единственному входному каналу. Дополнительные сведения о именовании каналов см. в разделах Именование, Добавление и удаление каналов данных.
Данные частотной области - это преобразование Фурье входного и выходного сигналов при определенных частотных значениях. Для представления данных в частотной области используйте следующий синтаксис для создания iddata объект:
data = iddata(y,u,Ts,'Frequency',w)
'Frequency' является iddata свойство, определяющее значения частоты w, где w - вектор частотного столбца, который определяет частоты, на которых значения преобразования Фурье y и u вычисляются. Ts - интервал времени между последовательными выборками данных в секундах для исходных данных временной области. w, y, и u имеют одинаковое количество строк.
Примечание
Необходимо указать частотный вектор для данных частотной области.
Для получения дополнительной информации о iddata временные и частотные свойства см. в разделе Изменение векторов времени и частоты.
Чтобы указать систему непрерывного времени, установите Ts кому 0.
Можно указать дополнительные свойства при создании iddata объект, следующим образом:
data = iddata(y,u,Ts,'Property1',Value1,...,'PropertyN',ValueN)
Дополнительные сведения о доступе к свойствам объекта см. в разделе Свойства.
Просмотр свойств iddata объект, используйте get команда. Например, введите в подсказке следующие команды:
% Load input u2 and output y2. load dryer2 % Create iddata object. data = iddata(y2,u2,0.08); % Get property values of data. get(data)
ans = struct with fields:
Domain: 'Time'
Name: ''
OutputData: [1000x1 double]
y: 'Same as OutputData'
OutputName: {'y1'}
OutputUnit: {''}
InputData: [1000x1 double]
u: 'Same as InputData'
InputName: {'u1'}
InputUnit: {''}
Period: Inf
InterSample: 'zoh'
Ts: 0.0800
Tstart: []
SamplingInstants: [1000x0 double]
TimeUnit: 'seconds'
ExperimentName: 'Exp1'
Notes: {}
UserData: []
Полное описание всех свойств см. в разделе iddata справочная страница.
Можно задать свойства при создании iddata с использованием синтаксиса конструктора:
data = iddata(y,u,Ts,'Property1',Value1,...,'PropertyN',ValueN)
Изменение значений свойств для существующего iddata объект, используйте set команда или точечная нотация. Например, чтобы изменить время выборки на 0.05, введите в подсказке следующее:
set(data,'Ts',0.05)
или эквивалентно:
data.ts = 0.05
Имена свойств не чувствительны к регистру. Если первые несколько букв однозначно идентифицируют свойство, вводить полное имя свойства не требуется.
Совет
Вы можете использовать data.y в качестве альтернативы data.OutputData для доступа к выходным значениям или с помощью data.u в качестве альтернативы data.InputData для доступа к входным значениям.
Один iddata объект, содержащий данные частотной области, включает специфичные для частоты свойства, такие как Frequency для частотного вектора и Units для единиц частоты (вместо Tstart и SamplingInstants).
Для просмотра списка свойств введите в подсказке следующую последовательность команд:
% Load input u2 and output y2. load dryer2; % Create iddata object. data = iddata(y2,u2,0.08); % Take the Fourier transform of the data % transforming it to frequency domain. data = fft(data)
data =
Frequency domain data set with responses at 501 frequencies.
Frequency range: 0 to 39.27 rad/seconds
Sample time: 0.08 seconds
Outputs Unit (if specified)
y1
Inputs Unit (if specified)
u1
% Get property values of data.
get(data)ans = struct with fields:
Domain: 'Frequency'
Name: ''
OutputData: [501x1 double]
y: 'Same as OutputData'
OutputName: {'y1'}
OutputUnit: {''}
InputData: [501x1 double]
u: 'Same as InputData'
InputName: {'u1'}
InputUnit: {''}
Period: Inf
InterSample: 'zoh'
Ts: 0.0800
FrequencyUnit: 'rad/TimeUnit'
Frequency: [501x1 double]
TimeUnit: 'seconds'
ExperimentName: 'Exp1'
Notes: {}
UserData: []
Вложенные ссылки на данные и их свойства позволяют выбирать значения данных и назначать новые данные и значения свойств.
Используйте следующий общий синтаксис для значений данных, специфичных для вложенных ссылок в iddata объекты:
data(samples,outputchannels,inputchannels,experimentname)
В этом синтаксисе samples укажите один или несколько выборочных индексов, outputchannels и inputchannels укажите индексы каналов или имена каналов, и experimentname указывает индексы или имена экспериментов.
Например, для извлечения образцов 5 через 30 в iddata объект data и хранить их в новом iddata объект data_sub, используйте следующий синтаксис:
data_sub = data(5:30)
Также можно использовать логические выражения для данных вложенных ссылок. Например, чтобы извлечь все значения данных из набора данных одного эксперимента, которые попадают между моментами выборки 1.27 и 9.3 в iddata объект data и назначить их data_sub, используйте следующий синтаксис:
data_sub = data(data.sa>1.27&data.sa<9.3)
Примечание
Нет необходимости вводить все имя свойства. В этом примере: sa в data.sa уникально идентифицирует SamplingInstants собственность.
Можно извлечь входной сигнал из iddata с помощью следующих команд:
u = get(data,'InputData')
или
data.InputData
или
data.u % u is the abbreviation for InputData
Аналогично, можно извлечь выходные данные с помощью
data.OutputData
или
data.y % y is the abbreviation for OutputData
Используйте следующий общий синтаксис для субпривязки определенных каналов данных в iddata объекты:
data(samples,outputchannels,inputchannels,experiment)
В этом синтаксисе samples укажите один или несколько выборочных индексов, outputchannels и inputchannels укажите индексы каналов или имена каналов, и experimentname указывает индексы или имена экспериментов.
Чтобы указать несколько имен каналов, необходимо использовать массив ячеек символьных векторов имен.
Например, предположим, что iddata объект data содержит три выходных канала (именованные y1, y2, и y3) и четыре входных канала (именованные u1, u2, u3, и u4). Выбор всех образцов данных в y3, u1, и u4введите в командной строке следующую команду:
% Use a cell array to reference
% input channels 'u1' and 'u4'
data_sub = data(:,'y3',{'u1','u4'})или эквивалентно
% Use channel indexes 1 and 4 % to reference the input channels data_sub = data(:,3,[1 4])
Совет
Использовать двоеточие (:) для указания всех выборок или всех каналов и пустой матрицы ([]) для указания отсутствия выборок или каналов.
Если требуется создать объект временного ряда путем извлечения только выходных данных из iddata введите следующую команду:
data_ts = data(:,:,[])
Можно назначить новые значения ссылочным переменным. Например, следующая команда присваивает первые 10 значений выходного канала 1 из data к значениям в образцах 101 через 110 в выходном канале 2 из data1. Он также присваивает значения в пробах. 101 через 110 во входном канале 3 из data1 к первым 10 значениям входного канала 1 из data.
data(1:10,1,1) = data1(101:110,2,3)
Используйте следующий общий синтаксис для выполнения экспериментов, специфичных для вложенных ссылок в iddata объекты:
data(samples,outputchannels,inputchannels,experimentname)
В этом синтаксисе samples укажите один или несколько выборочных индексов, outputchannels и inputchannels укажите индексы каналов или имена каналов, и experimentname указывает индексы или имена экспериментов.
При задании нескольких имен экспериментов необходимо использовать массив ячеек символьных векторов имен. iddata объект хранит имя эксперимента в ExperimentName собственность.
Например, предположим, что iddata объект data содержит пять экспериментов с именами по умолчанию, Exp1, Exp2, Exp3, Exp4, и Exp5. Используйте следующий синтаксис для ссылки на первый и пятый эксперименты в data:
data_sub = data(:,:,:,{'Exp1','Exp5'}) % Using experiment nameили
data_sub = data(:,:,:,[1 5]) % Using experiment index
Совет
Использовать двоеточие (:) для обозначения всех выборок и всех каналов и пустой матрицы ([]) для указания отсутствия выборок и каналов.
Кроме того, можно использовать getexp команда. В следующем примере показано, как подпривязать первый и пятый эксперименты в data:
data_sub = getexp(data,{'Exp1','Exp5'}) % Using experiment nameили
data_sub = getexp(data,[1 5]) % Using experiment index
В следующем примере показано, как извлечь первые 100 выборок выходных каналов 2 и 3 и входных каналов 4-8 эксперимента 3:
dat(1:100,[2,3],[4:8],3)
InputData
iddata свойство хранит входные данные по столбцам и OutputData свойство хранит выходные данные по столбцам. Дополнительные сведения о доступе iddata свойства см. в разделе Свойства iddata.
Горизонтальная конкатенация iddata объекты создают новый iddata объект, добавляющий все InputData информация и все OutputData. Этот тип конкатенации создает один объект с большим количеством входных и выходных каналов. Например, следующий синтаксис выполняет горизонтальную конкатенацию на iddata объекты data1,data2,...,dataN:
data = [data1,data2,...,dataN]
Этот синтаксис эквивалентен следующему более длинному синтаксису:
data.InputData =
[data1.InputData,data2.InputData,...,dataN.InputData]
data.OutputData =
[data1.OutputData,data2.OutputData,...,dataN.OutputData]Для горизонтальной конкатенации, data1,data2,...,dataN должно иметь одинаковое количество образцов и экспериментов и одно и то жеTs и Tstart значения.
Каналы в конкатенированном iddata именуются по следующим правилам:
Объединение имен каналов по умолчанию - при объединении iddata объекты с именами каналов по умолчанию, например u1 и y1, каналы в новом iddata объект автоматически переименовывается во избежание дублирования имен.
Объединение дублирующих входных каналов - если data1,data2,...,dataN имеют каналы ввода с повторяющимися пользовательскими именами, такими, что dataK содержит имена каналов, которые уже присутствуют в dataJ с J < K, dataK каналы игнорируются.
Объединение дублирующих выходных каналов - если data1,data2,...,dataN имеют входные каналы с повторяющимися пользовательскими именами, только выходные каналы с уникальными именами добавляются во время конкатенации.
Вертикальная конкатенация iddata объекты создают новый iddata объект, который вертикально складывает значения входных и выходных данных в соответствующие каналы данных. Результирующий объект имеет одинаковое количество каналов, но каждый канал содержит больше точек данных. Например, следующий синтаксис создает data объект таким образом, что его общее количество выборок является суммой выборок в data1,data2,...,dataN.
data = [data1;data2;... ;dataN]
Этот синтаксис эквивалентен следующему более длинному синтаксису:
data.InputData =
[data1.InputData;data2.InputData;...;dataN.InputData]
data.OutputData =
[data1.OutputData;data2.OutputData;...;dataN.OutputData]Для вертикальной конкатенации, data1,data2,...,dataN должны иметь одинаковое количество входных каналов, выходных каналов и экспериментов.