このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
smoothdata
ノイズの多いデータの平滑化
構文
説明
は、名前と値の引数を 1 つ以上使用して、平滑化に関する追加のパラメーターを指定します。たとえば、B
= smoothdata(___,Name,Value
)t
が時間値のベクトルである場合、smoothdata(A,"SamplePoints",t)
は t
の時間を基準にして A
のデータを平滑化します。
例
移動平均を使用したデータの平滑化
ノイズの多いデータを含むベクトルを作成し、移動平均を使用してデータを平滑化します。
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");
B
と C
の平滑化後のデータをプロットします。
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")
入力引数
A
— 入力データ
ベクトル | 行列 | 多次元配列 | table | timetable
入力データ。ベクトル、行列、多次元配列、table または timetable として指定します。A
が table または timetable の場合、変数を数値にするか、名前と値の引数 DataVariables
を使用して数値変数を明示的にリストしなければなりません。変数の指定は、非数値変数も含んでいる table を扱うする際に便利です。
データ型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| table
| timetable
複素数のサポート: あり
dim
— 演算の対象の次元
正の整数スカラー
演算の対象の次元。正の整数のスカラーとして指定します。次元を指定しない場合、既定値はサイズが 1 より大きい最初の配列次元です。
m
行 n
列の入力行列 A
を考えます。
smoothdata(A,1)
は、A
の各列のデータを平滑化し、m
行n
列の行列を返します。smoothdata(A,2)
は、A
の行のデータを平滑化し、m
行n
列の行列を返します。
入力データが table または timetable の場合、dim
はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。
method
— 平滑化法
"movmean"
(既定値) | "movmedian"
| "gaussian"
| "lowess"
| "loess"
| "rlowess"
| "rloess"
| "sgolay"
平滑化法。以下の値のいずれかとして指定します。
"movmean"
—A
の各ウィンドウの平均。このメソッドは、データの周期的なトレンドを低減するのに便利です。"movmedian"
—A
の各ウィンドウの中央値。このメソッドは、外れ値が存在する場合にデータの周期的なトレンドを低減するのに便利です。"gaussian"
—A
の各ウィンドウのガウス加重平均。"lowess"
—A
の各ウィンドウの線形回帰。この方法は計算量が多くなる場合がありますが、不連続点は少なくなります。"loess"
—A
の各ウィンドウの 2 次回帰。この方法は"lowess"
より計算量がやや多くなります。"rlowess"
—A
の各ウィンドウのロバスト線形回帰。この方法は"lowess"
より計算量が多くなりますが、外れ値に対してよりロバストになります。"rloess"
—A
の各ウィンドウのロバスト 2 次回帰。この方法は"loess"
より計算量が多くなりますが、外れ値に対してよりロバストになります。"sgolay"
— Savitzky-Golay フィルター。A
の各ウィンドウで近似される 2 次多項式に従って平滑化します。このメソッドは、データが急速に変動する場合に他のメソッドより効果的です。
window
— ウィンドウ サイズ
正の整数または duration
スカラー | 非負の整数または duration
値の 2 要素ベクトル
ウィンドウ サイズ。正の整数または duration
スカラー、あるいは非負の整数または duration
値の 2 要素ベクトルとして指定します。smoothdata
はサンプル点を基準として相対的にウィンドウを定義します。
window
が正の整数スカラーである場合、ウィンドウは長さwindow
で、現在の要素を中心にして配置されます。window
が非負の整数の 2 要素ベクトル[b f]
である場合、ウィンドウには現在の要素、b
個前までの要素、f
個後までの要素が含まれます。
A
が timetable であるか、SamplePoints
に datetime
値または duration
値が含まれている場合、window
は duration
型でなければなりません。
ウィンドウ位置の詳細については、移動ウィンドウ サイズを参照してください。
例: smoothdata(A,"movmean",4)
例: smoothdata(A,"movmedian",[2 3])
nanflag
— 欠損値の条件
"omitmissing"
(既定値) | "omitnan"
| "includemissing"
| "includenan"
欠損値の条件。次の値のいずれかとして指定します。
"omitmissing"
または"omitnan"
— 平滑化時にA
のNaN
値を無視します。ウィンドウ内のすべての要素がNaN
の場合、B
の対応する要素はNaN
です。"omitmissing"
と"omitnan"
の動作は同じです。"includemissing"
または"includenan"
— 平滑化時にA
のNaN
値を含めます。ウィンドウ内のいずれかの要素がNaN
の場合、B
の対応する要素はNaN
です。"includemissing"
と"includenan"
の動作は同じです。
名前と値の引数
引数のオプションのペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。
例: smoothdata(A,SmoothingFactor=0.5)
R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name
を引用符で囲みます。
例: smoothdata(A,"SmoothingFactor",0.5)
SamplePoints
— サンプル点
ベクトル | table 変数名 | スカラー | 関数ハンドル | table vartype
添字
サンプル点。サンプル点のベクトル、または次の表のいずれかのオプション (入力データが table の場合) として指定します。サンプル点はデータの x 軸の位置を表し、並べ替える必要があり、一意の要素を含まなければなりません。サンプル点は等間隔である必要はありません。既定の設定はベクトル [1 2 3 ...]
です。
入力データが table の場合は、次のいずれかのオプションを使用して、サンプル点を table 変数として指定できます。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
メモ
入力データが 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
DataVariables
— 演算の対象とする table 変数
table 変数名 | スカラー | ベクトル | cell 配列 | パターン | 関数ハンドル | table vartype
添字
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables
の値は、入力 table のどの変数を平滑化するかを示します。
DataVariables
で指定されていない table 内の他の変数は、平滑化されずに出力に渡されます。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
例: smoothdata(T,"DataVariables",["Var1" "Var2" "Var4"])
ReplaceValues
— 値置換インジケーター
true
または 1
(既定値) | false
または 0
値置換インジケーター。A
が table または timetable の場合に、次の値のいずれかとして指定します。
true
または1
— 入力 table 変数を、平滑化されたデータを含む table 変数に置き換えます。false
または0
— 入力 table 変数に、平滑化されたデータを含む table 変数を追加します。
入力データがベクトル、行列、または多次元配列の場合、ReplaceValues
はサポートされません。
例: smoothdata(T,"ReplaceValues",false)
SmoothingFactor
— ウィンドウ サイズ係数
0 から 1 の範囲のスカラー
ウィンドウ サイズ係数。0 から 1 の範囲のスカラーとして指定します。通常、SmoothingFactor
の値により、smoothdata
が A
のエントリから決定するウィンドウ サイズをスケーリングすることで、平滑化のレベルを調整します。値が 0 に近いと、移動ウィンドウ サイズは小さくなり、平滑化が小さくなります。値が 1 に近いと、移動ウィンドウ サイズは大きくなり、平滑化が大きくなります。smoothdata
がウィンドウ サイズを決定するために使用するエントリによっては、ウィンドウ サイズに SmoothingFactor
の値が大きく影響しない場合もあります。
既定では、SmoothingFactor
は 0.25 です。SmoothingFactor
を指定できるのは、window
を指定しない場合のみです。
Degree
— Savitzky-Golay 次数
非負の整数
Savitzky-Golay 次数。非負の整数として指定します。この名前と値の引数は、指定された平滑化法が "sgolay"
である場合にのみ指定できます。Degree
の値は、各ウィンドウ内のデータを近似する Savitzky-Golay フィルターの多項式の次数に対応し、既定値は 2 です。
サンプル点が一様な場合、Degree
の値はウィンドウ サイズより小さくなければなりません。サンプル点が一様でない場合、この値はどのウィンドウの最大点数よりも小さくなければなりません。
出力引数
B
— 平滑化されたデータ
ベクトル | 行列 | 多次元配列 | table | timetable
平滑化されたデータ。ベクトル、行列、多次元配列、table、または timetable として返されます。
B
は、ReplaceValues
の値が false
の場合を除き、A
と同じサイズになります。ReplaceValues
の値が false
の場合、B
の幅は入力データの幅と指定したデータ変数の数の合計となります。
winsize
— ウィンドウ サイズ
正の整数または duration
スカラー | 非負の整数または duration
値の 2 要素ベクトル
ウィンドウ サイズ。正の整数または duration
スカラー、あるいは非負の整数または duration
値の 2 要素ベクトルとして返されます。
window
を入力引数として指定した場合、winsize
は window
と同じになります。window
を入力引数として指定しなかった場合、smoothdata
は A
のエントリからウィンドウ サイズを決定します。
詳細
移動ウィンドウ サイズ
次の表では、既定の等間隔のサンプル点ベクトル [1 2 3 4 5 6 7]
におけるウィンドウ位置を示します。
説明 | ウィンドウ サイズと位置 | ウィンドウ内のサンプル点 | 図 |
---|---|---|---|
スカラー ウィンドウ サイズの場合、ウィンドウの先頭のエッジは含まれ、ウィンドウの後方のエッジは含まれません。 |
現在のサンプル点 = 4 | 3、4、5 | |
現在のサンプル点 = 4 | 2、3、4、5 | | |
ベクトル ウィンドウ サイズの場合、先頭のエッジおよび後方のエッジは含まれます。 |
現在のサンプル点 = 4 | 2、3、4、5、6 | |
入力データの端点に近いサンプル点では、以下の移動統計平滑化法ではウィンドウが切り捨てられるため、最初のサンプル点から開始するか、最後のサンプル点で終了するようになります。
|
現在のサンプル点 = 2 | 1、2、3、4 | |
入力データの端点に近いサンプル点では、以下の局所回帰平滑化法ではウィンドウがシフトされ、最初または最後のサンプル点が含まれるようになります。
|
現在のサンプル点 = 2 | 1、2、3、4、5 | |
アルゴリズム
平滑化法のウィンドウ サイズが指定されていない場合、smoothdata
は経験則に基づいて既定のウィンドウ サイズを計算します。平滑化係数 τ について、経験則により入力データのエネルギーの約 100*τ パーセントを減衰する移動平均ウィンドウ サイズを推定します。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
tall timetable はサポートされていません。
"rlowess"
メソッドと"rloess"
メソッドはサポートされていません。複数の出力はサポートされません。
ウィンドウ サイズを指定しなければなりません。
smoothdata
によるヒューリスティックなウィンドウ サイズの決定はサポートされていません。名前と値の引数
SamplePoints
およびSmoothingFactor
はサポートされません。DataVariables
の値を関数ハンドルにすることはできません。
詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
dim
は定数でなければなりません。複素数入力
A
については、window
引数が指定されなければなりません。可変サイズの
window
引数はサポートされません。固定サイズのコード生成については、
A
を除くすべての入力引数が定数でなければなりません。datetime
SamplePoints
値または datetimeRowTimes
を含む timetable 入力データについては、ウィンドウ サイズが指定されなければなりません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2017a で導入R2023a: 欠損値の条件の指定
"omitmissing"
オプションまたは "includemissing"
オプションを使用して、平滑化時に入力データの欠損値を省略するか含めます。これらのオプションの動作はそれぞれ、"omitnan"
オプションおよび "includenan"
オプションと同じです。
R2022a: 平滑化された値の追加
入力データが table または timetable の場合は、名前と値の引数 ReplaceValues
を false
に設定することにより、平滑化されたデータを含む table 変数を入力 table 変数に追加します。変数の置き換えは行いません。
R2021b: table 変数としてのサンプル点の指定
入力データが table の場合は、名前と値の引数 SamplePoints
を使用して、サンプル点を table 変数として指定します。
参考
関数
smoothdata2
|fillmissing
|fillmissing2
|movmean
|movmedian
|movmad
|filter
ライブ エディター タスク
アプリ
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)