-

5.0 / 5.0

結局これを買って、あとかなり昔に買ったしょぼいルーターを使って構築してみた。

  • インターネット → (LTE) → スマフォ → (Wi-Fi) → イーサネットコンバーター LAN-PW150N → (LANケーブル) → ルーター → (Wi-Fi or LANケーブル) → 各端末

LAN-PW150N は初期設定に LAN ケーブルが必要だけど、昨今の Mac にはイーサネットポートがついてないので、Windows 機をひっぱりだしてきて設定した。スマフォのAPに特に問題なく設定できた。

スマフォのテザリングは切ったり入れたりをよくするので、LAN-PW150N がそれなりの速度で再接続を行ってくれるかが心配だったけど、特にそれも問題ない感じだった。

これで以下のようなことが可能になった

  • 同じネットワーク間のコンピュータでの通信 (スマフォのテザリングのオンオフ関係なしに)
    • DLNA
    • ファイル共有

スマフォのテザリングは 2GHz バンドでしかできないっぽい。ルーターから出す電波は 5GHz バンドにしたほうが干渉しにくくなって良さそうだけど、うちにあるしょぼいルーターだとできないので多少そのへんが犠牲になってる。

NEC Aterm WR9500N[HPモデル] PA-WR9500N-HP - NEC

NEC

3.0 / 5.0

↑ これが欲しい。

微弱信号通信用の通信プロトコルに JT65 というのがあるらしい。もともと VHF の EME (月面反射通信) 用に考えられたみたいだけど、それを HF 帯の地上間通信にも応用して流行ってる?みたい。実際信号を聞いたことはない。しかしプロトコル自体の解説が全然見つからなくてよくわからない。

  • 72bit のメッセージに 6bit シンボルの RS(63,12) (リードソロモン12シンボル長データに51シンボルのパリティ)。
    • 72 / 6 = 12 シンボル に対し訂正符号51シンボル
  • 64 トーンの FSK
    • 2の6乗、すなわち1シンボルにつき1トーン
  • 1分間間隔で TX/RX が切り替わる (正確な時間で同期をかける)

細かい部分がまだよく理解できてない。ものすごいおおざっぱに理解すると、

  • 厳密にお互い同期した時間を持っていることを前提に
  • かなり強い誤り訂正符号を付与して

かすかに受信できる信号を本来のデータにデコードできるようにする、という話っぽい。あとよく使うメッセージに関してはショートハンドメッセージというのを定義してより受信しやすくしている (プロトコルにこういうヒューリスティックな要素があるのはだいぶ気持ちが悪いしチートっぽい)

EME の場合、月まで往復約2.5秒かかるけど、正確な時間の同期はどうしているんだろう? 定数?

結構前からなんだけど、キッチンの換気扇を止めているとき、煙草の臭いが入ってくることがある。不愉快極まわりないうえに完全な対応法がない。吸ってるやつを見つけだして磔にしたい。ヒカリエに磔にしたい。

原因は

  • 外にタバコの臭いがしばしば蔓延している
    • うちはこのせいで窓が殆どあけれない。磔にしたい
  • 部屋の中が負圧になってる
    • 浴室の換気扇をつけっぱなしにしているからだと思う

解決方法としては

  • 吸ってるやつを全員磔にする

が最も効果的で最良の方法なんだけど、合法的に行う方法が思いついていない。

なので仕方なく、換気扇をプラスチックダンボールと磁石で作った自作の蓋で塞いでる。3ヶ月ぐらいこれで (つまり運用で) カバーしているけど、プラスチックダンボールだと硬さが足りなくて耐久性が低く、よく落ちてきてしまって、これがまたストレスが溜まるんだけど、まぁまぁお手軽なので現状これでやってる…… もっといい方法を知りたい (例えば喫煙者を全員合法的に磔にする方法とか)。

2年前の買ったダイキンのACK75L-Tの中に虫が入りこんで死んでいるっぽいので分解清掃した。

ダイキンは法人向け技術資料を普通に公開しているので、詳しい分解方法 (公式) を普通に知ることができる。だいぶ便利。普通のユーザー向け取説と同じぐらいイラスト付きで親切に書いてある。

幸い、1匹が原型を保ったまま死んでいるだけでよかった。粉々になったカメムシとかいなくてよかった。

一応、開いて掃除できる部分は掃除したけど、さすがに何重もフィルターしたあとの部分だけあって、目に見えるほこりはなくて、非常に細かい粒子みたいなのが一様についている感じだった。ウェットティッシュで拭くと真っ黒になる感じ。

RTTY (ラジオテレタイプ = 無線による文字伝送) というものがありまして、大変昔昔に考えられた通信プロトコルなのですが、アマチュア無線では一応現役のデジタルモードであります。

RTTY で通信すること自体にはあんまり興味沸いてなかったのですが、プロトコル自体には興味があったので、Web Audio と絡めて、試しに実装をしてみました。

RTTY のプロトコル

そもそも RTTY はラジオテレタイプの総称なのですが、アマチュア無線においては典型的には以下のようなプロトコルのようです。

  • 170Hz シフトの FSK (複数の周波数を切り替えて信号を伝達する)
  • 5bit の ITA2 コード Baudot Code (ボーコード) で、スタートビット1bit、ストップビット1.5bit の非同期方式
  • 速度は 45.45 ボー (22msecごとの符号)

さらに、無線機とのインターフェースとしては AFSK (Audio? FSK)、直接FSK というのがあって、前者は LSB モードの音声としてオーディオ帯域を入力するもの。後者はキーイングに応じて無線機側で直接送信周波数を 170Hz シフトさせるものです。

AFSK だとマイク入出力だけで無線機とのインターフェイスが完結するので接続は簡単になりますが、無線機に表示されている周波数と実際発射される周波数にズレが生じたり、ALC の調整とか、電波の質とか、送信が少々面倒です。まぁしかしとにかく AFSK として実装をしました。

なので、送信側としては 2125Hzの「マーク」符号 (=ビット1に相当) と、シフトされた「スペース」符号 (=ビット0に相当) を作ります。

Baudot Code

RTTY が開発された当初には ASCII コードとか存在しなかったようです。

5bit しかないので、アルファベットと数字・記号をシフトコードで切り替えながら送受信することになってます。なので、シフトコードの受信にミスると文字化けが起こります。

出力 (送信)

まずデバッグしやすくするため、送信側から作りました。デバッグには既存の MMTTY を wine で起動してマイク経由で適当にやりました。仕様通りに信号を変調すればいいので送信は比較的楽です。ただ、以下の点にハマりました。

  • LSB モードの復調結果を取り込むことを前提としているので、マークとスペースの位置が反転する (スペースが170Hzアップシフトになる)
  • 下位ビットからの送信

入力 (受信)

まぁ当然めんどうくさくて、とりあえず同期検波を実装してみました。マーク周波数、スペース周波数それぞれについて、I と Q (1/4位相ずれ) 信号を作ってやるやつです。それで直流になるので、あとは頑張って22msec分のサンプルを数えながらデコードしています。

この方法だと特にフィードバックとかがいらず、ストリーム1パスで処理できるので気が楽でいい感じです。

今回は JS 側でフィルタとか書きたくなかったので、最後のほうまでダウンサンプリングせず、できるだけ Web Audio の API で実装してみました。単に面倒だったのと、Web Audio の知見を溜めようという狙いです。I/Q な信号が2本なので、合計4チャンネルの信号を作って一気に1つのローパスフィルタノードに入れたりして結構楽しい感じです (ただ、こうするとチャンネル間で干渉するっぽい)。オシレーターノードを使ってもっと綺麗に書けないかと思ったけど、かえって面倒だったので素直に sin/cos してます。

ちなみにローパスとハイパスの Q 値は 0 以上の場合、カットオフ周波数付近がなぜか増幅されるという挙動になるのでハマりました。減衰傾斜が急になるのだとばかり思っていたら全然違った。バンドパスの場合の Q 値は上げても減衰傾斜が急になるだけです。

  1. トップ
  2. ham
  3. Web Audio (JavaScript) で RTTY (周波数偏移変調) をデコード
  1. トップ
  2. tech
  3. Web Audio (JavaScript) で RTTY (周波数偏移変調) をデコード