私のSDR-1000はPAオプションが入っていないので送信出力は1Wです。アンテナも貧弱なのでほぼ受信専用。交信はほとんどあきらめていて、ローカルと1度つながったことがあるだけでした。PAオプションを追加することも検討してはいるのですが、手元に友人からもらった不動のFT-747があって、PAユニット(10W)は生きているので、これに接続することにしました。週末の夜に作業をして、見栄えはあまりよくないのですが、何とかパワーが出るようになりました。これからはSDR-1000でも交信できる機会が増えそうです。
ALSAの設定で困っているらしいGの人がいたので、mixerの設定を伝えてみたが、どうやってもうまくいかないらしい。役に立てなくて残念。一方その人は他のカードではちゃんとLinux用のコード(DttSP)が動いているらしい。こちらでは前にも報告した通り、いまいち不安定で、デスクトップを切替えたりするとjackからの入力を失ってホワイトノイズだけになってしまう。現用しているKnoppixはデフォルトでカーネル2.4系と2.6系が用意されているが、私は前からの経緯もあって2.4系のカーネルを自分の環境に合わせてconfigし、コンパイルして使ってきた。それをふと思い立ってデフォルトの2.6系カーネルで起動してみたら、なんとほとんど問題なく動くではないですか! その辺の経緯と、もうひとつの問題であるpyhwという主にハードウェアのコントロール用のプログラムのレスポンスが遅いということを続けてMLに投稿したら、Linux用コードの作者の人がでてきて、2.6ではプロセススケジューラが変更になっていること、ディストリビューションによってはXのプロセスの優先度を高くしていることを教えてくれた上、pyhwのコードの遅い理由の説明もしてくれて、新しいソースコードを送ってくれるとのこと。投稿してみるもんですね。
しばらくぶりの更新ついでに、今やってみたいと思っていることなど。SDR-1000は結構な値段がしますし、もっと簡単なものでソフトウェアラジオの遊びはできないかと思っています。といっても特にオリジナルなものでは全然なくて、SDR-1000と基本は同じだけれど、簡単に入手できる部品だけ使うということと、ローカル発振を固定にするというものです。SDRー1000の心臓部であるQSDに使っているバススイッチは実は非常に安いものらしいですし、Digikeyから通販で買えるようなのですが、秋葉では私は見たことがありません。またアンプ類は少々値の張るものが使われています。その辺をQSDはHC4052で、OPアンプは5532あたり、RFアンプは無しか安いMMIC(upc1651Gとか)でと考えています。性能は落ちるでしょうが、低いバンドでは十分ではないかと思いますし、どのくらい使えるか試すのも面白いかなと。
それから、局発が固定で困らないのかと思われるかも知れませんが、サウンドカードで扱える帯域の分はソフトウェアの方で自由に動かせますので、一般的な48kHzのカードであれば+-24kHz(実際は20kHzくらいか)の範囲は使えるわけです。これでもたとえば3.5や7MHzのCWバンドなら十分カバーできますし、192kHzのカードなんて使えば7MHzのアマチュアバンドをほぼすべて!カバーできることになります。ただ、水晶を特注するのは面倒なので、まずはどこにでもある14.318MHz(3.579x4)の水晶を使って3.5MHzのフォーンバンドの上端を狙ってみようかと考えています。
それから、局発が固定で困らないのかと思われるかも知れませんが、サウンドカードで扱える帯域の分はソフトウェアの方で自由に動かせますので、一般的な48kHzのカードであれば+-24kHz(実際は20kHzくらいか)の範囲は使えるわけです。これでもたとえば3.5や7MHzのCWバンドなら十分カバーできますし、192kHzのカードなんて使えば7MHzのアマチュアバンドをほぼすべて!カバーできることになります。ただ、水晶を特注するのは面倒なので、まずはどこにでもある14.318MHz(3.579x4)の水晶を使って3.5MHzのフォーンバンドの上端を狙ってみようかと考えています。
久しぶりの更新になってしまいました。なにもネタがなかったからなのですが、今日FlexRadioのMLを見てたら同じようにLinuxのalsaドライバで悩んでいる人がいたので思い切って投稿してみました。ちなみにこのMLは先月からはじまったもので、最近はflexradioのwebサイトにあるフォーラムよりこちらのMLの方がコアな情報が流れているような気がします。
MLでの質問は、私と同じSanta Cruzのサウンドカードを使っている人で、ALSAのドライバのインストールをして、再生はできるけどキャプチャが出来ないというものです。ALSAはデフォルトではすべてのmixerコントロールがoffになっていて再生だけでも悩む人が多いのですが、最近のバージョン(1.0.8あたりから)ではキャプチャ関係のコントロールもより詳細になっていて、そちらの設定をonにしてやらないとうまく行きません。私の場合は'ADC Capture Switch'というパラメータをon にすることで動作するようになったので、その情報を投稿しておきました。ちなみに設定の仕方はたとえば
% amixer cset name='ADC Capture Switch' on
などです。でも実は私のところでは1.0.8はそれでもキャプチャの動作が不安定で、むしろ少し前の1.0.6の方が安定なのでこちらを使っています。1.0.7に至ってはモジュールのロードの途中で固まってしまう始末(Linuxのカーネルは2.4.27です)。また、1.0.6を使った場合でも以前のエントリでも書いたように突然入力が切れてしまうという問題が残っているので、MLへの投稿には、あわせてそれについて「誰かヒントちょうだい」と書いておきました。
MLでの質問は、私と同じSanta Cruzのサウンドカードを使っている人で、ALSAのドライバのインストールをして、再生はできるけどキャプチャが出来ないというものです。ALSAはデフォルトではすべてのmixerコントロールがoffになっていて再生だけでも悩む人が多いのですが、最近のバージョン(1.0.8あたりから)ではキャプチャ関係のコントロールもより詳細になっていて、そちらの設定をonにしてやらないとうまく行きません。私の場合は'ADC Capture Switch'というパラメータをon にすることで動作するようになったので、その情報を投稿しておきました。ちなみに設定の仕方はたとえば
% amixer cset name='ADC Capture Switch' on
などです。でも実は私のところでは1.0.8はそれでもキャプチャの動作が不安定で、むしろ少し前の1.0.6の方が安定なのでこちらを使っています。1.0.7に至ってはモジュールのロードの途中で固まってしまう始末(Linuxのカーネルは2.4.27です)。また、1.0.6を使った場合でも以前のエントリでも書いたように突然入力が切れてしまうという問題が残っているので、MLへの投稿には、あわせてそれについて「誰かヒントちょうだい」と書いておきました。
という内容のエントリを書いたのですが、なぜか反映されませんでした。私の操作ミスだったのかgoo blogの不具合だったのか。まあたいした内容ではなかったのですけど、萎えたのでまた明日以降にでも書きます。
今日は試しに、ひとつ前に使っていた設定のカーネルとOSSドライバでSDRー1000用のDSPコードを動かしてみました。ときどきいきなり突然「ザー」という出力になってしまうという不安定さはあるものの、普段使っているカーネル/alsaドライバの組合せよりはかなりマシです。うーむ、なぜなんだろう。alsaモジュールの設定とかに問題があるのかも知れません。もう一度コンパイル等やり直してみようかとも思っています。どういうエラーが起こっているのかをまず確かめたいのですが、不勉強なものでどうやって調べれば良いのやらわかっていません。先は長そうです。
しかし、Linuxのサウンドドライバまわりの話など、アマチュア無線的にはあまりにニッチな話題ですかね。
しかし、Linuxのサウンドドライバまわりの話など、アマチュア無線的にはあまりにニッチな話題ですかね。
一月ほど前のエントリで紹介した、AB2KTとN4HYによるLinux用コードを一応動作させることができました。リリースされたときにちょっと試してみたところ、全く動かず、放ったままになっていたのですが、週末にふと思い立って再トライしてみました。信号処理のメインのプログラムはjsdrというコマンドになっていて、これをバックグラウンドで動作させておきます。一方アプリケーションプログラムは、名前付きパイプを通してこのプロセスに対するコマンドを通知するしかけになっています。前回動かなかったのは、このコマンドの書式を間違えていたからのようです。というのも、コマンド一覧を示したテキストファイルがあって、前回はこれに書かれている通りに指示していたのです。たとえばモードを変更するのは、
setMode mode [TRX] // mode = USB, LSB, CWL, CWU, etc.
と書かれているので、その通り"setMode USB"とやっても動かなかったのです。ところが実際にはmodeは"USB"などの文字列で指定するのではなく、数字で指定するようなのです。そのためにenums.m4というm4のマクロがあって、この中でUSBは0、AMは6などと定義されているということがわかりました。ですから、"setMode AM"という文字列をm4プロセッサに渡して"setMode 6"に変換してやってからパイプに投げれば指示通りにモードが変更されるというわけです。実は同梱されていたデモスクリプトを読んでいればわかることだったのですが…
これでひとまずニッポン放送やBBCなんかを受信してモードやフィルタをいじって遊んでいたのですが、まだ問題があります。ひとつは、hwというSDR-1000のハードウェアコントロール用のプログラムです。周波数の変更やATTのon/offなどはこちらのプログラムから行なうのですが、どうも動作が不安定で本体のリレーが思ったように切り替わりません。私が以前から使っているhamlibからは、ほぼ確実に制御できているので、hwプラグラムのタイミングに問題があるのかも。もうひとつは、サウンドカードの入力が何かの拍子に突然切れてしまうことです。これは前回LinuxのOSやサウンドドライバを含めた環境をバージョンアップしてから、私の自作のプログラムでも起こるようになっているのでそちらの問題かも知れませんが。
なお、これらのコードは現在ではDttSP Projectのページから入手することができるようです。
setMode mode [TRX] // mode = USB, LSB, CWL, CWU, etc.
と書かれているので、その通り"setMode USB"とやっても動かなかったのです。ところが実際にはmodeは"USB"などの文字列で指定するのではなく、数字で指定するようなのです。そのためにenums.m4というm4のマクロがあって、この中でUSBは0、AMは6などと定義されているということがわかりました。ですから、"setMode AM"という文字列をm4プロセッサに渡して"setMode 6"に変換してやってからパイプに投げれば指示通りにモードが変更されるというわけです。実は同梱されていたデモスクリプトを読んでいればわかることだったのですが…
これでひとまずニッポン放送やBBCなんかを受信してモードやフィルタをいじって遊んでいたのですが、まだ問題があります。ひとつは、hwというSDR-1000のハードウェアコントロール用のプログラムです。周波数の変更やATTのon/offなどはこちらのプログラムから行なうのですが、どうも動作が不安定で本体のリレーが思ったように切り替わりません。私が以前から使っているhamlibからは、ほぼ確実に制御できているので、hwプラグラムのタイミングに問題があるのかも。もうひとつは、サウンドカードの入力が何かの拍子に突然切れてしまうことです。これは前回LinuxのOSやサウンドドライバを含めた環境をバージョンアップしてから、私の自作のプログラムでも起こるようになっているのでそちらの問題かも知れませんが。
なお、これらのコードは現在ではDttSP Projectのページから入手することができるようです。
SDR-1000のコントロールにはパラレルポートを使用します。しかし、パラレルのケーブルは太くて扱いにくい上に長くなると誤動作を起こすという問題がありますし、最近のノートパソコン等ではパラレルポートの無いものがほとんどです。世の中にはUSBをプリンタポートに変換するアダプタはいくつもあるのですが、パラレルポートの代わりとしてちゃんと使えるものはほとんど無いようです。Linuxでも、ある特定のチップを用いた変換アダプタに関してはパラレルポートとして使うことができるようなのですが、いかんせん古いチップのようで、それを使った変換アダプタを私は見かけたことがありません。
そんなわけでこの「パラレル <ー> USB変換アダプタ 」は随分前からリクエストの多かったものなのですが、ようやく販売が開始されました。詳細はFlexRadio社のProductsのページを御覧ください。尾値段は59ドルです。
うっ、しかしこれのLinux用のドライバはきっとまだ無いのだろうなあ....
そんなわけでこの「パラレル <ー> USB変換アダプタ 」は随分前からリクエストの多かったものなのですが、ようやく販売が開始されました。詳細はFlexRadio社のProductsのページを御覧ください。尾値段は59ドルです。
うっ、しかしこれのLinux用のドライバはきっとまだ無いのだろうなあ....
前回のエントリで紹介した手紙に書かれているように、SDR-1000にはいくつかのゲイン設定項目があって、それが性能に影響を及ぼすということなのですが、あれだけを読んでもいまひとつイメージがつかめないと思うので、SDR-1000(RFEボード付き、受信時)のブロックダイアグラムを書いてみました。
見ていただければだいたいわかると思うのですが、BPFのあとにON/OFF可能な10dBのATTと常時接続されているRFプリアンプ、LPFと続きます。そのあとのバススイッチを用いたQSD(Quadrature Sampling Detector、Tayloe detectorなどとも呼ばれる)が心臓部で、DDSの局発からの信号によりRF信号をサンプリングすることによってベースバンドの信号(互いに90度位相のことなるI/Qの二つ)に変換します。このあとのINAというのは、ローノイズのインスツルメンテーションアンプ(TI社のINA163)で、これでI/Qそれぞれ増幅されたあとサウンドカードのライン・インに入力されます。INAのゲインは0dBまたは26dBに切替えることができます。
従来のPowerSDRソフトウェアでは、"ATT","Gain","IF"の3つのパラメータ設定の場所があり、ATTは10dBATTのon/off、"Gain"はINAの0/26dBの切替え、"IF"はサウンドカードの入力レベル調整のことを示していました。
前回紹介した手紙によるとARRLのラボはINAのゲインの切替えをPreAMPのon/offと勘違いしているということと、"IF"で設定されるカードの入力レベルの設定が適切でないと主張しているようです。
そういうこともあってか、新しいPowerSDR1.1.7からは従来のゲイン設定のやりかたを変更しています。今までの3つの設定項目をやめ、あらたに"Preamp"という1つの項目にまとめたのです。その設定は次の4つの値(HIGH/LOW/MED/OFF)の選択になっています。
HIGH: ATT=off, INA=26dB
LOW: ATT=off, INA= 0dB
MED: ATT=on, INA=26dB
OFF: ATT=on, INA= 0dB
さらにサウンドカードの入力レベル(従来の"IF")についてはメインのパネルではなく、設定パネルの"Line-in Gain"という項目で設定するように変更になっています。
この手紙の中に示されている測定結果を見るとMEDの設定が通常のHFの受信では最適のように思えます。もちろん個々のアンテナや受信状況によって異なるでしょうが。
QSTでのレビューの結果を受けて、FlexRadioからQSTの編集部に手紙を送ったそうです。
その内容は同社のWebサイトで公開されています(Letter to QST Editor)。PDFファイルで5ページ近くあるもので、例によって斜め読みですが、概要を紹介してみます。
内容はおもにダイナミックレンジの測定結果について、FlexRadio社で様々なサウンドカードを用いてテストした結果とARRLの測定値で約10dB程度の違いがあるということと、それをもたらしたと推定される理由に関してです。
もっとも大きな理由としているのは、PowerSDRソフトウェアの設定(ゲインコントロール)で、ARRLがテストを行なった2004年の11月の時点ではそれに関して十分にドキュメントが整備されていなかったために適切なセッティングの情報がARRLに与えられていなかったこと、さらに3月現在のバージョンのソフトウェアでは最大のダイナミックレンジを得るために重要な設定がより簡略化されていると述べています。
従来のPowerSDRでは、ゲインに関するコントロールとして"ATT"と"Gain"と"IF"という3つの設定箇所がありました。"ATT"はフロントエンドのトップ(RFEボードのプリアンプの前)に入る通常の意味でのアッテネータ(10dB)であり、"Gain"というのはTayloe detectorの後に入るベースバンドのアンプのゲイン(0/26dBの二択)、そしてIFというのはサウンドカード自身の入力のゲインのコントロールです。それらに関してARRLのテストでは最適な設定がなされていなかったとFlexRadio社では考えていて、それを次の4つの項目で述べています。
1. ARRLのテストではGainの設定をRF プリアンプのon/offと解釈しているが、Gainはdetectorの後のアンプのゲインであってRFプリアンプとは関係がない。
2. サウンドカード入力レベルのコントロールである"IF"の設定が明らかに最適でなかった。この設定はノイズフロアを上げない範囲で可能な限り低く設定すべきものであって、これとGainの設定の組合せは、最大のダイナミックレンジを得るために非常に重要である。ARRLのテストで使用されたAudigy2 ZS(って書いてあったかなあ?)では"1"にセットすべきである。
3. SDR-1000ではNF=1.9dB、ゲイン28dBのプリアンプがつねに入っている。アンプを入れているのはdetectorの信号源インピーダンスを一定にするためなのだが、このアンプの感度はHFでの使用には高過ぎるので通常は10dBのATTをONにしたほうが良い。
4. すべてのダイナミックレンジの値はサウンドカードのダイナミックレンジがほとんどそのまま反映される。Audigy2 ZSはコンシューマ向けの24bitカードとしてはベストのものではあるが、プロ用のカードを使用すればもっと高いダイナミックレンジを得られる。FlexRadio社としては近くこれらのプロ用カードをサポートするつもりである。
その後、FlexRadio社でAudigy2 ZSを含む種々のカードでの測定結果がゲインの設定パターンごとに示されています。確かに最適な設定では、ARRLの測定結果に比べて、3rd IMD DRで4~5dB、IP3で10dB程度良くなっています。詳しい結果については原文を御覧ください。
手紙の内容はもう少しあるのですが、息切れしたのでまた別のエントリででも。
その内容は同社のWebサイトで公開されています(Letter to QST Editor)。PDFファイルで5ページ近くあるもので、例によって斜め読みですが、概要を紹介してみます。
内容はおもにダイナミックレンジの測定結果について、FlexRadio社で様々なサウンドカードを用いてテストした結果とARRLの測定値で約10dB程度の違いがあるということと、それをもたらしたと推定される理由に関してです。
もっとも大きな理由としているのは、PowerSDRソフトウェアの設定(ゲインコントロール)で、ARRLがテストを行なった2004年の11月の時点ではそれに関して十分にドキュメントが整備されていなかったために適切なセッティングの情報がARRLに与えられていなかったこと、さらに3月現在のバージョンのソフトウェアでは最大のダイナミックレンジを得るために重要な設定がより簡略化されていると述べています。
従来のPowerSDRでは、ゲインに関するコントロールとして"ATT"と"Gain"と"IF"という3つの設定箇所がありました。"ATT"はフロントエンドのトップ(RFEボードのプリアンプの前)に入る通常の意味でのアッテネータ(10dB)であり、"Gain"というのはTayloe detectorの後に入るベースバンドのアンプのゲイン(0/26dBの二択)、そしてIFというのはサウンドカード自身の入力のゲインのコントロールです。それらに関してARRLのテストでは最適な設定がなされていなかったとFlexRadio社では考えていて、それを次の4つの項目で述べています。
1. ARRLのテストではGainの設定をRF プリアンプのon/offと解釈しているが、Gainはdetectorの後のアンプのゲインであってRFプリアンプとは関係がない。
2. サウンドカード入力レベルのコントロールである"IF"の設定が明らかに最適でなかった。この設定はノイズフロアを上げない範囲で可能な限り低く設定すべきものであって、これとGainの設定の組合せは、最大のダイナミックレンジを得るために非常に重要である。ARRLのテストで使用されたAudigy2 ZS(って書いてあったかなあ?)では"1"にセットすべきである。
3. SDR-1000ではNF=1.9dB、ゲイン28dBのプリアンプがつねに入っている。アンプを入れているのはdetectorの信号源インピーダンスを一定にするためなのだが、このアンプの感度はHFでの使用には高過ぎるので通常は10dBのATTをONにしたほうが良い。
4. すべてのダイナミックレンジの値はサウンドカードのダイナミックレンジがほとんどそのまま反映される。Audigy2 ZSはコンシューマ向けの24bitカードとしてはベストのものではあるが、プロ用のカードを使用すればもっと高いダイナミックレンジを得られる。FlexRadio社としては近くこれらのプロ用カードをサポートするつもりである。
その後、FlexRadio社でAudigy2 ZSを含む種々のカードでの測定結果がゲインの設定パターンごとに示されています。確かに最適な設定では、ARRLの測定結果に比べて、3rd IMD DRで4~5dB、IP3で10dB程度良くなっています。詳しい結果については原文を御覧ください。
手紙の内容はもう少しあるのですが、息切れしたのでまた別のエントリででも。