ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

smoothdata

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

構文

B = smoothdata(A)
B = smoothdata(A,dim)
B = smoothdata(___,method)
B = smoothdata(___,method,window)
B = smoothdata(___,nanflag)
B = smoothdata(___,Name,Value)
[B,window] = smoothdata(___)

説明

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

  • A が行列の場合、smoothdata は各列の移動平均を計算します。

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

  • A が数値変数をもつ table または timetable の場合、smoothdata は各変数で別々に動作します。

B = smoothdata(A,dim) は、A の次元 dim に沿って処理します。たとえば、A が行列の場合、smoothdata(A,2)A の各行のデータを平滑化します。

B = smoothdata(___,method) は前述の構文のいずれかの平滑化法を指定します。たとえば、B = 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')

ノイズの多い 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,:))

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

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

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

時間ベクトル 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')

入力引数

すべて折りたたむ

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

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

複素数のサポート: あり

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

行列 A を考えます。

B = smoothdata(A,1)A の各列のデータを平滑化します。

B = smoothdata(A,2)A の各行のデータを平滑化します。

A が table または timetable の場合、dim はサポートされません。smoothdata は、個々の table または timetable の変数に対して個別に動作します。

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

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

  • '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 である場合、または 'SamplePoints'datetime または duration ベクトルとして指定されている場合、window の型は duration でなければならず、ウィンドウはサンプル点を基準にして計算されます。

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

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

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

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

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

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

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

すべて折りたたむ

ウィンドウ サイズ係数。'SmoothingFactor' と 0 から 1 の範囲のスカラーで構成されるコンマ区切りのペアとして指定します。'SmoothingFactor' の値により、ヒューリスティックなウィンドウ サイズがスケーリングされ、平滑化のレベルが調整されます。値が 0 に近いと、移動ウィンドウの長さは小さくなり、平滑化が小さくなります。値が 1 に近いと、移動ウィンドウの長さは大きくなり、平滑化が大きくなります。

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

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

サンプル点。'SamplePoints' とベクトルで構成されるコンマ区切りのペアとして指定します。サンプル点は A のデータの位置を表します。サンプル点は等間隔でサンプリングされている必要はありません。既定では、サンプル点ベクトルは [1 2 3 ...] です。

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

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

サンプル点の間隔が不均一で、'Endpoints' の名前と値のペアを指定する場合、値は 'shrink' でなければなりません。

入力データが timetable の場合、この名前と値のペアはサポートされません。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

table 変数。'DataVariables' と、変数名、変数名のセル配列、数値ベクトル、論理ベクトルまたは関数ハンドルのいずれかで構成されるコンマ区切りのペアとして指定します。'DataVariables' 値は、外れ値を検出する入力 table 内の列を示し、次のいずれかにすることができます。

  • 単一の table 変数名を指定する文字ベクトル

  • 各要素が table 変数名である文字ベクトルのセル配列

  • table 変数インデックスのベクトル

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

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

例: 'Age'

例: {'Height','Weight'}

例: @isnumeric

データ型: char | cell | double | single | logical | function_handle

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

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

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

出力引数

すべて折りたたむ

出力配列。ベクトル、行列または多次元配列として返されます。B のサイズと型は A と同じです。

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

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

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

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

アルゴリズム

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

R2017a で導入

この情報は役に立ちましたか?