【編集済】movmeanと'Endpoints'について
■端点で起きていること
A = [4 8 6 -1 -2 -3 -1 3 4 5];
上記では1行10列のAがあります
これを窓のサイズ 3 で移動平均をかけます
B=movmean(A,3)
B =
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)))
窓の大きさが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 =
6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000
ゼロで埋める場合は
M = movmean(A,3,'Endpoints',0)
M =
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 =
4.3333 6.0000 4.3333 1.0000 -2.0000 -2.0000 -0.3333 2.0000 4.0000 3.3333