VHF ACARSのデコーダーすらまともに完成させていないのに他のものを作ってみるのもどうかと思うのではあるが、かなり気になっているので調査ぐらいはしてみようかと。 HFDLやHF ACARSでグーグルって見ると、ARINC 635と753というのがプロトコルで使われているようだ。これらの仕様書はARINCで販売されているがやたらに高い。
2006-04-23
2006-04-21
ソフトデコーダーでいろいろ受信してみる(2)
前回は船舶系で終わってしまったので、今回は航空系です。
ACARS
航空系だと最もメジャーなのがVHF ACARSではないでしょうか。デコーダーもWACARSをはじめ、有償なものまでいろいろあります。日本国内では周波数は、131.45MHzがメインで、他に131.25MHzと131.95MHzがあります。131.95MHzは最近運用が始まったのですが、東京や大阪などの過密地帯向けに運用されているようです。東京では比較的よく受信できますが、通信頻度は高くありません。 あとは、HF ACARSといわれているHFDLというのがあります。名称通りHF(短波)で通信されているもので、現状ではデコードできるのは、PC-HFDLというソフトぐらいはないでしょうか。HFという電波の性格上、近くでも受信できなかったり、遠くの飛行機のデータが受信できたりということがあります。
SELCAL
SELCALというと、航空系と船舶系と両方あります。航空系は、プロトコルからANNEX SELCALといわれることもあります。このSELCALは、航空機側から管制へ自機の識別のため送信されるもので、通常はHFの管制(洋上管制)の音声通信で使われているものです。AirNavという有償のソフトウエアでデコードできます。その他にもあるようですが、特に有名なものはないようです。
SELCALはいわゆるデュアルトーン(2つの音を同時に出す、DTMLともいえる)で2回送るだけで、データー通信とはいえるかどうかはわかりません(しかし、作成は試みたことはないですが、デコードは意外に難しいかもしれません)。
こんなところでしょうか、航空系は船舶系よりもあまりデータ通信が多くないと思えるのですが、航空機からの電波は陸でよく受信できるということもあり、趣味とされている方も多いようです。
2006-04-19
ソフトデコーダーでいろいろ受信してみる
ソフトモデムを使って通信するのはアマチュア無線ではかなりあります。CWに始まり、RTTYやパケットなどのFSKやPSK31などのPSK、SSTVもあります。最近ではデジタル通信として、PSKの多重(直交なのか?)を使ったものもあります。アマチュア無線は開局してないと楽しめませんし、HFだとアンテナもそれなりのものが必要でしょう。
とりあえず、お手軽なところで受信だけで楽しめるのは何があるかというと、船舶か航空系になってしまうと思います。VHFやUHFのデジタル系の受信はソフトデコーダーでは、おそらく無理ですから。
船舶系FSK
船舶でいわゆるRTTYでの通信はあまり多くないと思います。おそらくSITOR-Aといわれる形式(100ボー180Hzシフト)が多いのではないでしょうか。通報であるNAVTEXはSITOR-Bで同じく100ボー180Hzシフトです。これらはRTTYとエンコードの形式が違うため、RTTYのデコーダーではデコードできません。NAVTEXはデコードできるソフトがいくつかありますが、SITOR-Aの場合、ビットで同期するので、NAVTEXのデコーダーではデコードできないかもしれません。 NAVTEXは、基本的に518kHzか424kHzでSSBで受信するので、それなりの受信機とアンテナが必要です。アメリカではHFでも送信されていますので、ハワイかグアムからの通報は受信できます。
気象FAX
HFでのFAXの受信は、気象FAXが最も受信しやすいと思います。日本では気象庁が船舶向けにFAXを送っています。詳しくは、同サイトのトップの下のほうに「気象資料の閲覧・入手方法」というリンクがありますので参照してください。日本以外には、韓国、中国、台湾などが受信しやすいと思います。
気象FAXという意味では、NOAAの衛星からの画像受信があります。こちらはVHFですが、FMでIFのバンド幅が広いものが必要となり、ちょっと特殊な受信機が必要になります。あとこれらの衛星は、地上からみて静止しているのではなく、1日に2回ぐらい上空を横切ります(南北方向なので縦切り?w)。そのため高い所からの受信となるため、GPやディスコーンなどのアンテナだとうまく受信できない場合があります(この手の垂直なアンテナは真上からの電波は得意でない)。気象衛星用のデコーダもフリーなものも含めていくつかあります。受信機やアンテナなどいろいろ条件が厳しいのではまり度が高いのではないでしょうか。
今日のところは...続きはまた書きます。
2006-04-16
CRC-CCITTの計算
モデム等の通信で多く使われているエラーチェックアルゴリズムとしてCRC(巡回冗長検査)があります。このアルゴリズムは、ハード的に比較的簡単なロジックで実現できて、検出能力も比較的高いためよく使われているようです。
CRCの原理については、面倒なのでここでは書きませんw。グーグルってもらえれば、詳しく解説されています。
CRC-CCITTは、CCITTで規格化されたCRCということになります。CCITTは現在ではITUという団体に変わっています。CRCのアルゴリズムを使って何を規格化したかというと、CRCの計算のパラメタとなる、「ビット長」「多項式(polynominal)」「初期値」「ビットを送る方向」ということになります。
CRC-CCITTでは、ビット長は16bit、多項式は1+X^5+X^12+X^16、初期値はFFFF、送りはLSB First(右送り)となります(LSB Firstはプロトコルに依存するかも)。ただし、プロトコルによっては初期値が違う場合もあるようです。
実装コードは、テーブルを使って高速化したもの等が検索するといくつかあるようですが、すなおに簡単なコードで書くと、以下のようになります。
static unsigned short _crcValue=0xFFFF; static unsigned short _polynomial=0x8408; unsigned short crcCalc(unsigned char data) { for(unsigned i=0;i<8;i++){ bool flag=((_crcValue^data)&0x0001)!=0; _crcValue>>=1; if(flag) _crcValue^=_polynomial; data>>=1; } return _crcValue; }
1回計算すると_crcValueが変わるかもしれないので、0xFFFFで初期化してから計算するようにします。チェックするデータを順にパラメタにいれて関数を呼び出します。戻り値にCRCの値を返してますが必要なのは最後だけです(0xFFFFになっている)。
実装するときにはもっと賢いコードに書き換えてくださいねw。
2006-04-12
WACARSのデコード
WACARSと自前デコーダーとでデコード能力を比較しているので、WACARSの「くせ」がある程度わかってきたので書いてみます。
IFのバンド幅による影響
通常のAMの場合、6kHzのバンド幅になっている受信機がほとんどですが、6kHzの場合2400Hzの信号がやや減衰されます。どのくらい落ちるかは受信機によって異なりますが、一般的に考えると減衰するほうがよい受信機であるともいえます。WACARSでデコードする場合、1200Hzとの振幅の差が大きいと失敗しやすくなりますが、極端に悪くなることはなさそうです。おそらく、他の条件(S/Nの悪化)などが重なると影響が大きくなる傾向があるようです。
振幅の変動
ACARSはVHFなのでHFの様に信号が強弱することは基本的にはなく、ましては信号を送る時間が長くても2秒ぐらいなので、受信信号の強さが変動することは、ほぼないと思われます。
受信機によってはAGCが効くため、復調された信号の最初のほうに振幅が安定しないところが現れます。WACARSの場合、どうやらFrame Syncまでの間に振幅が変動すると失敗しやすくなる傾向があるようです。AGCの効きかたが(時間軸に対して)緩やかなだと、このような状態になるものだと思われます。
ノイズ
あえて悪い環境として、ハンディ機でPCから1mぐらい離して、付属のアンテナで受信してみると、WACARSもかなりデコードできません。波形レベルでみると弱い信号はかなり歪んで、デコードできる感じがしません。耳で聞いた感じでは信号がきているのはわかるのではあるのですが。
おそらく、ノイズが多いとIFのバンド幅などの影響が大きくなるようです。これはWACARSというよりもデコーダーでは一般的なことになります。
振幅の大きさ
要はボリューム調整のことです。受信する信号によって復調した信号の大きさ(音の大きさ)が変わりますが、特にハンディ機などでAGCが効いてない場合、その差が大きくなります。
上記の悪条件をなるべく除いてWACARSでデコードした場合、レベルインジケーターが右のほうに(大きめに)しても左にほうにしても違いはありませんでした。おそらく、条件が悪い信号をデコードするときにボリュームがあのインジケーターの真ん中にくるほうがよいという意図なのかもしれません。
終わりに
WACARSは、受信側の条件が整えば、デコード能力は低くありません。波形が多少歪んでいてもちゃんとデコードします。そういう意味ではWACARSと同等な能力を持つデコーダーを作るは簡単ではないようです。
2006-04-10
ビットシンク
ビットシンク(正しくはBit Frame SyncかSymbol Frame Syncかも)は、変調された信号を変調速度に合わせて(同期)1か0(多値の場合には1以外もあるが)を検出することである。 これをソフトウエアで実装するのはどうすればいいのかということが書いてある文章がほとんど見つからなかったのだが、ハードウエア的にはだいたい次のようになるらしい。 まずは、信号処理で比較をして、結果が1か0になる(デジタル的になる)。0→1もしくは1→0のタイミングを検出して、そこから変調速度に合わせたクロックと同期をさせる。場合によっては、0→1と1→0の両方(順番はどちらでもよい)を検出してから同期を取る場合もあるらしい。 同期が開始されると、クロックが上がるときもしくは下がるときに1か0かどちらかであるかをチェックする。ただし、信号処理でどちらかともつかない信号が来た場合には、同期を中断して最初の状態になり1か0から状態が変わるのを待つようにする。 といった感じになるようだ、ソフトウエアでもおおかた同じようにすればよさそうである。ただ、このままだと最初の信号が不安定な時は同期に失敗するので、パケットのように最初のピットパターンだけで同期を取るような場合には、もうちょっと工夫しないと、デコードの能力はあまり高くならないかもしれない。
2006-04-03
ACARSデコーダーのプロトタイプ
前回ACARSのデコーダーがプロトタイプまでといったのが、ネタと思われるのもなんなので、画面のキャプチャを出してみます。あくまでもデコーダーのプロトタイプで、デコード能力のチェックやチューニング用のUIなので、説明はなしとします(質問もなしにしてくださいね)。 受信した時間が遅かったのであまりレコードはありませんが、だいたいこんな感じです。WACARSと同時にデコードすると、ほとんどは同じような結果になるのですが、ぎりぎりのところでの性能が全く逆で、WACARSが成功するとこっちが失敗して、こちらが成功するとWACARSが失敗するということが多いです。おそらく、信号処理の根本が全く違うのだと思われます。 デコード能力は、WACARSの得意な環境だと、ぎりぎりで失敗するところがWACARSのほうが少なく、ざっとみた感じでは100:95ぐらいで負けています(両方ともエラーはフルチェック)。 欠点は大体予想はついているのですが、現在パフォーマンスチューニング中のためデコード能力の改善はやってません。UseVecというのは、VelocityEngineを使うか否かという意味で、現在のチューニングのために入れています。 アクセラレータを入れずにデバッグすると、サウンドデータの取りこぼしが多くなるので、こっちを先にやっています。