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
путем установки его на новый вектор с длиной, равной количеству выборок данных.
Чтобы представлять данные timeseries, используйте следующий синтаксис:
ts_data = iddata(y,[],Ts)
где y
является выходными данными, []
указывает на пустые входные данные, и Ts
является шагом расчета.
Следующий пример показывает, как создать объект iddata
с помощью single-input/single-output (SISO) данные из dryer2.mat
. Ввод и вывод каждый содержит 1 000 выборок с шагом расчета второго 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])
Используйте двоеточие (:
), чтобы задать все выборки или все каналы и пустую матрицу ([]
), чтобы не задать выборки или никакие каналы.
Если вы хотите создать объект timeseries путем извлечения только выходных данных от объекта 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
должен иметь то же количество выборок и экспериментов, и значений Tstart
и sameTs
.
Каналы в конкатенированном объекте 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
должен иметь то же количество входных каналов, вывести каналы и эксперименты.