DirectX EmptyProjectを使う その20 (続simple AGC)



 1. 続simple AGC

     前節の simpleAGCを、もう少し発展させると、AGCらしい Sメータの動きになりました。
 
      この画像を、クリックして下さい。 動画で、Sメータの動きを見ることが、できます。

     この動画では、Sメータの動きは、現実と一致していますが、

     動画として撮ったために、fps(frames per sec)は、18位に落ちています。

     実際のspectrumの動き、及びpeak値の変化は、48fpsから60fpsですから、2.5倍から3倍の速さになります。

 2.それでも、simpleなプログラムです。

  //AGC
  if(DATA->AGC)
  {
   if(DATA->count >= DATA->hold_time || DATA->peak_output > DATA->prev_output)
   {
    DATA->count=DATA->hold_time;

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

   DATA->prev_output=DATA->diff*(float)DATA->count;
   
   DATA->gain=0.25f/DATA->prev_output;
   
  //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
      .....

     私が、AGCについて、勘違いしていたのは

     一定の時間 holdした後、attack time と、同じ速さで、decayしなければならないと、思っていたのです。

     これは、明らかに間違いで、

     attack timeで、速やかに、ある値をholdして、そこから、ゆっくり、落ちて行くのです。

     quick attack , slow decay(decrease)なのです。

     私は、attack time を ゼロmSに、採りました。 

    
 何故なら、私のプログラムでは、

     この前段で、peak_outputを検知して、この値を使って

     出力の振幅の大きさは、ある一定の値以上にならないように、作ってあるからです。
  
DATA->peak_output=0.0f;

  //peak detect
  for(i=0;i<Capture_Data_Length;i++)
   DATA->peak_output=max(DATA->peak_output,DATA->output[i]);
  ..........

DATA->prev_output=DATA->diff*(float)DATA->count;
   
   DATA->gain=0.25f/DATA->prev_output;

      ですので、所謂、attack timeは、私のプログラムでは、なくてもいいと、思うんです。


          これが、cwを受信した時の画像です。
   
     
       CWの始まり
     

     

     
       CWの終わり

     これが、よいかどうか、私には、解りませんのです。

     attack time が1mS位では、聴覚上、ゼロmSとの違いを、感じられないからです。

     このAGCの動きは、

           ぜんまいを巻いて、手を離した時の、ぜんまいの動きと、よく似ています。

     所が、強信号が新たに来ると、 ぜんまいが、まだ動いている間に、又、ぜんまいを、巻きなおす必要があります。

     ここん所が

          if(DATA->count>=DATA->hold_time || DATA->peak_output>DATA->prev_output)

     と、なる理由です。

        まあ、なんとか、それらしい Sメータの動きになったのでは、ないかと.....

    勿論、改造の要あると、思いますが、

    今の所、これで、行こうと、思っています。

3.古いSGの復活!

    

     これは National VP 8281Bと言う、真空管式のAM signal generatorです。

     今でも、ちゃんと動作するのですが、周波数変動が厳しくて、使ってませんでした。

     もう、20年位前に手に入れましたが、その当時でも、古いSGでした。

     今回、この古いSGの120dB幅の アッテネータだけを、使わしてもらう事にしました。

     うまい具合に、このアッテネータと、SGとの内部接続は、BNCでした、ラッキー!

    
    

    DDS SGの出力は、一定ですから、このアッテネータを通す事によって、120dBの可変幅を得る事ができます。

    オークションで探すまでも、なかった、ホッ、 (^_^;; 

    「灯台、もと暗し」やねえ。

    H.19.11.27