Main Content

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

wden

自動 1 次元ノイズ除去

wden は非推奨になりました。代わりに wdenoise を使用してください。

説明

XD = wden(X,TPTR,SORH,SCAL,N,wname) は、信号 X のノイズ除去されたバージョン XD を返します。この関数では、XN レベルのウェーブレット分解を使用します。指定した直交または双直交ウェーブレット wname を使用して、ウェーブレット係数を求めます。ウェーブレット分解には、しきい値処理選択ルール TPTR が適用されます。SORH および SCAL は、ルールの適用方法を定義します。

XD = wden(C,L,___) は、前の構文と同じオプションを使用しますが、信号 X のウェーブレット分解構造 [C,L] から直接求めた X のノイズ除去バージョン XD を返します。[C,L] は wavedec の出力です。

XD = wden(W,'modwtsqtwolog',SORH,'mln',N,wname) は、最大重複離散ウェーブレット変換 (MODWT) 行列 W による演算で求めたノイズ除去後の信号 XD を返します。ここで、Wmodwt の出力です。modwtwden の両方で同じ直交ウェーブレットを使用しなければなりません。

[XD,CXD] = wden(___) は、ノイズ除去後のウェーブレット係数を返します。離散ウェーブレット変換 (DWT) ノイズ除去の場合、CXD はベクトルです (wavedec を参照)。MODWT ノイズ除去の場合、CXDN+1 行の行列です (modwt を参照)。CXD の列数は、入力信号 X の長さと等しくなります。

[XD,CXD,LXD] = wden(___) は、DWT ノイズ除去に対して各レベルの係数の数を返します。詳細については、wavedec を参照してください。MODWT ノイズ除去の場合、LXD 出力はサポートされていません。追加の出力引数 [CXD,LXD] は、ノイズ除去後の信号 XD のウェーブレット分解構造です (詳細については、wavedec を参照)。

[XD,CXD,LXD,THR] = wden(___) は、DWT ノイズ除去に対して各レベルのノイズ除去しきい値を返します。

[XD,CXD,THR] = wden(___) は、入力引数 'modwtsqtwolog' を指定した場合に、MODWT ノイズ除去に対して各レベルのノイズ除去しきい値を返します。

すべて折りたたむ

この例では、ノイズを含む信号に 3 つの異なるノイズ除去手法を適用する方法について説明します。各手法で生成されるプロットとしきい値を使用して結果を比較します。

まず、結果の再現性を確保するために、ランダム ノイズの生成に使用するシードを設定します。

rng('default')

2 Hz の正弦波で構成され、0.3 秒と 0.72 秒に過渡状態のある信号を作成します。ランダムに生成したノイズをこの信号に追加し、結果をプロットします。

N = 1000;
t = linspace(0,1,N);
x = 4*sin(4*pi*t);
x = x - sign(t-0.3) - sign(0.72-t);
sig = x + 0.5*randn(size(t));
plot(t,sig)
title('Signal')
grid on

Figure contains an axes object. The axes object with title Signal contains an object of type line.

sym8 ウェーブレットを使用して、レベル 5 で信号のウェーブレット分解を実行し、次の 3 つの異なるしきい値選択ルールをウェーブレット係数に適用してノイズを除去します。SURE、ミニマックス、Donoho および Johnstone のユニバーサルなしきい値 (ノイズのレベル依存推定を使用)。それぞれについて、ハードなしきい値処理を適用します。

lev = 5;
wname = 'sym8';
[dnsig1,c1,l1,threshold_SURE] = wden(sig,'rigrsure','h','mln',lev,wname);
[dnsig2,c2,l2,threshold_Minimax] = wden(sig,'minimaxi','h','mln',lev,wname);
[dnsig3,c3,l3,threshold_DJ] = wden(sig,'sqtwolog','h','mln',lev,wname);

3 つのノイズ除去後の信号をプロットし、比較します。

subplot(3,1,1)
plot(t,dnsig1)
title('Denoised Signal - SURE')
grid on
subplot(3,1,2)
plot(t,dnsig2)
title('Denoised Signal - Minimax')
grid on
subplot(3,1,3)
plot(t,dnsig3)
title('Denoised Signal - Donoho-Johnstone')
grid on

Figure contains 3 axes objects. Axes object 1 with title Denoised Signal - SURE contains an object of type line. Axes object 2 with title Denoised Signal - Minimax contains an object of type line. Axes object 3 with title Denoised Signal - Donoho-Johnstone contains an object of type line.

3 つのノイズ除去方法について、各 Detail レベルで適用されたしきい値を比較します。

threshold_SURE
threshold_SURE = 1×5

    0.9592    0.6114    1.4734    0.7628    0.4360

threshold_Minimax
threshold_Minimax = 1×5

    1.1047    1.0375    1.3229    1.1245    1.0483

threshold_DJ
threshold_DJ = 1×5

    1.8466    1.7344    2.2114    1.8798    1.7524

この例では、DWT と MODWT を使用して信号のノイズを除去します。各手法で生成されるプロットとしきい値を使用して結果を比較します。

まず、結果の再現性を確保するために、ランダム ノイズの生成に使用するシードを設定します。

rng('default')

2 Hz の正弦波で構成され、0.3 秒と 0.72 秒に過渡状態のある信号を作成します。ランダムに生成したノイズをこの信号に追加し、結果をプロットします。

N = 1000;
t = linspace(0,1,N);
x = 4*sin(4*pi*t);
x = x - sign(t-0.3) - sign(0.72-t);
sig = x + 0.5*randn(size(t));
plot(t,sig)
title('Signal')
grid on

Figure contains an axes object. The axes object with title Signal contains an object of type line.

db2 ウェーブレットを使用して、レベル 3 で信号のウェーブレット分解を実行し、Donoho および Johnstone のユニバーサルなしきい値とノイズのレベル依存推定を使用してノイズを除去します。DWT および MODWT を使用して、どちらもソフトなしきい値処理でノイズ除去後のバージョンを求めます。

wname = 'db2';
lev = 3;
[xdDWT,c1,l1,threshold_DWT] = wden(sig,'sqtwolog','s','mln',lev,wname);
[xdMODWT,c2,threshold_MODWT] = wden(sig,'modwtsqtwolog','s','mln',lev,wname);

結果をプロットし、比較します。

subplot(2,1,1)
plot(t,xdDWT)
grid on
title('DWT Denoising')
subplot(2,1,2)
plot(t,xdMODWT)
grid on
title('MODWT Denoising')

Figure contains 2 axes objects. Axes object 1 with title DWT Denoising contains an object of type line. Axes object 2 with title MODWT Denoising contains an object of type line.

それぞれの場合に適用されたしきい値を比較します。

threshold_DWT
threshold_DWT = 1×3

    1.7783    1.6876    2.0434

threshold_MODWT
threshold_MODWT = 1×3

    1.2760    0.6405    0.3787

この例では、DWT ノイズ除去および MODWT ノイズ除去を使用して、Haar ウェーブレットを使用したブロック状の信号のノイズ除去を行います。元のバージョンとノイズ除去後のバージョンのプロットおよびメトリクスで結果を比較します。

まず、結果の再現性を確保するために、ランダム ノイズの生成に使用するシードを設定します。

rng('default')

信号と、S/N 比の平方根が 3 に等しいノイズを含むバージョンを生成します。それぞれをプロットし、比較します。

[osig,nsig] = wnoise('blocks',10,3);
plot(nsig,'r')
hold on
plot(osig,'b')
legend('Noisy Signal','Original Signal')

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

Haar ウェーブレットを使用して、レベル 6 でノイズを含む信号のウェーブレット分解を実行し、Donoho および Johnstone のユニバーサルなしきい値とノイズのレベル依存推定を使用してノイズを除去します。DWT および MODWT を使用して、どちらもソフトなしきい値処理でノイズ除去後のバージョンを求めます。

wname = 'haar';
lev = 6 ;
[xdDWT,c1,l1] = wden(nsig,'sqtwolog','s','mln',lev,wname);
[xdMODWT,c2] = wden(nsig,'modwtsqtwolog','s','mln',lev,wname);

元のノイズのないバージョンの信号と、2 つのノイズ除去後のバージョンをプロットし、比較します。

figure
plot(osig,'b')
hold on
plot(xdDWT,'r--')
plot(xdMODWT,'k-.')
legend('Original','DWT','MODWT')
hold off

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Original, DWT, MODWT.

元の信号と 2 つのノイズ除去後のバージョンとの差分の L2 ノルムおよび L 無限大ノルムを計算します。

L2norm_original_DWT = norm(abs(osig-xdDWT),2)
L2norm_original_DWT = 36.1194
L2norm_original_MODWT = norm(abs(osig-xdMODWT),2)
L2norm_original_MODWT = 14.5987
LInfinity_original_DWT = norm(abs(osig-xdDWT),Inf)
LInfinity_original_DWT = 4.7181
LInfinity_original_MODWT = norm(abs(osig-xdMODWT),Inf)
LInfinity_original_MODWT = 2.9655

入力引数

すべて折りたたむ

ノイズ除去を行う入力データ。実数値のベクトルとして指定します。

データ型: double

ノイズ除去の対象となるデータのウェーブレット展開係数。実数値のベクトルとして指定します。Cwavedec の出力です。

例: [C,L] = wavedec(randn(1,1024),3,'db4')

データ型: double

ノイズ除去の対象となる信号のウェーブレット展開係数のサイズ。正の整数のベクトルとして指定します。Lwavedec の出力です。

例: [C,L] = wavedec(randn(1,1024),3,'db4')

データ型: double

ノイズ除去する信号の最大重複ウェーブレット分解構造。実数値の行列として指定します。Wmodwt の出力です。modwtwden の両方で同じ直交ウェーブレットを使用しなければなりません。

データ型: double

X のウェーブレット分解構造に適用するしきい値選択ルール。

  • 'rigsure' — Stein の不偏リスクの原理を使用。

  • 'heursure' — Stein の不偏リスクのヒューリスティックなバリアントを使用。

  • 'sqtwolog — ユニバーサルなしきい値 2ln(length(x)). を使用。

  • 'minimaxi' — ミニマックスしきい値処理を使用。(詳細については、thselect を参照してください。)

実行するしきい値処理のタイプ。

  • 's' — ソフトなしきい値処理

  • 'h' — ハードなしきい値処理

乗法的なしきい値の再スケーリング:

  • 'one' — 再スケーリングなし

  • 'sln' — 第 1 レベルの係数に基づいたレベル ノイズの単一推定を使用して再スケーリング

  • 'mln' — レベル ノイズのレベル依存推定を使用した再スケーリング

ウェーブレット分解のレベル。正の整数として指定します。ウェーブレット係数が境界の影響を受けないようにするには wmaxlev を使用します。用途で境界の影響が問題にならない場合は、一般に Nfix(log2(length(X))) 以下に設定します。

ノイズ除去に使用するウェーブレットの名前。文字配列として指定します。DWT ノイズ除去の場合、ウェーブレットは直交または双直交でなければなりません。MODWT ノイズ除去の場合、ウェーブレットは直交でなければなりません。直交ウェーブレットおよび双直交ウェーブレットは、ウェーブレット マネジャー wavemngr でそれぞれタイプ 1 およびタイプ 2 のウェーブレットとして指定されています。

  • 有効な組み込み直交ウェーブレット ファミリは次のとおりです。最適局在化 Daubechies ("bl")、Beylkin ("beyl")、Coiflet ("coif")、Daubechies ("db")、Fejér-Korovkin ("fk")、Haar ("haar")、Han 線形位相モーメント ("han")、Morris 最小帯域幅 ("mb")、Symlet ("sym")、および Vaidyanathan ("vaid")。

  • 有効な組み込み双直交ウェーブレット ファミリは次のとおりです。双直交スプライン ("bior")、および逆双直交スプライン ("rbio")。

各ファミリに含まれるウェーブレットの一覧については、wfilters を参照してください。ウェーブレット ファミリの略称を指定して waveinfo を使用することもできます。たとえば、waveinfo("db") のようにします。wavemngr("type",wn) を使用して、ウェーブレット wn が直交 (1 が返される) か双直交 (2 が返される) かを判定します。たとえば、wavemngr("type","db6") は 1 を返します。

出力引数

すべて折りたたむ

ノイズ除去後のデータ。実数値のベクトルとして返されます。

データ型: double

ノイズ除去後のウェーブレット係数。実数値のベクトルまたは行列として返されます。DWT ノイズ除去の場合、CXD はベクトルです (wavedec を参照)。MODWT ノイズ除去の場合、CXDN+1 行の行列です (modwt を参照)。列数は、入力信号 X の長さと等しくなります。

データ型: double

DWT ノイズ除去に対する各レベルのノイズ除去後のウェーブレット係数のサイズ。正の整数のベクトルとして返されます (wavedec を参照)。MODWT ノイズ除去の場合、LXD 出力はサポートされていません。[CXD,LXD] は、ノイズ除去後の信号 XD のウェーブレット分解構造です。

データ型: double

各レベルのノイズ除去しきい値。長さ N の実数値のベクトルとして返されます。

データ型: double

アルゴリズム

ノイズを含む信号の最も一般的なモデルは次の形式になります。

s(n)=f(n)+σe(n),

n は時間で、等間隔になります。この最も簡単なモデルにおいて、e(n) がガウス ホワイト ノイズ N(0,1) で、ノイズ レベル σ が 1 に等しいとします。ノイズ除去の目的は、信号 s のノイズ部分を抑制し、f を復元することです。

ノイズ除去手順には 3 つのステップがあります。

  1. 分解 — ウェーブレットを選択し、レベル N を選択します。信号 s のレベル N のウェーブレット分解を計算します。

  2. Detail 係数のしきい値処理 — 1 から N までの各レベルで、しきい値を選択し、Detail 係数にソフトなしきい値処理を適用します。

  3. 再構成 — レベル N の元の Approximation 係数とレベル 1 から N までの変更後の Detail 係数に基づいて、ウェーブレットの再構成を計算します。

しきい値選択ルールの詳細については、Wavelet Denoising and Nonparametric Function Estimationおよび関数 thselect のヘルプを参照してください。次の点に注意してください。

  • Detail 係数ベクトルは、f の係数と e の係数の重ね合わせです。e の分解で得られる Detail 係数は、標準のガウス ホワイト ノイズです。

  • ミニマックスと SURE のしきい値選択ルールはより保守的であり、関数 f の小さな Detail がノイズ範囲にある場合に便利です。他の 2 つのルールはノイズをより効率的に除去します。オプション 'heursure' は折衷案です。

実際には、基本モデルを直接使用することはできません。モデルのずれに対処するため、残りのパラメーター scal を指定しなければなりません。これがしきい値の再スケーリング方法に対応します。

  • オプション scal = 'one' は、基本モデルに対応します。

  • オプション scal = 'sln' は、第 1 レベルの係数に基づいたレベル ノイズの単一推定を使用して、しきい値の再スケーリングを処理します。

    一般に、推定しなければならないノイズ レベルは無視できます。Detail 係数 CD1 (最も細かいスケール) は、基本的に標準偏差が σ に等しいノイズ係数です。この係数の中央絶対偏差が、σ のロバスト推定です。ロバスト推定の使用は重要です。レベル 1 の係数に f の Detail が含まれる場合、これらの Detail は、信号終了の影響 (エッジでの演算による完全なアーティファクト) を避けるため、少数の係数に集められます。

  • オプション scal = 'mln' は、そのレベル ノイズのレベル依存推定を使用して、しきい値の再スケーリングを処理します。

    非ホワイト ノイズ e が疑わしい場合、そのレベル ノイズのレベル依存推定によってしきい値を再スケーリングしなければなりません。同様の戦略を使用して、レベルごとに σlev レベルを推定します。この推定はファイル wnoisest に実装されています。これは、元の信号 s のウェーブレット分解構造を直接処理します。

参照

[1] Antoniadis, A., and G. Oppenheim, eds. Wavelets and Statistics, 103. Lecture Notes in Statistics. New York: Springer Verlag, 1995.

[2] Donoho, D. L. “Progress in Wavelet Analysis and WVD: A Ten Minute Tour.” Progress in Wavelet Analysis and Applications (Y. Meyer, and S. Roques, eds.). Gif-sur-Yvette: Editions Frontières, 1993.

[3] Donoho, D. L., and Johnstone, I. M. “Ideal Spatial Adaptation by Wavelet Shrinkage.” Biometrika, Vol. 81, pp. 425–455, 1994.

[4] Donoho, D. L. “De-noising by Soft-Thresholding.” IEEE Transactions on Information Theory, Vol. 42, Number 3, pp. 613–627, 1995.

[5] Donoho, D. L., I. M. Johnstone, G. Kerkyacharian, and D. Picard. “Wavelet Shrinkage: Asymptopia?” Journal of the Royal Statistical Society, series B. Vol. 57, Number 2, pp. 301–369, 1995.

拡張機能

バージョン履歴

R2006a より前に導入