Digital Ssb Processor(仮名)

DSsbPプログラム

パネルの様子

概要

このプログラムは、PCのサウンドカードを用いてデジタル信号処理を行い、 SSBの変復調を行うものです。プログラムの基本的な動作原理は、5年くらい前に書いた もの とほぼ同じですので、詳しくはそちらも参照してください(そのうち 書き直すつもりではいます)。

少し具体的に動作の概要を説明しますと、

今回のプログラムは、変調・復調処理のみであり、AGCやALCといった処理は 行いません。

2006年3月現在、FT-747との組み合わせで日常的に使用し、オンエアしています。

デジタルPSN変復調

PSN方式をデジタル信号処理によって実現しています。PSN方式では音声帯域の 信号に対する位相の90度シフトが必要になりますが、振幅特性が同じで、位相 特性が互いに90度ずれた2つのFIRフィルタ(analytic filter pair)を用いて必 要な帯域制限と位相のシフトを実現しています。変調の場合は、マイクからの 入力信号をそれらのフィルタに通したあと、やはり互いに位相が90度ずれた二 つのキャリア信号(デフォルト12kHz)と掛け合わせることでキャリア周波数 12kHzのSSB信号を得ています。復調の場合にはその逆のプロセスとなります。 周波数帯域については、今回のプログラムでは動作時に変更できるようになっ ています。
ソースコードの中で信号処理を行なっているのは、
FIRFilter, Interpolator, Decimator, SinGen, Generator, Detector
の各ファイルです(拡張子はcpp, h)。 今回FIRFilterクラスの中で、フィルタの帯域と減衰特性を与えることによっ て希望の特性のフィルタを設計できるようにしました。 この部分は DSPのチュートリアルサイトで 紹介されている、フィルタ設計用Javaアプレットのソースコードを ベースにC++に書き直し、さらに90度位相シフトを実現するためのコードを 追加しています。

サウンドカードとのプログラミングインタフェース

サウンドカードとのプログラミングのインタフェース(あるいはドライバモデ ル)は、Windowsだけでも、WMME、DirectX、ASIO、WDM kernel streamingなど さまざまな方式があり、 また、方式が決まったとしても、実際にデータをやりとりするのはなかなか面 倒な処理になります。DSsbPでは、マルチプラットフォームで種々の方式に対 して統一的でシンプルなAPIを提供してくれるportaudioというライブラリを用 いています。使用しているportaudioのバージョンはV19です。

portaudioとのインタフェースは、init_proc.cppの中で行なっています。

プログラミング環境

今回、簡単なGUIを追加したこと、Windows/Linuxでなるべく共通のコードに したいなどの理由から、平林氏によるオープンソースの マルチプラットフォーム統合開発環境 WideStudioを用いて開発しています。 コンパイラはgcc/g++です。 WideStudioとportaudioの利用によって、大きくソースコードを書き換えることなく、 Linux/Windows両方の環境で動作するプログラムを開発することが可能になりました。

実際の利用形態

DSsbPプログラムとサウンドカードの組合せにより扱える信号は、もっとも一般的な サンプリングレート48kHzのカードを用いた場合で20kHz程度までです。 本プログラムではデフォルトでキャリア周波数として12kHzを採用しています。 実際に電波を送受信するためには、もう一段高い周波数に変換する必要があります。 色々なやり方があるとは思いますが、今回想定しているのは、一旦455kHzや数MHz程度の よく用いられるIF信号に変換し、そこから先は通常のアナログのトランシーバと 同様の構成でアマチュアバンドの信号を扱う方法です。 メーカー製の機械で言えば、950SD(X)、IC-756(初代)や1000MPなどと同様の考え方です。 DSsbPプログラム、サウンドカードにコンバータを組み合わせたものが、 Kenwoodから販売されていたDSP-100に 相当すると考えていただければ大体合っているのではないかと思います。 メーカー製のトランシーバに接続して使うこともできますし、もちろん自作機のジェネレータとして使用することも可能です。

コンバータ、PC(サウンドカード)、トランシーバ等の接続方法

click to enlarge

接続例を図に示します(図中のシリアルポートを使った送受切替えはテスト中で、 まだ組み込んでいません)。 これは、455kHzのIFを持つ既存のトランシーバとの接続を想定した一例です。 PC側のサウンドカードは、デスクトップPCで使用する通常のものなら大抵動く と思いますが、必要な条件は、

  1. 録音、再生が同時にできること(full-duplex)
  2. サンプリング周波数が48kHzに設定できること
  3. ステレオのLINE IN/OUT端子を備えていること
です。 LINE IN/OUTのステレオのLチャネルを変調用、Rチャネルを復調用に使用して います。もし、変調あるいは復調のみで試す場合は、ノートPCのようにモノラ ルのMIC INとHEADPHONE OUTしかないものでも使用することはできますが、レ ベル等には注意してください。

LINEレベルで接続を行うので、マイク出力をLINEレベルまで増幅するマイクア ンプが必要です。同じく復調出力の方も、LINEレベルの出力をスピーカなりヘッ ドフォンなりをドライブできるレベルまで増幅するパワーアンプが必要となり ます。また、変調、復調でL/Rチャネルを使いわけているため、PCのサウンド のコントロールパネルからL/Rチャネルのキャプチャ/出力レベルを独立に調整 できるものが望ましいです。通常のWindowsのコントロールパネルではL/Rのバ ランスは調整できますが、独立して調整することはできません。サウンドカー ドのメーカが提供する専用のコントロールパネルからは調整できるものもあり ます。いずれにせよ、マイクアンプ、AFパワーアンプ、コンバータ等、外部に 接続するデバイスの側でもゲインや出力レベルがある程度調整できないと、うま くレベルを合わせられないことがあると思います。

コンバータ

前項に記したように、サウンドカードの扱う12kHzの信号と455kHzなどの間の 周波数変換を行なうコンバータが必要となります。このとき注意しなければ ならないのは、サウンドカードの扱う信号が12kHzと低いために、周波数変換時に 発生するイメージ信号(目的信号から24kHz離れたところ)を除去するフィルタが 必要になるということです。たとえば送信の場合、12kHzから455kHzに変換するために 443kHzの局発を使用したとすると、目的出力である455kHz以外に443 - 12 = 431kHzの 成分も出力に現れます。また、局発信号自身の漏れにも注意が必要です(こちらの方が 周波数的には近いですし)。以上のようにイメージ、局発の漏れをカットするために 12kHz/24kHz離れたところで十分な減衰が得られるようなフィルタをコンバータの出力に 挿入します。さいわい455kHzではAM/FM用のセラミックフィルタが比較的容易に 入手可能ですから、それを用いれば良いと思います。 キャリア周波数の設定にもよりますが、私は15kHz帯域のセラミックフィルタを 使いました。あまり狭いフィルタを使用するとDSPならではの広い帯域を楽しむことができません。

変調(送信)時に12kHzのサウンドカード出力をコンバータで455kHzに周波数変換する場合の周波数関係の図

受信の場合もイメージを受信しないように、コンバータに入る前に帯域制限さ れている必要がありますが、既存のトランシーバに接続する場合でしたら、AM モードを選択するなどして適度に帯域制限された信号を取り出してやれば十分 でしょう。

ハイフレ(たとえば8MHz台など)のフィルタのトランシーバの場合も、AM用のクリス タルフィルタが用意されている場合はそれを使うのが良いと思います。私自身 FT-747に接続する際にはオプションのAMフィルタを内蔵し、送信時にはコン バータの出力をそのAMフィルタの入力に接続してイメージを排除し、受信時に もAMモードを選んで、IFアンプのあとから取り出した信号を12kHzにコンバー トしています。

コンバータは、周波数関係とレベル、それにセラミックフィルタやクリスタル フィルタとのインピーダンスマッチングが取れていればどんな回路でも構いま せん。自作派の方なら手持ちの部品等を活用して自由につくって頂ければ良い と思います。ただ、前回プログラムを公開したときに「コンバータの回路図が ありませんか」という問い合わせがそれなりにあったので、参考までに今回新 たに試作した回路図を掲載しておきます。この回路は以前から興味を持ってい たCMOSのアナログスイッチを中心にした回路になっています。具体的な回路は 先達の方の回路(参考にしたものを下記に示す)を適当に切り貼りして手を抜い た、みたいなものなので、「ここの定数おかしいよ」とか「こうした方がいい よ」などの指摘をしていただければ幸いです。

実際に作って動作させてみた結果、受信は問題なくできました。送信に関しては 455kHzのところではちゃんとSSBが聞こえることは確認しましたが、 実際の機械に組み込んで運用するところまではしていません。

click to enlarge

今すでに感じている問題点としては、単電源にこだわったためにHC4053の定格 (単電源の場合6V Max)がネックとなり、OPアンプを定格ぎりぎりかそれを下回 る電圧で使用する羽目になっていることです。OPアンプ用に別に9〜12Vの電圧 を用意するか、正負両電源を用意した方が良いかも知れません。しかし単一電 源もそれなりにメリットがあるので、HC4053の代わりに、より高い電圧(12V) まで使えるHC4066を使うという手もあります。

右下の点線の中の発振回路は、443kHzの水晶を特注する代わりに、入手しやす いクリスタルを使ってコンバータを製作するための回路です。3.579545MHzの TV用のクリスタルを8分周すると約447.44kHzとなりますので、ソフトウェアの 設定でIF周波数を7560Hzあたりに設定すると、水晶を特注することなく使え る....はずです。自分ではまだ試していませんが。

それから特に送信時ですが、OPアンプやアナログスイッチの動作範囲を考えると、 かなり高いレベルの信号(1-2Vrms近く)まで入力することができるはずですが、 出力側のセラミックフィルタのところでは、電圧でその半分程度に なるとしても、通常想定されているレベルよりは高いと思いますので、 どの程度までなら歪み無く通過させられるのか検証が必要かと思います。

参考にした回路は、

などです。

プログラムの使用方法

サウンドカードの設定

ここでは一般的なWindowsのボリュームコントロールのパネルの例で説明します。 高価なサウンドカードでは専用のコントロールソフトが提供されている ことが多いのでそちらのマニュアルを参照してください。

まず、再生の方ですが上図のように、メインのボリュームコントロールとWAVE の出力のみを有効にし、他はミュートにしておきます(最近のものだとフロン ト/リアとかもあるかも知れませんが、そのあたりの扱いは個々のカードのマ ニュアル等を参照してください)。レベルはWAVEは最大あたりでいいと思いま すが、メインのボリュームは最初は低めにして様子を見た方が良いと思います。

録音(キャプチャ)の方は図のようにライン入力を選択し、レベルはとりあえず1/2〜3/4あたりにしておきます。 本当はDSsbPのパネルで各チャネルの入力レベルがどのくらいになっているのかモニターできるような レベルメータをつけるべきなのですが、現在は用意していませんので、本プログラムを 動かす前にWaveSpectraなどでどの程度の入力になっているか、レベルオーバーしていないか確認しておいた方が良いでしょう。WaveSpectraや、同じefu氏によるWaveGeneは非常に便利です。

DSsbPの起動と使用法

動作環境

現在動作を確認しているのは、Windows XPとLinux (kernel 2.4/2.6)のみです。 実際に動作させたマシンのスペックは、Pen4 3.0GHz/1GB RAMのデスクトップと、 Centrino 1.2GHz / 512MBのノートPCのみですが、信号処理の部分だけなら 6年前のCeleron 400MHzでも動いていたので、GUI等が加わったとは言え、 最近の普通のスペックのマシンなら大抵動くのではないかと考えています。

インストール

下の方にあるリンクからDSsbPプログラム一式をダウンロードし、適当な場所で 展開してください。'bin'ディレクトリの下に実行ファイルdssbp.exeが、 'src'ディレクトリの下にソースファイル一式とwidestudioでの開発に必要な プロジェクトファイル等があります。

起動

エクスプローラからdssbp.exeをダブルクリックして起動してください。 図のようなパネルが出るはずです。サウンドカードのオープンに失敗した 場合はダイアログが出ます。

以下、簡単にボタン等の説明をします。

あとは実際に動作させて、レベル調整等を行なってください。

既知の問題点など

すでにわかっている問題点等としては、 こんなところですが、まだまだ色々バグ等はあると思います。

また、特にヘッドフォンを使用される場合は耳を痛めないよう注意してください。 上記のポップノイズもそうですが、設定がうまく行かず、最初全然音が出ないとき、 往々にしてボリューム等のレベルを最大にしてしまいがちです。 そうして、他の設定を色々いじっているうちに突然大きな出力が出て びっくりするというようなことがしばしばあります(自分の経験から)。 ヘッドフォンやスピーカも大切ですが耳を痛めないよう に注意されてください。

上記を含めて、 このソフトウェアおよびこのサイトで紹介している情報によって 何らかの障害が生じたとしても著者はいっさい責任を負うことができません。 ご自分の責任での使用をお願い致します。

もし質問等がありましたら出来るだけお答えしたいと思います。 私のブログのコメント欄や メール(コールサイン@arrl.net)等で連絡お願いします。 間違いのご指摘や機能の提案などもありましたらそちらもよろしくお願いします。

変調波形(参考)

click to enlarge
Mode:USB, BW: 200-3000Hz, Carrier=12kHz
マイクに向かって「あ〜」と喋ったとき。 別のサウンドカードでキャプチャ、WaveSpectraによるスペアナ表示。

ダウンロード

今後の課題

謝辞

開発にあたって利用したフリーソフトの作成者の方々、参考にさせて いただいた本やWeb上のハード/ソフトに関する情報の著者の方々、 そしてQSOでレポートをいただいた方々に感謝します。
Goto Top