信号処理の話

MMX・SSEには、積和演算をしてくれるニモニック(命令)があります。 MMXであればこんな感じ

AAAA BBBB CCCC DDDD // 16bit * 4
 *    *    *    *
aaaa bbbb cccc dddd
  \ /     \ / 
EEEEEEEE  FFFFFFFF  // 32bit * 2
↑乗算結果を足す

「(AAAA * aaaa) + (BBBB * bbbb) = EEEEEEEE」という演算が2本一度に出来るわけです。 マルチメディア関係でこの「積和演算」を利用するって話は聞いていたのですが、いまいちピンと来なかった私。

しかし本日 「フィルターで多用する」 という話を聞いてようやく便利さが理解できました。 つまりは、ソースとなるデータ A, B, C, D ≒ A[0], A[-1], A[-2], A[-3] *1 に、フィルター係数 *2 を乗算してあげてフィルターをかける。 で、最後の加算でデータを足して合成すると。 最終的に E + F を行ってあげれば、とりあえず4サンプリングのフィルタリングは完成と。 なるほどなるほど ………あってるよなぁ?(ぉ


しかしなー、明らかに知識量が不足していると痛感。 信号処理が分かってないことを始め、 bitmap もまだ素直に扱えないし…。 先は長い…

つか、終わりが見えん。orz

*1:A[-1]は、1つ前のサンプリング値とする

*2:信号を変化させるときに使う定数みたいなもん