こんにちは、19の@temmaです。
とっても忙しいクリスマスの貴重な時間を割いてまで、この記事を読んでくれてありがとうございます😁
SSTVとは
SSTV: Slow Scan Television(低速度走査テレビジョン)は、無線通信、特に短波帯などの狭帯域幅でモノクロまたはカラーの画像をやり取りするために用いられる伝送方式です。
最も有名な使用例は、アポロ11号のミッションで、ニール・アームストロングがはしごを降りて人類初の月面着陸を果たした以下の写真です。
SSTVはラジオファクシミリ同様、アナログ信号を用いており、伝送方式(モード)にはいくつか種類がありますが、基本的な仕組みは周波数変調(frequency modulation、FM)です。
つまり、キャリア波の周波数を上下にシフトさせることで送信したい情報を伝達します。
モノクロSSTVにおいてやり取りされる情報は各画素の明るさで、基本的には周波数の高低が明暗と対応します。
同様にカラー画像は、各色成分(通常は赤、緑、青)の明るさを別々に送ることによって表現されます。
画像は左から右の水平ラインで構成されており、色成分は行ごとに送信されます。
カラーエンコーディングと送信の順序はモードによって異なりますが、ほとんどのモードはRGBカラーモデルを使用します。
変調周波数は1,500~2,300 Hzの間で、色成分の強度(明るさ)に応じて変化します。
変調はアナログであるため、水平解像度は256 pxや360 pxと定義されることが多いですが、任意のレートでサンプリングすることができます。
画像のアスペクト比は通常4:3で、ラインは、5ミリ秒の 1,200 Hzの水平同期パルスで終了します。
つまり、幅256pxの画像をカラーを送信したい場合、R→G→Bが256サンプル分送信された後、1,200 Hz × 5 msの水平同期パルスでライン終端が通知され一行の描画が行われます。
これを画像の高さ分、繰り返すことで目的画像が得られます。
また、画像の前にはキャリブレーションヘッダが送信されます。
これは、1,900 Hzの300ミリ秒のリーダートーン、1,200 Hzの10ミリ秒のブレーク、1,900 Hzの300ミリ秒のリーダートーン、その後に使用される伝送モードを識別するデジタルVIS(垂直間隔シグナリング)コードで構成されています。
VISコードは30ミリ秒の長さのビットで構成されており、1,200 Hzのスタートビットから始まり、7つのデータビット(LSBファースト、1は1,100 Hz、0は1,300 Hz)が続きます。
偶数パリティビットがそれに続き、1,200Hzのストップビットで終わります。
例えば、10進数44または32に対応するビットは、モードがMartin M1であることを意味し、60はScottie S1を表しています。
聴く
上記で説明したように、SSTVは1200~2300 Hzを使用するので、音波にしても人間の可聴域内(20~20000 Hz)に収まっています。
もしかして、お気に入りのあの子を音としてきけるんじゃあねぇか??、、、そう、思うわけですね。
僕の推しアニメに「Guilty Crown」というのがあるんですが、ヒロインのいのりちゃんがめちゃかわいいんですね。
かわいい
ギルクラ見てください
それで、このいのりちゃんをrobot36モードでエンコードすると
こうなります。
なんだか、高貴な音に感じますね。
1/fのゆらぎかもしれません。
睡眠導入BGMに使ってもいいですよ。
僕は目覚ましにします。
デコードし直して見てみると
(ppmで出力しているのでデコード後にpngに変換しています)
みたいになります。
robot36モードはカラーコードにYUVを使用し、256 luma, 64/64 chroma × 240の表現力をもちます。
なんか、青みが強くでていますね。なんででしょう。
クリスマスに因んで、もう一枚試してみると(こっちは真名←くわしくはアニメを見てね)
が
こうなり
こうなります。
やっぱり、色味がだいぶ変わりますね。
encodeの実装ミスっててRとBが入れ替わってました、悲しい...
RGBを使用するMartinやScottieにすれば変わるんでしょうか?
また試してみたいですね。
最後に
通信技術の発達により、SSTVのような技術はいまではほとんど使われなくなりました。
ですが、AdCのような機会に掘り返してみるとなにか面白いことがあるかもしれませんね。
Useful links
- Wikipedia: https://en.wikipedia.org/wiki/Slow-scan_television
- Free SSTV handbook: http://www.sstv-handbook.com
- SSTV encoder in Python: dnet/pySSTV
- SSTV decoder in C: windytan/slowrx
- robot 36 encoder/decoder in C: xdsopl/robot36
- Online encoder: https://www.vr2woa.com/sstv/