Blog

RTTY のデコードを試す(4)

June 09, 2021

プログラムでの文字へのデコードを試す前に、サンプリングレートが 8kHz、 量子化ビット数が 8bit の unsigned な wave ファイルという制約を なんとか取り払えないか試してみます。

まず、サンプリングレートは簡単で、変数に入っている数値を変更するだけで 問題なさそうです。が、windowsize も同じ比率で変更してあげないと、 出力に差が出てくるようです。 同じ比率を保つために、windowsize はサンプリングレートの250分の1に して、出力が変化しないようにします。

ちなみに、サンプリングレートは wave モジュールで取得できるようです。 わざわざ変更するのも面倒なので、取得するようにしましょう。

また、unsigned を仮定しているのは、フレームの値から 128 を引いている 部分のようです。(量子化ビット数も関係ありますが。)

量子化ビット数を変更できるようにするには、今のフレーム(バイナリ)の 0番目の値のみを見ている所を変更する必要がありそうです。 Python のBuilt-in Types の、 int.from_bytes を 使えばよさそうです。 unsigned の制約も外すために、128 を引いている部分もビット数から計算して 引くように変更します。unsigned 8bit のときに -128 なのは、u8 が [0, 255] で、 その半分を引いて [-128, 127] にするためですね。同様に、unsigned 16bit であれば -(2^15) してあげればいいですね。signed であれば何も引きません。一般化すると、 n bit のとき、signed であれば -0、unsigned であれば -(2^(n-1)) ということに なります。

あとは愚直に実装して、ny-a/RTTY - GitHub に push すれば完了です。