Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

smoothdata

ノイズの多いデータの平滑化

説明

B = smoothdata(A) は、移動平均を使用して A のエントリを平滑化します。smoothdataA のエントリから移動ウィンドウ サイズを決定します。ウィンドウはベクトルの長さだけ下にスライドし、各ウィンドウ内の要素の平均を計算します。

  • A が行列の場合、smoothdataA の各列の移動平均を下へと計算します。

  • A が多次元配列の場合、smoothdata は、サイズが 1 に等しくない A の最初の次元に沿って演算します。

  • A が数値変数をもつ table または timetable の場合、smoothdataA の各変数につき別々に演算します。

B = smoothdata(A,dim) は、演算の対象とする A の次元を指定します。たとえば、A が行列の場合、smoothdata(A,2)A の各行のデータを平滑化します。

B = smoothdata(___,method) は前述の構文のいずれかの平滑化法を指定します。たとえば、smoothdata(A,"sgolay") では、Savitzky-Golay フィルターを使用して A のデータを平滑化します。

B = smoothdata(___,method,window) は、平滑化法のウィンドウ サイズを指定します。たとえば、smoothdata(A,"movmedian",5) の場合、要素が 5 つあるスライディング ウィンドウの中央値を取得して、A のデータを平滑化します。

B = smoothdata(___,nanflag) は、ANaN 値を省略するか含めるかを指定します。たとえば、smoothdata(A,"includenan") は平滑化時にすべての NaN 値を含めます。既定では、smoothdataNaN 値を無視します。

B = smoothdata(___,Name,Value) は、名前と値の引数を 1 つ以上使用して、平滑化に関する追加のパラメーターを指定します。たとえば、t が時間値のベクトルである場合、smoothdata(A,"SamplePoints",t)t の時間を基準にして A のデータを平滑化します。

[B,winsize] = smoothdata(___) は移動ウィンドウ サイズも返します。

代替方法

smoothdata の機能を対話的に使用するには、ライブ スクリプトに [データの平滑化] タスクを追加します。

Smooth Data task in the Live Editor

すべて折りたたむ

ノイズの多いデータを含むベクトルを作成し、移動平均を使用してデータを平滑化します。

x = 1:100;
rng(0,"twister")
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);

B = smoothdata(A);

元のデータと平滑化後のデータをプロットします。

plot(x,A)
hold on
plot(x,B)
legend("Input Data","Smoothed Data")

ノイズの多い 3 つの信号を表す行をもつ行列を作成します。移動平均を使用して 3 つの信号を平滑化し、平滑化後のデータをプロットします。

x = 1:100;
rng(0,"twister")
s1 = cos(2*pi*0.03*x+2*pi*rand) + 0.5*randn(1,100);
s2 = cos(2*pi*0.04*x+2*pi*rand) + 0.4*randn(1,100) + 5;
s3 = cos(2*pi*0.05*x+2*pi*rand) + 0.3*randn(1,100) - 5;
A = [s1; s2; s3];

B = smoothdata(A,2);

plot(x,B(1,:))
hold on
plot(x,B(2,:))
plot(x,B(3,:))
legend("s1","s2","s3")

ガウス加重移動平均フィルターを使用して、ノイズの多いデータのベクトルを平滑化します。フィルターで使用したウィンドウ サイズを表示します。

x = 1:100;
rng(0,"twister")
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);

[B,winsize] = smoothdata(A,"gaussian");
winsize
winsize = 4

20 個の要素を含む大きいウィンドウを使用して元のデータを平滑化します。両方のウィンドウ サイズについて、平滑化後のデータをプロットします。

C = smoothdata(A,"gaussian",20);
plot(x,B)
hold on
plot(x,C)
legend("Small Window","Large Window")

NaN 値を含むノイズの多いベクトルを作成し、NaN 値を無視してデータを平滑化します。

rng(0,"twister")
A = [NaN randn(1,48) NaN randn(1,49) NaN];
B = smoothdata(A);

NaN 値を含むデータを平滑化します。NaN 値を含むウィンドウでの平均値は NaN です。

C = smoothdata(A,"includenan");

BC の平滑化後のデータをプロットします。

plot(1:100,B,"-o")
hold on
plot(1:100,C,"-x")
legend("Ignore Missing","Include Missing")

時間ベクトル t に対応するノイズの多いデータのベクトルを作成します。t の時間を基準としてデータを平滑化し、元のデータと平滑化後のデータをプロットします。

x = 1:100;
rng(0,"twister")
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
t = datetime(2017,1,1,0,0,0) + hours(0:99);
B = smoothdata(A,"SamplePoints",t);

plot(t,A)
hold on
plot(t,B)
legend("Input Data","Smoothed Data")

入力引数

すべて折りたたむ

入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。A が table または timetable の場合、変数を数値にするか、名前と値の引数 DataVariables を使用して数値変数を明示的にリストしなければなりません。変数の指定は、非数値変数も含んでいる table を扱うする際に便利です。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

複素数のサポート: あり

演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。

mn 列の入力行列 A を考えます。

  • smoothdata(A,1) は、A の各列のデータを平滑化し、mn 列の行列を返します。

    smoothdata(A,1) column-wise operation

  • smoothdata(A,2) は、A の行のデータを平滑化し、mn 列の行列を返します。

    smoothdata(A,2) row-wise operation

入力データが table または timetable の場合、dim はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。

平滑化法。以下の値のいずれかとして指定します。

  • "movmean"A の各ウィンドウの平均。このメソッドは、データの周期的なトレンドを低減するのに便利です。

  • "movmedian"A の各ウィンドウの中央値。このメソッドは、外れ値が存在する場合にデータの周期的なトレンドを低減するのに便利です。

  • "gaussian"A の各ウィンドウのガウス加重平均。

  • "lowess"A の各ウィンドウの線形回帰。この方法は計算量が多くなる場合がありますが、不連続点は少なくなります。

  • "loess"A の各ウィンドウの 2 次回帰。この方法は "lowess" より計算量がやや多くなります。

  • "rlowess"A の各ウィンドウのロバスト線形回帰。この方法は "lowess" より計算量が多くなりますが、外れ値に対してよりロバストになります。

  • "rloess"A の各ウィンドウのロバスト 2 次回帰。この方法は "loess" より計算量が多くなりますが、外れ値に対してよりロバストになります。

  • "sgolay" — Savitzky-Golay フィルター。A の各ウィンドウで近似される 2 次多項式に従って平滑化します。このメソッドは、データが急速に変動する場合に他のメソッドより効果的です。

ウィンドウ サイズ。正の整数または duration スカラー、あるいは非負の整数または duration 値の 2 要素ベクトルとして指定します。smoothdata はサンプル点を基準として相対的にウィンドウを定義します。

  • window が正の整数スカラーである場合、ウィンドウは長さ window で、現在の要素を中心にして配置されます。

  • window が非負の整数の 2 要素ベクトル [b f] である場合、ウィンドウには現在の要素、b 個前までの要素、f 個後までの要素が含まれます。

A が timetable であるか、SamplePointsdatetime 値または duration 値が含まれている場合、windowduration 型でなければなりません。

ウィンドウ位置の詳細については、移動ウィンドウ サイズを参照してください。

例: smoothdata(A,"movmean",4)

例: smoothdata(A,"movmedian",[2 3])

欠損値の条件。次の値のいずれかとして指定します。

  • "omitmissing" または "omitnan" — 平滑化時に ANaN 値を無視します。ウィンドウ内のすべての要素が NaN の場合、B の対応する要素は NaN です。"omitmissing""omitnan" の動作は同じです。

  • "includemissing" または "includenan" — 平滑化時に ANaN 値を含めます。ウィンドウ内のいずれかの要素が NaN の場合、B の対応する要素は NaN です。"includemissing""includenan" の動作は同じです。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

例: smoothdata(A,SmoothingFactor=0.5)

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: smoothdata(A,"SmoothingFactor",0.5)

データ オプション

すべて折りたたむ

サンプル点。サンプル点のベクトル、または次の表のいずれかのオプション (入力データが table の場合) として指定します。サンプル点はデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔である必要はありません。既定の設定はベクトル [1 2 3 ...] です。

入力データが table の場合は、次のいずれかのオプションを使用して、サンプル点を table 変数として指定できます。

インデックス方式

変数名:

  • string スカラーまたは文字ベクトル

  • "A" または 'A'A という名前の変数

変数インデックス:

  • table 内の変数の位置を参照するインデックス番号

  • logical ベクトル。通常、このベクトルの長さは変数の数と同じですが、末尾の 0 値や false 値は省略できます。

  • 3 — table の 3 番目の変数

  • [false false true] — 3 番目の変数

関数ハンドル:

  • 入力として table 変数をとり、logical スカラーを返す関数ハンドル

  • @isnumeric — 数値を含んでいる 1 つの変数

変数の型:

  • 指定した型の 1 つの変数を選択する vartype 添字

  • vartype("numeric") — 数値を含んでいる 1 つの変数

メモ

入力データが timetable の場合、この名前と値の引数はサポートされません。timetable では、行時間のベクトルをサンプル点として使用します。別のサンプル点を使用するには、目的のサンプル点が行時間に含まれるように timetable を編集しなければなりません。

移動ウィンドウは、サンプル点を基準にして定義されます。たとえば、t が入力データに対応する時間のベクトルである場合、smoothdata(rand(1,10),3,"SamplePoints",t) には t(i)-1.5 から t(i)+1.5 までの時間間隔を表すウィンドウがあります。

サンプル点ベクトルのデータ型が datetime または duration である場合、ウィンドウ サイズの型は duration でなければなりません。

例: smoothdata(A,"SamplePoints",0:0.1:10)

例: smoothdata(T,"SamplePoints","Var1")

データ型: double | single | datetime | duration

演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables の値は、入力 table のどの変数を平滑化するかを示します。

DataVariables で指定されていない table 内の他の変数は、平滑化されずに出力に渡されます。

インデックス方式

変数名:

  • string または文字ベクトル

  • string 配列または文字ベクトルの cell 配列

  • pattern オブジェクト

  • "A" または 'A'A という名前の変数

  • ["A" "B"] または {'A','B'}A および B という名前の 2 つの変数

  • "Var"+digitsPattern(1)"Var" の後に数字 1 桁が続く名前の変数

変数インデックス:

  • table 内の変数の位置を参照するインデックス番号

  • 数値のベクトル

  • logical ベクトル。通常、このベクトルの長さは変数の数と同じですが、末尾の 0 値や false 値は省略できます。

  • 3 — table の 3 番目の変数

  • [2 3] — table の 2 番目と 3 番目の変数

  • [false false true] — 3 番目の変数

関数ハンドル:

  • 入力として table 変数をとり、logical スカラーを返す関数ハンドル

  • @isnumeric — 数値を含んでいるすべての変数

変数の型:

  • 指定した型の変数を選択する vartype 添字

  • vartype("numeric") — 数値を含んでいるすべての変数

例: smoothdata(T,"DataVariables",["Var1" "Var2" "Var4"])

値置換インジケーター。A が table または timetable の場合に、次の値のいずれかとして指定します。

  • true または 1 — 入力 table 変数を、平滑化されたデータを含む table 変数に置き換えます。

  • false または 0 — 入力 table 変数に、平滑化されたデータを含む table 変数を追加します。

入力データがベクトル、行列、または多次元配列の場合、ReplaceValues はサポートされません。

例: smoothdata(T,"ReplaceValues",false)

平滑化オプション

すべて折りたたむ

ウィンドウ サイズ係数。0 から 1 の範囲のスカラーとして指定します。通常、SmoothingFactor の値により、smoothdataA のエントリから決定するウィンドウ サイズをスケーリングすることで、平滑化のレベルを調整します。値が 0 に近いと、移動ウィンドウ サイズは小さくなり、平滑化が小さくなります。値が 1 に近いと、移動ウィンドウ サイズは大きくなり、平滑化が大きくなります。smoothdata がウィンドウ サイズを決定するために使用するエントリによっては、ウィンドウ サイズに SmoothingFactor の値が大きく影響しない場合もあります。

既定では、SmoothingFactor は 0.25 です。SmoothingFactor を指定できるのは、window を指定しない場合のみです。

Savitzky-Golay 次数。非負の整数として指定します。この名前と値の引数は、指定された平滑化法が "sgolay" である場合にのみ指定できます。Degree の値は、各ウィンドウ内のデータを近似する Savitzky-Golay フィルターの多項式の次数に対応し、既定値は 2 です。

サンプル点が一様な場合、Degree の値はウィンドウ サイズより小さくなければなりません。サンプル点が一様でない場合、この値はどのウィンドウの最大点数よりも小さくなければなりません。

出力引数

すべて折りたたむ

平滑化されたデータ。ベクトル、行列、多次元配列、table、または timetable として返されます。

B は、ReplaceValues の値が false の場合を除き、A と同じサイズになります。ReplaceValues の値が false の場合、B の幅は入力データの幅と指定したデータ変数の数の合計となります。

ウィンドウ サイズ。正の整数または duration スカラー、あるいは非負の整数または duration 値の 2 要素ベクトルとして返されます。

window を入力引数として指定した場合、winsizewindow と同じになります。window を入力引数として指定しなかった場合、smoothdataA のエントリからウィンドウ サイズを決定します。

詳細

すべて折りたたむ

移動ウィンドウ サイズ

次の表では、既定の等間隔のサンプル点ベクトル [1 2 3 4 5 6 7] におけるウィンドウ位置を示します。

説明

ウィンドウ サイズと位置

ウィンドウ内のサンプル点

スカラー ウィンドウ サイズの場合、ウィンドウの先頭のエッジは含まれ、ウィンドウの後方のエッジは含まれません。

window = 3

現在のサンプル点 = 4

3、4、5

Given elements 1 to 7, if the current sample point is 4, then the corresponding window spans the range [2.5, 5.5).

window = 4

現在のサンプル点 = 4

2、3、4、5

Given elements 1 to 7, if the current sample point is 4, then the corresponding window spans the range [2, 6).

ベクトル ウィンドウ サイズの場合、先頭のエッジおよび後方のエッジは含まれます。

window = [2 2]

現在のサンプル点 = 4

2、3、4、5、6

Given elements 1 to 7, if the current sample point is 4, then the corresponding window spans the range [2, 6].

入力データの端点に近いサンプル点では、以下の移動統計平滑化法ではウィンドウが切り捨てられるため、最初のサンプル点から開始するか、最後のサンプル点で終了するようになります。

  • "movmean"

  • "movmedian"

  • "gaussian"

window = [2 2]

現在のサンプル点 = 2

1、2、3、4

Given elements 1 to 7, if the current sample point is 2, then the corresponding window spans the range [1, 4].

入力データの端点に近いサンプル点では、以下の局所回帰平滑化法ではウィンドウがシフトされ、最初または最後のサンプル点が含まれるようになります。

  • "lowess"

  • "loess"

  • "rlowess"

  • "rloess"

  • "sgolay"

window = [2 2]

現在のサンプル点 = 2

1、2、3、4、5

Given elements 1 to 7, if the current sample point is 2, then the corresponding window spans the range [1, 5].

アルゴリズム

平滑化法のウィンドウ サイズが指定されていない場合、smoothdata は経験則に基づいて既定のウィンドウ サイズを計算します。平滑化係数 τ について、経験則により入力データのエネルギーの約 100*τ パーセントを減衰する移動平均ウィンドウ サイズを推定します。

拡張機能

バージョン履歴

R2017a で導入

すべて展開する