練習開始から93日、ほぼ3ヶ月ぐらい経っているので経過を書いておく

  • 10月09日: 25wpm ランダムまで90%をとれ次第すぐ進むぐらいの勢いでやる。
    • 1ヶ月で、20wpm ランダムならぎりぎり90%をとれるぐらいになる
    • 2ヶ月で、25wpm ランダムならぎりぎり90%をとれるぐらいになる
  • 26wpm からどうも急に難しくなったように感じられる
    • 一部の符号の聞き間違えが足を大きくひっぱっている (特に S H 5)
  • 20wpm まで戻り、100% がとれ次第次のスピードに進むという基準に変更
    • 基礎練習
    • S H 5 を特に意識してやる
    • 3 7 z あたりも苦手だったけど、全体的に精度が上がるのは感じられる
  • 22wpm ← 今ココ
    • あいかわらず S H 5、1 J で間違えることが多い。

22wpm でもランダムなら、ほぼ90%はとれる、という状態にはなっている。ただし単語聞きとりだと、短い符号が多くなっておいつけなくて、もっと低く80%代なことも多い。それに身体状態に大きく左右されるのも変わりない。寝る前とかだと95%もとれなくなる。

最近急がしくて交信を聞く暇がなく、とにかく朝と夜の聞きとり練習だけをやってる。実感としては正直、ラバースタンプレベルでも余裕でとれるような感じではない。タイピングまではできても、意味まで理解して聞きとろうとすると単語単位で落としてしまう。それに、実際の交信だと25wpmはあたりまえな感じなので、現状の能力では全く足りない。

ラバースタンプでも、名前と住所は必ずちゃんと聞きとる必要があるところなので(住所はJCCで送ってることが多いからそれほどでもないけど)、それぐらいは1発でとれるようになりたい。それに、ラバースタンプとはいえ、何を送ってこられるかわからないのは怖い。緊張するとさらに聞きとれなくなると思う。

  1. トップ
  2. ham
  3. モールス練習
  1. トップ
  2. モールス
  3. モールス練習

まとめを後日書きました [tech][avr][arduino] ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A) | Fri, Nov 8. 2013 - 氾濫原

前書いたのの続き

さらにもっと消費電力を減らせないだろうか? と考えた。パワーダウンモードの消費が計測不可能なので、支配的なのは特にキーイング中と、アイドル中の消費になっている。

特にキーイング中の消費が比較的多い (200uA近く) ので、どうにかできないかと考えた。キーを押しているとき、内蔵プルアップを通して GND に電流が流れるので、そこの消費が結構多い。

今まで何も考えず AVR 組込みのプルアップ抵抗を使っていたけど、ここでちょっと考えてみることにした。

プルアップの調整

内部プルアップは、実測からすると3V/100uA=30kΩ になってるようだ (スペック上は 20k〜50k)。とりあえず AVR 内部のプルアップ抵抗をオフに。

プルアップ抵抗に許される電圧降下を考える。電源電圧3Vで、入力 H レベルは VCC * 0.6 (スペックから)、ノイズ回避用に 0.4V を足すと

  • ピンの必要入力電圧 Vin = 3 * 0.6 + 0.4 = 2.2V
  • プルアップでの電圧降下最大 V = 3 - Vin = 0.8V

となった。

マイコン側は十分大きい入力抵抗があると考えると、かなり大きな抵抗を入れても大丈夫そう? なのかな。

試しに 2.2MΩでプルアップしてみると、ICの足にかかる電圧は2.5V程度になった。2.2MΩ で0.5V電圧降下しているので、0.23uA 程度流れてる。3V / 0.23uA でプルアップと内部抵抗の合成値は 13.2MΩ、つまり内部抵抗は11MΩぐらい……? よく「入力抵抗は非常に大きい」といわれるのを見る割に、いまいちどの程度かわからなかったけど、こんなもんなのかな。

この状態で、消費電力をはかる

  • before: 内蔵プルアップ: 198uA
  • after: 2.2MΩプルアップ: 113uA

とりあえず減ったし、普通に動いてはいる。しかしこれであっているのかさっぱりわからない。

これで、毎日2時間使うケースだと (CR2032/225mAh, 1日2時間, パワーダウン中 0.15e-6mA, キーイング中 113e-3mA) 995日持つ計算になった。

delay_ms のさらなる見直し

128kHz で動かすにあたり delay_ms を以下のようにしていた。

void delay_ms(uint16_t t) {
	uint16_t end;
	cli();
	timer = 0; TCNT0 = 0;
	end = NOW + DURATION(t);
	sei();
	while (NOW <= end) { nop; }
}

timer は 2msec ごとのオーバーフロー割込みでインクリメントされているけど、これだとちょっと精度が悲しいような気がするので、カウンタそのもの (TCNT0) も見ている。オーバーフローでやっているので、単純に timer はカウンタの桁あがりとして扱える。NOW は ((timer<<8)|TCNT0) という定義

while の中を アイドルではなく nop; にしているのは、ここでアイドルに入ってしまうと、次に起きるのが 2msec 後とかになるので、せっかく TCNT0 を見ている意味がなくなるから。

ただ、まだここは精度を維持しつつも最適化の余地があって、以下のようにした。

void delay_ms(uint16_t t) {
	uint16_t end;
	uint16_t end0;
	cli();
	timer = 0; TCNT0 = 0;
	end = NOW + DURATION(t);
	end0 = end - 0x100;
	sei();
	while (NOW <= end0) {
		set_sleep_mode(SLEEP_MODE_IDLE);
		sleep_mode();
	}
	while (NOW <= end) { }
}

少なくとも、最後の TCNT0 分 (8bit) になるまでは、普通に 2msec ごとに寝ていても大丈夫なはずなので、それまではスリープを使い、最後のカウンタ分はビジーループにするようにした。nop; は別にいらなそうなのでとっただけ。

これでキーイング中でも 96uA まで消費電流を落とせた。上と同じように、毎日2時間使うケースだと (CR2032/225mAh, 1日2時間, パワーダウン中 0.15e-6mA, キーイング中 96e-3mA) 1171日持つ計算になった。1000日超え! もうこれでいいかな。

  1. トップ
  2. avr
  3. ATTiny13A を使った低消費電力エレキー
  1. トップ
  2. tech
  3. ATTiny13A を使った低消費電力エレキー
  1. トップ
  2. arduino
  3. ATTiny13A を使った低消費電力エレキー

回路図・基板作成用 CAD のEAGLEを使ってみた。割とデファクトスタンダードっぽく使われているっぽい。試したのはフリー版 (個人レベルでは十分すぎる機能がある)

基本商用ソフトなので、もっとモダンでいい感じなのかと思ったけど、思いのほか操作性がレガシーで悪い。回路図作成ツールとしては BSch3V のほう部品エディタも含め、圧倒的に使いやすい……

ただ、配線ツールとしては結構使いやすい (というか、もっとよくできると思うけど、これ以上のものがなさそう……) デファクトスタンダードっぽく使われているおかげで、ライブラリは比較的充実しているように思える。ただ、あまり整理されていない形になっているので、最初ものすごくとまどう……

しばらく使わないと絶対に忘れるインターフェイスなので、重要なところをメモっておく

ライブラリ

(追記)

http://www.cadsoftusa.com/downloads/libraries のページから

  • japan で検索して出てくるもの全部
    • c-j.lbr
    • r-j.lbr
    • tr-j.lbr
    • alps_japan_potentiometers.lbr
  • avr-7.lbr

あたりを入れておいたほうがいいっぽい。ただ、 *-j.lbr は US EU とピンに互換性がなくて置換できない…… ライブラリエディタで、Symbol の編集画面を開き、ピンの名前を一緒にしてあげればいいっぽい。例えば resistors.lbr の場合、ピンの名前は 1 とか 2 とかなので、c-j.lbr のほうも PIN1 を 1 に PIN2 を 2 にすれば、置換できるようになる。

デフォルトだと EU 版 US 版の記号が入っていて、これでもなんとかなるけど、日本で使われる一般的な回路図記号と若干異る

  • EU 版
    • 抵抗の記号が新JIS記号と一緒 (ジグザグじゃなくて四角)
    • C の棒が太いくて長い
  • US 版
    • 抵抗の記号は旧JIS記号と似てる (ジグザグ) ただ、ジグザグの数が多い
    • C の片方が曲っている

回路図


  • 回路図をつくるとき
    • Add a part で部品を置いていく、検索が貧弱なのでかなり空気を読む必要がある
      • 置いてから ESC を押すと選択画面に戻るので連続でおける
    • 既に回路図にある部品なら Copy ツールを使ったほうがいい
    • 使いたい形がなくてもとりあえず記号だけあわせておけば、あとから Replace で部品だけ変えられる
    • Electrical Rule Check は頻繁にかけたほうがいい
      • けどエラーの意味がわからなかったりする
      • ECR の結果は回路図の画面で示されるので、基板画面を見ているとなにがなんだかわからない

基板図

ユニバーサル基板で作ること前提なので、あまり細かいところまでは使ってない。ユニバーサル基板専用のソフトがあればいいんだけど。

  • 基板図をつくるとき
    • 必ず 回路図を同時に開いておく必要がある
      • そうしないと修正点が反映されず、最初から作りなおすハメになる (意味不明)
    • まずグリッドを設定する。Size 50mil Multiple: 2 にして Display on にすると、100mil ごとにグリッドがひかれ、50mil ごとにスナップするようになる。(ユニバーサル基板のピッチは100mil)
    • Edit -> Net Classes... で default の Width を 32mil ぐらいにしとく (オートルートとかするときこの太さでひかれる)
    • Layers で、tOrigins / bOrigins を非表示すると、部品全てが動かせなくなる
  • オートルート便利かと思いきやかなり難しい。
    • 少ない部品なら、基本自分で配線して、どうしたもんかってときに使うとヒントがでるツールとして使う感じ
    • ripup; コマンドを実行すると配線済みのが全部消える
    • 自分である程度配線したあとなら Undo を使ったほうがよい
  1. トップ
  2. tech
  3. 回路図・基板検討に EAGLE を使ってみる

金曜日の夜から急の鼻の奥が痛くなって、そのまま全身だるい感じで3日間ほど殆ど何もできなかった。こういうの本当にイライラする。やることいっぱいあるのになにもできない。

直列/並列共振回路の共振周波数

リアクタンスとの関係

インピーダンスの式

共振状態ではリアクタンス部(虚数部)はゼロになる (抵抗成分だけ)。

すなわち

はそれぞれ

共振状態のときの式に代入して f について解く (普通は角周波数 ω を使うみたいだけど、僕はなんか混乱するので全部展開しとく)

移項

両辺に をかける

両辺を で割る

両辺の平方根をとる

両辺を で割る

最悪リアクタンス部がゼロになれば共振ということがわかってれば、簡単に導ける。

変形して L/C を求めるとき

直列共振回路の Q

L か C のリアクタンスをRで割るイメージが覚えやすい気がする (抵抗Rが小さいほど高いQになる、というのがイメージしやすい) 直列に入っている R は単に損失なので、小さいほうがいいというイメージ。

↑ をそれぞれ で割っただけ

並列共振回路の Q

直列の逆数と覚える。並列に入っている R は小さいほど無駄に電流を流すので、大きいほうが損失がなくていいというイメージ。

  1. トップ
  2. tech

FET は電圧駆動なので電圧さえかければ電流を流す必要はない。

ただ、現実的にはFETの入力に寄生している容量を十分充電しきるまでは、電流が相応に流れ、オフにするときはすみやかにこの容量を放電することが求められる。なので容量が少なければ少ないほど早いのはイメージできる。

まではわかったけど、では実際にそれがスイッチングスピードにどう関わってくるか計算で求めるのがよくわからない。

例として 2N7000 の input capacity は最大で 50pF、150Ωの抵抗と3Vの電圧(最大電流20mA)で充電しようとすると、CRの過渡現象の例の式だけで考えると、電流は

ある時間におけるコンデンサの電圧を考える。コンデンサの電圧は電源電圧から抵抗での電圧降下を引いた値なので、

これをさらに t について解きたいけど、自分の力だと解けないので Maxima 君で解くと solve(v = E * (1 - %e^(-t/(C*R)) ), t);

で、各値を代入して計算すると

function t (C, R, E, v) {
	return C * R * Math.log(-(E / (v - E)));
}

// 入力電圧の9割まで
console.log(t(50e-12, 150,  3,  3*0.9)); //=> 約17ns
// 最低 V_th まで
console.log(t(50e-12, 150,  3,  0.8)); //=> 約2.3ns

になるけど、確かめようがない。それに、この速度が実際の FET の速度にどう関わってくるかわからない……

ググってでてきたpdf を見た感じだいぶ難しくて現時点の自分では理解できない。

要は知りたいのは、Gとグラウンド間に入れる放電用抵抗は最大どの程度にできるのか、ということなんだけど、よくわからない。大きすぎると放電に時間がかかりすぎて、オフにならなくなるのはわかる。まぁ実際試しみて定数決定するのが一番いいんだけど……

  1. トップ
  2. tech
  3. FET の入力容量と速度の関係がわからない

VGS(th) に結構バラつきがあるみたいで、データシートだと 0.8〜3V となっている。VGS = VDS ID = 1mA の条件が書いてあるから、たぶん温度変化について書いてあるんだと思うけど、よくわからない。

VDS= 5V, ID = 1mA ぐらいで、手元のをいくつか試すと。室温20度で、約2.28〜2.32V付近でスイッチする。指でつまんで温めると0.1Vぐらい下がったりする。おもしろい。

2.1V ぐらいまでスイッチできてほしいんだけど、なんかうまい手はないんだろうか。負荷側の電圧は決まってしまっているし、ほかの素子を探すしかないのかな。すごい困るというほどではないから、そこまではしたくない。

  1. トップ
  2. tech
  3. MOS-FET 2N7000
  1. トップ
  2. avr
  3. MOS-FET 2N7000
  1. トップ
  2. arduino
  3. MOS-FET 2N7000

Watch Dog Timer

ワッチドッグタイマー。基本はプログラムが意図しない挙動をしたときにリセットをかけるためのタイマー。

例えば、「常に1秒後にリセットをかけるワッチドッグタイマー」をセットして、ワッチドッグタイマーによってリセットされる前にメインプログラム側からワッチドッグタイマーをリセットする。もしプログラムが暴走してタイマーが初期化されなくなると、ワッチドッグタイマーがリセットをかけてくれる。

用途上、メインのクロックとは別のクロックで動いている。

Brown Out Detection

電源電圧を監視して、一定より下がったらリセットをかけてくれる。

もちろん瞬間的な電源電圧変動では反応しないようにヒステリシスな感じになってる。

  1. トップ
  2. avr
  1. トップ
  2. tech
  1. トップ
  2. arduino

1608 (1.6mmx0.8mm)のチップコンデンサを安いばっかりに現物見ずに買ってみたらだいぶ小さすぎた……

3216 か 2012 にしておいたほうがよさそう

とりあえず完成なので、今まで書いたやつのまとめで整理。

要求

  • 外に持ちだせるように小型で電池駆動できること
  • 電池交換をあまり気にしなくてもいいこと
  • 実用的であること

仕様

  • 短点・長点それぞれ1点のメモリー
  • スクイーズ
  • インヒビット
  • 無段階スピードコントロール (10wpm〜30wpmまで想定)
インヒビットについて

エレキーは片方のパドルを押したままだと、ずっとその符号が出続けるので、いいタイミングで手を離す必要がある。

このとき、どのタイミングで符号メモリーを効かせるかで使い勝手が大きく異なる。

  • 前の符号が終わった瞬間にパドルが押されていたら即メモリーさせるか
    • 前の符号が鳴っている間にパドルから手を離す必要がある
    • 前のめったキーイングが必要
  • 前の符号の直後のスペースが終わった瞬間にメモリーさせる
    • 前の符号が鳴り終わってからも多少時間がある
    • 落ちついたキーイングが必要

後者のほうが基本的に落ちついて打てる感じだけど、パドルを早く動かしすぎると変な符号が出たりする。一長一短な感じ。

このエレキーでは、これらの中間として、前の符号が終わってから、短点の長さ * 0.3 の間は「インヒビット」として押し続けていてもメモリーされない挙動にした。これは単に好みなので、ソースコードの定数で変えれるようにした。

回路図

前回とピンの使いかたが変わっているけど、あまり変更はない。

パドル入力には静電気サージ (ESD) 用にツェナーダイオードを入れた。AVR の仕様上「All I/O pins have protection diodes to both VCC and Ground」となっていてクランプダイオードが入っているみたいだけど、クランプされたのを消費する部分がどこにもないので前段で入れたほうがよさそう。

FET のゲートについてる 150Ω は電流制限用だけど、一応なくても動く。AVR のポートの絶対定格が 40mA なので 3V/20mA=150Ω。流れるとしても瞬間だけなんだけど、絶対定格を守るなら必要そう。

FET の GS 間の抵抗は入力オープン時に GS を確実に 0V にするためで、普通入れるみたい。AVR の出力ポートってローのときは吸い込み動作するしいらないんじゃ? と思ったけど、電源 OFF->ON からのタイミングとかいろいろなタイミングで入力オープンのとき不意にONになるとそのままになってしまうらしい。一応入れたほうがよさそう。

2.2MΩ の抵抗はパドルのプルアップ抵抗で、省電力のため外部に大きなのをつけてる。ただ、人体アースの電圧降下でもキーイングとみなされる(接点を触れるとキーイングされてしまう)ようになるので、善し悪しがある。

いろいろ突き詰めると部品点数が減らせない。

基板図

ステレオミニジャックでパドルと繋ぐようにしてるけど、別に直結でもいいと思う。その場合ジャック部分はいらない。

ボリュームは半固定として書いてあるけど、普通のやつのほうがいいと思う。基板取り付けの小型ボリュームだとお手軽だけどあまり手に入らないみたい。なんでもいいけど場所をとる。

ファームウェア

これだけしか書いてないけど、ATTiny13A だと 96.7% Full (990 bytes) なので、結構ギリギリです

CrossPack-AVR-20130212 の avr-gcc (GCC) 4.6.2 で開発

AVR ISP Mark II なら、Makefile 変更なしに make install で書きこみが走る。

ISP も回路を切断せずに一応動いて、書きこみもできるけど、キーイング出力にノイズが入るので注意が必要 (ブレークインを切っておくか、リグとは切断して書きこみする必要がある)。

電源と実測消費電流

  • CR2032
  • eneloop lite

あたりを想定

CR2032 (3V) は公称 3V、終止電圧 2〜2.5V 程度。約 225mAh 使い捨てだけど、よく売ってる。使い捨てなので限界まで動いて電池しぼりとって動かなくなるほうが効率的。

eneloop lite 2本だと公称は 2.4V (1.2*2)、終止電圧 2.0V (1.0 * 2) 程度で、単4で550mAh、コイン電池に比べると体積は大きい。lite 版のほうが用途的にはいいだろうと思う。エネループの場合普通のニッケル水素より自然放電が少ないのと、比較的高い電圧が長く続く。ただし過放電すると致命的なので、2.1V程度で動かなくなるのが理想。

最低動作電圧

本体の最低動作電圧は 1.8V 程度なので、スイッチング用の FET の Vth に支配される。

実測すると、最低動作電圧は室温20℃で2.3V 程度 (≒ FET Vth)

CR2032 で動かすなら、もっと低い電圧でも動いてほしいけど、もっとぎりぎりの別のFETにするほかない。

エネループの場合2本で2.3Vを切る (1本で1.15V) になるのは、だいたい70%〜90%ぐらい放電したあたりなようなので、これでも悪くはなさそう。

消費電流

消費はいろいろ工夫してみたので、結構減らせてる。

  • キーイング中: 96μA (約 0.1mA 実測)
  • パワーダウン中: 0.15μA
    • (測定不可なので、ATTiny13A の仕様書から。実測では 0.0μA未満の表示だった)

電源に CR2032 (225mAh) を使った場合、1日に2時間キーイングすると仮定すると、約1152日ほど持つ。1日8時間フルタイムでキーイングしても 292日ほど持つ。1日16時間キーイングし続ける廃人でも146日ほど持つ。

eneloop lite (550mAh) の場合、容量の70%程度使うまででも、1日2時間のキーイングで1971日ほど持つ計算になる。自然容量減を考えてもそこそこ持ちそう。

消費電流減の対策

具体的には以下のような対策をしてる

  • 動作周波数は内蔵 128kHz
  • FET でスイッチング (なのでキーイング端子に高電圧がかっているリグでは使えない。5Vとか12Vとかなら全然大丈夫なはず)
  • スピード調節用のボリュームにできるだけ通電しない
  • キーイング用のプルアップ抵抗を高抵抗に
  • できるだけアイドルモードで動くように
  • 10秒経過ですぐパワーダウンモードに移行
    • キー入力割込みで復帰するので特に違和感はないと思う

まとめ

かなり単純なものをしっかり各所考えながら作ってみたけど、いろいろと発見があった。ソフトウェアの変更がダイレクトに消費電力減に繋がったりするのは新鮮で面白い。

また、この程度の回路だと全素子の動作を考えながら作れるので、基本的なことを理解するきっかけになった。

次はもうすこし複雑なものを作りたい。

ref.

  1. トップ
  2. tech
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)
  1. トップ
  2. avr
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)
  1. トップ
  2. arduino
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)

最初に作ったやつを少し作りなおした。ケースを加工するのが面倒だったので適当な状態で放置されていたんだけど、おさまりの良さそうな方法を思いついたので、基板から作りなおした。

回路図

殆ど前のと変わってない。ESD 保護ダイオードと、プルアップを変更しただけ

基板図

ファームウェア

ピンの配置の関係でアサインだけ変えてある。

ケース

秋月で売ってる電池ボックス 単3×4本用(フタ付プラスチック・スイッチ付)というのを使ってる。

単3は2本分の領域をエネループ用に使って、残り半分のスペースに回路を入れてる。もとからあるでっぱりとかはニッパーとかカッターで切った。電池の金具は加工する必要はなくて、ハメこまれてる位置を変えてあげるだけでよかった。元からあるスイッチはとってしまっている。

結構狭いので、圧電ブザーを削ったり基板をやすりで削ったりしてギリギリで入れてる。今回は部品配置の検討をするのに EAGLE が大変役に立った。ISP 部分以外はほぼジャンパなしでいけてる。IC ソケットをつけなければもっと高さに余裕があったんだけど、一応つけた。

スイッチがあった部分は少し広げて、タクトスイッチを入れてる。固定する方法で困るけど、グルーガンでタクトスイッチを固めてしまった。グルーガンでも結構固めになるので、力を入れても大丈夫なくらいにはなるっぽい。

ref.

  1. トップ
  2. tech
  3. ATTiny2313 ステップ速度調節のエレキー
  1. トップ
  2. avr
  3. ATTiny2313 ステップ速度調節のエレキー
  1. トップ
  2. arduino
  3. ATTiny2313 ステップ速度調節のエレキー

wine で PCC-450D を動かしてみる。CAT のリファレンス読んでたら PCC-450D がなんとかって書いてあったのでググった。

YAESU USの Files から PCC-450D Software V1.00 and Reference Manual ( 1.18 MB ) をダウンロード。

wine で実行するとエラる

err:module:import_dll Library MFC42.DLL (which is needed by L"Z:\\Users\\cho45\\Downloads\\PCC-450D_V100\\PCC-450D\\PCC-450D.exe") not found
err:module:LdrInitializeThunk Main exe initialization for L"Z:\\Users\\cho45\\Downloads\\PCC-450D_V100\\PCC-450D\\PCC-450D.exe" failed, status c0000135

MFC が必要なので入れる

$ winetricks mfc42

COM ポートがどれも開けない。wine のこのへん、どういう仕組みなんだろう? と思ったら以下のようにするらしい。

$ ln -s /dev/tty.usbserial-FTB3L9UG  ~/.wine/dosdevices/com1

で起動はするし COM ポートとのやりとりも一応できてるっぽい。

でもいまいちうまく表示が更新されない。のでメニューから AI1; を自分で送ってあげると更新されたりする。でも全部の情報を同期する方法がわからなかった…… あと別にPCからリグをコントロールできても嬉しくない (もっとたくさん情報を表示できるとか、そういう機能はなかった)

結局、何かしら追加の機能が欲しいなら自力で書くしかない

  1. トップ
  2. tech
  3. Mac で YAESU FT-450D の PCC (PCからのコントロールソフト) を動かしてみる
  1. トップ
  2. radio
  3. Mac で YAESU FT-450D の PCC (PCからのコントロールソフト) を動かしてみる

[シチズン キューアンドキュー]CITIZEN Q&Q 腕時計 Falcon (フォルコン) アナログ表示 ホワイト V722-850 メンズ -

5.0 / 5.0

試験とか用に時計が必要だったので安いのを買った。これ1000円ぐらいだけど、文字盤もみやすいし、案外かっこよくて防水だしコストパフォーマンスが非常に高い。バンドだけがやすっぽい感じだけど、替えてもいいし、ほとんど使わないならこれで十分そう。

アナログ時計って最近殆ど使っていなかったけど、おもったより直感的に読みやすくていいですね。

結論から言うと、直で繋ぐなら FAT32 か exFAT しかない。FAT32 はもはや時代遅れ (2TB までのディスクしか扱えないとか制限がある) ので、選択肢は exFAT しかない。

ただし、exFAT にはジャーナリングがないので、信頼性は低い。またその関係か、USBケーブルをよく抜き挿しするケースではミス (アンマウントせずにケーブルを抜く) をすると、いちいちファイルシステムチェックをかけないといけない。これは思いのほか面倒。

結局、Windows と Mac 両方から読みたいファイルがある場合、ベストはファイルサーバーを別途どこかに立てるのが一番いいような気がする。Mac を主にするなら、共有設定でファイル共有をオンにすればよさそうだけど、同一ネットワークになるように環境を作るのが面倒。

むずかしい。

今、自宅回線は LTE オンリーで生きているので (テザリング)、スマートフォンがルーターを兼ねてる。だいたいこれでいいんだけど、スマートフォンのルーター機能は接続されている端末同士の通信が遮断されているっぽい? のでファイル共有とかはうまくいかない。それにそもそもファイル共有とかのトラフィックをスマートフォン経由にしたくない……

そういうことを考えはじめると、1段別のルーターをかましたくなる。これまた面倒くさい。普通のルーターの場合、WAN 側は有線なので、有線アダプタも別途必要っぽい。

あるいは、無線LAN中継機能がついたルーターなら単体でもいけるかもしれない。

BUFFALO 有線LANポート搭載接続機器用 ワイヤレスユニット WLAE-AG300N -

3.0 / 5.0

これかなー

NEC AtermWG1800HP(HPモデル) PA-WG1800HP -

3.0 / 5.0

これはちょっと高い…… 中継としても使えるらしい。でもスマートフォンとは 2.4GHz で接続して、家庭内には 5GHz (11ac) をばらまきたいんだけど、この周波数は固定らしくて替えれないっぽい…… だめだ

親機-WG1800HP(Wi-Fi高速中継機モード)間は5GHz、WG1800HP(Wi-Fi高速中継機モード)-子機間は2.4GHzでの通信となり、変更はできません。

http://www.aterm.jp/function/wg1800hp/guide/wireless/list/m01_m72relay.html

やっぱ安いイーサネットコンバーターを別途用意したほうが自由度は高い。そうすると

Logitec IEEE802.11 g b準拠 150Mbps 無線コンバーター TV用 子機モデル LAN-PW150N/CV -

3.0 / 5.0

2k円ぐらい。これでスマートフォンのテザリングを有線化して、普通のルーターに接続するのが一番よさそう。速度的に 11ac が必要ないなら

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

3.0 / 5.0

8k円ぐらい。これでよさそう。上位モデルは薄くなったぶん熱に弱いようなレビューを見る。コンバータとあわせても1万ぐらいなので、中継機能付きのやつを買うより安い。

あと不安要素としては、スマートフォンのテザリングは毎日切ったり入れたりするので、ちゃんと自動再接続されるか、かなあ。使ってみないとわからなそう……

しかしコストをかけてまで Windows とファイルを共有したい、というニーズがないので、やはりホームネットワークは組まなそう…… もうすこしメリットがあればやってもいいんだけどなー

hfe はコレクタ電流をベース電流で割った値。バイポーラトランジスタはベースエミッタ間に流れた電流に応じでコレクタ電流が増える素子なので、つまりこれは増幅率になる。(エミッタ電流はベース電流+コレクタ電流になる)

FET の場合これに相当するのは相互コンダクタンス。FET はゲートソース間にかける電圧に応じてドレイン電流が増える素子なので、同じようにドレイン電流をゲース電圧で割る (Isd / Vgs) った値が相互コンダクタンスと呼ばれる。なぜコンダクタンスかというと I/V という形が R (=V/I) の逆数すなわちコンダクタンスだから。

回路図記号における矢印は電流が流れる方向を差しているので、NPN 型バイポーラトランジスタでは Negative -> Positive <- Negative と、ベースに向かって伸びる矢印になる。PNP 型では Positive <- Negative -> Positive と、ベースから外に向かって伸びる矢印になる。

FET の場合、ゲートソース間にかける電圧は逆方向電圧なので、正電圧がかかっているほうに矢印が向く。ゲートに正電圧をかける場合、逆方向なのでFETはN(負)型になる。

  • MacBook Pro 出荷予定2〜3日で、注文したら納期は2〜3週間後というメールが3日目にきた
  • 保険の申し込みをしたら理由がわからないが受け入れ拒否 (告知が超絶めんどいのに頑張って書いてこのありさま)
  • NTT X Store で出荷予定通常24時間以内の HDD を注文したら72時間ぐらい経っても出荷されない
  • 会社の勤怠管理に何かしらないけどログインできない (パスワード変えさせられたタイミングでキーチェーンがバグった感じ)
  • 仕事の進捗がない (無能)
  • 液晶壊れる
  • いくらやっても計算間違いがなおらない
  • モールス聞き取りに進捗がない (実際の交信だと全然ききとれない)
  • 趣味でコード書いてもうまくいかない

そういえばマイコンからカメラのレリーズができたらいいかもなーとなんとなく考えたのでやってみた。タイムラプス的なもの (インターバル撮影) とか、バルブとか自分で制御できたら楽しいかもしれない。

リモートレリーズ端子

リモートレリーズ端子 (有線) にはいくつか種類があるらしく、キヤノンの場合、Kiss とかではステレオミニと同じだけど、5Dとか7Dとかだと、N3型端子とかいう謎の端子になる。N3端子ってのはそこらへんで単体で簡単に手に入らないので、既存のを買って切るしかないっぽい。機能的には同じみたいだけど、なんでこんなことになってるのか謎

手元にあるのはN3型のものなので、別にレリーズ別途買ってまで試すまでのモチベーションはわかなかったので、とりあえずリモートレリーズ端子を使うのは諦めた。(ただのスイッチなので難しいことはなさそう)

赤外線リモコンのレリーズ

他にレリーズを切る方法としては、赤外線リモコンを使うほうほうがあって、これなら赤外線 LED チカらせるだけでよく、端子とか関係ないのでお手軽そうだった。赤外線は昔昔買ったLEDジャンク詰め合せに無駄にいっぱい入っていて腐っている。

ググるとリモコンの解析結果を公開している人がいるので、その通りやったらいけた。

あたり前だけどドライブモードをリモコンのモードにしないとシャッター切れない。解析結果をそのままコードにしただけだけど (PB0 に LED が接続されている前提)

void shutter () {
	int i;

	for (i = 0; i < 23; i++)  {
		set_bit(PORTB, PB0);
		_delay_us(13);
		clear_bit(PORTB, PB0);
		_delay_us(13);
	}
	_delay_us(7200);
	for (i = 0; i < 23; i++)  {
		set_bit(PORTB, PB0);
		_delay_us(13);
		clear_bit(PORTB, PB0);
		_delay_us(13);
	}
}

ただ、赤外線の場合、設定済みの露出でしかシャッターを切れないので、バルブとかはできない。インターバル撮影とか、センサー連動のシャッターとかはこれで十分できそう。花火の撮影とか自動化できそう。

  1. トップ
  2. avr
  3. キヤノンのカメラのリモートレリーズ (またはリモコンレリーズ)
  1. トップ
  2. tech
  3. キヤノンのカメラのリモートレリーズ (またはリモコンレリーズ)
  1. トップ
  2. arduino
  3. キヤノンのカメラのリモートレリーズ (またはリモコンレリーズ)

ディスクを1台新しく買ったので、Windows とディスクを共有する、という前提を諦めて (というより、ネットワーク共有するつもり)、ディスクは HDFS+ でフォーマットした。

これで Time Machine のバックアップ対象にできるぞ、と思ったんだけど、なんとなく case sensitive としてフォーマットしたら、Time Machine 用のディスクが case insensitive なせいでバックアップ対象にできないことが判明、、、せっかく8時間ぐらいかけてバックアップをコピーしたのに………

最近このようなことばかりで本当に嫌気がさす。ろくなことがおこらない。人生自体がバグってる

検索クエリを眺めると、ほんとタバコの消臭に関する流入が多くて、たくさんの人が困っていることがわかる。

なんかいろいろあって??ってなるので特徴を覚え書き。線は信号に関係するものだけ (普通は +VDD が必要)

名前 特徴 速度 備考
1-wire SIGNAL, GND 半二重 1対多 非同期 標準 15.4kbps, オーバードライブ125kbps SIGNAL が VDD を兼ねるので本当に2本だけでOK センサーとかで採用例がある。MAXIM の日本語スライド
I2C SDA, SCL, GND 半二重 多対多 同期 ロースピード 10kbps 標準 100kbps ファーストモード 400kbps 高速モード 3.4Mbps バス中のデバイスのどれでもマスターになれる。マイコンだと400kbpsまでが多い?ここに上げた中では唯一多対多のバスを作れる
SPI SCK, MISO, MOSI, SS, GND 全二重 1対多 同期 クロック依存最大 1Mbps〜2Mbps マスターはスレーブの数だけ SS が必要。1対1 なら SS は必要ない。
RS232 RxD, TxD, GND 全二重 1対1 非同期 9600bps などいろいろ PC でもよく使われていたインターフェイス。今でも USB 変換ケーブルは簡単に手に入る。フロー制御とかしないなら3本で使える
USB1.0 D+, D-, GND 半二重 1対多 非同期 1.5Mbsp, 12Mbps 使うの面倒。USB2.0 は高速化版、USB3.0 はさらに高速化して全二重に

AVR では

  • SPI はほぼどの AVR でも使える
  • I2C は AVR によっては専用ハード (TWI) が用意されてる。専用ハードでなくても USI があれば TWI をハンドリングできる (多少面倒だけどライブラリとして公開している人はいる)。
  • RS232 はロジックレベルをドライバ (MAX232系の) で変換すれば USART で直接扱えるので簡単。
  • USB は一部の AVR で組込み。V-USB を使えばソフトウェアだけでもいける。あるいは USB Serial 変換チップ (FTDIのが有名でクロスプラットフォーム) を使えば USART 経由で使える。変換チップ使うのが確実で汎用性があってよく使われていそう。

略語がいっぱい

  • UART (Universal Asynchronous Receiver Transmitter) は非同期なシリアルを扱う回路の名前。同期なのを統合したものを USART (Universal Synchronous Asynchronous Receiver Transmitter) というらしい
  • TWI (Two Wire Interface) はその名の通り2線式ってことなんだけど、AVR においては普通は I2Cのことを指しているっぽい。I2Cと名乗ってないのはなんか政治的な問題?
  1. トップ
  2. avr
  3. マイコン周りのシリアル通信プロトコルまとめ
  1. トップ
  2. tech
  3. マイコン周りのシリアル通信プロトコルまとめ
  1. トップ
  2. arduino
  3. マイコン周りのシリアル通信プロトコルまとめ

練習開始から111日。練習のモチベーションはかなり落ちているんだけど、割と習慣化できているので、1日に少なくとも5分程度はやってると思う。習慣化というか、せっかくここまで頑張ったんだし……っていうサンクコスト的な感じで続けざるを得ない。

前回書いたときから3週間ほど経ったけど、あいかわらず 100% をとらない限り次に進まない、というのを続けてる。23wpm で 100% を出して、今は 24wpm で 100% を狙っている。90%以上はコンスタントに出せていて、あとは運が良ければ100%とれるかな?という感じ。たまに 25wpm、26wpm をやってもまぁ90%ぐらいはとれる感じ……

というのはランダムの話で、やはり単語聞きとりになるとかなり精度が落ちる。80〜90%ぐらいになってしまう。符号の聞きとりだけじゃなくて、単語の認識をしようとして処理速度が追いつかない感じ。ただ、速度を落とせば聞きとれるかというと、そういうわけではなくて、頭に浮かんだ文字の一時記憶が数msecなので、遅いと遅いで単語が聞きとれない。

あと、「business」とか、「conversation」とか、長い単語になると、さらに辛い。単語は i e s あたりが本当に頻出なので、速度が1.5倍ぐらいになるインパクトがある。ss は特徴があるので覚えやすい。hh とか ii という列は普通ないので、ss は s 単体よりも正確に聞きとりやすい。process とか discuss とか possible とか、よくでてくる。

初期のころからやって聞き慣れつつある th からはじまる頻出単語 (the then they them this there their) は結構聞きとれるようになってきた。初期のころこれ無理だろ、って思ってたけどかなり時間をかけて慣れてきてる…… とはいえ、これらの中でも this there their は難易度が高い……

  1. トップ
  2. ham
  3. モールス練習 進捗
  1. トップ
  2. モールス
  3. モールス練習 進捗

JALタッチ&ゴーサービスで、発行されたQRコードが1つしかなくて、これで往復いけるの? と不安になったけど、1つで往復できるらしい。

なかなか答えが見つからなくてググったらスマフォアプリ?用の FAQ がヒットした。

【 国内線 / タッチ&ゴー 】
搭乗便を往復同時に予約しました。印刷用のバーコードは1つですが、携帯用のバーコードは2つあります。どちらを使えばいいですか。
【2次元バーコードを携帯にメールで送信する場合】
往復1つのご予約記録であっても、システム上片道ずつの配信となります。
どちらのメールからURLをクリックいただいても、2次元バーコードは同じものとなります。日付により、それぞれ使い分けてご利用いただく必要はございませんので、往路のメールで取得したバーコードで復路利用も可能です。

【2次元バーコード(eチケットお客さま控)を印刷してご利用いただく場合】
1つのご予約記録に対し、バーコードは1つとなります。

http://faq-sp.jal.co.jp/app/answers/detail/a_id/4229

Time Machine はかなり気にせずに使えるのがいいというものですが、バックアップ実行中に環境設定を開いても今何をコピーしているのが全く表示されないので、気になるときはモヤモヤする。

なんかいい方法ないかなと思ったけど、特に思いつかないので、dtrace で open を見たらとりあえずわかりそうな結果はでました

$ sudo dtruss -t open -n backupd

で backupd が open するファイル名がドンドコ表示されるので、起動しっぱなしにしておけば、現在コピー中のファイルは知ることができる。

ただ、なんか1つのファイルをずっとコピーしているなー、という場合には (既に open 済みなので) 使えなくて、そういうときは lsof でいける気がする。けどたった今バックアップが終わってしまったので検証できないのでそのうちやってみます。

何かもっと素晴しい方法があればご教示ください。

  1. トップ
  2. tech
  3. Mac の Time Machine が今何をバックアップしているのか? を知る

出雲市 (特に大社と出雲市駅との往復) と、松江市 (松江駅を中心に周辺観光地) にいって公共交通機関で観光した実感。あんまりまとまってないけどとりあえず書きなぐっておく。

実際にいった主要なところは

  • 出雲市
    • 出雲大社
    • 日御碕
    • 島根ワイナリー
    • 島根県立古代出雲歴史博物館
  • 松江市
    • 松江城
    • 松江堀川遊覧船
    • 佐太神社
    • 八重垣神社

あたりだけ

公共交通機関のメリット

  • 運転免許がなくてもいい
  • 酒が自由に飲める
  • 比較的コスト安

ぐらいしかないと思う。基本、免許がなかったらタクシー貸切ればいいので、それができるならそのほうがいいと思う (タクシー貸切も考えたけど時期的に無理だった)

旅行行くと運転免許が欲しくなるけど、旅行のときしか運転しないとかだとどっちにしろ怖くて運転できねーよって感じなので結局運転免許を取得するメリットを未だ見いだせていないです。

フリーパス

とりあえず、3日間3000円で出雲、松江周辺のバス電車 (JRを除く) が乗り放題のチケットがあるので、これは必ず使ったほうがいいと思う。空港往復だけでも1500円ぐらいかかるので、まず元は取れ、バスの支払いで小銭の心配をする必要がなくなって捗る。JRでは使えないけど、松江、出雲間の移動であれば一畑電車がこのフリーパスでいける。ただしJRより少し余計に時間はかかる。

基本情報

出雲市内のバスは多くとも30分間隔、松江は20分間隔ぐらい。場所や路線によってはもっと少ない。路線と時間帯によってはほとんどないこともあるので、事前チェックは必須。土日にしか運行がないバス路線とかもあったりするので、平日の観光はより気をつける必要がある。

電車は路線も少なく、本数も少ない (一畑電車は1時間に1本程度・JR は普通列車は同じく1時間に1本程度) しかない。

公共交通機関使うなら当たり前かもしれないけど、事前にちゃんと行きたいところ決めてスケジュールを組まないとホテルに帰れないとか、飛行機に乗れないとか詰む可能性を感じる。

ただ、出雲空港と出雲市の往復バスは飛行機の離着陸にあわせた時刻表が組まれていいて、例えば出雲空港からの場合、飛行機がつくのが遅れたとかいう場合も、ついた時刻から10分後にバス出発という感じなので焦る必要はない。

時間的制約が各所で発生するので、ちょっと気が重い感じになる。

時刻表検索

バスを利用する場合、どうも Google Maps は役に立たないことが多い。Yahoo! ロコのほうがローカルに強い。しかし出雲の一畑バスはいずれも候補にでてこない。

一畑バスの公式サイトもなかなか不親切で、見たい情報を一覧で見れないので、事前に自分で表にしたほうがスムーズだと思った。ただ、出雲市駅でくばっている時刻表はいい感じに一覧になっているので、手にはいるならこれで良さそう(実際何度か参考にした・平日でも朝配ってくれていた)。

事前にスケジュールを組んでも、実際行ってみると思ったより時間がかかったとか、時間が余ったとかはよくあることなので、時刻表には簡単にアクセスできるようにしたい。今回、佐太神社には行く予定がなかったけど、八重垣神社で思ったより時間が余ったので予定を変更して行った。

松江は Yahoo! ロコでバスがでてくるのと、本数も20分に1本ぐらいはあるのでかなり気が楽。ただ、Yahoo! ロコのアプリがバグっていて、補完ででてくるバス停名だと検索できないことがある。これはバス停名にバス会社の名前がついてるせいなので、補完した後それを消せばいける…… (アホなのでなおして欲しい)

ことりっぷ 松江・出雲 石見銀山 (旅行ガイド) -

3.0 / 5.0

初回起動時の「設定アシスタント」では移行をスキップして、あとから「移行アシスタント」で移行をかけたほうがいい。

というのも、「設定アシスタント」だとユーザ情報はなぜか復元されないから。ユーザごと移行をかけたいなら「移行アシスタント」を使うしかない。

何気なく繋いだらちゃんと表示されなくてクソがって感じ。テレビとして認識されているようだ。ググってみるとなおすスクリプトを作ってる人がいたのでやった。(DELL U2713H)

http://embdev.net/topic/284710#3027030

$ ruby patch-edid.rb
$ sudo mv DisplayVendorID-10ac /System/Library/Displays/Overrides

に貼ってあるスクリプトを実行して再起動する。EDID を上書きして強制的に RGB にするみたい。

マウスの問題というわけではなくて、内蔵トラックパッド・Bluetooth の Wireless TrackPad、他者メーカー製の USB マウスどれでもひっかかる。DisplayPort ケーブルを抜くと正常になるので、DisplayPort が悪いのは間違いなさそう。

解決方法がみあたらない。おれだけなんだろうか。めちゃめちゃに困る。

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

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