50% Overlap-Save法を、実際に試す

 

 48KHz sampled  signal,  through   4096 point Low Pass Filter using PA19_ASIO

 1.さすが! Overlap-Save法
 
     あっけなく、見事に、出来上がりました...

     勿論、96KHz samplingでも、綺麗な、波形が表示されます。

 

 96KHz sampled signal, through  2048 point LowPass Filter  using PA19_ASIO

    しかし、LowPassFIlterの次数は、半分の、2048pointです。
   
    ( 4096pointにすると、音が、連続しない。つまり、計算が、間に合わないのでは、ないでしょうか? )


    とにかく、できましたわ! うひょひょ ♪   

  継ぎ目の無い音を、お聞きくださいませ m(_ _)m
 

2.プログラムの骨子
 
   double bufferを、使います。 大変、シンプルなもので、済ませています。

 

    入力が、ありましたら、まず、2箇所に、同時に保存します。( 赤い所、bank0 と bank2 )

    そして、bank1の先頭から、2bank分の大きさだけを、FFTの対象とします。

   次の入力が、ありましたら、同じように、2箇所に 同時に、入力を保存します。

   この時、FFTの対象は、bank2の先頭から、2bank分の大きさです。

   その次も、同様にしますが、FFTの対象は、再び、bank1の先頭から 2bank分になります。
   
   従って、ここら辺のプログラムは、以下のように、なります。

      int offset=0;  と、定義しておいて

      if( offset % 2 == 0 ) 
      {
         for( i = 0 ;i < capture_data_length;i++ )
             data->my_data[i] = data->my_data[i+offset2]=*in++;
           
            myfir->get_CaptureData_FFT_result(data->my_data+offset1,
                capture_data_length*2,capture_fft,work,ip,w);

         }        
         else
          {
            for( i = 0 ;i < capture_data_length;i++)
                  data->my_data[i+offset1] = data->my_data[i+offset3]=*in++;
               
            myfir->get_CaptureData_FFT_result(data->my_data+offset2,
                capture_data_length*2,capture_fft,work,ip,w);

          }
    offset++;

       と、言う具合です。

 3.LowPassFilterを、+5KHzだけ、複素周波数遷移させる。

 
cutoff 1KHz LPF を、+5KHz周波数遷移させた


7KHzを観測していても、BandPassFilterへの、影響は、ほとんど無い!

    LowPassFilterを、複素周波数遷移を使って、BandPassFilterにする事については、

    189.filter特性も周波数遷移できる、複素周波数変換 (追加記事あり)を、ご覧下さい。

    今回、特筆すべきは、

        BandPassFilter帯域内への、帯域外のシグナルの影響は、非常に少ない事です。
   
    以前、この事について、私が、ぼやいていたのが、ウソみたいに、影響が少ないです、素晴らしい、ハラショー。

尚、メインプログラムは、今の所、このように、しています。


       H.19.2.15