構造体のデータを統合し、必要な取り出して、データを並べ替える方法
6 views (last 30 days)
Show older comments
信号処理した後のデータをCSVファイルに出力したいので、教えてくださいという質問をしたことが
ありますが、そこまで行き着く過程でうまくいかないことがわかり、質問します。
<質問事項>
ー背景説明ー
ある実験データを3次元的に持たせています。(1つの加振データが39チャンネル分で、2048個の周波数領域
FRF:1x39 struct, FRF1,FRF2, FRF3 ・・・FRF12 ) 構造体のなかに、伝達関数の具体的なデータTxyがある
Txyは複素数データです。
C = {FRF1.Txy;FRF2.Txy; ・・・FRF12.Txy}
C:12x39 cell この形式でデータを統合しました。
この統合されたデータから、各周波数領域の伝達関数を取り出し、逆行列をさせるというのが目的です。
例えば、C1として 2048x12x39 cell に変換し、さらに各周波数毎に、 12x39のTxyのデータをmatrix inverse を計算し、
さらにそのデータを格納する。
ー質問事項ー
例えば
For fre1 = 1 : 2048
for n1=1:12
for n2=1:39
M1= C{n1,n2);
C2 {fre1,n1,n2} = {fre1,n1,M1(n2)}
end
end
end
ここで各周波数fre1ごとの12x39の行列として取出し、取り出した後に、逆行列を作成し、それを格納したい
という目的に対して、うまくいきません。
上記に事例を記載しましたが、実際は、数値を取り出そうとしても、セル配列が出てきて{1x3 cell}
取り出しができません。初期のデータの持たせ方、取り出し方が悪いのかもしれません。
どのようにしたら、データを取り出し、全チャンネルと加振方法による各周波数帯毎の伝達関数マトリックス(12x39)
を作成し、格納できるでしょうか?
よろしくお願いします。
1 Comment
Musashi Ito
on 15 Jan 2020
Edited: Musashi Ito
on 15 Jan 2020
ご質問で指摘の通り、構造体を使用するとプログラミングの難易度が上がるかなぁと思います。特に、データの取り出しや並べ替え、連結などで for 文を記述する必要がありそうですので・・・
いったん、データを整理してから数値データ (2048x12x39) などで試してみるのはいかがでしょうか。うまくできたら構造体で試してみると良さそうです。
Answers (2)
Musashi Ito
on 21 Jan 2020
cat コマンドでしたら、例えば以下のような具合に記述すれば 3 次元に連結できるかなと思います。
cat(3,FRF_2_x.Txy,FRF_2_y.Txy,FRF_2_z.Txy)
See Also
Categories
Find more on マルチレート信号処理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!