DSP検波(IF-DSP!?)

最初はまずオーディオのフィルタを作ってみたのだが、 なんせ時代はIF-DSPだ。 ま、そこまで言わなくても復調とか変調とかくらいは やりたいということで、その方法を検討してみた。 方針は「なるべく楽したい、 工作はあまりやりたくない」である。

私の持っている受信機のいくつかには455kHzのIF出力端子がある。 サウンドカードのサンプリング周波数は最高48kHzだから到底だめ、 かとも思ったが、サンプリング定理の教えるところによれば、 「帯域の制限された信号の場合には、帯域幅の2倍以上のレートで サンプリングすればよい」ということである。 どうせ帯域はセラミックフィルタだのクリスタルフィルタだので すでに500Hzとか3kHzとか6kHzとかに制限されているから、 もしやそのままサウンドカードに突っ込んでもできるのでは?と 思ってやってみたがやっぱりだめ。anti-aliasing用のフィルタが 入っているのだろうし、それともそもそも無理なのか(友人によれば やっぱり駄目だそうです)。

仕方がないのでIF信号をもっと低い周波数に変換するコンバータを作ることにした。 当初は、90度位相のずれた2つの455kHzの信号を局発にしてオーディオ帯域 に変換し、二つの出力をサウンドカードのステレオのLRにそれぞれ入力して、 あとをDSPで処理することも考えたが、結局メーカ製のアマチュア機が やっているように10-数10kHzのもう一段低いIFに変換することにした。 今のところIFは12kHzにしている。

455kHz -> 12kHzのコンバータは、先に作ったAM同期検波器 がまずまず うまく行ったので、それとほぼ同じ回路にした。 ミクサはLM1496、局発は水晶を注文するのが面倒なのでLC発振である。 配線は10cm四方の生基板の上にICを逆さにつけて空中配線している。

このコンバータは1999年の夏のある日に作ったが、 そのあとずっと放ったままになっていた。 年があけてようやくプログラムを書く気になった。

SSBの復調

PSNのSSB変復調をご存知の方が図を見れば すぐにわかると思うが、いわゆるフェージングタイプ(phasing method)の 復調方式である。

受信機からの455kHzのIF出力はダウンコンバータで12kHzに周波数変換され、 PCのサウンドカードに入力される。

入力された信号は、A/Dコンバータで符号付き16bitの数字の列に 変換される。サンプリング周波数は48kHzにしている。

まず、入力信号(今回は12kHz)を90度ずれた二つのキャリアとそれぞれ かけあわせて信号周波数をベースバンドに移す。 かけあわせるキャリア周波数は12kHzで、ちょうどサンプリング周波数の 1/4になるため、{1,0,-1,0,1,0,....} と{0,1,0,-1,0,1,....} という 二つの数字の時系列が「互いに90度ずれた12kHzのキャリア」を表現 していることになる。すると、かけ算といっても値は0か-1か1しか ないので計算が簡単になる。

このあとはせいぜい上限3-4kHz程度の周波数を扱えればよいので、 サンプリングレートを1/4の12kHzに下げる(decimationという)。 具体的には単に4つのサンプルのうち3つを捨てるだけである。 ただし、サンプリングレートを下げたときにaliasingが生じないように、 あらかじめ帯域を制限しておく必要があるので、 軽くローパスフィルタを入れている。

次に二つの信号のうち片方の信号の位相を(帯域内のすべての周波数で) 90度ずらす。アナログのPSNではこれが一番難しいのだが、DSPの世界では ヒルベルト変換器(Hilbert Transformer)を用いて比較的簡単に実現できる。

その後のフィルタは最終的な帯域決定用である。今は特に入れていない。

最後に二つの出力を加算または減算すればUSB/LSBの復調出力が 得られる。あとはサウンドカードのD/Aコンバータがアナログの オーディオ出力に変換してくれる。

ある日の夕方のNHK(9550kHz,USB)の復調結果(wavファイル)

AMの復調

AMの場合も途中まではSSBと同じである。ヒルベルト変換の必要はなく、 信号をかけあわせたあとの出力をそれぞれ自乗したものを加算し、 平方根を求めればよい。

ある日の昼のBBC(21660kHz)の復調結果(wavファイル)

AM 同期検波

SSBの復調方法でもちろんAM信号も復調することができる。 しかし、キャリア周波数がぴったりあってないと当然ビートが 聞こえることになる。かけあわせるキャリア周波数を信号の キャリア周波数とぴったりあわせることができれば(同期をとれれば)、 いわゆる同期検波になるはず。ちょっと実験してみてはいるのだが、 まだまともな結果は出ていない。

(2000年3月17日)
同期したキャリアの再生はPLLでやっているのだが、なかなか うまくロックしてくれない。ループフィルタを色々いじっている うちになんとなくそれらしく動くようなものが出来たが、 どうも納得行かない。また、現状ではフェージング(fading)の 谷では同期がはずれるみたいで変な音になる(下のwavファイルの 中の"the latest timetable"の'latest'のところ)。

上のと同じBBC(21660kHz)を同期?検波した結果(wavファイル)

バイノーラル受信

2000.Apr.16
去年のQST3月号に'Binaural IQ receiver'というのがあったのを 思い出した。これはPSNタイプのDC受信機で、ミキサのあとの I/Q二つの信号をAF PSNを通さずにそのままそれぞれ増幅して、 ステレオヘッドフォンで聞くというもの。左右の耳で位相の ずれた信号を聞くことになり、周波数の違う信号が異なる 位置に定位して聞こえるようになる。

SSB検波のプログラムを少し変更して、ソフトウェアで上と 同じことをやるようにした。最初ステレオでサウンドカードに 出力するやり方がわからなかったが、1. パラメータ設定のときに channelsを2にする。2. 出力時にLRチャネルのデータを交互に 書き込む。 というやり方でできることがわかった。

一応できたが、まだ実際の信号はほとんど聞いていないので 効果を調べるのはこれから。


Goto Top