Top / EBUG勉強会 / 20120218_Audacityで信号処理
EBUG 第41回会合
2012年2月18日 @(株)銀座堂
川俣吉広、kaw@on.rim.or.jp

発端 - 最初はまともな動機だったのに.....

  • 震災後、電池で使えるラジオが家にないことに気がつく。
    • 安い奴でいいから買っとこう。
      radio.jpg
      中華ラジオ ¥1,980也
    • 単三2本で300h使用可。あと、短波帯も聴けるし。
  • ヘタに短波とか付いてたので、いじってるうちに私の中のラジオの虫が活動再開。
    しかし室内だとノイズだらけで聴けたもんじゃないな - fileNoisyEnv.3g2
  • 普通なら今時rajikoとからじる☆らじるとかなんだろうけど…。
    決まった局しか聴けないのはやっぱりつまんないな (それに一応、一陸技だし)。

なんかもう意地(雀を撃つのに大砲を持ち出す)

  • 昔使ってた無線機を20年ぶりくらいに箱から出してきた。
    ft757.jpg
    YAESU FT-757GX
    • 受信周波数 500kHz〜30MHz, 受信モード SSB, CW, AM, FM.
    • 当初、受信周波数が不安定だったので再調整 ... トリマコンデンサの経年劣化による。調整後、動作良好。
  • そして、ベランダにアンテナを張る。
    Antenna.jpgbalun.jpg
    全体給電部(BALUN)
    Boom.jpg・とにかく、とにかく目立たないように…
    ・落下事故は絶対厳禁 ... 多点支持+落下防止ステイ
    ・容易に点検/補修できるように
    ・悪天候時などにはすばやく撤収可に
    支持部設置条件 - これも集合住宅住まいの定めか
    • ブーム先端を導通させれば1λループ、カットすればλ/2ダイポールとなる。
      • 理屈から言えば、λ/2ダイポールのほうがより低い周波数に共振するはずなので、こっちの方が良いはず。
      • 実際にはループのほうが感度は低かったが、外来ノイズはそれを上回って格段に少ないのでこの形式で行く。
        Antenna.gif
        設置構造、等価回路

で、実際どんなもんなのか? ... 船舶気象通報で耳試し

船舶気象通報

・海上保安庁が運用

・周波数、空中線電力: 1669kHz, 50W

・変調形式: H3E (USB) - 上側波帯全搬送波振幅変調

・各局数分ずつ放送 - 一時間で一巡

XmitSite.jpg
Location.jpg
(送信所の写真はこちらから借用させて貰いました)

というわけで、受信能力を試すには結構よさげな対象。

ラジオを聴くのにAudacityを持ち出す

セッティング

Setups.jpg

Audacity - フリーでクロスプラットフォームな音声エディタ

  • 録音 / 編集 / 再生機能
  • 各種音声ファイル形式のImport/Export
  • 各種パラメータの解析表示
  • 直感的なUI (WxWidgets使用)
  • GPL

通常は音楽などの編集・加工に用いられることが多いと思われるツールですが、今回はこのAudacityを用いて信号の変換や測定/解析などを行ってみることにします。


Diagram.gif
系統図

調整

大原則 - レベルオーバーさせない。

  • アナログ / デジタルのどちらの領域でも鉄則。
    • アナログ - 非線形領域に達すると信号が不可逆に歪む。
    • デジタル - サンプリング時に量子化レベルを越えてしまった値は表現できない。
  • デジタル領域におけるレベル表現 ... dBFS
    • 最大の量子化レベル(FS: full scale)を 0dB とした場合のdB表示(振幅相当のdB換算なので 20*log(x/FS) )。

調整方法

  • RXのAF GainとPCのLine In (or Mic In)の両方で調整 ... 歪みなく、かつノイズフロアから十分大きいように設定する。
    • PCの調整はOpenBSDの場合、mixerctl(1)を使う。
    • レベルのモニタリングはAudacityのVU Meterが使用できる。

振幅変調についておさらい

振幅変調とは、正弦波との乗算(周波数変換も)。

AMsignal.gif
時間領域

三角関数の加法定理から

sin((ωc+ωb)*t) = sin(ωc*t)*cos(ωb*t)+cos(ωc*t)*sin(ωb*t)
sin((ωc-ωb)*t) = sin(ωc*t)*cos(ωb*t)-cos(ωc*t)*sin(ωb*t)
  • ωc: 搬送波の角周波数
  • ωb: 被変調波の角周波数
sin(ωc*t)*cos(ωb*t) = (sin((ωc+ωb)*t)+sin((ωc-ωb)*t))/2
sin(ωc*t)*(C+cos(ωb*t)) = (C*sin(ωc*t)+sin((ωc+ωb)*t)+sin((ωc-ωb)*t))/2
  • C: 直流成分

被変調波に直流成分が含まれていると、変調波では搬送波が現れる。

AMsignal_Spect.gif
周波数領域

要するに正弦波を掛け算するとその周波数だけ、元の信号のスペクトラムが平行移動する。
あと、直交成分が加わった場合の位相表現を複素平面上で云々とかあるけど、とりあえず今回そういうのは置いておく方向で...

試行錯誤の道筋

記録してみよう

受信機側の作業

  • 信号強度と音声を同時に記録したい。
    • 信号強度を記録するには、搬送波も音声として記録すればよい。
  • 受信モードをUSB (Upper Side Band)とし、受信周波数を若干低いほう(500Hz位)に故意にずらす。
    • こんな感じ ... fileSSBtune.3g2
    • これだと音声はまともに復調されないが、これをどうするかはあとのお楽しみ :-)。

PC側の作業

考えられる幾つかの方法;

  1. Audacity立ち上げて録音ボタンをポチッ
    1. リアルタイムでグラフィカルに波形とか表示しているので、結構重い。
    2. 非圧縮で記録してるのでディスク容量を食う。
    3. 一定の間隔でファイルを生成する、とかが面倒。
    4. タイムコードとかも付いてないので、あとで実時間との対応をとるのも面倒。

  2. dd if=/dev/audio of=outputfile.raw とか
    1. やっぱり、非圧縮で記録してるのでディスク容量を結構食う。

  3. lameを用いて、MP3にエンコードしながら記録
    1. 不可逆圧縮なので、測定精度に影響がでるかも....

lameを用いる方法でやってみた。2つのシェルコードを走らせる。

while :; do
    lame -r -s 48 -m m -a --preset 32 /dev/audio `date +monitor-%Y%m%d%a-%H%M-1996kHz.mp3`
done
while :; do
    sleep 3600
    pkill lame
done

そして、例えば次の正時が13:00だとすると、

echo 'pkill -f "sleep 3600"' | at 1300

とする。これで毎正時に出力するファイルが更新される。
lameを上記のオプションで実行すると;

Autoconverting from stereo to mono. Setting encoding to mono mode.
Resampling:  input 48 kHz  output 22.05 kHz
Using polyphase lowpass filter, transition band:  8269 Hz -  8535 Hz
Encoding /dev/audio to /dev/null
Encoding as 22.05 kHz single-ch MPEG-2 Layer III (11x) average 32 kbps qval=3
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA 
   400/400   (100%)|    0:00/    0:00|    0:10/    0:10|   17.415x|    0:00 
  8 [  0] 
 16 [  0] 
 24 [ 75] *****************
 32 [320] *********************************************************************
 40 [  5] **
 48 [  0] 
 56 [  0] 
 64 [  0] 
 80 [  0] 
 96 [  0] 
112 [  0] 
128 [  0] 
144 [  0] 
160 [  0] 
-------------------------------------------------------------------------------
   kbps       mono %     long  %
   30.6      100.0       100.0
  • 入力データは、/dev/audioから出力される raw format を指定
    • 16bit 48kHzサンプリングのリニアPCMデータがそのまま出力されている(符号付き16bitがL, R交互に来るだけ。ヘッダも何もなし)。
  • ステレオのL,R入力に同じ音声が入力されてるので、1chにmix-downする。
  • --presetでエンコードビットレートを指定。概ね 8kHz以下の帯域までを記録 ... 今回はこれで十分。
  • サイズは 約 6.5MB/hour 。

解析してみよう  ?

まずは、受信信号の強度を測定してみる。

  • 編集波形の表示形式
    • Waveform(Linear/Log)
    • Spectrogram(Linear/Log)
    • Pitch(EAC)
  • Analyze -> Plot Spectrum

受信信号の強度を測定するには、ノイズや側帯波を除外する処理を行う ... フィルタリング

  • 搬送波のみ抽出したい ... 変調波やノイズの影響を避ける
    • Effect -> Equalization
      EQpreset.xmlの裏ワザ
    • 受信機の特性(AGC)に関する注意
  • 結果を見てみよう
    • 一時間中の各局の信号強度
      carrier-1hr.png
      2012 2/14, 2300-2400
      carrier-1hr-mag.png
      部分的に拡大
  • 日変化 ... 地表波 VS 空間波
    carrier-hourly.png
    2012 2/14, 12,17,24,30時から各一時間
  • 日毎の変化
    carrier-daily.png
    2012 2/12〜2/15 各23時から一時間

加工してみよう  ?

Modulation.gif
  • 音声も正常に復調して聞きたい
    • 搬送波を記録するため、同調周波数が約800Hzほどずれている。
      ... これをシフトさせて、聴取できる状態にしてみる。
  • 使用する機能: Effect -> Toremolo ... 正弦波で乗算する操作
    • Toremoloでは周波数がシフトするが、元々の周波数成分も残っている。
      ...なので、元々の信号とオーバラップしないようにシフトさせた後、不要な成分をフィルタで除去。
  1. Toremolo - 4000Hz
  2. HPF - 4600Hz
  3. Toremolo - 4600Hz
  4. LPF - 3500Hz
  • 周波数変換を2回行うので、やっていることはダブルスーパーヘテロダイン受信機と同じ。
  • あと、乗算により振幅が減少する場合があるので、適宜Normailizeする。

まとめ  ?

  • 古い受信機であっても、PCと組み合わせると受信音を耳で聴く以上のことも色々できる
    • OpenBSDを使う場合は、mixerctlだけではなく、audioctlやaucat, sndiodなどの音声ツールとも組み合わせると色々遊べそう。
  • 制限はあるものの、Audacityを変復調などに使用することも可能だった。
  • とはいえ、アンテナ・受信機の性能がやっぱり重要
    • これ欲しい(究極かも。でも結構高ぇ...)
    • あと、アンテナで良さげなのはMLA (Magnetic Loop Antenna: 磁界ループアンテナ) - ちょっと機構が複雑そうだけど。

Top / EBUG勉強会 / 20120218_Audacityで信号処理

Attach file: filecarrier-1hr-mag.png 591 download [Information] filecarrier-daily.png 607 download [Information] filecarrier-hourly.png 523 download [Information] filecarrier-1hr.png 506 download [Information] fileModulation.gif 512 download [Information] fileAMsignal_Spect.gif 583 download [Information] fileAMsignal.gif 602 download [Information] fileLocation.jpg 527 download [Information] fileSSBtune.3g2 427 download [Information] fileDiagram.gif 619 download [Information] fileSetups.jpg 585 download [Information] fileXmitSite.jpg 550 download [Information] fileAntenna.gif 621 download [Information] fileBoom.jpg 621 download [Information] filebalun.jpg 542 download [Information] fileAntenna.jpg 606 download [Information] fileft757.jpg 611 download [Information] fileNoisyEnv.3g2 469 download [Information] fileradio.jpg 677 download [Information]
Reload  New Edit Freeze Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS
Last-modified: 2012-03-03 (Sat) 22:22:06 (2451d)