ウォルシュ・アダマール変換
ウォルシュ・アダマール変換は、信号を一連の基底関数に分解する、非正弦関数による直交変換手法です。これらの基底関数はウォルシュ関数で、+1 または -1 の値をもつ矩形波または方形波となります。ウォルシュ・アダマール変換は、アダマール変換 (MATLAB の関数 hadamard
を参照)、ウォルシュ変換またはウォルシュ・フーリエ変換としても知られています。
最初の 8 個の Walsh 関数は以下の値をもちます。
インデックス | Walsh 関数値 |
---|---|
0 | 1 1 1 1 1 1 1 1 |
1 | 1 1 1 1 -1 -1 -1 -1 |
2 | 1 1 -1 -1 -1 -1 1 1 |
3 | 1 1 -1 -1 1 1 -1 -1 |
4 | 1 -1 -1 1 1 -1 -1 1 |
5 | 1 -1 -1 1 -1 1 1 -1 |
6 | 1 -1 1 -1 -1 1 -1 1 |
7 | 1 -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 は、
のように定義されます。ここで、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