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

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

採用された回答

Hernia Baby
Hernia Baby 2021 年 10 月 15 日
編集済み: Hernia Baby 2021 年 10 月 18 日
【編集済】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 件のコメント
Hernia Baby
Hernia Baby 2021 年 10 月 18 日
編集しました
ちなみにゼロ埋めする場合は、
xavg = movmean(x,k,'Endpoints',0)
で合っています
佳奈子 浜口
佳奈子 浜口 2021 年 10 月 19 日
本当にありがとうございます!
とてもよくわかりました.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB 入門 についてさらに検索

Community Treasure Hunt

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

Start Hunting!