JI3GAB/blog

ラジオに関する話題を中心につらつらと

同軸切替え器

2006-02-17 22:32:10 | ラジオ(その他)
CQ誌のSSBの音作りの記事の中で、モニター受信機の簡易的な接続方法として、同軸切替え器を用いる方法が紹介されていました。私も誌面で紹介されていたのと同様の2接点の切替え器を持っていたので同じようにやってみたのですが、50Wで送信したときに、モニター受信機の方では針が振り切れんばかりの勢いです。仕方なく内蔵/外付けのATTを併用してモニターしていました。なんかおかしいなと思っていたので、先日ハムショップに行ったときに別メーカの切替え器を購入して試してみたら、これが全然違います。14MHzでダミーを接続して50Wのキャリアを送信したときに、SWがOFFになっている側に接続している受信機でS9くらいと、ちょうどいいレベルになってくれます。もう一度従来使っていたものに戻して同じ条件にしてみると、30-40dBほどレベルが高くなってしまいます。
ちなみに今回購入したのはDIAMONDのCX-210Aというタイプのものです。以前のものはもうカタログ落ちのようですし型番は書きませんが、カタログ値のアイソレーションは10dBくらいしか差がなかったはずです。そもそも出来が良くなかったのかハズレ品だったのか...
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

スピーカー

2006-02-16 00:17:46 | ラジオ(その他)
普段無線用には、フォステクスのFE-87というユニットをボール紙のエンクロージャに入れたもの(カンスピという名前でキットとして販売されていた。今でもあるかも)を使っています。これでも無線機内蔵のスピーカに比べれば、全然まともな音で聞くことができます。そのすぐ後に同じものをもう1ペア買って、ミニコンポにつなげて音楽もそれで聴いていました。そのうちもっとまともな箱に入れ替えようと思いながらずっとそのままだったのですが、先週ちょっと秋葉に寄ったときに小型のバスレフのエンクロージャを買ってきました(ダイトーボイスSV-101という名前。コイズミ無線で2000円くらいでした)。早速入れ替えてみたのですが、うーん、前よりはもちろんいいんですが、まあこんなものかなという感じです。実は最近ローカル局がヘッドホンアンプを作っていて、自分も作ってみるかと思ってそのパーツを物色するためにそもそも秋葉に寄ったのでした。どうせ大きなスピーカは鳴らせないし、やっぱり音楽を楽しむにはヘッドホンアンプを作った方がいいかなと考えています。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

正弦波発振プログラム

2006-02-14 02:23:09 | ソフトウェアラジオ
今まで、自作のSSB変復調プログラムはIF=12kHzで固定でした。これは、サンプリング周波数のちょうど1/4になっていて、ベースバンドとの周波数変換のときの局発を実現するのに真面目に正弦波をつくる必要がなく、実質乗算も行なわなくて良いので実装上も処理速度上もメリットがあったからです(ソフトウェアで行なうメリゴ方式みたいになります)。
しかしFT-747は最小ステップが25Hzのため、局発が動かせないと、正確には相手にゼロイン出来ないですし、そもそも12kHz以外のIFに対応できた方が組み合わせるハードウェアの自由度もあがります。そこで、IF周波数をある程度自由に選べてかつ運用時にも微調整可能なようにプログラムを作り換えています。そのためには、ちゃんとした正弦波をIQのペアで出力するような関数が必要になります。週末の深夜にオリンピックの中継を見ながら、やはり昔つくったプログラムをちょこちょこ直して組み込んで、朝方にはなんとか動いて気分良く寝たのですが、夕方3.5MHzをワッチしていると最初はいいのですが、数十分くらいするとだんだん出力が大きくなってきて、しまいにはサチってしまうことに気づきました。変更したのは局発のところだけなので、きっと正弦波の振幅が誤差の蓄積で大きくなっているのだろうなと思って調べてみたら、やはりそのようです。試しに関数内部で使っている変数の精度をfloatからdoubleにしたところ、1時間くらい動かしていても問題はなさそうになりました。本質的には、誤差がある程度出てきたら振幅をリセットするとかしないといけない気がするのですが...
ちなみにそこの部分は以下のようなコードになっています。世の中、どんなやりかたで処理しているのでしょうかね。





/*
 * complex sine wave generator
 */

#ifndef SINGEN_H
#define SINGEN_H

#include <math.h>

class SinGen {

 private:
  int sr;
  float f;
  double a, b, c, d;
  double angle, wd;
  
 public:
  SinGen(float freq, int sample_rate) {
    sr = sample_rate;
    f = freq;
    a = 1.0;
    b = 0.0;
    angle = 0.0;
    wd = 2 * PI * f / sr;
    c = cos(wd);
    d = sin(wd);
  }
  void set_freq(float freq) {
    f = freq;
    wd = 2 * PI * f / sr;
    c = cos(wd);
    d = sin(wd);
  }
  void get_sample_n(float *i, float *q, int n) {
    double a_next, b_next;
  
    for (int j = 0; j < n; j++) {
      a_next = a * c - b * d;
      b_next = a * d + b * c;
      i[j] = a_next;
      q[j] = b_next;
      a = a_next;
      b = b_next;
      //angle += wd;
    }
  }
};

#endif

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする