Main Content

ウォルシュ・アダマール変換

ウォルシュ・アダマール変換は、信号を一連の基底関数に分解する、非正弦関数による直交変換手法です。これらの基底関数はウォルシュ関数で、+1 または -1 の値をもつ矩形波または方形波となります。ウォルシュ・アダマール変換は、アダマール変換 (MATLAB の関数 hadamard を参照)、ウォルシュ変換またはウォルシュ・フーリエ変換としても知られています。

最初の 8 個の Walsh 関数は以下の値をもちます。

インデックスWalsh 関数値
01 1 1 1 1 1 1 1
11 1 1 1 -1 -1 -1 -1
21 1 -1 -1 -1 -1 1 1
31 1 -1 -1 1 1 -1 -1
41 -1 -1 1 1 -1 -1 1
51 -1 -1 1 -1 1 1 -1
61 -1 1 -1 -1 1 -1 1
71 -1 1 -1 1 -1 1 -1

ウォルシュ・アダマール変換では、交差数値が返されます。交差数 (sequency) は、周波数の一般化概念で、単位時間間隔あたりのゼロクロッシングの平均数の 1/2 として定義されます。各 Walsh 関数は、一意な交差数値をもちます。返される交差数値を使用して元の信号の周波数を推定します。

ウォルシュ関数の保存には次の 3 種類の順序付けが使用されます。交差数、アダマールおよび 2 進です。Sequency は、信号処理アプリケーションで使用され、上記の表のような Walsh 関数を含みます。アダマール順序付けは制御アプリケーションで使用され、その配置は 0, 4, 6, 2, 3, 7, 5, 1 のようになります。2 進符号またはグレイ符号の順序付けは数値演算で使用され、0, 1, 3, 2, 6, 7, 5, 4 のようになります。

ウォルシュ・アダマール変換は、イメージ処理や音声処理、フィルター処理、パワー スペクトル解析など多くの用途で利用されています。帯域幅のストレージ要求の削減やスペクトル拡散解析に役立ちます。ウォルシュ・アダマール変換には、FFT と同様に高速版である、高速ウォルシュ・アダマール変換 (fwht) があります。FWHT は、複素数値が必要である FFT と比較して実数の加算と減算のみを使用するため、ストレージ容量が少なくてすみ、計算が高速です。FWHT は、FFT よりも少ない係数を使用して、シャープな不連続点をもつ信号をより正確に表すことができます。FWHT と逆 FWHT (ifwht) は対称で、同じ計算プロセスを使用します。長さ N の信号 x(t) に対する FWHT と IFWHT は、

yn=1Ni=0N1xiWAL(n,i),xi=i=0N1ynWAL(n,i),

のように定義されます。ここで、i = 0,1, …, N – 1 および WAL(n,i) はウォルシュ関数です。FFT に対するクーリー・テューキーのアルゴリズムと同様に、N 要素は、2セットの N/2 要素に分解され、これらはFWHTを生成するためにバタフライ構造を使用して結合されます。イメージに対しては、入力は一般に 2 次元信号で、FWHT 係数はまず行について、次いで列について値を求めることにより計算されます。

以下の簡単な信号について、結果の FWHT は、x が交差数値が 0, 1, 3, 6である Walsh 関数を使用して作成されたことを示します。これは、変換された x の非ゼロインデックスです。逆 FWHT は元の信号を再作成します。

x = [4 2 2 0 0 2 -2 0]
y = fwht(x)
x =

     4     2     2     0     0     2    -2     0

y =

     1     1     0     1     0     0     1     0
x1 = ifwht(y)
x1 =

     4     2     2     0     0     2    -2     0

参考

|

関連するトピック