Main Content

iddata

時間領域または周波数領域のシステム同定用の入出力データとそのプロパティ

説明

iddata オブジェクトは、同定するシステムの入出力測定データをカプセル化するために使用します。システム同定関数では、これらの測定値をモデルの推定に使用します。モデル検証関数では、シミュレーションの入力として入力測定値を使用し、推定されたモデルの応答が元のデータにどの程度適合するかを比較するのに出力測定値を使用します。

iddata オブジェクトには、測定値の単一のセットを含めることも、複数のセットを含めることもできます。それぞれのデータのセットが "実験" に対応します。オブジェクトには次の特性があり、オブジェクトのプロパティでエンコードされます。

  • データは周波数領域または時間領域のいずれかで表されます。オブジェクトはそれぞれの領域に相互に変換できます。

  • 時間領域のデータは、等間隔サンプルでも非等間隔サンプルでもかまいません。ただし、iddata オブジェクトを推定に使用するには、データは等間隔サンプルでなければならず、各実験の入力データと出力データが同じ時点で記録されている必要があります。

  • データのプロパティとして、サンプル時間、開始時間、時間点、周波数サンプル点、サンプル間動作などを指定できます。

  • データ成分、実験、およびオブジェクト全体を区別するための注釈として、ラベルやコメントを指定できます。

オブジェクトのプロパティにアクセスするには、ドット表記を使用します。たとえば、コマンド sys = iddata(ym,um,Tsamp)iddata オブジェクトを作成するとします。ym は測定出力データ、um は測定入力データ、Tsamp はサンプル時間です。iddata は、これらの変数を InputDataOutputData、および Ts の各プロパティに格納します。データを表示または変更するには、sys.InputDatasys.OutputData、および sys.Ts を使用します。ドット表記を使用したプロパティの表示と変更の例については、プロパティの表示と変更を参照してください。

作成

説明

時間領域データの使用

data = iddata(y,u,Ts) は、時間領域の出力信号 y と入力信号 u を含む iddata オブジェクトを作成します。Ts は実験データのサンプル時間を指定します。

iddata を使用して、yu を cell 配列として指定すると、複数実験の iddata オブジェクトを作成できます。あるいは、単一実験の iddata オブジェクトを作成し、それらのオブジェクトを merge (iddata) を使用して 1 つの複数実験の iddata オブジェクトに結合できます。複数実験の iddata オブジェクトの詳細については、Create Multiexperiment Data at the Command Lineを参照してください。

data = iddata(y,[],Ts) は、時系列データの iddata オブジェクトを作成します。オブジェクトには、時間領域の出力信号 y と空の入力信号 [] が含まれます。Ts は実験データのサンプル時間を指定します。

周波数領域データの使用

data = iddata(y,u,Ts,'Frequency',W) は、周波数領域データを含む iddata オブジェクトを作成します。WiddataFrequency プロパティを周波数のベクトルに設定します。通常、yu は時間領域信号の離散フーリエ変換です。

追加のプロパティの構成

data = iddata(___,Name,Value) は、名前と値のペアの引数を使用して追加のプロパティを設定します。Name,Value は、前述の構文における任意の入力引数の組み合わせの後に指定します。

入力引数

すべて展開する

システムからの出力信号。次のいずれかとして指定します。

  • 単出力システムの場合は N 行 1 列のベクトル。ここで、N は観測値の数です。

  • 多出力システムの場合は N 行 Ny 列の行列。ここで、Ny は出力チャネルの数です。

  • 複数実験データ セットの場合は Ne 要素の cell 配列。ここで、Ne は実験の数であり、各 cell に 1 つの実験の出力信号が格納されます。

  • 出力信号がないシステムの場合は []。入力信号のみを記録している場合などが該当します。

y は入力データ u と同じ領域でなければなりません。時間領域のデータの場合、yu が同じ時点で記録されている必要があります。

iddata オブジェクトを推定に使用する場合、yu は等間隔サンプルでなければなりません。非等間隔でも違いが小さければ、十分な整合性をもつ等間隔サンプル セットにデータを変換し、変換後のデータで推定がサポートされる場合があります。これを試すための手法の詳細については、interp1 およびMATLAB 内の欠損データを参照してください。

yiddata オブジェクトの OutputData プロパティを設定します。

システムへの入力信号。次のいずれかとして指定します。

  • 単入力システムの場合は N 行 1 列のベクトル。ここで、N は観測値の数です。

  • 多入力システムの場合は N 行 Nu 列の行列。ここで、Nu は入力チャネルの数です。

  • 複数実験データ セットの場合は Ne 要素の cell 配列。ここで、Ne は実験の数であり、各 cell に 1 つの実験の入力信号が格納されます。

  • 入力信号がないシステムの場合は []。時系列の場合などが該当します。

u は出力データ y と同じ領域でなければなりません。時間領域のデータの場合、yu が同じ時点で記録されている必要があります。

iddata オブジェクトを推定に使用する場合、yu は等間隔サンプルでなければなりません。非等間隔でも違いが小さければ、十分な整合性をもつ等間隔サンプル セットにデータを変換し、変換後のデータで推定がサポートされる場合があります。これを試すための手法の詳細については、interp1 およびMATLAB 内の欠損データを参照してください。

uiddata オブジェクトの InputData プロパティを設定します。

TimeUnit プロパティで指定された単位のサンプル時間。次のいずれかとして指定します。

  • yu が等間隔サンプルの場合はスカラー。

  • 周波数領域の連続時間データの場合は 0

  • yu が非等間隔サンプルの場合は []。この場合、SamplingInstants プロパティで時間値を指定します。非等間隔サンプリングの場合、yu は時間領域でなければなりません。

Tsiddata オブジェクトの Ts プロパティを設定します。

プロパティ

すべて展開する

データが時間領域と周波数領域のいずれであるか。次のいずれかとして指定します。

  • 'Time' — 時間領域のデータ

  • 'Frequency' — 周波数領域のデータ

iddata オブジェクトに含まれる各データ セットの名前。Ne 行 1 列の文字ベクトルの cell 配列として指定します。ここで、Ne は実験の数です。各 cell に対応する実験の名前が格納されます。たとえば、{'MyMeas1';'MyMeas2';'MyMeas3'} には、3 つの実験を構成する iddata オブジェクトの実験の名前が含まれます。

周波数領域データの周波数値。次のいずれかとして指定します。

  • N 行 1 列のベクトル。ここで、N は単一実験における周波数値の数です。

  • 1 行 Ne 列の cell 配列。ここで、Ne は実験の数であり、各 cell に対応する実験の周波数ベクトルが格納されます。周波数ベクトルはすべて同じ単位でなければなりません。

周波数領域データの周波数単位。次のいずれかとして指定します。

  1. 単一実験の場合はスカラー。

    1 行 Ne 列の cell 配列。ここで、Ne は実験の数です。Frequency ベクトルはすべて同じ単位でなければならないため、FrequencyUnit のすべての値を同じにする必要があります。

このプロパティを変更してもデータのスケーリングや変換は行われません。プロパティを変更すると、既存のデータの解釈のみが変更されます。

システムへの入力信号の値。次のいずれかとして指定します。

  • 単一実験の場合は N 行 Nu 列の行列。ここで、N はデータ サンプルの数、Nu は入力チャネルの数です。

  • 複数実験の場合は Ne 個の単一実験の行列を含む cell 配列。ここで、Ne は実験の数です。

InputData にコマンド ラインからアクセスする際は省略形 u を使用できます。たとえば、u1 = data.InputDatau1 = data.u と同じです。

入力チャネルの名前。Nu 行 1 列の cell 配列として指定します。ここで、Nu は入力チャネルの数です。

入力チャネルの単位。Nu 行 1 列の cell 配列として指定します。ここで、Nu は入力チャネルの数です。各 cell に対応する入力チャネルの単位が格納されます。

例: {'rad';'rad/s'}

離散時間と連続時間の間の変換におけるサンプル間動作。文字ベクトルまたは文字ベクトルの cell 配列として指定します。実験ごとに、各入力チャネルの値は次のいずれかになります。

  • zoh — ゼロ次ホールドにより、サンプル間で区分的に一定な入力信号を維持。

  • foh — 1 次ホールドにより、サンプル間で区分的に線形な入力信号を維持。

  • bl — 帯域幅を制限した動作により、ナイキスト周波数を超える連続時間入力信号のパワーがゼロになるように指定。

単一の入力チャネルをもつ単一実験の場合、InterSample に上記のリストのいずれかの値が格納されます。複数実験の場合、InterSample は Nu 行 Ne 列の cell 配列です。ここで、Nu は入力チャネルの数、Ne は実験の数です。各 cell に、その cell が表す実験と入力チャネルに関連付けられた動作の値が格納されます。

データ セットの名前。文字ベクトルとして指定します。

例: 'dryer data'

データ セットに関するコメント。文字ベクトルとして指定するか、複数実験データ セットの場合は Ne 行 1 列の文字ベクトルの cell 配列として指定します。ここで、Ne は実験の数です。

例: {'data from experiment 1';data from experiment 2'}

システムからの出力信号の値。次のいずれかとして指定します。

  • 単一実験の場合は N 行 Ny 列の行列。ここで、N はデータ サンプルの数、Ny は出力チャネルの数です。

  • 複数実験の場合は Ne 個の単一実験の行列を含む cell 配列。ここで、Ne は実験の数です。

OutputData にコマンド ラインからアクセスする際は省略形 y を使用できます。たとえば、y1 = data.InputDatay1 = data.y と同じです。

出力チャネルの名前。Ny 行 1 列の cell 配列として指定します。ここで、Ny は出力チャネルの数です。

出力チャネルの単位。Ny 行 1 列の cell 配列として指定します。ここで、Nu は出力チャネルの数です。各 cell に対応する入力チャネルの単位が格納されます。

例: {'rad';'rad/s'}

入力信号の周期。実験ごとに double として指定します。非周期的な入力信号の場合は値 Inf、周期的な入力信号の場合は TimeUnit プロパティで指定された単位の周期になります。

  • 単一の入力チャネルをもつ単一実験の場合、Period に単一の値が格納されます。

  • 多入力システムの場合、Period は Nu 行 1 列のベクトルです。ここで、Nu は入力チャネルの数であり、k 番目のエントリに k 番目の入力の周期が格納されます。

  • 複数実験データの場合、Period は 1 行 Ne 列の cell 配列です。ここで、Ne は実験の数であり、各 cell に対応する実験の周期のスカラーまたはベクトルが格納されます。

時間領域データの TimeUnit で指定された単位の時間値。次のように指定します。

  • N 行 1 列のベクトル。ここで、N はデータ点の数です。

  • 1 行 Ne 列の cell 配列。ここで、Ne は実験の数であり、各 cell に対応する実験のサンプリング時点が格納されます。

SamplingInstants の値は等間隔でも非等間隔でもかまいません。Ts プロパティを指定すると、SamplingInstants に含まれる等間隔の時間値が TsTstart から計算されます。非等間隔サンプル点がある場合は、SamplingInstants で時間値を指定します。この場合、Ts プロパティが空に設定されます。推定関数では非等間隔サンプリングはサポートされません。

時間変数とサンプル時間の単位。スカラーとして指定します。このプロパティはデータ セット内のすべての実験に適用されます。

このプロパティを変更してもリサンプリングやデータの変換は行われません。プロパティを変更すると、既存のデータの解釈のみが変更されます。

TimeUnit で指定された単位のサンプル時間。スカラーまたは cell 配列として指定します。実験ごとに、値は次のいずれかになります。

  • yu が等間隔サンプルの場合はスカラー

  • 周波数領域の連続時間データの場合は 0

  • yu が時間領域の非等間隔サンプルの場合は []。このようなデータについては、SamplingInstants プロパティで時間値を設定するためです。

単一実験の場合、Ts はスカラーです。複数実験データの場合、Ts は 1 行 Ne 列の cell 配列です。ここで、Ne は実験の数であり、各 cell に対応する実験のサンプル時間が格納されます。

周波数領域データの場合、データの解釈に Ts が使用されます。

  • Ts が 0 の場合、入力と出力は対応する信号の連続時間フーリエ変換 (CTFT) として解釈されます。

  • Ts がスカラーの場合、入力と出力は Ts をサンプル時間とする対応する信号の離散時間フーリエ変換 (DTFT) として解釈されます。

時間領域データの開始時間。次のように指定します。

  • 単一実験の場合はスカラー

  • 複数実験の場合は 1 行 Ne 列の cell 配列。ここで、Ne は実験の数であり、各 cell に対応する実験の開始時間が格納されます。

データ セットについての追加コメント。任意の MATLAB データ型として指定します。

オブジェクト関数

一般に、システム同定データに適用できるすべての関数は iddata オブジェクトに適用できます。これらの関数は 3 つの一般的なタイプに分類されます。

  1. iddata オブジェクトに対して操作を行い、結果のオブジェクトを返す関数を使用して、iddata オブジェクトを操作および処理できます。

    • 既存の iddata オブジェクトを時間領域と周波数領域の間で変換するには、fft および ifft を使用します。以下に例を示します。

      datafd = fft(Data);
      datatd = ifft(Dataf);

    • 複数の実験を含む単一の iddata オブジェクトに iddata オブジェクトをマージするには、merge (iddata) を使用します。複数実験の iddata オブジェクトから実験を抽出するには、getexp を使用します。以下に例を示します。

      data123 = merge(data1,data2,data3);
      data2 = getexp(data123,2);
      

      より詳細な例については、特定のデータ セグメントの抽出とモデル化を参照してください。

    • iddata オブジェクトのデータをフィルター処理したり不良なデータを削除したりするには、detrendidfilt などの前処理関数を使用します。以下に例を示します。

      data_d = detrend(data);
      data_f = idfilt(data,filter);

  2. iddata オブジェクトに対して解析的な処理を実行し、プロットを作成したり特定のパラメーターや値を返したりする関数を使用して、データを解析し、推定に使用する入力を判断できます。

    • 時間遅延や周波数スペクトルなどの変数を計算するには、delayestspa などの解析関数を使用します。

  3. iddata オブジェクトのデータを使用してモデルを推定、シミュレート、検証する関数を使用して、動的モデルを作成し、モデルの応答が検証データにどの程度一致するかを評価できます。

    • 特定の構造をもつモデルを推定するには、ssesttfest などの推定関数を使用します。

    • 推定されるモデルをシミュレートし、シミュレートされた出力を検証データや他のモデルと比較するには、comparesim などの検証関数を使用します。

    以下のリストには、iddata オブジェクトで使用できる関数の代表的なサブセットが含まれています。

すべて展開する

plotPlot input and output channels of iddata object
getexpSpecific experiments from multiple-experiment data set
merge (iddata)Merge data sets into iddata object
detrendSubtract offset or trend from time-domain signals contained in iddata objects
retrendAdd offsets or trends to time-domain data signals stored in iddata objects
idfiltFilter data using user-defined passbands, general filters, or Butterworth filters
diffiddata オブジェクトの差分信号
misdataReconstruct missing input and output data
idresampResample time-domain data by decimation or interpolation
fftiddata オブジェクトの周波数領域データへの変換
ifftiddata オブジェクトの周波数領域から時間領域への変換
realdataDetermine whether iddata is based on real-valued signals
delayestデータからの時間遅延 (むだ時間) の推定
isrealモデル パラメーターまたはデータ値が実数かどうかを判別
impulseestNonparametric impulse response estimation
pexcitLevel of excitation of input signals
feedbackフィードバック データの可能性の特定
etfe経験的な伝達関数とピリオドグラムの推定
spafdrEstimate frequency response and spectrum using spectral analysis with frequency-dependent resolution
spaスペクトル解析を使用した固定の周波数分解能による周波数応答の推定
iddataPlotOptionsOption set for plot when plotting data contained in an iddata object
ssestEstimate state-space model using time-domain or frequency-domain data
tfestEstimate transfer function model
arスカラー時系列の AR モデルまたは ARI モデルを同定する際のパラメーターの推定
simSimulate response of identified model
findstatesEstimate initial states of model
compareCompare identified model output with measured output
predictK ステップ先のモデル出力の予測
goodnessOfFitGoodness of fit between test and reference data for analysis and validation of identified models
procestEstimate process model using time-domain or frequency-domain data
residCompute and test residuals

すべて折りたたむ

単入力/単出力 (SISO) 時間領域データを使用して iddata オブジェクトを作成します。入力と出力はそれぞれ 1000 サンプルで、サンプル時間は 0.08 秒です。

load dryer2_data output input;
data = iddata(output,input,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' が割り当てられます。出力信号に複数のチャネルが含まれる場合は、'y1','y2',...,'yn' のように既定の名前が割り当てられます。同様に、最初で唯一の入力チャネルに対して既定のチャネル名 'u1' が割り当てられます。チャネルの命名の詳細については、Naming, Adding, and Removing Data Channelsを参照してください。

データをプロットします。

plot(data)

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents data. Axes object 2 with title u1 contains an object of type line. This object represents data.

隣接するプロットに出力データと入力データが表示されます。

時系列データから iddata オブジェクトを作成します。時系列データには入力チャネルはありません。

データ セットの出力チャネルを読み込み、サンプル時間 0.08 秒の iddata オブジェクトを作成します。

load dryer2_data output
data = iddata(output,[],0.08)
data =

Time domain data set with 1000 samples.
Sample time: 0.08 seconds               
                                        
Outputs      Unit (if specified)        
   y1                                   
                                        

データをプロットします。

plot(data)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents data.

時系列モデルの推定に data を使用できます。

複素数値の周波数領域の入出力データから iddata オブジェクトを作成して調査します。オブジェクトを時間領域に変換します。

入出力データは、時間領域の入出力信号のフーリエ変換の形式で表現されることがあります。このデータを周波数領域の iddata オブジェクトにカプセル化できます。

データを読み込みます。このデータは、複素数値の入出力周波数領域データ UY、周波数ベクトル W、およびサンプル時間 Ts で構成されます。

load demofr1 U Y W Ts

周波数領域の iddata オブジェクト data_fr を作成します。

data_fr = iddata(Y,U,Ts,'Frequency',W)
data_fr =

Frequency domain data set with responses at 501 frequencies.
Frequency range: 0 to 31.416 rad/seconds
Sample time: 0.1 seconds                                                                              
                                                                                                      
Outputs      Unit (if specified)                                                                      
   y1                                                                                                 
                                                                                                      
Inputs       Unit (if specified)                                                                      
   u1                                                                                                 
                                                                                                      

プロパティを調べます。周波数領域の iddata オブジェクトには、周波数ベクトルの Frequency や周波数単位の FrequencyUnit など、周波数に固有のプロパティが含まれています。一方、時間領域の iddata オブジェクトには、時間領域データの TstartSamplingInstants など、時間に固有のプロパティが含まれています。

get(data_fr)
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.1000
     FrequencyUnit: 'rad/TimeUnit'
         Frequency: [501x1 double]
          TimeUnit: 'seconds'
    ExperimentName: 'Exp1'
             Notes: {}
          UserData: []

周波数のプロパティの内容を変数 F に代入します。

F = data_fr.Frequency;

データの周波数単位を取得します。サンプル時間の単位は TimeUnit プロパティで設定されます。

frequ = data_fr.FrequencyUnit
frequ = 
'rad/TimeUnit'
timeu = data_fr.TimeUnit
timeu = 
'seconds'

逆フーリエ変換関数 ifft を使用して data_fr を変換し、時間領域に戻します。

data_t = ifft(data_fr)
data_t =

Time domain data set with 1000 samples.
Sample time: 0.1 seconds                
                                        
Outputs      Unit (if specified)        
   y1                                   
                                        
Inputs       Unit (if specified)        
   u1                                   
                                        
get(data_t)
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.1000
              Tstart: 0.1000
    SamplingInstants: [1000x1 double]
            TimeUnit: 'seconds'
      ExperimentName: 'Exp1'
               Notes: {}
            UserData: []

iddata オブジェクトのプロパティを表示します。オブジェクトの作成時と作成後にプロパティを変更します。

入出力データを読み込みます。

load dryer2_data input output

iddata オブジェクトを作成します。

data = iddata(output,input,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                                   
                                        

iddata オブジェクトのすべてのプロパティを表示します。

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: 0.0800
    SamplingInstants: [1000x1 double]
            TimeUnit: 'seconds'
      ExperimentName: 'Exp1'
               Notes: {}
            UserData: []

iddata オブジェクトの作成時に、名前と値のペアの引数を使用してプロパティを指定できます。実験の名前を既定の設定から Dryer2 に変更して、同じデータ セットから iddata オブジェクトを作成します。

data = iddata(output,input,0.08,'ExperimentName','Dryer2')
data =

Experiment Dryer2.Time domain data set with 1000 samples.
Sample time: 0.08 seconds                                 
                                                          
Outputs      Unit (if specified)                          
   y1                                                     
                                                          
Inputs       Unit (if specified)                          
   u1                                                     
                                                          

既存の iddata オブジェクトに対するプロパティの値を変更するには、ドット表記を使用します。サンプル時間のプロパティ Ts を 0.05 秒に変更します。

data.Ts = 0.05
data =

Experiment Dryer2.Time domain data set with 1000 samples.
Sample time: 0.05 seconds                                 
                                                          
Outputs      Unit (if specified)                          
   y1                                                     
                                                          
Inputs       Unit (if specified)                          
   u1                                                     
                                                          

プロパティの名前では大文字と小文字は区別されません。また、最初の数文字でプロパティが一意に識別されれば、完全なプロパティの名前を入力する必要はありません。

data.exp = "Dryer2 January 2015"
data =

Experiment Dryer2 January 2015.Time domain data set with 1000 samples.
Sample time: 0.05 seconds                                              
                                                                       
Outputs                   Unit (if specified)                          
   y1                                                                  
                                                                       
Inputs                    Unit (if specified)                          
   u1                                                                  
                                                                       

出力の値にアクセスする際は data.ydata.OutputData の短縮形として、入力の値にアクセスする際は data.udata.InputData の短縮形として使用できます。

y_data = data.y;
u_data = data.u;

バージョン履歴

R2006a より前に導入