MATLAB Answers

構造体のデータを統合​し、必要な取り出して​、データを並べ替える​方法

4 views (last 30 days)
Hideaki Ishii
Hideaki Ishii on 14 Jan 2020
Commented: Hideaki Ishii on 22 Jan 2020
信号処理した後のデータを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
Musashi Ito on 15 Jan 2020
ご質問で指摘の通り、構造体を使用するとプログラミングの難易度が上がるかなぁと思います。特に、データの取り出しや並べ替え、連結などで for 文を記述する必要がありそうですので・・・
いったん、データを整理してから数値データ (2048x12x39) などで試してみるのはいかがでしょうか。うまくできたら構造体で試してみると良さそうです。

Sign in to comment.

Answers (2)

Hideaki Ishii
Hideaki Ishii on 16 Jan 2020
コメントありがとうございます。
現在、数値データのみでまとめようとしているのですが、うまくセル配列にできません。
FRF_1_x:ここには1x39 struct  FRF_1_x.Txy として数値データを取り出しました。 値は2048x1 complex doubleでした。
2048x12x39のcell配列にしようと思っているのですが、
D1=[FRF_2_x.Txy;FRF_2_y.Txy;FRF_2_z.Txy;・・・・FRF_5_y.Txy; FRF_5_z.Txy] D1は24576x39 complex doubleとなります。
D2=[FRF_2_x.Txy,FRF_2_y.Txy,FRF_2_z.Txy,・・・・FRF_5_y.Txy, FRF_5_z.Txy] D2は2048x468 complex doubleとなります。
ここで、 2048x12x39の3次元の配列にしたいのですが、うまくいきません。D1の式の括弧に、[ ]の代わりに{ }を使うと、12x39 cellとなりますが3次元的に配列が作れず、困っております。
catコマンドでやってみたのですが、やはりうまく作れません。数値データの3次元の並びを作成する方法をご存じないでしょうか?
よろしくお願いします。

  0 Comments

Sign in to comment.


Musashi Ito
Musashi Ito on 21 Jan 2020
cat コマンドでしたら、例えば以下のような具合に記述すれば 3 次元に連結できるかなと思います。
cat(3,FRF_2_x.Txy,FRF_2_y.Txy,FRF_2_z.Txy)

  1 Comment

Hideaki Ishii
Hideaki Ishii on 22 Jan 2020
誠にありがとうございました。
あとでデータを取り出しを考えると、
cat(3,[FRF_2_x.Txy],[FRF_2_y.Txy],[FRF_2_z.Txy])
このような方法で、2048x39x3のcellが得ることができました。右側に継ぎ足して、2048x39x12まで拡張し
39x12x2048に入れ替えることができ、目的の各周波数単位ごとのマトリックスを得ることができました。
ありがとうございました。かなり長時間つまずいて、他の方法を考えていたのですが、見つからなくて、この方法での
目途が付きました。
感謝いたします。

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!