Main Content

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

medfilt1

1 次元のメディアン フィルター処理

説明

y = medfilt1(x) は、3 次の 1 次元メディアン フィルターを入力ベクトル x に適用します。この関数は両方の端点を超えた信号を 0 と見なします。出力 y は、x と同じ長さになります。

y = medfilt1(x,n) は、n 次の 1 次元メディアン フィルターを x に適用します。

y = medfilt1(x,n,blksz,dim) または y = medfilt1(x,n,[],dim) は、フィルターが動作する次元 dim を指定します。blksz は、下位互換性のために必要ですが無視されます。

y = medfilt1(___,nanflag,padding) は、前の構文の任意の入力引数を使用して、各セグメントで NaN の値がどのように扱われるかを指定します。この構文は、信号のエッジで実行されるフィルター処理のタイプ padding も指定します。

nanflag および padding は、関数呼び出し内で x の後の任意の位置に配置できます。

すべて折りたたむ

100 Hz で 1 秒間サンプリングされる正弦波信号を生成します。ノイズをシミュレーションするため、高周波数の正弦波を追加します。

fs = 100;
t = 0:1/fs:1;
x = sin(2*pi*t*3)+0.25*sin(2*pi*t*40);

10 次のメディアン フィルターを使用して、信号を滑らかにします。結果をプロットします。

y = medfilt1(x,10);

plot(t,x,t,y)
legend('Original','Filtered')
legend('boxoff')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Original, Filtered.

異なる周波数の正弦波で構成される 2 チャネル信号を生成します。ランダムな位置にスパイクを配置します。NaN を使用し、欠損サンプルをランダムに追加します。再現可能な結果が必要な場合は、乱数発生器をリセットします。信号をプロットします。

rng('default')

n = 59;
x = sin(pi./[15 10]'*(1:n)+pi/3)';

spk = randi(2*n,9,1);
x(spk) = x(spk)*2;
x(randi(2*n,6,1)) = NaN;

plot(x)

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

medfilt1 を既定の設定で使用して、信号をフィルター処理します。フィルター処理された信号をプロットします。既定では、フィルターは欠損サンプルを含むすべてのセグメントの中央値に NaN を代入します。

y = medfilt1(x);
plot(y)

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

元の信号を転置します。関数が行に沿って動作するように指定して、再度フィルター処理を行います。中央値を計算する際には、欠損サンプルを排除します。2 番目の引数を空のままにした場合、medfilt1は既定のフィルター次数 3 を使用します。

y = medfilt1(x',[],[],2,'omitnan');
plot(y')

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

関数は、NaN のみを含むセグメントに値を代入することはできません。この問題を解決するには、セグメント長を増やします。さらに、この変更によって、外れ値がより徹底的に削除されるようになります。

y = medfilt1(x,4,'omitnan');
plot(y)

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

既定のゼロ パディングは、関数がエッジにおける信号値を過小に推定する原因になります。縮小ウィンドウを使用して両端における中央値を計算することで、この影響が低減されます。

y = medfilt1(x,4,'omitnan','truncate');
plot(y)

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

入力引数

すべて折りたたむ

入力信号。実数値のベクトル、行列、または N 次元配列として指定します。

データ型: single | double

1 次元メディアン フィルターの次数。正の整数スカラーで指定します。

  • n が奇数の場合、y(k)x(k-(n-1)/2:k+(n-1)/2) の中央値。

  • n が偶数の場合、y(k)x(k-n/2:k+(n/2)-1) の中央値。この場合、関数は数値を並べ替え、並べ替えたリストの中央の 2 つの要素の平均を取ります。

例: n = 11 の場合、y(k)x(k-5:k+5) の中央値。

例: n = 12 の場合、y(k)x(k-6:k+5) の中央値。

データ型: double

フィルターを適用する次元。正の整数のスカラーで指定します。既定では、関数は x の、大きさが 1 でない最初の次元に沿って作用します。特に、x が行列の場合、この関数では、y(:,i) = medfilt1(x(:,i),n) となるように列がフィルター処理されます。

データ型: double

NaN の条件。'includenan' または 'omitnan' で指定します。

  • 'includenan'NaN を含むすべてのセグメントの中央値が同様に NaN となるようにフィルター処理された信号を返します。

  • 'omitnan'NaN を含むすべてのセグメントの中央値が非 NaN 値の中央値となるようにフィルター処理された信号を返します。セグメントのすべての要素が NaN である場合、結果は NaN になります。

端点フィルター処理。'zeropad' または 'truncate' として指定します。

  • 'zeropad' — 端点を越えた信号をゼロと見なします。

  • 'truncate' — 信号のエッジに近づくにつれて、より小さいセグメントの中央値を計算します。

出力引数

すべて折りたたむ

フィルター処理された信号。実数値のベクトル、行列、または N 次元配列として返されます。yx と同じサイズです。

データ型: double

ヒント

Image Processing Toolbox™ ソフトウェアのライセンスがある場合は、関数 medfilt2 (Image Processing Toolbox) を使用して 2 次元のメディアン フィルター処理を実行できます。

参照

[1] Pratt, William K. Digital Image Processing. 4th Ed. Hoboken, NJ: John Wiley & Sons, 2007.

拡張機能

バージョン履歴

R2006a より前に導入