モールス信号の逆変換

スーパーやコンビニへ買物に行く時、小銭を必ずポケットに忍ばせて行くようにしている。だって、xx1円ですって言われて、1円まけてよとは言えないからだ。おつりは、y9円 とかなって、知らぬ間に、小銭がわんさかとなるからだ。

わんさかとならない様に、家では、小銭(1,5円)と、コイン(10円以上)のバッファーで、管理している。コインの方は、少々溜ってもいいかなと思うのだけど、小銭は貯めたくないからだ。

たまたま、コインも小額紙幣も底をつくと、万札の登場となる訳だが、万札出して、おつりを、9700円も返してもらうのには、少々抵抗感がある。店によっては、両替買物おことわりと、いやな顔をする所もある。よって、小額紙幣も切らさないように、自分ではコントロールしてる。

特に勉強会とかの後の宴会費用清算は、おつりをもらわなくても済むように、小額紙幣5枚ぐらいと、コインで1000円ぐらいは、必ず用意するようにしてる。

そう言えば、コインの組合せを解く問題が、SICPにあったな。えっと、どんな問題だっけな?

FreeBSDのbeep問題

前回は、beepを自作したけど、直接ハードを叩いちゃいましょうと言う人もいるのね。 FreeBSDのリアルタイム性という発表記事(pdf)の中で、言及されていた。 処理時間のゆらぎを音で聞き分けちゃおうと言う発想。面白いなあ。

勿論、BSDerにとっては、それだけでなく、他の部分も十分面白いので、一読の価値あり です。

モールス信号の逆変換

ある読者から、ぼそっと

decodeは、どうします?

なんて、お便りを頂いてしまった。モールス信号の逆変換。'-.-. ' と言うのを、"C"に変換できますか? と言う、依頼(問題提起)だ。

そんなの、簡単しょ。haskellで書いたコード中にある、lookupの逆が出来ればOK。

[(k,v)]で、lookup は、k に対する、v を求める関数だった。これの逆、すなわち、v に対する k が 求まればいいんだから。lookupのコードをぱくってきて、ちょいと書き換えるだけ。

lookupは、こうなっている。

lookup                  :: (Eq a) => a -> [(a,b)] -> Maybe b
lookup _key []          =  Nothing
lookup  key ((x,y):xys)
    | key == x          =  Just y
    | otherwise         =  lookup key xys

これを、

lookupr                  :: (Eq b) => b -> [(a,b)] -> Maybe a
lookupr _key []          =  Nothing
lookupr  key ((x,y):xys)
    | key == y          =  Just x
    | otherwise         =  lookupr key xys

とでもすれば、OK。

これが一応の答えだけど、もう一歩先読みすると、ツー・ト・ツー・ト と言う、オーディオ(に準ずる)信号を受け取り、それを "C" に変換する事を問うていると理解した。 きっと、受信機から聞こえるモールス信号を、文字列にしたいんだろう。この装置をこっそり、1アマの試験会場へ持ち込んで、受験合格をしたいんだな。(笑)

そういう堪忍具願望があるなら、私もこっそりと、カンニング出来ないか調べてみる事にしよう。

FreeBSDの hamradio ports

cd /usr/ports; make search key=hamradio | grep morse してみましたよ。

でも、decode 機能を提供してるものは、ありませんでした。引っかかってくるのは、 こういうものばかりです。

We plan to build a program that will accept ASCII text as input and generate
International Morse Code as output. The output formats can be:

     - . -..- - (text) on the console
     Raw audio on /dev/audio (8bit PCM data)
     .wav files
     .ogg or (proprietary format) compressed audio

International Morse Code

Supported character set includes [A-Za-z] (all downcased as Morse is not case
sensitive), [0-9], ",-.?/" plus a few procedural characters (SK, AR, BT etc).

Python製でしたよ。おいらのは、Haskell製ですね。(正に、車輪の再発明だな)

そうだ、Debianにも、ham御用達のカテゴリが有ったな。 lenny hamradioを見てみました。 受信したのを、decodeするのは、無いようです。やはり、QRN(ノイズ), QRM(混信)にもQSB(フェージング)にも打ち勝って、decode出来るのは、「人ピュータ」だけなんでしょう。

そのうち、モールス信号をdecode(復号)出来る人は、人間国宝、世界遺産、ギネスブックに登録されるに、違いない。

結局、FreeBSDにもLinuxにも、モールス信号を解読するソフトは無いっぽいと言う結論になった。今なら、Linuxあたりで解読ソフトをリリースすれば、称賛されるに違いない。 でも、世界の大半は M$だからなあ。しょうがない、Windows系はどうなっているか、敵情視察しておくか。

Win_CW

WIN_CWは、電信信号を、サウンドカードに入力するみたい。XPでも動いたって報告あり。フリーウェア。

CWGet

CWGet残念ながら、シェアウェア。スペアナ風の窓とオシロ風の窓が出てきて、電信信号を最適な周波数に調整したり、クリップレベルを調整出来るみたい。

DSCW

Digital Sound CW説明書によると、定年退職されたOMさんが、一念発起されて開発中のソフトだ。ハムフェア中にお会い出来ないかなあ。いろいろ、お聞きしたい事があるぞ。

CWCom

CWCom、って、CW Communicatorの略なのね。これは、CQ誌で 知って、ちょっと試してみたのでした。

インターネット上で、電信を使って IRC しましょってソフトです。九州の方が ON AIRされてましたよ。いきなりでは、恐いので自習出来るようになっています。ネットに接続しない状態にしておけば、電波(この場合は、UDPパケットですが)は出ませんから、心おきなく使用できます。

初期状態では、キーボードの下向き矢印が、電鍵になってます。このキーを叩くと、モールス符合が解読されて、結果がASCII文字で表示されます。正確な符合を打つのはかなり難しいです。