MATLAB 基礎 データ解析移動ウィンドウの操作(3/7) 移動平均 追加の練習

7 views (last 30 days)
佳奈子 浜口
佳奈子 浜口 on 15 Oct 2021
Commented: 佳奈子 浜口 on 19 Oct 2021
データの端点付近で移動平均の曲線の形状が変化しているのがわかります。17 点のウィンドウには現在の点の両側に 8 点必要です。最初と最後の 8 つのデータ点では、関数 movmeanによって既定で必要に応じてウィンドウが短縮されます。オプションのパラメーター 'Endpoints' を指定することで、この動作を変更できます。17 点のウィンドウ全体を埋めるため、ゼロでウィンドウを埋めるか、端点に近すぎる値を破棄してみてください。
こちらの問題の,movmeanの 'Endpoints' のパラメーターの指定で,ゼロでウィンドウを埋めるとはどういう操作でしょうか?

Accepted Answer

Hernia Baby
Hernia Baby on 15 Oct 2021
Edited: Hernia Baby on 18 Oct 2021
【編集済】movmeanと'Endpoints'について
■端点で起きていること
movmean のリンクからやりましょう
A = [4 8 6 -1 -2 -3 -1 3 4 5];
size(A)
ans = 1×2
1 10
上記では1行10列のAがあります
これを窓のサイズ 3 で移動平均をかけます
B=movmean(A,3)
B = 1×10
6.0000 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000 4.5000
これは3つずつ数字を取りながら、その平均をとっています
説明には以下のような注意書きがあります
k が奇数である場合、ウィンドウは現在位置にある要素を中心にして配置されます。
k が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。
これは窓のサイズが 3 であると 中心の2番目 を窓の中心として動かすという意味です
この時端点では、真ん中2番目が中心なので1番目が空白になります
つまり
 b1 = □ 4 8
 b2 = 4 8 6
 b3 = 8 6 -1
 …
 b10 = 4 5 □
のように抽出されて端点では
 B(1) = (4 + 8) / 2 = 6
 B(10) = (4 + 5) / 2 = 4.5
となってしまいます
disp(sprintf('B_1 = %G\nB_10 = %G',B(1),B(10)))
B_1 = 6 B_10 = 4.5
窓の大きさが3くらいだったらいいのですが、
17点の窓だと中心が9なので、8点分の空欄ができてしまいますね
(y1+y2+・・・y17)/17 と (y1+y2+・・・y9)/9では平均の取り方がだいぶ違います
■'Endpoints'について
これをなくすためにはどうすべきか?
ここでで'Endpoints'の登場です
'discard'は空欄を平均したもの、つまりB(1)とB(10)を消去しします
M = movmean(A,3,'Endpoints','discard')
M = 1×8
6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000
ゼロで埋める場合は
M = movmean(A,3,'Endpoints',0)
M = 1×10
4.0000 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000 3.0000
1 で埋める場合は
M = movmean(A,3,'Endpoints',1)
M = 1×10
4.3333 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000 3.3333
  3 Comments
Hernia Baby
Hernia Baby on 18 Oct 2021
編集しました
ちなみにゼロ埋めする場合は、
xavg = movmean(x,k,'Endpoints',0)
で合っています
佳奈子 浜口
佳奈子 浜口 on 19 Oct 2021
本当にありがとうございます!
とてもよくわかりました.

Sign in to comment.

More Answers (0)

Categories

Find more on MATLAB 入門 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!