Представление временных и частотных диапазонов с использованием iddata Объекты

iddata Constructor

Требования к построению объекта iddata

Чтобы создать iddata объект, вы должны уже импортировать данные в MATLAB® рабочая область, как описано в Представлении данных в Рабочем пространстве MATLAB.

Построение объекта iddata для данных временной области

Используйте следующий синтаксис, чтобы создать временную область 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 для данных частотного диапазона

Данные частотного диапазона являются преобразованием Фурье входного и выходного сигналов при заданных значениях частоты. Чтобы представлять данные частотному диапазону, используйте следующий синтаксис, чтобы создать 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

Чтобы просмотреть свойства 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

Субреференции входных и выходных данных

Субреференции данных и их свойств позволяют вам выбрать значения данных и присвоить новые значения данных и свойств.

Используйте следующий общий синтаксис для субреференции определенных значений данных в 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)

Увеличение количества каналов или точек данных объектов iddata

Свойства iddata, хранящие входные и выходные данные

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 должно иметь одинаковое количество входных каналов, выходных каналов и экспериментов.

См. также

Похожие темы