私はMatlab/Simulinkを使用しているため、いくつかのシステム分析を行う必要があります。 異なるシステムと信号条件の解析アルゴリズムをテストする必要があるので、私は、いくつかの「実際の」実験を行うのではなく、単純化されていますが、データ生成に適したSimulinkモデルを作成することにしました。 このモデルはget_data()
関数で呼び出され、データは期待通りに変数d
に返されます。iddataオブジェクトを作成すると、時間軸に沿ってデータがシフトするようです。
私は与えられたシステムの伝達関数を推定する必要があるので、データ を適切なデータ型に提供するために、iddata
オブジェクトを作成しなければなりませんでした。 simulinkから取得したタイムステップはdata_time
に格納され、システムの入出力データはdata_in
respに格納されます。 data_out
。 これらの3つの変数は、 伝達関数推定のために必要に応じてiddataオブジェクトdata_measured
を作成するためにiddata()
に渡されます。これは以下のスニペットは、さらなる符号化およびデータ分析において
% get data from simulink simulation executed in get_data function
d = get_data();
% extract data into variables
data_time = d.time;
data_in = d.data(:, 1);
data_out = d.data(:, 2);
% generate a time-domain data object (sample time given from simulink's noise generation)
data_measured = iddata(data_out, data_in, 0.1);
Iは
any(data_measured.sa == data_time)
として data_time
に与えられるのiddataオブジェクトdata_measured
の時刻データが同じではないことを発見し0
が表示され、いずれの要素も1
ではなく、指定された配列が同じでないことが示されます。
any()
の上記の呼び出しは、私は
subplot(3, 1, 1)
plot(data_time, data_in);
title('Data retrieved from simulink')
subplot(3, 1, 2)
plot(data_measured.sa, data_measured.u);
title('Data as in iddata-object')
subplot(3, 1, 3)
plot(data_time, data_in, data_measured.sa, data_measured.u);
title('Data comparison')
をプロットを使用してdata_in
data_time
その 対応する時間データ対とdata_measured.u
対data_measured.sa
両方をプロットすることを決定し、等しくない行列の次元に関するエラーが発生しなかったので以下の通りである:あなたが見ることができるように
、とのずれがありますIMHOはそこにはいけない2つのプロット。 信号が立ち上がる前に小さな領域があり、 ノイズがありませんので、この時間のシフトはデータの始まりですぐに開始されないようです。しかし、simulinkは、真ん中のプロットからわかるように、完全な信号にノイズを追加しています。
したがって、データをiddata()
に渡すように見えるので、何とか時間軸に沿ってデータが切り捨てられ、いくつかの追加データが挿入されます。 どこから来たのですか?何か不足していますか?