ウェーブレットノイズ除去の基本的な概念

1.はじめに

     実生活や仕事ではノイズが至る所に存在し、多くの分野で天文学、医用画像、コンピュータビジョンで収集されたデータにノイズが含まれることがよくあります。ノイズは、データを取得するプロセスから発生する場合と、環境の影響から発生する場合があります。さまざまな理由により、常にノイズが存在し、ノイズが存在すると、信号自体が表す必要のある情報が不明瞭になることがよくあります。したがって、実際の信号処理では、多くの場合、信号を前処理する必要があり、前処理の最も重要なステップはノイズ低減です。

     ウェーブレット分析は、近年開発された新しい信号処理ツールです。この方法は、フーリエ分析から派生しています。ウェーブレット(ウェーブレット)、つまり小さな領域の波は、非常に限られた間隔でのみ非ゼロ値を持ちます。正弦波と余弦波には始まりも終わりもありません。ウェーブレットは、時間軸に沿って前後に変換できます。または、比例して伸張および圧縮して、低周波および高周波のウェーブレットを取得できます。構築されたウェーブレット関数を使用して、信号をフィルターまたは圧縮し、ノイズの多い信号から有用な信号を抽出できます。

 


 

第二に、ウェーブレットのノイズ除去の原理

 

Donohoによって提案されたウェーブレットしきい値ノイズ除去の基本的な考え方は、信号が(Mallatアルゴリズムを使用して)ウェーブレット変換された後、信号によって生成されたウェーブレット係数に信号の重要な情報が含まれることです。信号がウェーブレットによって分解された後、ウェーブレット係数は大きくなり、ノイズのウェーブレット係数は大きくなりますノイズのウェーブレット係数は小さく、信号のウェーブレット係数は信号のウェーブレット係数よりも小さいです。適切なしきい値を選択することにより、しきい値より大きいウェーブレット係数は信号によって生成されたと見なされ、保持されます。しきい値よりも小さい場合、ノイズによって生成されたと見なされます、ノイズ除去の目的を達成するためにゼロに設定します。

     信号科学の観点から見ると、ウェーブレットのノイズ除去は信号フィルタリングの問題です。ウェーブレットのノイズ除去は、ローパスフィルター処理と大部分は見なすことができますが、ノイズ除去後に信号特性を正常に保持できるため、この点で従来のローパスフィルターよりも優れています。ウェーブレットのノイズ除去は、実際には特徴抽出とローパスフィルタリングの組み合わせであることがわかります。フローチャートは次のとおりです。

     

      ノイズの多いモデルは次のように表すことができます。

     

     このうち、f(k)は有用な信号、s(k)はノイズの多い信号、e(k)はノイズ、εはノイズ指数の標準偏差です。

     e(k)がガウスホワイトノイズであると仮定します。通常、有用な信号は低周波数部分または比較的安定した信号として表示され、ノイズ信号は高周波信号として表示されます。s(k)信号に対してウェーブレット分解を実行します。そのとき、下の図に示すように、対応するウェーブレット係数がHL、LH、HHに対して処理され、信号が再構築されてノイズ低減の目的を達成する限り、通常、ノイズ部分はHL、LH、HHに含まれます。

      

     ウェーブレットのノイズ除去の原理は、一般的なローパスフィルター法と同様に、比較的単純なクラスであることがわかりますが、ウェーブレットは特徴抽出を保持する部分を見つけるため、パフォーマンスは従来のノイズ除去法よりも優れています。の。

     


 

 

3、ウェーブレットノイズ除去の基本的な方法

     一般的に言えば、1次元信号のノイズ低減プロセスは3つのステップに分けることができます。

      信号のウェーブレット分解。ウェーブレットを選択し、ウェーブレット分解レベルNを決定してから、信号に対してN層ウェーブレット分解計算を実行します。

      ウェーブレット分解の高周波係数のしきい値量子化。レイヤー1からレイヤーNまでの高周波係数の各レイヤー(3方向)に対して、しきい値がしきい値量子化用に選択されます。

     このステップは最も重要なステップであり、主にしきい値の選択と量子化のプロセスに反映されます。Matlabは、各層のしきい値の選択に多くの適応方法を提供します。ここでは、1つずつ紹介しません。ソフトしきい値による量子化。次の図は、2つの違いです。

     

     上の左の図はハードしきい値量子化で、右の図はソフトしきい値量子化です。2つの異なる方法を使用すると、ハードしきい値法は信号エッジなどのローカル特性を良好に維持できるという効果があります。ソフトしきい値処理は比較的スムーズですが、エッジのぼやけなどの歪みが発生します。   

      信号のウェーブレット再構成。信号のウェーブレット再構成は、ウェーブレットによって分解されたN番目のレイヤーの低周波係数と、量子化後の1番目のレイヤーからN番目のレイヤーの高周波係数に従って実行されます。

ウェーブレットしきい値ノイズ除去の基本的な問題には、ウェーブレットベースの選択、しきい値の選択、しきい値関数の選択という3つの側面があります。
(1)ウェーブレット基準の選択:通常、選択したウェーブレットが次の条件を満たしていることを望みます:直交性、高い消失モーメント、タイトなサポート、対称性または反対称性。しかし、実際には、ウェーブレットは対称的または反対称的であり、Haarウェーブレットのみであり、高い消失モーメントとタイトなサポートは矛盾のペアであるため、上記のプロパティを持つウェーブレットは存在できません。したがって、アプリケーションでは、一般的にタイトなサポートを選択します。ウェーブレットを使用して、信号の特性に応じてより適切なウェーブレットを選択します。
(2)しきい値の選択:ノイズ除去効果に直接影響する重要な要素は、しきい値の選択です。しきい値によって、ノイズ除去効果は異なります。現在、主に一般的なしきい値(VisuShrink)、SureShrinkしきい値、Minimaxしきい値、BayesShrinkしきい値などがあります。
(3)しきい値関数の選択:しきい値関数はウェーブレット係数を変更するためのルールであり、異なる関数は逆にウェーブレット係数を処理するための異なる戦略を反映します。最も一般的に使用される2つのしきい値関数があります。1つはハードしきい値関数で、もう1つはソフトしきい値関数です。ソフトしきい値機能とハードしきい値機能の間には、ギャロット機能もあります。
また、ノイズ除去効果の評価には、一般的に使用される信号の信号対雑音比(SNR)と、推定信号と元の信号の二乗平均平方根誤差(RMSE)を使用して判断します。

参照:

ウェーブレットしきい値ノイズ除去メソッドの基礎http://blog.sina.com.cn/s/blog_4d7c97a00101cib3.html

Pythonでウェーブレット分析を使用してしきい値のノイズを除去し、pywt.threshold関数を使用します

#coding=gbk
#使用小波分析进行阈值去噪声,使用pywt.threshold

import pywt
import numpy as np import pandas as pd import matplotlib.pyplot as plt import math data = np.linspace(1, 10, 10) print(data) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] # pywt.threshold(data, value, mode, substitute) mode 模式有4种,soft, hard, greater, less; substitute是替换值 data_soft = pywt.threshold(data=data, value=6, mode='soft', substitute=12) print(data_soft) # [12. 12. 12. 12. 12. 0. 1. 2. 3. 4.] 将小于6 的值设置为12, 大于等于6 的值全部减去6 data_hard = pywt.threshold(data=data, value=6, mode='hard', substitute=12) print(data_hard) # [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 将小于6 的值设置为12, 其余的值不变 data_greater = pywt.threshold(data, 6, 'greater', 12) print(data_greater) # [12. 12. 12. 12. 12. 6. 7. 8. 9. 10.] 将小于6 的值设置为12,大于等于阈值的值不变化 data_less = pywt.threshold(data, 6, 'less', 12) print(data_less) # [ 1. 2. 3. 4. 5. 6. 12. 12. 12. 12.] 将大于6 的值设置为12, 小于等于阈值的值不变 

1.ウェーブレット変換について

フーリエ変換-短時間フーリエ変換-ウェーブレット変換。

参照:次の2つの参照は非常に明確であり、ウェーブレット変換を理解するのに役立ちます。

ただし、具体的な数学的観点については、他の資料を参照してください。

(1)列を理解する:画像はアルゴリズムを簡単に理解し、説明するIウェーブレット変換

https://zhuanlan.zhihu.com/p/22450818

(2)コラムを知る:絞殺チュートリアルのフーリエ分析。

https://zhuanlan.zhihu.com/p/19763358

2.ウェーブレットパケット分解

ウェーブレットパケットは、ウェーブレット分解の高周波帯域での周波数分解能が低く、低周波帯域での時間分解能が低いという問題を克服するために提案されています。

これは、信号の時間領域分解能を向上させる、より精巧な信号分析方法です。

以下は、2つの比較チャートです。

3.エネルギースペクトル

      ウェーブレットパケット分解に基づいてマルチスケールの空間エネルギー特徴を抽出する原理は、さまざまな分解スケールで信号エネルギーを解決し、これらのエネルギー値を認識のためにスケール順に特徴ベクトルに配置することです。

20180510追記:具体的な計算式は以下のとおりです。本論文では、再構成された係数はエネルギー値の計算に使用せず、ウェーブレットパケット分解後の係数を直接使用します。ドキュメント「ウェーブレットパケットエネルギー特性に基づくローリングベアリング障害監視の方法」を参照してください。

4. Matlabコード

コードの2つの部分を考えて、2つの関数を記述します。1つはウェーブレットパケットの分解と再構成で、もう1つはエネルギースペクトル関数です。

ダウンロードアドレス:https://download.csdn.net/download/ckzhb/10030651

コード名:wavelet_packetdecomposition_reconstruct

function wpt= wavelet_packetdecomposition_reconstruct( x,n,wpname )
%% 对信号进行小波包分解,得到节点的小波包系数。然后对每个节点系数进行重构。 
% Decompose x at depth n with wpname wavelet packets.using Shannon entropy.
%   
%  x-input signal,列向量。
%  n-the number of decomposition layers
%  wpname-a particular wavelet.type:string.
%
%Author hubery_zhang
%Date 20170714
 
%%
wpt=wpdec(x,n,wpname);
% Plot wavelet packet tree (binary tree)
plot(wpt)
%% wavelet packet coefficients.default:use the front 4.
cfs0=wpcoef(wpt,[n 0]);
cfs1=wpcoef(wpt,[n 1]);
cfs2=wpcoef(wpt,[n 2]);
cfs3=wpcoef(wpt,[n 3]);
figure;
subplot(5,1,1);
plot(x);
title('原始信号');
subplot(5,1,2);
plot(cfs0);
title(['结点 ',num2str(n) '  1',' 系数'])
subplot(5,1,3);
plot(cfs1);
title(['结点 ',num2str(n) '  2',' 系数'])
subplot(5,1,4);
plot(cfs2);
title(['结点 ',num2str(n) '  3',' 系数'])
subplot(5,1,5);
plot(cfs3);
title(['结点 ',num2str(n) '  4',' 系数'])
%% reconstruct wavelet packet coefficients.
rex0=wprcoef(wpt,[n 0]);
rex1=wprcoef(wpt,[n 1]);
rex2=wprcoef(wpt,[n 2]);
rex3=wprcoef(wpt,[n 3]);
figure;
subplot(5,1,1);
plot(x);
title('原始信号');
subplot(5,1,2);
plot(rex0);
title(['重构结点 ',num2str(n) '  1',' 系数'])
subplot(5,1,3);
plot(rex1);
title(['重构结点 ',num2str(n) '  2',' 系数'])
subplot(5,1,4);
plot(rex2);
title(['重构结点 ',num2str(n) '  3',' 系数'])
subplot(5,1,5);
plot(rex3);
title(['重构结点 ',num2str(n) '  4',' 系数'])
end

コード名:wavelet_energy_spectrum

function E = wavelet_energy_spectrum( wpt,n )
%% 计算每一层每一个节点的能量
%  wpt-wavelet packet tree
%  n-第n层能量
% Author hubery_zhang
% Date  20170714
%%
% 求第n层第i个节点的系数
E(1:2^n )=0;
for i=1:2^n 
E(i) = norm(wpcoef(wpt,[n,i-1]),2)^2; %20180604更新 原代码:E(i) = norm(wpcoef(wpt,[n,i-1]),2)
end
%求每个节点的概率
E_total=sum(E); 
for i=1:2^n
p_node(i)= 100*E(i)/E_total;
end
% E = wenergy(wpt); only get the last layer
figure;
x=1:2^n;
bar(x,p_node);
title(['第',num2str(n),'层']);
axis([0 2^n 0 100]);
xlabel('结点');
ylabel('能量百分比/%');
for j=1:2^n
text(x(j),p_node(i),num2str(p_node(j),'%0.2f'),...
    'HorizontalAlignment','center',...
    'VerticalAlignment','bottom')
end
 
end

1次元および2次元の離散畳み込みの計算方法:

1.   定義

離散信号f(n)、g(n)は次のように定義されます。

 

N -----は信号の長さf(n)

s(n)----は畳み込み結果のシーケンスで、長さはlen(f(n))+ len(g(n))-1です。

例として3つの要素の信号を取り上げます。

f(n)= [1 2 3]; g(n)= [2 3 1];

s(0)= f(0)g(0-0)+ f(1)g(0-1)+ f(2)g(0-2)= 1 * 2 + 2 * 0 + 3 * 0 = 2

s(1)= f(0)g(1-0)+ f(1)g(1-1)+ f(2)g(1-2)= 1 * 3 + 2 * 2 + 3 * 0 = 7

s(2)= f(0)g(2-0)+ f(1)g(2-1)+ f(2)g(2-2)= 1 * 1 + 2 * 3 + 3 * 2 = 13

s(3)= f(0)g(3-0)+ f(1)g(3-1)+ f(2)g(3-2)= 1 * 0 + 2 * 1 + 3 * 3 = 11

s(4)= f(0)g(4-0)+ f(1)g(4-1)+ f(2)g(4-2)= 1 * 0 + 2 * 0 + 3 * 1 = 3

最終結果は次のとおりです。

     s(n)= [2 7 13 11 3]

上記の計算図は次のとおりです。

数学では、f(-x)の画像はf(x)のy軸の逆であることを知っています。

     g(-m)は、g(m)のシーケンスを逆にすることです。g(nm)の意味は、g(-m)のnポイントをシフトすることです。

ダンプは失敗した再アップロードをキャンセル

上の図に示すように、g(m)は通常信号処理でフィルターまたはマスクと呼ばれ、畳み込みはマスクg(m)が反転された後の信号f(n)の合計に相当します。Matlabはたたみ込み関数をconvとして計算し、

>> A = [1 2 3];

B = [2,3,1];

convD = conv(A、B)

convD =

     2 7 13 11 3

対応する2次元畳み込みは次のように定義されます。

ダンプは失敗した再アップロードをキャンセル

おすすめ

転載: www.cnblogs.com/junge-mike/p/12761489.html