Main Content

wdenoise

ウェーブレット信号のノイズ除去

説明

XDEN = wdenoise(X) は、コーシー事前分布を使用した実証的ベイズ法を使用して X のデータのノイズを除去します。既定では、sym4 ウェーブレットが事後中央値しきい値ルールと共に使用されます。ノイズは floor(log2N)wmaxlev(N,"sym4") の最小値まで除去されます。N はデータに含まれるサンプルの数です。(詳細については、wmaxlev を参照してください)。X は実数値のベクトル、行列、または timetable です。

  • X が行列の場合、wdenoise では X の各列のノイズが除去されます。

  • X が timetable の場合、wdenoise には実数値のベクトルを個別の変数で含めるか、データの実数値の行列を 1 つ含めなければなりません。

  • X は等間隔でサンプリングされると仮定されます。

  • X が timetable の場合、タイムスタンプが線形に等間隔でないと、wdenoise から警告が発行されます。

XDEN = wdenoise(X,LEVEL) は、X のノイズを LEVEL まで除去します。LEVELfloor(log2N) 以下の正の整数であり、N はデータに含まれるサンプルの数です。LEVEL を指定しない場合、既定で floor(log2N)wmaxlev(N,"sym4") の最小値になります。

XDEN = wdenoise(___,Name,Value) は、前述の構文の入力引数のいずれかに加えて名前と値の引数を使用し、1 つ以上のオプションを指定します。たとえば、xden = wdenoise(x,3,Wavelet="db2") は、Daubechies db2 ウェーブレットを使用して x をレベル 3 までノイズ除去します。

[XDEN,DENOISEDCFS] = wdenoise(___) は、ノイズ除去後のウェーブレット係数とスケーリング係数を cell 配列 DENOISEDCFS で返します。DENOISEDCFS の要素は分解能の降順になります。DENOISEDCFS の最後の要素には Approximation (スケーリング) 係数が格納されます。

[XDEN,DENOISEDCFS,ORIGCFS] = wdenoise(___) は、元のウェーブレット係数とスケーリング係数を cell 配列 ORIGCFS で返します。ORIGCFS の要素は分解能の降順になります。ORIGCFS の最後の要素には Approximation (スケーリング) 係数が格納されます。

すべて折りたたむ

既定値を使用して、ノイズを含む信号のノイズ除去後のバージョンを求めます。

load noisdopp
xden = wdenoise(noisdopp);

元の信号とノイズ除去後の信号をプロットします。

plot([noisdopp' xden'])
legend("Original Signal","Denoised Signal")

ブロックしきい値処理を使用して、ノイズを含むデータの timetable をレベル 5 までノイズ除去します。

ノイズを含むデータセットを読み込みます。

load wnoisydata

ブロックしきい値処理を使用してデータのノイズをレベル 5 まで除去します。

xden = wdenoise(wnoisydata,5,DenoisingMethod="BlockJS");

元のデータとノイズ除去後のデータをプロットします。

h1 = plot(wnoisydata.t,[wnoisydata.noisydata(:,1) xden.noisydata(:,1)]);
h1(2).LineWidth = 2;
legend("Original","Denoised")

信号のノイズを異なる方法で除去して結果を比較します。

信号のクリーンなバージョンとノイズを含むバージョンを含むデータ ファイルを読み込みます。信号をプロットします。

load fdata
plot(fNoisy)
hold on
plot(fClean)
grid on
legend("Noisy","Clean")
hold off

sym4 ウェーブレットと db1 ウェーブレットを使用して、9 レベル ウェーブレット分解で信号のノイズを除去します。結果をプロットします。

cleansym = wdenoise(fNoisy,9,Wavelet="sym4");
cleandb = wdenoise(fNoisy,9,Wavelet="db1");
figure
subplot(2,1,1)
plot(cleansym)
title("Denoised - sym")
grid on
subplot(2,1,2)
plot(cleandb)
title("Denoised - db")
grid on

ノイズ除去後の各信号の SNR を計算します。sym4 ウェーブレットを使用した方が正確な結果が得られることを確認します。

snrsym = -20*log10(norm(abs(fClean-cleansym))/norm(fClean))
snrsym = 35.9623
snrdb = -20*log10(norm(abs(fClean-cleandb))/norm(fClean))
snrdb = 32.2672

ノイズを含む 100 個の時系列のデータを含むファイルを読み込みます。各時系列は fClean のノイズを含むバージョンです。時系列のノイズ除去を 2 回実行し、それぞれの場合のノイズ分散を推定します。

load fdataTS
cleanTSld = wdenoise(fdataTS,9,NoiseEstimate="LevelDependent");
cleanTSli = wdenoise(fdataTS,9,NoiseEstimate="LevelIndependent");

ノイズを含むいずれかの時系列について、対応するノイズ除去後の 2 つのバージョンと比較します。

figure
plot(fdataTS.Time,fdataTS.fTS15)
title("Original")
grid on

figure
subplot(2,1,1)
plot(cleanTSli.Time,cleanTSli.fTS15)
title("Level Independent")
grid on
subplot(2,1,2)
plot(cleanTSld.Time,cleanTSld.fTS15)
title("Level Dependent")
grid on

入力引数

すべて折りたたむ

入力データ。実数値の行列、ベクトル、または timetable として指定します。X がベクトルの場合、少なくとも 2 つのサンプルを含まなければなりません。X が行列または timetable の場合、少なくとも 2 つの行を含まなければなりません。

データ型: double

ウェーブレット分解のレベル。正の整数として指定します。LEVELfloor(log2N) 以下の正の整数であり、N はデータに含まれるサンプルの数です。

  • LEVEL を指定しない場合、既定で floor(log2N)wmaxlev(N,"sym4") の最小値になります。

  • James-Stein ブロックしきい値処理 "BlockJS" の場合、最も粗い分解能レベル LEVELfloor(log2N) 個の係数がなければなりません。

データ型: double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: xden = wdenoise(x,4,Wavelet="db6") は、Daubechies db6 ウェーブレットを使用して x をレベル 4 までノイズ除去します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: "Wavelet","db6","DenoisingMethod","Bayes" は、Daubechies db6 ウェーブレットと実証的ベイズ法を使用してノイズ除去を行います。

ウェーブレット。文字ベクトルまたは string スカラーとして指定します。ウェーブレットは直交または双直交でなければなりません。直交ウェーブレットおよび双直交ウェーブレットは、ウェーブレット マネジャー 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 を返します。

データ X のノイズ除去しきい値を特定するために使用するノイズ除去方法。

  • Bayes — 実証的ベイズ

    この方法では、測定値は混合モデルによって指定される独立事前分布をもつ、という仮定に基づいたしきい値ルールが使用されます。混合モデルで測定値を使用して重みが推定されるため、この方法はサンプル数が多い場合に効果的な傾向にあります。既定では、事後中央値ルールを使用してリスクが測定されます[8]

  • BlockJS — ブロック James-Stein

    この方法は、最適なブロック サイズとしきい値の決定に基づきます。結果として得られるブロックしきい値処理推定器では、最適な適応性をグローバルとローカルで同時に得られます[3]

  • FDR — 偽発見率

    この方法では、すべての真陽性検出に対する偽陽性検出の想定比率制御に基づいたしきい値ルールが使用されます。FDR 法はスパース データに最も効果的です。比率 (Q 値) を 1/2 より小さくすると、漸近的にミニマックス推定器になります[1]

  • Minimax — ミニマックス推定

    この方法では、理想的な手順について平均二乗誤差のミニマックス性能が得られるよう選択された固定しきい値が使用されます。統計でミニマックスの原理を使用して推定器が設計されます。詳細については、thselect を参照してください。

  • SURE — Stein の不偏リスク推定

    この方法では、Stein の不偏リスク推定 (二次損失関数) に基づいたしきい値選択ルールが使用されます。特定のしきい値 (t) に関するリスクの推定を取得します。リスクを (t) で最小化すると、しきい値の選択が与えられます。

  • UniversalThreshold - ユニバーサルなしきい値 2ln(length(x)).

    この方法では、log(length(X)) に比例する係数を乗算したミニマックス性能が得られる固定型しきい値が使用されます。

メモ

"FDR" では、オプションの引数で Q 値 (偽陽性の比率) を指定できます。Q は 01/2 の実数値のスカラーで、0 < Q <= 1/2 となります。"FDR" で Q 値を指定するには、2 番目の要素が Q 値である cell 配列を使用します。たとえば、"DenoisingMethod",{"FDR",0.01} のようにします。Q を指定しない場合、既定で 0.05 になります。

ウェーブレット係数の縮小に使用するしきい値ルール。文字配列として指定します。"ThresholdRule" はすべてのノイズ除去方法に対して有効ですが、有効なオプションと既定の設定はノイズ除去方法によって異なります。それぞれのノイズ除去方法に対して指定できるルールは次のとおりです。

  • "BlockJS" — サポートされるオプションは "James-Stein" だけです。"BlockJS" に対して ThresholdRule を指定する必要はありません。

  • "SURE""Minimax""UniversalThreshold" — 有効なオプションは "Soft""Hard" です。既定は "Soft" です。

  • "Bayes" — 有効なオプションは "Median""Mean""Soft""Hard" です。既定は "Median" です。

  • "FDR" — サポートされるオプションは "Hard" だけです。"FDR" に対して ThresholdRule を定義する必要はありません。

データに含まれるノイズの分散の推定方法。

  • "LevelIndependent" — 最も細かいスケール (最も高い分解能) のウェーブレット係数に基づいてノイズの分散を推定します。

  • "LevelDependent" — それぞれの分解能レベルのウェーブレット係数に基づいてノイズの分散を推定します。

ノイズ除去方法が "BlockJS" の場合、NoiseEstimate の指定は無効です。ブロック James-Stein 推定器では、常に "LevelIndependent" ノイズ推定を使用します。

出力引数

すべて折りたたむ

X のノイズ除去後のバージョンのベクトル、行列、または timetable。入力が timetable の場合、XDEN には元の timetable と同じ変数名とタイムスタンプが含まれます。

データ型: double

ノイズ除去後のデータ XDEN のノイズ除去後のウェーブレット係数とスケーリング係数。cell 配列で返されます。DENOISEDCFS の要素は分解能の降順になります。DENOISEDCFS の最後の要素には Approximation (スケーリング) 係数が格納されます。

データ型: double

データ X の元のウェーブレット係数とスケーリング係数。cell 配列で返されます。ORIGCFS の要素は分解能の降順になります。ORIGCFS の最後の要素には Approximation (スケーリング) 係数が格納されます。

データ型: 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 のヘルプを参照してください。

参照

[1] Abramovich, F., Y. Benjamini, D. L. Donoho, and I. M. Johnstone. “Adapting to Unknown Sparsity by Controlling the False Discovery Rate.” Annals of Statistics, Vol. 34, Number 2, pp. 584–653, 2006.

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

[3] Cai, T. T. “On Block Thresholding in Wavelet Regression: Adaptivity, Block size, and Threshold Level.” Statistica Sinica, Vol. 12, pp. 1241–1273, 2002.

[4] 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.

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

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

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

[8] Johnstone, I. M., and B. W. Silverman. “Needles and Straw in Haystacks: Empirical Bayes Estimates of Possibly Sparse Sequences.” Annals of Statistics, Vol. 32, Number 4, pp. 1594–1649, 2004.

拡張機能

バージョン履歴

R2017b で導入