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 (周波数偏移変調) をデコード

Lighroom はパッケージも今は別に高くはなくて、アップグレード版は10k円しないぐらいだけど、Photoshop はまだまだ高い。最新版を使いたいなら、PS + LR で月額1000円というのは非常に安い。初期費用がかからないことを考えるとお得感が増す。

2年に一度 LR をアップグレードするために10k円程度使うのは諦めていたけど、Photoshop は CS3 を買ったきりアップデートしていなくて、Camera Raw は古くて HDR 現像できないとか悲しい感じだった。

年間12000円のうち、5000円を今までと同じLRの維持費と考えると、+7000円で Photoshop の最新版が常に使える。あと一応 Creative Cloud のなんかオマケっぽいサービスもついてくる。

スリープからなかなか復帰しないな、と思ったら勝手に再起動がかかる、ということが2度起こった。

起動後、クラッシュレポートが表示されて Sleep Wake Failure と出ていた。ググってみると他にも発生している人がたくさんいる。結論からいうと外付けの USB HDD を繋いだままスリープ復帰させるようとすると、Sleep Wake Failure になることがあるみたい。クソだ。

知らなかったけど、 USB まわりに不具合が多いらしい。スリープ復帰後にUSB HDDがアンマウントされてしまうとかも起こることがあるみたいだ。

現時点では良い解決方法がない。

  • スリープさせない (とはいえ、スリープの設定項目はないので「ディスプレイが切のときはコンピュータを自動でスリープさせない」にチェックを入れるしかない)
  • スリープさせる前に HDD をはずす

なんとかしてほしい。

モニタの解像度が足りないからというのはあるだろうな、と思いつつ、大きい画面で高い解像度のディスプレイを持っていなかったので、完全に実感できていたわけではなかった (スマフォだと画面が小さいので、条件が変わってしまう)

MacBook Pro Retina を買って高解像度でそれなりに大きいディスプレイが手に入ったので、表題のような細かい写真を見てみているけど、やっぱり、解像度が足りなかったせいで思ったようなものになっていなかった、というのことを実感した。解像度が高いディスプレイは世の中にはまだまだ少ないので、そういった写真においては特にプリントされた写真というのは強い価値があるように思う。