Digital Ssb Processor(仮名)
DSsbPプログラム
パネルの様子
概要
このプログラムは、PCのサウンドカードを用いてデジタル信号処理を行い、
SSBの変復調を行うものです。プログラムの基本的な動作原理は、5年くらい前に書いた
もの とほぼ同じですので、詳しくはそちらも参照してください(そのうち
書き直すつもりではいます)。
少し具体的に動作の概要を説明しますと、
- 変調時はサウンドカードのLINE IN(L channel)から入力した音声信号を処理し、
デジタルPSN変調によってキャリア周波数=12kHz(変更可能)のUSBまたはLSBの信号に
変換し、LINE OUT(L channel)から出力します。
- 復調時はサウンドカードのLINE IN(R channel)から入力した
キャリア周波数=12kHzのSSB(復調はAMも可)信号をデジタルPSN検波によって
音声信号を復調し、LINE OUT(R channel)から出力します。
今回のプログラムは、変調・復調処理のみであり、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で使用する通常のものなら大抵動く
と思いますが、必要な条件は、
- 録音、再生が同時にできること(full-duplex)
- サンプリング周波数が48kHzに設定できること
- ステレオの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をダブルクリックして起動してください。
図のようなパネルが出るはずです。サウンドカードのオープンに失敗した
場合はダイアログが出ます。
以下、簡単にボタン等の説明をします。
- startボタン: 押すと色が緑に変わり、動作状態になります。初期状態は復調モードです。もう一度押すとボタンの色が戻り、動作を中止します。
- TXボタン: 押すと色が赤に変わり、変調モードになります。AM modeを選んでいる
場合には、「まだAM変調は実装されていない」旨のダイアログが出るはずです。
もう一度ボタンを押すと復調モードに戻ります。
- mode選択ボタン: 見ての通りです。希望のモードを選んでください。AMは復調のみです(変調時は選択しないでください。下記の問題点の項参照)。USB/LSBは12kHzのキャリア周波数のところでのupper/lowerと逆転しています。これは現在私が使用しているセットアップでは最終的に反転してしまうためです。そのうち設定で変更できるようにしたいと思います。
- Filter setting: フィルタの帯域を設定することができます。変復調の処理中でも
設定を変更可能です。変更する場合は、下端と上端の周波数の数値を入力し、
applyボタンを押してください。数値を入力したけれど間違ってしまったなど、
変更したくない場合はcancelボタンを押してください。applyを押した場合でも
数値が適正な範囲を越えている場合はその旨のダイアログが出ます。
プログラムの都合上、ここで設定する高域、低域のカットオフ周波数は、
通常用いられる3dB or 6dB落ちの周波数になっていません。
ここで設定した周波数まではフラットということになります。
(つまり通常の表記より広めになりますのでご注意ください)
- IF setting: サウンドカードからの入出力のキャリア周波数を設定できます。
デフォルトは12kHzとなっていますが、今のところ4500Hzから15kHzまで
設定可能になっています。矢印を押すと10Hzごとにup/downでき、信号を
受信させながらゼロインのポイントを探ったりするのに便利です。
数値をダイレクトに入力してリターンキーを押すと1Hzステップで設定できます。
あとは実際に動作させて、レベル調整等を行なってください。
既知の問題点など
すでにわかっている問題点等としては、
- startボタンを押した時、また帯域幅設定変更時に大きめのポップノイズ
を発生する(特にLinux版で大きい)。
- 送信時にAMモードを選択したとき、上述のようにエラーダイアログが出て元のモードに戻ったようにパネル上は見えるが、正常に送信できなくなってしまう。もう一度USBかLSBを選択すると復帰する。
- 帯域の下端を100Hz未満に設定したときの動作がおかしい?。
- 処理の遅れ(レイテンシ)がやや大きい。たとえば実際にマイクに向かって
しゃべったものが変調されて出力されるまでに100ms程度かかります。
処理の遅れというよりはサウンドカードとのデータのやりとりに時間が
かかっていると思われます。現在はLinux版の方がレイテンシは小さいようです。
- portaudioライブラリで各種ドライバやポートが利用できるにもかかわらず、
portaudioが選択するdefaultのポート/ドライバを使用します。
ユーザが選択できるように変更できればと思っています。
また、今のところ私自身の環境でコンパイルしたportaudioライブラリでは、ASIOおよび
WDM-KSではうまく動作しません。
- 設定を保存する機能がない。帯域はともかく、デフォルト以外のIF周波数に関しては保存できないとちょっと面倒かも知れませんね。
- シリアルポートでのPTTコントロールのコードを入れる。
こんなところですが、まだまだ色々バグ等はあると思います。
また、特にヘッドフォンを使用される場合は耳を痛めないよう注意してください。
上記のポップノイズもそうですが、設定がうまく行かず、最初全然音が出ないとき、
往々にしてボリューム等のレベルを最大にしてしまいがちです。
そうして、他の設定を色々いじっているうちに突然大きな出力が出て
びっくりするというようなことがしばしばあります(自分の経験から)。
ヘッドフォンやスピーカも大切ですが耳を痛めないよう
に注意されてください。
※上記を含めて、
このソフトウェアおよびこのサイトで紹介している情報によって
何らかの障害が生じたとしても著者はいっさい責任を負うことができません。
ご自分の責任での使用をお願い致します。
もし質問等がありましたら出来るだけお答えしたいと思います。
私のブログのコメント欄や
メール(コールサイン@arrl.net)等で連絡お願いします。
間違いのご指摘や機能の提案などもありましたらそちらもよろしくお願いします。
変調波形(参考)
click to enlarge
Mode:USB, BW: 200-3000Hz, Carrier=12kHz
マイクに向かって「あ〜」と喋ったとき。
別のサウンドカードでキャプチャ、WaveSpectraによるスペアナ表示。
ダウンロード
今後の課題
謝辞
開発にあたって利用したフリーソフトの作成者の方々、参考にさせて
いただいた本やWeb上のハード/ソフトに関する情報の著者の方々、
そしてQSOでレポートをいただいた方々に感謝します。
Goto Top