ノイズ源の特定までやったはいいが、うまい対策をうたなければならない。

このノイズ源特定のときは、とりあえず電源ラインに内径1cmぐらいのパッチンコアを挟んでみたが、うまくいかなくて悲しい、という状態で終わった。その後、対策を考えなおした。

  • 室内機の電源ラインにもっと大きなコアを巻いてみる
  • 室内機と室外機とを繋ぐ線にCMFを入れる

室内機の電源ラインにもっと大きなコアを巻いてみる

ハムフェアにて内径19mm外形40mmの大型のコアを購入したので、これを5ターンほどエアコンの電源ラインに巻いてみた。

これは効果が抜群だった。(コアは内側を1回通る=1ターンなので、この画像で5ターン)

対策前

対策後:

コアを閉じた瞬間から減りはじめて感動的な体験をする

室内機と室外機とを繋ぐ線にCMFを入れる

かなり狭い領域かつパッツンパッツンなので、あまりコアを入れる余地がない。

とりあえず1ターン入れてみたが、あまり効果が見られなかった。複数個入れれば違うのかもしれないけど、入れるスペースがなかったためひとまず諦めた。

基本的に巻数の2乗に比例してインピーダンスが上昇するので、複数回巻けないというのはかなり厳しい。5ターンのコア1つと同じインピーダンスを1ターンのコアを複数で解決しようとすると単純に25個必要になる。

今回の教訓

1回小さいコア入れたぐらいで諦めず、複数回巻けるコアでも試してみる。

あと根本的にコアのデータシートから「このぐらいのインピーダンスが主流」っていうのを感じとっておいて、巻数でどれぐらいインピーダンスが上がるか、目安程度でも感覚的に想像できるようになると便利そう。最近得た知見としては

  • ローバンドほど対策が厳しい
    • 元々低い周波数だとコアのインピーダンスが低いので、かなり巻きまくる必要がある
    • 例えば7MHzで20Ωのインピーダンスのコアだと、1つのコアに13回巻かないと目安となる3kΩにならない。
  • 巻きすぎるとハイバンドでの特性が悪化する

村田製作所がコアの選定方法というページを公開していて便利

  1. トップ
  2. tech
  3. エアコンからアマチュア無線に混入するノイズ
  1. トップ
  2. ham
  3. エアコンからアマチュア無線に混入するノイズ

移動用の小さいパドルが欲しいなと思っていた。あまり使わないと思うので最低限キーイングができればいいかな、というぐらいの温度感だけど、割と高価なものが多い (最低でも10k) ので買ってなかった。最悪PCキーイングだけでなんとかするというのでもいいけど、割と考えが保守的なのでキーなしで運用とかビクビクしてしまう。

ハムフェアで何かいい感じのを自作している人がいたら買ってみようと思っていたが、いろいろ悩んだ結果「どこでもパドル MINI」というのを買ってみた。Wood のキットバージョンで3000円だった。

大変可愛いらしい見た目で、メインの機構はマイクロスイッチになっており、これは板バネなので細かい調整はできないが、使ってみると思ったよりかなり気持ちいい。

キットで買ったのだけれど、無鉛ハンダまでついていて親切感がだいぶ高かった (露出して手が触れやすいところにハンダ付けする必要があるための配慮のようでかなり嬉しい)

土台は買わなかったので、手元にあった金具でKX3の本体ローレット部分に固定してみた。結構いい。けど、振動でローレットとかがゆるむので、もうちょっといい形で固定したい。

縞黒檀を選んだけどかなり可愛い。自分は渋いのが好きらしい。

  1. トップ
  2. tech
  3. 移動用パドル
  1. トップ
  2. ham
  3. 移動用パドル

バンドスコープ を作ったのはいいが、41.1kHz サンプリングだし、0Hz付近にUSB オーディオデバイス由来の強力なノイズが入ってるのがイケてないので、良さげな192kHz サンプリングのUSBオーディオデバイスが欲しくなった。

SDR 用サウンドカードのまとめ みたいなページを見てみたけど、現状手に入るなかでよさそうなのは Steinberg UR22 というのしかない。これも注釈がついてて「ノイズがあるよ」って書いてあるけど、HFでは問題にならなそうとのことなので、買ってみた。

Steinberg 2x2 USB 2.0 オーディオインターフェース UR22 - Steinberg(スタインバーグ)

Steinberg(スタインバーグ)

3.0 / 5.0

独自のドライバが必要で (UAC2 とかじゃない) 嫌な感じだけど、普通に Mac 用の提供されている (Yamaha Steinberg Driver とかでググる) のでそこらへんではハマらなかった。

しかしこれ、用途的に宅録みたいなの向けなので、入力や出力がちょっとややこしい。入力はXLR(キヤノンコネクタ)バランス入力・3極標準プラグ (ステレオ標準プラグ = 6.3mm) バランス入力・2極標準プラグ (モノラル標準プラグ = 6.3mm) アンバランス入力といろいろ対応されている。KX3 の出力は 2.5mm ステレオジャックでこれはアンバランスなので、2.5mm ステレオジャックからモノラル標準ジャック2本へ変換が必要になる。

2.5mm ジャック -> 3.5mm プラグへの変換は KX3 注文時に一緒に買ってあるので、以下のように3.5mmジャック・ジャックと、3.5mm プラグ → 6.3mm プラグ×2 の変換を買った。

オーディオテクニカ ラインケーブル ATL462A/1.5 - Audio Technica(オーディオテクニカ)

Audio Technica(オーディオテクニカ)

4.0 / 5.0

audio-technica GOLD LINK Fine プラグアダプター ステレオミニ延長 AT509CS - Audio Technica(オーディオテクニカ)

Audio Technica(オーディオテクニカ)

4.0 / 5.0

入力なしのとき

ちょっとノイズが立ってるところがあるけど、全域でだいぶノイズが少なくなった。中心周波数付近のノイズが皆無になったのはデカい…

±30kHz 付近のノイズは電源のスイッチングノイズで、直接オーディオインターフェイスに飛びこんでいるっぽい。それ意外の 60kHzぐらいから90kHz までのノイズはUSBインターフェイスのノイズっぽい。

入力いれたとき


両端に向かってゲインが下がっていくのは KX3 のマニュアルにも書いてあって、KX3 出力時点でこうなってしまう。FFT したあと補正するのがいいと思うけど、まだやってない。

The RX I/Q outputs from a receiver are not “flat” over an infinite frequency range; the signal-conversion process results in some slope (decrease in gain) as you move farther from the center frequency. In the case of the KX3, the signal will be reduced by about 2.5 dB at +/- 24 kHz, 4 dB at +/- 48 kHz, and 7 dB at +/- 96 kHz. The spectrum amplitude on the display, including the apparent noise floor of the receiver, will “roll off” by these amounts.

KX3 Owner's man Rev B4

192kHz の範囲が一望できるのがなんかすごい広くなる。

96kHz サンプリングだとあんまり気にならない範囲になる。狭くなるけど CW の場合 96kHz ぐらいで見たほうが選局しやすい気がする…

だいぶいい。

  1. トップ
  2. tech
  3. 192kHz サンプリングのUSBオーディオデバイス
  1. トップ
  2. ham
  3. 192kHz サンプリングのUSBオーディオデバイス
  1. トップ
  2. SDR
  3. 192kHz サンプリングのUSBオーディオデバイス

ウォーターフォール表示で遊んでいて、アマチュア無線のバンド全域に繰り返し強いノイズが入っていたり、部分的に超強力なノイズが入っていたりすることがあって、気になっていた。

少し自分の周辺機器をみまわして電源を切ったり入れたりしたらかなり変わったのでメモしておく

主要機器を切った状態

切れそうな機械の電源をだいたい切った状態


すぐ電源切れないデバイスも結構あるけど、かなり静かになった。

エアコン

規則的なノイズが全域に入る。エアコンはどのバンドでもノイズが入るけど、14MHz帯が一番ひどい。

空気清浄機

ダイキンの空気清浄機の電源を入れるとエアコンと似たようなノイズがかなり強く全域に入る。

モーターのブラシノイズなんだろうか? よくわからない。放電ノイズっぽくはないけど

スイッチング電源のノイズ

特定の周波数ごとに強力なノイズが入る。負荷に応じてノイズが揺らぐのが特徴っぽい。7MHz や 10MHz あたりが一番ひどい。ハイバンドになるほど強度が下がっていく。

蛍光灯のノイズ

14MHz帯に入っていた。画像はつけた直後で、なんか周波数を変えながら「ログインしてきました!」って面してるのが蛍光灯ノイズ。

これとは別に蛍光灯のデスクライト(インバーター制御)もあって、それはそれでこれとは違うノイズの入りかたをする。デスクライトのほうがだいぶ広範囲でひどい。

その他

USB HDD か、その電源アダプタ(スイッチング)かがノイズを出していたが電源ケーブルにコアを巻いたら、これはかなり改善した。HDD 側のノイズが電源ラインに戻ってたのかな?

今回、

  • 扇風機
  • MacBook Proの電源アダプタ

はノイズ源ではなかった。

  1. トップ
  2. tech
  3. 身近なノイズ源を特定する
  1. トップ
  2. ham
  3. 身近なノイズ源を特定する

golang で JS 的な addEventListener/dispatchEvent 的なことをしたいときどうするか?

emission

JS にあるようなのと全く同じ様に「イベント名」でイベントの種類を識別して任意の「イベントオブジェクト」をやりとりする。

On/Off/Once とか jQuery にあるような便利メソッドがついてる。

リフレクションで型変換は隠蔽されているが、もしリスナーとエミッターとで型が食い違っていると、実行時エラーになる。

package main

import (
	"github.com/chuckpreslar/emission"
	"log"
)

type ClickEvent struct {
	button string
}

type KeyEvent struct {
	key string
}

func main() {
	emitter := emission.NewEmitter()
	emitter.On("click", func (ev *ClickEvent) {
		log.Printf("onclick %v", ev)
	})
	emitter.On("key", func (ev *KeyEvent) {
		log.Printf("onkey %v", ev)
	})

	emitter.Emit("click", &ClickEvent{ button : "left" })
	emitter.Emit("click", &ClickEvent{ button : "right" })
	emitter.Emit("key", &KeyEvent{ key : "A" })

	// panic
	emitter.Emit("key", &ClickEvent{ button : "right" })

	// or also panic
	emitter.On("key", func (ev *ClickEvent) {
		log.Printf("onkey2 %v", ev)
	})
	emitter.Emit("key", &KeyEvent{ button : "right" })
}

go-pubsub

Pub/Sub/Leave というメソッドが生えている。Pub は Emit/Dispatch, Sub は addListener/On, Leave は removeListener/Off に対応する。

「イベント名」というパラメータが存在せず、型の選択によって自動的にディスパッチされる。よって型がマッチしなければリスナーは実行されないので、原理的に型変換の実行時エラーは発生しない (もし間違えた場合単に実行時になって「呼ばれない」ことに気付く)

package main

import (
	"github.com/mattn/go-pubsub"
	"log"
	"time"
)

type ClickEvent struct {
	button string
}

type KeyEvent struct {
	key string
}

func main() {
	ps := pubsub.New()

	ps.Sub(func(ev *ClickEvent) {
		log.Printf("onclick %v", ev)
	})
	ps.Sub(func(ev *KeyEvent) {
		log.Printf("onkey %v", ev)
	})

	ps.Pub(&ClickEvent{button: "left"})
	ps.Pub(&ClickEvent{button: "right"})
	ps.Pub(&KeyEvent{key: "A"})

	time.Sleep(100 * time.Millisecond)
}

サンプルコード書いてて気付いたが、Sub に登録した関数は Sub を呼んだ順あるいは Pub を呼んだ順に関係なく実行されうる? (ref. 登録された関数を go で呼んでる)

下記コードのように time.Sleep の代わりに Pub/Sub によって終了を待とうとするとたまに失敗する。(完全に終了を待つ方法がわからなかった)

package main

import (
	"github.com/mattn/go-pubsub"
	"log"
)

type ClickEvent struct {
	button string
}

type KeyEvent struct {
	key string
}

func main() {
	ps := pubsub.New()

	ps.Sub(func(ev *ClickEvent) {
		log.Printf("onclick %v", ev)
	})
	ps.Sub(func(ev *KeyEvent) {
		log.Printf("onkey %v", ev)
	})

	ps.Pub(&ClickEvent{button: "left"})
	ps.Pub(&ClickEvent{button: "right"})
	ps.Pub(&KeyEvent{key: "A"})

	// waiting for processing all messages
	// -> FAIL
	done := make(chan bool)
	ps.Sub(func(b bool) {
		ps.Close()
		done <- true
	})
	ps.Pub(true)
	<-done
}
  1. トップ
  2. tech
  3. golang で event emitter/dispatcher 的なもの