DirectX EmptyProjectを使う その21 (simpleAGCの改良等)


dBm表示と、dBuEMFの、2通りの表示方法を選択できる。   
今、PM7:00ですが、ノイズばっかりで、静か。Soft66DB2のバンドパスフィルタって、優秀ですね。


 1.いや、参りました、 何に?

     peak値に、こだわっておりましたら、えらい目にあいました。

     

     前節のsimpleAGCのプログラムでは、

     AGCを掛けているにも拘わらず、SG出力の振幅が、一定しないのです.....


     本来、以下のように、ならないと、あかんはずです。

     

     色々、やってみましたが、結論として

     peak値で、その都度、振幅を制御するには、無理がある事がわかりました。

     つまり、gainを一定にする事が出来ませんでした。

     ですので

     AGCの制御は、peak値で行いますが、

          gainの値を決めるのは、RMS(root mean square)を使って、root 2 を、掛けました。

     そうしないと、不安定なpeak値から直接、安定したgainの値を、決めることができないのです。

    //peak detect
  for(i=0;i<Capture_Data_Length;i++)
  {
   DATA->peak_output=max(DATA->peak_output,DATA->output[i]);//peak
   DATA->rms +=pow(DATA->output[i],2);//RMS
  }
 /////////////////////////////////////////////////////////////////////////////////////////////////////
  //AGC
  if(DATA->AGC)
  {

   if(DATA->count >= DATA->hold_time || DATA->peak_output > DATA->prev_output)
   {
    DATA->count=DATA->hold_time;
 
       DATA->diff=DATA->peak_output/(float)DATA->hold_time;
    //DATA->hold_timeは、一定の値。CW,SSBで、異なる。sampling周波数でも異なる。
    }

   DATA->prev_output=DATA->diff*(float)DATA->count;
  
  //DATA->rmsは、必ず DATA->peak_outputより、大きくする
   
DATA->rms=1.43f*sqrt(DATA->rms/Capture_Data_Length);// RMS to peak

   DATA->gain=0.3f/DATA->rms;
  
   //limit upper gain
    if(DATA->gain>DATA->hold_lower_value)
      DATA->gain=DATA->hold_lower_value;

    DATA->count--;

    if(DATA->count<=0)
      DATA->count=DATA->hold_time;
 
  }

  else
  { //non AGC
  ........

     これでも、fps(frames per second)は、46以上、あります。(時々、ずっこける...)

     このプログラムは、前節のプログラムと、大きく変わりませんが、考え方の違いがあります。

     DATA->diffは、Sメータの動きを、アナログらしく見せるためでしか、ありません。

     全て、peak値と、RMSで、決めているのです。

     gainは、ディジタル的に、瞬時に変わっているのです。

2.低域の、cutoff周波数を変える試みは、失敗也


     

     LPFの低域のcutoff周波数を、notchの手法を使って、変えられるように、してみたのですが、NG。

     cutoff周波数付近で、ノイズが出て駄目です。

     原因は、解っています。

     私のプログラムでは、cutoff付近で、信号が下がった時、gainが、信号を上げようとして、不安定になるのです。

     これを解消する手を、まだ、思いつきませんねん。

     いや、違った。AGCを、offにしても、この現象が生じます。

     と、言う事は、LPFに問題があるのか、 はて?

     down sampling して、LPFを、もっと鋭い特性にする必要があるのか.......

     
3.ウェーブレットって、何?

     「ウェーブレットは信号の時間と周波数の関係を、2次元的にダイナミックに解析するものです。」 (最新ウェーブレット実践講座 softbank creative co.刊)

     なんか、凄いですよ。よう、わからんけど......

   
        ガボール・ウェーブレットによる 連続ウェーブレット変換解析ツール  WaveGabor.exe

        http://www.cmagazine.jp/books/wavelet/index.html に、sampleプログラムあります。

     「最新ウェーブレット実践講座」、この本しか、ないでしょ。 中々進まないです....

     いつかは、使えるようになりたい.....

     H.19.12.6