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) は、前述の任意の構文について NaN 値をどのように処理するかを指定します。各ウィンドウ内での計算時に、'omitnan'NaN 値を無視し、'includenan' は計算に含めます。

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,'-o',x,B,'-x')
legend('Original Data','Smoothed Data')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original 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,:),x,B(2,:),x,B(3,:))

Figure contains an axes object. The axes object contains 3 objects of type line.

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

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,'-o',x,C,'-x')
legend('Small Window','Large Window')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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',1:100,C,'-x')
legend('Ignore NaN','Include NaN')

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

時間ベクトル 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,'-o',t,B,'-x')
legend('Original Data','Smoothed Data')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original 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 型でなければならず、ウィンドウはサンプル点を基準に計算されます。

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

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

  • 'omitnan' — 入力の NaN 値を無視します。ウィンドウがすべての NaN 値を含む場合、smoothdataNaN を返します。

  • 'includenan' — 各ウィンドウで計算する場合に NaN も対象にします。この場合、結果は NaN となります。

名前と値の引数

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

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

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

データ オプション

すべて折りたたむ

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

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

table 入力のオプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたはスカラー string

'Var1'

"Var1"

変数インデックスのスカラー

table 変数のインデックスのスカラー

3

logical ベクトル

各要素が table 変数に対応する logical ベクトル (対応する変数をサンプル点として指定する場合は true、その他の要素はすべて false)

[true false false]

関数ハンドル

入力として table 変数をとり、1 つの table 変数のみを true とする logical スカラーを返す関数ハンドル

@isnumeric

vartype 添字

1 つの変数のみに対して添字を返す関数 vartype によって生成される table の添字

vartype('numeric')

メモ

入力データが 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")

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

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

オプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたはスカラー string

'Var1'

"Var1"

変数名のベクトル

各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

{'Var1' 'Var2'}

["Var1" "Var2"]

変数インデックスのスカラーまたはベクトル

table 変数インデックスのスカラーまたはベクトル

1

[1 3 5]

logical ベクトル

各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

[true false true]

関数ハンドル

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

@isnumeric

vartype 添字

関数 vartype によって生成される table の添字

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 で導入

すべて展開する