Main Content

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

dsp.MovingAverage

説明

dsp.MovingAverage System object™ は、時間の経過に沿って入力信号の移動平均を各チャネルで個別に計算します。このオブジェクトでは、スライディング ウィンドウ法または指数の重み付け法のどちらかを使用して移動平均を計算します。スライディング ウィンドウ法では、データ上で指定の長さのウィンドウをサンプルごとに移動させ、ウィンドウ内のデータの平均を計算します。指数の重み付け法では、オブジェクトはデータ サンプルに一連の重み係数を掛けます。重み付けしたデータを合計し、平均を計算します。これらの方法の詳細については、アルゴリズムを参照してください。

入力の移動平均を計算するには、次のようにします。

  1. dsp.MovingAverage オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

movAvg = dsp.MovingAverage は、既定のプロパティを使用して、移動平均オブジェクト movAvg を返します。

movAvg = dsp.MovingAverage(Len)WindowLength プロパティを Len に設定します。

movAvg = dsp.MovingAverage(Len,Overlap) は、WindowLength プロパティを Len に、OverlapLength プロパティを Overlap に設定します。

movAvg = dsp.MovingAverage(Name,Value) は、Name,Value ペアを使用して追加のプロパティを指定します。指定していないプロパティは既定値になります。

例: movAvg = dsp.MovingAverage('Method','Exponential weighting','ForgettingFactor',0.9);

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

平均化方法。'Sliding window' または 'Exponential weighting' として指定します。

  • 'Sliding window'SpecifyWindowLength によって指定された長さのウィンドウを入力データ上で各チャネルに沿って移動させます。オブジェクトは、ウィンドウが移動する各サンプルについて、ウィンドウ内のデータの平均を計算します。

  • 'Exponential weighting' — オブジェクトはサンプルと一連の重み係数を乗算します。データが古くなるほど、重み係数の大きさは指数的に小さくなります (0 になることはありません)。平均を計算するために、このアルゴリズムは重み付けしたデータの合計を求めます。

これらの方法の詳細については、アルゴリズムを参照してください。

ウィンドウの長さを指定するフラグ。スカラーの boolean として指定します。

  • true — スライディング ウィンドウの長さが WindowLength プロパティで指定した値と等しくなります。

  • false — スライディング ウィンドウの長さが無限になります。このモードでは、平均は現在のサンプルと以前のすべてのサンプルを使用して計算されます。

依存関係

このプロパティは Method'Sliding window' に設定した場合に適用されます。

サンプルのスライディング ウィンドウの長さ。正のスカラー整数として指定します。

依存関係

このプロパティは Method'Sliding window'SpecifyWindowLengthtrue に設定した場合に適用されます。

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

スライディング ウィンドウ間のオーバーラップの長さ。非負の整数として指定します。オーバーラップの長さの値は、[0, WindowLength − 1] の範囲で変化します。指定しない場合、オーバーラップの長さは WindowLength − 1 となります。

依存関係

このプロパティは Method'Sliding window'SpecifyWindowLengthtrue に設定した場合に適用されます。

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

指数の重み付けの係数。(0,1] の範囲の正の実数スカラーとして指定します。忘却係数 0.1 よりも忘却係数 0.9 の方が古いデータに対する重みが大きくなります。忘却係数が 1.0 の場合は無限に記憶します。過去のサンプルに対する重みはすべて同じになります。

このプロパティは調整可能であるため、その値はオブジェクトがロックされている場合でも変更できます。

調整可能: Yes

依存関係

このプロパティは Method'Exponential weighting' に設定した場合に適用されます。

データ型: single | double

使用法

説明

y = movAvg(x) は、スライディング ウィンドウ法または指数の重み付け法のどちらかを使用して、入力信号 x の移動平均を計算します。

入力引数

すべて展開する

データ入力。ベクトルまたは行列として指定します。x が行列の場合、各列が個別のチャネルとして扱われます。移動平均は各チャネルに沿って計算されます。

オブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。

データ型: single | double
複素数のサポート: あり

出力引数

すべて展開する

入力信号の移動平均。ベクトルまたは行列として返されます。

m 行 n 列のサイズの信号をオブジェクトに入力し、Method'Sliding window' に、SpecifyWindowLengthtrue に設定すると、出力は ceil(m/ホップ サイズ) 行 n 列の上限サイズをもちます。ホップ サイズは、ウィンドウの長さからオーバーラップの長さを引いた値です。出力が m 行 n 列のサイズをもつ場合もあります。

このオブジェクトからコードを生成した場合、生成したコードの出力の可変サイズの動作は、入力フレームの長さと入力信号が固定サイズか可変サイズかによって異なります。詳細については、コード生成を参照してください。

データ型: single | double
複素数のサポート: あり

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

dsp.MovingAverage オブジェクトを使用して、ノイズを含むランプ信号の移動平均を計算します。

初期化

movavgWindow オブジェクト、movavgWindow_overlap オブジェクト、および movavgExp オブジェクトを設定します。movavgWindow は、ウィンドウの長さを 50 サンプルとしてスライディング ウィンドウ法を使用します。既定のオーバーラップの長さは 49 サンプルで、これは指定のウィンドウ長より 1 サンプル分小さくなります。movavgWindow_overlap はウィンドウの長さを 50 サンプルとし、オーバーラップの長さは 45 サンプルです。movavgExp は忘却係数を 0.95 として指数的な重み付け法を使用します。

出力を表示するための時間スコープを作成します。

FrameLength = 1001;
Fs = 1000;
movavgWindow = dsp.MovingAverage(50);
movavgWindow_overlap = dsp.MovingAverage(50,45);
movavgExp = dsp.MovingAverage('Method','Exponential weighting',...
    'ForgettingFactor',0.95);
scope  = timescope('SampleRate',[Fs, Fs, Fs/(50-45), Fs],...
    'TimeSpanOverrunAction','Scroll',...
    'ShowGrid',true,...
    'YLimits',[-0.5 1.5]);
title = 'Moving Average';
scope.Title = title;
scope.ChannelNames = {'Original Signal',...
    'Sliding window of 50 samples with default overlap',...
    'Sliding window of 50 samples with an overlap of 45 samples',...
    'Exponential weighting with forgetting factor of 0.95'};

平均の計算

振幅が 1、時間範囲が 2 秒のランプ信号を生成します。スライディング ウィンドウの平均と指数的な加重平均をランプに適用します。時間スコープに出力が表示されます。

for i = 1:500
    t = (0:0.001:1)';
    unitstep = t>=0;
    ramp = t.*unitstep;
    x = ramp + 0.1 * randn(FrameLength,1);
    y1 = movavgWindow(x);
    y2 = movavgWindow_overlap(x);
    y3 = movavgExp(x);
    scope(x,y1,y2,y3);
end

アルゴリズム

すべて展開する

参照

[1] Bodenham, Dean. “Adaptive Filtering and Change Detection for Streaming Data.” PH.D. Thesis. Imperial College, London, 2012.

拡張機能

バージョン履歴

R2016b で導入

すべて展開する