モールス信号解析準備

  ;                 ;                               ;
                     ;                  ;
    ;  ;                                         ;    ;

セミコロン、セミコロン、、セミ・コロン、セミ・コロン、、、蝉・コロンである。

どうすか? 親父ギャグで、少しは涼しくなりましたか?

去年は見なかったのに、今年は異常と思えるぐらいの、蝉の亡骸を見た。中には、車に轢かれて 蝉せんべいになったものもいる。胴体は、ほぼ黒色で白っぽい模様が所々にある。羽は茶色。 何と言う蝉なんだろう? アブラゼミ?

あなた達の子孫が、13年後に無事地上に姿をあらわす事を願っていますよ。 それにしても、不気味な夏だ。

合わせて読みたい、山田養蜂場様推薦、「沈黙の春」(新潮文庫)

ハムフェアの予習(DDS)

もう幾つ寝ると、ハムフェアかいな と、子供みたいに指折り数えて待っている。ちょいと待ち 切れなくなっちゃって、予習する事にした。

世間の世相を現す、2CHの「無線と実験」なんて所を見ていた。そこで、さかんに DDSなんて 言う略語が飛び交っていた。こういう略語って、IT業界の専売特許かと思ってたけど、何処も 同じなのね。

ダイレクト・デジタル・シンセサイザーの略と知っても、まだピンとこない。KYを、空気読めと 言われるより、価格安い と言われるよりは、技術用語を並べてあるので、想像出来そうな ものであるが、だめである。

カンニングしたら、専用のICがアナログデバイスあたりから発売されてるようだが、まだ ピンとこない。いろいろ見てたら、 ダイレクトディジタルシンセサイザずばりなのがありました。 こういう図があると、分かりやすい。

調子こいて、いろいろ見ていくと、秋月でもキットを出しているし、そいつをそのままポータブル機の VFOにすると、電池の減りが早いので改造しました(周波数を落とすと、2乗で効いてくる)とか PICを改造しましたとか、いろいろ、いっぱい。知らないのはおいらだけ。ぐすん。

SDR

ソフトフェアで定義した、ラジオですって。 こちらのページが基点としてはいいんでは ないでしょうか。

CQ誌を通読してる人には常識なんでしょうが、プリント基板の付録があったみたい。で、みなさん いろいろと体験記を書いていますねぇ。 第二のゲルマニウムラジオですって。 今の人は、これが初めて作ったラジオになるんですかね。位相のずれた制御信号で、RF波を サンプリング、後はそれをFFTして復調とは、恐れ入りました。

ラジオの画面がパソコンに表示されるのは良いとして、スペアナ風味の画面はおまけなのね。 これで納得できましたよ。ICOMのトランシーバが、スペアナじゃなくて、あくまで、画面はおまけ だったって事が。一体、幾つのDSPを搭載してるのだろう? 行ったら、聞いてみるか。

DSPと言えば、こちらは有名ですね。 いろいろあって面白い。

SSB

SSBも計算して発生するようになりました。 浦和アマチュア無線クラブで、いろいろ実験 されてるようで、弟子入りしたいな。

SSBコラムと呼ぶには、もったいなさそうな 情報が詰まっていました。各種ソフトウェア測定器へのリンクも紹介されてて、自作派には 嬉しい限りです。

教えてください、DSCWの諸設定について

と題して、厚かましくも作者様に質問メールを出しちゃった。丁度、後輩へのために技術資料を まとめておられるとの事で、その原稿を心よく送っていただけだ。ありがとうございました。 > JA3CLM

Direct X の機能を使って、A/Dを動かしつつも、FFTや復号、表示をマルチスレッドで処理してる との事。高度だなあ。VS 2008で開発されてるそうで、商用ソフトを開発出来るだけの機能が提供されてるだけは、あるわい。

FFTは、256ポイントで行っていて、高速符号もきちんと拾えるように、FFTの範囲をオーバーラップ させているとの事。(その処理がなみなみならぬ苦労だったとか、想像しただけでもいやに なる事をされてて、脱帽しました。)

翻って、FreeBSDではと言うと、ざっと調べた限りでは、A/Dのダブルバッファリングも提供さ れていないようだし、マルチスレッドもしかりだ。JA3CLMさんと同じような構成にしようったて 土台無理な話っぽい。

幸い、面倒なGUIは全く考えていないから(GUIはMacで懲りた。 -- 一時は、Inside Macを全巻 取り寄せてチャレンジしたけど、労があるのみと悟ちゃった)、その分を割り引いてみると、 解析をいかに素早く行うかが、鍵になるような気がする。

A/D読み込み -> 解析 -> A/D読み込み -> 解析 というループを単純に回すのがよさそう。 速いモールスの短点は、20ms ぐらいとの事なので、解析をその1/10ぐらいで出来れば、 何とかなるかな。

解析用データの作成

取りあえず、コーディックからのプログラムによる入力は後回しにし、データが揃ったと言う 前提で、FFTとかを先にやってみたい。こういう方法論は Haskellを勉強していて身に付けた。

前に作った、モールス発信器をエンドレスに回して、モールス信号を出しっぱなしにする。

code=".-'-...'!'-.-.'-..'.'"  # "ab cd e"

while :
do
  mosc.exe $code
  mosc.exe $code 100 800
  mosc.exe $code 50
  mosc.exe $code 50  800
done

こんな簡単なshellスクリプトを書いた。波形の種類は4種。トーンが高いの低いの、スピードが 遅いの速いのの組み合わせだ。これだけあれば、取りあえずのテストには十分だろう。

あれ? Windows上でshell といぶかる人はなかなか鋭いですねぇ。何を隠そう 私は、M$方言 Power shell 脱落組です。MinSYSに付いていた、shellを使いました。batも正直苦手ですから。

次は、FreeBSD側での録音だ。以前探しておいた簡単な方法で録音する

dd bs=16k count=15 < /dev/dspW > sound.au

/dev/dspWは、デフォで使うと、16Bit分解能、モノラル、8000Hzのサンプリングとなっているので、1秒間に 16k byteのデータが出てくる。これを15ブロック録音と言う事は、15秒の録音する事になる。 録音出来たら、一応再生して、確認しておく。

cat sound.au > /dev/dspW

ちょっとくぐもった音になってしまったのと、出だしの部分のタイミングが少々崩れている ように聞こえる。でも、実使用を考えたら、ノイズも(耳で聴く限りは)無いようだし、これで 良しとするか。

後は、このデータをFFTなりして、解析するわけだが、余り早いマシンを使って 力まかせ して しまうと、プログラミングの問題が見えてこなくなる恐れがあるので、遅いマシンでやって みる事にする。どのくらい遅いマシンかと言うと、700MHzのセルロンCPUを積んでやつ。 今や、骨董品の風格を讃えたやつである。(買った時は、Windows Meが入っていたけど、いろいろ な遍歴を経て、今はFreeBSD 6.4で余生を送っている)

信号のモニター

さて、上で録音したデータは、本当にデータだけでヘッダーも何も付いていない。プログラムで 扱うには、ヘッダーの読み飛ばしなどの面倒さがなくて楽なんだけど、普通のツールで波形を 見たいと言う時は、ちと不便だ。

ヘッダーを付ける等をしてくれるツールが無いかと思って探してみたら、audio/afsp と言う 便利なツールで変換出来る事が判明した。(言わば、音用のImageMagicと言った所か、複数の コマンドが提供されている)

今回は、このafspツール群のうち、CopyAudio と言うのを使ってみる。

[sakae@nil ~/tmp]$ export AF_FILETYPE=noheader
[sakae@nil ~/tmp]$ export AF_NOHEADER=integer16
[sakae@nil ~/tmp]$ CopyAudio sound.au xxx.wav
 Headerless audio file: /home/sakae/tmp/sound.au
   Number of samples : 122880 (15.36 s)  2009-08-19 00:13:18 UTC
   Sampling frequency: 8000 Hz
   Number of channels: 1 (16-bit integer)

 WAVE file: /home/sakae/tmp/xxx.wav
   Sampling frequency: 8000 Hz
   Number of channels: 1 (16-bit integer)

ヘッダー無しと言う、ろくでなしには不親切で、パラメータを環境変数から指定しておくみたいだ。 (それにしては、サンプリング周波数を正しく読み取っているな。不思議だ)

ヘッダー付きになった、xxx.wavファイルを、Windows上の「サウンドモニターFFT Wave」に かけてみた所、サンプリングレートは、11,22,48KHzでお願いしますって言われて拒否 されたよ。そうか、8kHzサンプリングなんて、Windowsでは規格外なのか。

[sakae@nil ~/tmp]$ CopyAudio -s 11025 sound.au xxx.wav
 Headerless audio file: /home/sakae/tmp/sound.au
   Number of samples : 122880 (15.36 s)  2009-08-19 00:13:18 UTC
   Sampling frequency: 8000 Hz
   Number of channels: 1 (16-bit integer)

FLbackup - Renamed existing file to "xxx.wav~"
 WAVE file: /home/sakae/tmp/xxx.wav
   Sampling frequency: 11025 Hz
   Number of channels: 1 (16-bit integer)

ちょっと、出力ファイルのヘッダー情報を偽ってみた。そして、このファイルをFFTアナライザー にかけたら、目出度く騙されてくれて、波形を表示してくれた。ちゃんとモールス波形が見えたよ。 これで安心して、解析に取り組めるな。

おまけ

上で大活躍した afspコマンド群。どんなコマンドがあるか忘れそうなので、メモを残しておきます。

Audio file utility programs and a library of routines for audio files.
Audio File Utility Programs:
  InfoAudio - display information about an audio file.
  CompAudio - compare audio files, producing statistics and signal-to-noise
              ratio figures.
  CopyAudio - copy audio files.  This program combines samples from input audio
              files (an arbitrary linear combination) and writes them to the
              output file in a user selectable format.  One application is to
              provide format conversion for an audio file; another is to
              combine samples from multi-channel files.
  ResampAudio - resample data from an audio file.  This process involves
              interpolating between the samples in the original file to create
              a new sequence of samples with a new spacing (sampling rate).
   and FiltAudio, GenNoise, GenTone, LPanal, LPsyn
The following file formats are supported for reading.
  - Headerless, AU, WAVE, AIFF/AIFF-C, NIST SPHERE, IRCAM,
    INRS-Telecom, ESPS, Comdisco SPW, Text audio
The following file formats are supported for writing.
  - Headerless, AU, WAVE, AIFF-C

WWW: http://WWW-MMSP.ECE.McGill.CA/Documents/Software/Packages/AFsp/AFsp.html
-r-xr-xr-x  1 root   wheel   127788 Aug 19 15:08 ResampAudio*
-r-xr-xr-x  1 root   wheel   115192 Aug 19 15:08 PQevalAudio*
-r-xr-xr-x  1 root   wheel   105592 Aug 19 15:08 LPsyn*
-r-xr-xr-x  1 root   wheel   108360 Aug 19 15:08 LPanal*
-r-xr-xr-x  1 root   wheel    75872 Aug 19 15:08 InfoAudio*
-r-xr-xr-x  1 root   wheel    59240 Aug 19 15:08 GenTone*
-r-xr-xr-x  1 root   wheel    57132 Aug 19 15:08 GenNoise*
-r-xr-xr-x  1 root   wheel   119120 Aug 19 15:08 FiltAudio*
-r-xr-xr-x  1 root   wheel   119360 Aug 19 15:08 CopyAudio*
-r-xr-xr-x  1 root   wheel    92856 Aug 19 15:08 CompAudio*

嗚呼、上で不思議がった、8000Hzの謎が解けたよ。man には、

       The default values for the audio file parameters correspond to the fol-
       lowing string.
         "undefined, 0, 8000., native, 1, default"

こう書いてあって、このデータの並びは、"Format, Start, Sfreq, Swapb, Nchan, ScaleF"との 事。マニュアルはしっかりと読むものだ。