取得したデータの周期性をみつけたい
18 views (last 30 days)
Show older comments
[Matlab初心者です]
取得したtableのデータが
:
FFFE
FFFF
FFFF
0000
0000
0000
0001
0001
0002
:
FFFE
FFFF
FFFF
0000
0000
0000
0001
0001
0002
:
のような周期を持っています。
周期ごとに 別tableの別Columnに格納したいです。
Col1 Col2
-----------------
0000 0000
0000 0000
0000 0000
0001 0001
0001 0001
0002 0002
: :
matlabの関数に何か周期性をみつける関数はあるのでしょうか?
2 Comments
Accepted Answer
Kazuya
on 21 Nov 2018
Edited: Kazuya
on 21 Nov 2018
地味なコードで好みが分かれそうですが、一例として参考まで。
hoge = [
"0000"
"0001"
"FFFF"
"0000"
"0001"
"FFFF"
"0000"
"0001"
"FFFF"]; % ダミーデータ
idx1 = hoge == "FFFF"; % FFFF である行を見つけます。
idx2 = hoge == "0000"; % 0000 である行を見つめます。
idx = idx1(1:end-1) & idx2(2:end); % 1つずらして論理和を取ると FFFF から 0000 に変化する位置が分かります。
idx = [1; idx] % 元データと行数を合わせます(一番頭は 0000 と仮定)
loc0 = find(idx) % find で何行目に 0000 があるかを求める
% この例だと loc0 = 1,4,7
% 均等に3列に分けられる列数であると仮定して分割
hoge1 = reshape(hoge,loc0(2)-1,[])
hoge2 = array2table(hoge1) % table 型に変換
結果として
hoge2 =
3×3 table
hoge11 hoge12 hoge13
______ ______ ______
"0000" "0000" "0000"
"0001" "0001" "0001"
"FFFF" "FFFF" "FFFF"
となります。
2 Comments
Kazuya
on 21 Nov 2018
配列 idx の先頭に1を追加してます。例えば
>> idx = [2;3;4]
idx =
2
3
4
に対して
>> idx = [1; idx]
idx =
1
2
3
4
1つずらして論理和をとったのでもともとの hoge の行数に対して、idx の行数が1つ減ってしまうので、比較をしやすいように 1 を追加して行数を合わせてます。hoge 内で FFFF -> 0000 と変化する位置が分かりやすいかな・・と。
More Answers (3)
Kei Otsuka
on 19 Nov 2018
Signal Processing Toolboxをお持ちであれば、自己相関や周波数解析を利用して
周期性を検出するような例題を試すことができます。
記載頂いたデータは16進表記(符号あり?)でしょうか。その場合はhex2dec等で10進数に
変換してからお試しください。
0 Comments
See Also
Categories
Find more on Axis Labels 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!