読者です 読者をやめる 読者になる 読者になる

Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

周波数領域での信号処理/アダマール変換とユニタリ行列 その2

前回の続き。半年以上間が空いてしまいました。
アダマール行列であるかどうかを確認するには行列の要素が+1,-1のいずれか、そしてユニタリ行列
f:id:Lynx-EyED:20120103234722p:image
を満たしているかが条件の1つでした。*1また、アダマール行列はこうなります。

f:id:Lynx-EyED:20120103234723p:image
前回は1次元(x方向のみ)でのアダマール変換でした。
f:id:Lynx-EyED:20120103234724p:image
今回は画像のアダマール変換を考え2次元に展開しようと思います。x方向に対してアダマール変換をした後、y方向に対しても同様にして変換を行います。従ってアダマール行列を転置して再度ドット積を求めます。
f:id:Lynx-EyED:20120103234725p:image

SURF処理でのHaar waveletや離散コサイン変換でも画像を8x8の要素に分解してフィルタ演算をする事が多いようです。
ここでも前例に従います。つまり8次のアダマール行列があれば良い訳です。

アダマール行列(ウォルッシュ行列)の生成法は数種類ありますが、今回は
Sylvesterの生成法を使います。理由はいつも通り、簡単そうだから、、、n=2^k次のアダマール行列を求めるのは難しい事ではありません。
2次のアダマール行列は
f:id:Lynx-EyED:20120103234726p:image
一般化すると
f:id:Lynx-EyED:20120103234727p:image
なので、4次のアダマール行列は
f:id:Lynx-EyED:20120103234728p:image
従って8次は
f:id:Lynx-EyED:20120103234729p:image
うわーw

ここに挙げたアダマール行列は全てテンソル
f:id:Lynx-EyED:20120103234730p:image
を満たしています。
FPGAやASICエンジニア、制御シミュレーションを得意とする研究者はこの行列表記の方を用いやすいと思いますが
C言語など行列を使わない表記の方がソフトウェアエンジニアには馴染みやすいかもしれません。
行列を使わない表記で上記の行列をアダマール変換する場合
f:id:Lynx-EyED:20120103234731p:image
ただし、bはnを表現する為に必要なビット数、x_iはxもバイナリ表記した際のi番目の値となります。
次回はFPGAに実装する準備となります。




*1:加えて、行、列の大きさが4の倍数の大きさを持つとき、アダマール行列が存在することが知られている