Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

smoothdata

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

説明

B = smoothdata(A) は、経験則的に決定された固定ウィンドウの長さを使用して、ベクトルの要素の移動平均を返します。ウィンドウはベクトルの長さだけ下にスライドし、各ウィンドウ内の要素の平均を計算します。

  • 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,window] = smoothdata(___) は移動ウィンドウの長さも返します。

すべて折りたたむ

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

x = 1:100;
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")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Input Data, Smoothed Data.

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

x = 1:100;
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")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent s1, s2, s3.

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

x = 1:100;
A = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
[B,window] = smoothdata(A,"gaussian");
window
window = 4

長さ 20 の大きいウィンドウを使用して元のデータを平滑化します。両方のウィンドウの長さについて、平滑化後のデータをプロットします。

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

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

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")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Ignore Missing, Include Missing.

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

x = 1:100;
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")

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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 次多項式に従って平滑化します。この方法は、データが急速に変動する場合に他の方法より効果的です。

ウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして指定します。

window が正の整数スカラーである場合、ウィンドウは現在の要素を中心にして配置され、window-1 個の隣接する要素を含みます。window が偶数である場合、ウィンドウは現在の要素および直前の要素を中心にして配置されます。

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

A が timetable である場合、または SamplePointsdatetime または duration ベクトルとして指定されている場合、windowduration 型でなければならず、ウィンドウはサンプル点を基準に計算されます。

ウィンドウの長さが出力引数としても指定されている場合、出力値は入力値と一致します。

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

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

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

名前と値の引数

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

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、文字ベクトル、または 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 の値でヒューリスティックなウィンドウ サイズをスケーリングすることにより、平滑化のレベルを調整します。値が 0 に近いと、移動ウィンドウの長さは小さくなり、平滑化が小さくなります。値が 1 に近いと、移動ウィンドウの長さは大きくなり、平滑化が大きくなります。ヒューリスティックなウィンドウ サイズを決定する基になる入力データによっては、smoothdata で使用されるウィンドウ サイズに SmoothingFactor の値が大きく影響しない場合もあります。

SmoothingFactor は既定で 0.25 であり、window が指定されていない場合にのみ指定できます。

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

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

出力引数

すべて折りたたむ

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

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

ウィンドウの長さ。正の整数スカラー、正の整数の 2 要素ベクトル、正の duration スカラーまたは正の duration の 2 要素ベクトルとして返されます。

入力引数として window が指定されている場合、出力値は入力値と一致します。入力引数として window が指定されていない場合、この値は入力データに基づいて smoothdata により経験則的に決定されるスカラーです。

アルゴリズム

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

拡張機能

バージョン履歴

R2017a で導入

すべて展開する