トップ «前の日記(2008年09月10日) 最新 次の日記(2008年09月12日)» 編集

のろのろのろ雑記


2008年09月11日 [ColdFire] ColdFire×P2P地震情報(8) 実際どこまで出せるのか

_ [ColdFire] ColdFire×P2P地震情報(8) 実際どこまで出せるのか

 Interface 9月号付録基板を使い,P2P地震情報のサービスを作ってしまう勝手な企画です.過去の記事は,タイトルのColdFireカテゴリからどうぞ.

前回のまとめ

  • A/Dコンバータへ直接アクセスして,"33.3 Hzの壁"を超えました.

実際どこまで出せるのか

 A/Dコンバータへ直接アクセスすることで,どれくらいまでオーバーサンプリング出来るでしょうか.

直接送信
main()
{
char soc;
char *ctr;ctr=0x40190000;
int *dat; dat=0x40190012;
int *sd=MemoryAlloc(8);
soc=CreateSocket(0);if(soc<0){PrStr("Soc!");return;}
Bind(soc,6909,0);sd[3]=3338;
PrStr("START!\r\n");
for(;;) {
  if(Getc(0)!=0)break;
  *ctr=32;
  sd[0]=dat[4]>>3;sd[1]=dat[5]>>3;sd[2]=dat[6]>>3;
  SendTo(soc,0xc0a80b69,6909,sd,8);
}
PrStr("GAME OVER\r\n");
CloseSocket(soc);
}

080911_ANR.png

 取得値をそのままUDP送信した場合です.表示を見ると,258.56 Hz出ていることが分かります.

フィルタ送信
main(){
  char soc; int i,j,index,ind_n;
  int *sample=MemoryAlloc(600); long *nr=MemoryAlloc(12); long *offset=MemoryAlloc(12);
  int *data=MemoryAlloc(8); char *k; int *a;
  k=0x40190000; a=0x40190012;
  // init
  soc=CreateSocket(0);if(soc<0){PrStr("Soc!");return;}
  Bind(soc,6909,0); data[3]=3338;
  InitAd(0x70); index=0; ind_n=85;
  for(i=0;i<3;i++){offset[i]=0;nr[i]=0;}
  for(i=0;i<300;i++)sample[i]=0;
  // loop
  #stop 0
  for(;;) {
    if(Getc(0)!=0)break;
    *k=32;
    index=(index+1)%100;ind_n=(ind_n+1)%100;
    for(i=0;i<3;i++){
      j=i*100+index;
      offset[i]-=sample[j];nr[i]-=sample[i*100+ind_n];
      sample[j]=a[i+4] >> 3;
      offset[i]+=sample[j];nr[i]+=sample[j];
      data[i]=nr[i]/15-offset[i]/100;
    }
    SendTo(soc,0xc0a80b69,6909,data,8);
  }
  MemoryFree(sample);MemoryFree(nr);MemoryFree(offset);MemoryFree(data);
  CloseSocket(soc);
}

080911_MNR.png

 移動平均によるフィルタを掛けてUDP送信した場合です.Unsignedで受け取ったので値が大変なことになっていますが,それよりも問題はサンプリング周波数.41.15 Hzと,先ほどの6分の1くらいしか出ていません.

 やはり,インタプリタで行うには限度があるようです.

どうしようか

 "あくまでSilentCで"ということで考えると,次のような方法があります.

  • 集計サーバに取得値をそのまま送りつけて,震度を計算してもらう
    • データ量は 6bytes * 100 Hz = 600bytes/s = 4800bps
    • インターネットごしにUDP送信するのか? TCP送信だとこんな速度出るのか?
  • LAN内のパソコンに送りつけて,震度を計算.ないときは低いサンプリング周波数で単独動作
    • 切り替えをうまくできるだろうか?
    • 単独動作時の低いサンプリング周波数によるノイジーな状態を許容できるだろうか?
  • 30 Hzや40 Hzくらいで,今までよりはマシにする
    • そんなに変わるだろうか?

 しばらく悩むことになりそうです.