【仕上げ】平滑中心のMatlab

平均(移動平均)を移動させる:図地球物理学的異常で、ウィンドウサイズがウィンドウ内で、すべての外れ値平均を選択し、中心点例外としてウィンドウの平均値です。プレスピッチ線距離または移動ウィンドウは、平均的な方法は、このプロセスは、移動平均と呼ばれ、処理が完了全体像まで繰り返されます。

平均ローパスフィルタを移動同等、この方法は、一般に、ログデータ処理及び解釈の探査と重力に使用されます。

長さnのスライディングウィンドウは、次に、NポイントのFIRフィルタを介して、移動平均データを許可する場合、フィルタタップ係数が1であり、そして移動平均平滑化動作シーケンスが再生されとります。

このようなフィルタtsmovavg及び方法のようないくつかのMatlabの移動平均法は、実施することが可能です。

通常の移動平均

移動平均フィルタ通常の無権利の重量に基づいて、フィルタ機能についてはありますが、あなたがすることができdoc filter、詳細な情報を表示する、私たちはここにいるだけの単純な移動平均なぜなら、このレコードで単純移動平均法。

seqOriginal = rand(1,100);
windowSize  = x;
seqFilter   = filter( ones(1, windowSize) / windowSize, 1, seqOriginal );

上記のコマンドは、実際に計算されます。

x表示seqOriginal, y表示seqFilter, a表示windowSize。
y(1) = (1 / a) * x(1);
y(2) = (1 / a) * x(2) + (1 / a) * x(1);
...
y(a) = (1 / a) * x(a) + (1 / a) * x(a - 1) + ... + (1 / a) * x(1);
...
y(i) = (1 / a) * x(i) + (1 / a) * x(i - 1) + ... + (1 / a) * x(i - a + 1);
...

注:この方法は、元データの傾向に対して点とwindowSize点の前に計算された平均ので、出力は遅れがあることがあるので。データがより少ない場合、大きな影響があってもよいです。

移動平均センター

平均は、平均、スライディングウィンドウの平均値算出の中心のデータ点を移動中心移動させる方法があります。これは、(便宜上、本明細書虚数、奇数のセットについて)上記の計算となります。

y(1) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2);
y(2) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2 + 1);
...
y((a + 1) / 2) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2) + (1 / a) * x(a);
...
y(i) = (1 / a) * x(i - (a - 1) / 2) + (1 / a) * x(i - (a - 1) / 2 + 1) + ... + (1 / a) * x(i) + ... + (1 / a) * x(i + (a+1) / 2);
...

Matlabのステートメントに式を変換します:

seqOriginal = rand(1,100);
windowSize  = x;
seq1        = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, seqOriginal );
seq2        = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, fliplr(seqOriginal) );
seqFilter   = seq1 + fliplr(seq2) - 1 / windowSize * seqOriginal;

使いやすくするため、その機能は、関数呼び出しを記述することです。

%fun_CenterAverageFilter
%--
%   seqFilter = fun_CenterAverageFilter(seqOriginal, windowSize)
%   中心滑动平均
%--
%   seqFilter   |Matrix|    滤波后输出序列  
%   seqOriginal |Matrix|    原始序列
%   windowSize  |Double|    滑动窗口
%--
%Author:    Liu Tong
%History:
%----
%Rev:  1.0
%Date: 2016/12/22
%   create.
%--
function seqFilter = fun_CenterAverageFilter(seqOriginal, windowSize)
seq1        = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, seqOriginal );
seq2        = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, fliplr(seqOriginal) );
seqFilter   = seq1 + fliplr(seq2) - 1 / windowSize * seqOriginal;
end

おすすめ

転載: www.cnblogs.com/airbird/p/11455223.html
おすすめ