'$50% Overlap-Save法 って、どんなん?

1.いよいよ、50%Overlap-Save法を調べる

前節の例を踏襲して、調べてみましょう。

つまり、インパルス応答h

MATH

そして、このインパルス応答の次数の2倍を、基準にする、のでした。

MATH

'$

$\qquad $今、離散的な入力信号xを、以下のように、仮定します。

         x = | 1 2 3 4 5 6 7 8 | 

$\qquad $

そして、入力信号も、インパルス応答の次数の2倍で、ブロック化します。

最初のブロック

'$

       x = | 1 2 3 4 | 

について、

直線たたみ込み(linearconvolution)と、巡回たたみ込み(circularconvolution)を、行ってみますと

$\qquad $

$\qquad $

$\qquad $linearconvolutionMATHcircularconvolution

MATH

'$

MATHについては、両方のたたみ込みが、一致します。

次のブロック は、入力信号が、50%重なるように、ブロック化します。

つまり、最初のブロックの、後ろ2つを、前にもってきて、新しいデータは、2つだけ、その後に、並べるのです。

'$

      x = | 3 4 5 6 | 

linearconvolutionMATHcircularconvolution

MATH

'$

同様に、して

'$

      x =| 5 6 7 8 | 

linearconvolutionMATHcircularconvolution

MATH

'$

どうです?たたみ込みの結果の、後ろ2つ分は、いつも、一致していますね。 ( 実は 3つ分や、けんど )

実に、うまいこと、考えてありますね、すごいですね.....

この一致が、偶然でない証に、一般式で、書いてみますと

'$

MATH

'$linearconvolutionMATHcircularconvolution

MATH

'$

MATH

linearconvolutionMATHcircularconvolution

MATH

'$

以上を、一般式に、拡張いたしますと

インパルス応答の次数L の2倍の次数で、入力信号x を、ブロック化し、その入力を、50%重なるようにしてやれば

たたみ込みの結果は、

後ろL 個分は、

直線たたみ込みと、巡回たたみ込みの結果が、一致する!

うーむ、すごい!ナイス!ベリグー!

ここまでが、50% Overlap-Save法です。

ほんで、

巡回たたみ込みの部分は、FFTを使って、高速化できる。

そんで、

IFFTの結果の、後ろL個分を、順次、採用すれば、

信号が連続的に入ってきても、

直線たたみ込みと、同じ結果が得られる、うーん......すんごい。



     実際には、どうなんやろ?  これから試す所です。

  それから

  PortAudio ASIOで、blocking/IOは、不発でした。(ASIO2 SDKを調べると、ASIOの IOは、Callback関数しか、使えない事が、判明しました。 )

H.19.2.9