モールスリーダー Kraftwerk の Radioactivity を読む

Kraftwerk 好きの皆さんなら、モールス信号といえば、Radioactivity ですよね。はい実はあれのモールス信号が読みたくてこのプロジェクトをやったんですが。ちゃちゃっとはできなくて足元には深い沼が見え始めてます。ここまで使ってきたテスト信号はノイズが乗っているといってもせいぜい定常なホワイトノイズぐらい、それほど信号読み取りの邪魔にはなりませんでした。ですが Radioactivity は音楽です。この冒頭のところ、クリック音が入ってるし、コーラス風のコードが流れているし途中からベースも入ってくるし、モールス信号を拾うのは格段に難しそうです。

モールス信号のパタンを認識する その2 残された可能性の刈り取り

前回の記事では、モールス信号の読み取りに迷ったらどちらの可能性にも分岐する「多重世界線方式」を考えて実装したところ、その自信度で評価して一番上に正解が来るようになりました。しかし可能性をいくつも見せても仕方がないのでやはり一つを残して他は刈り取る必要があります。これが次の課題です。

モールス信号のパタンを認識する

前回の記事で、モールス信号読み取りプログラムの大枠を作って紹介しましたが、モールス信号のオンオフパタンの読み取りは原始的な方法でお茶を濁してしまいました。今回はそこを強化してみた、という記事です。

モールス符号の入力を実際に理解させるときに、大きく二つ問題があります。

  • 全く同一のタイミングで別の符号パタンが存在する
  • モールス信号は人手で叩くこともあり、タイミングは必ずしも正確ではない

全く同一のタイミングについては、例えばこのようなもの

******      ******      ******
Bash

これは、トンの長さが文字二個分と認識すると”T T T” になって正しいコードです。トンの長さを文字六個分と認識するとこれは “S” になってこれも正しいコードです(SOS の S です)。

モールス符号のタイミングのブレで読み取りが紛らわしい問題については、実際にテストパタンで経験したものでは例えば

*****      ***************      ***********   ******
Bash

これは P (.–.) のつもりですけれども三番目の信号が何かあいまいで L (.-..) とも読めてしまいます。他にも隙間があいまいで単なる信号の切れ目なのか文字の切れ目なのか判別がつけづらいという場合もありました。

モールス信号を読んでみる

ここ数日モールス符号のデコードアルゴリズムを書いていました。何故かというと、ラズパイでモールス信号の読み取り機ができるんだろうか?と突如疑問に思ったわけなんです。スマホが音声認識してしまう時代にモールス信号なんて、できても虚しいのでは?という自問に負けず、それでもやっぱりちゃんと機構を組んでメカメカしく動くものを作ると見えてくる物事の本質もあるはず。いやそんなメカちょっとみてみたい、と、復号化だけでなく信号を読むとこ全部やってみることにしたわけです。

モールス符号のデコードアルゴリズム

モールス信号は、「トンツー」の組み合わせでアルファベットや数字を表します。スイッチ一個で文章が伝達できるとても便利なコードで長い歴史を持っています。今でも便利に使えそうですけど、僕は昔からモールス符号、覚えられません。モールス符号は人間が理解できるように作られていますが、どうにも覚えられないし、機械に読ませられないかな?と思ってやってみることにしました。まずは一連の処理のうち一番簡単そうな「トンツー」を文字に変換する部分からやってみます。ということで、先日二つ実装を紹介したのですが、プログラムだけ見ると難解かもしれません。あれはこういう仕組みで動いてますよ、という記事です。

引用:Wikipedia

モールス符号のデコード関数・改

Chris Wellons さんのモールス符号のデコード関数の実装を参考に同じことをする別関数を書いてみたけれどもあんまり筋が良くありません。やっぱり本家のほうが魅力的。もと実装を見ていたら、もう少しだけ小さく実装できそうだったのでやってみました。