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
. Каждый вход и выход содержат 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])
Совет
Используйте двоеточие (:
), чтобы задать все выборки или все каналы, и пустую матрицу ([]
) не указывать ни выборок, ни каналов.
Если вы хотите создать объект 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)
The 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
должно иметь одинаковое количество входных каналов, выходных каналов и экспериментов.