非職業的技師の覚え書き

JK1EJPの技術的検討事項を中心に記録を残します。

RS-HFIQ(4)Quisk(Windows版)立ち上げ

Quiskとは?

RS-HFIQの試験用SDRバックエンドとして、HDSDRに代わるQuiskの立ち上げに着手しました。クローズドソースのHDSDRに対して、Quiskはオープンソースという違いがあり、学びの対象として勝っています。

Quiskは、N2ADR局 James C. Ahlstrom OMが開発を続けているSDRソフトウェアです。

上記ホームページの「Quiskとは?」から引用します。

Quisk はソフトウェア無線 (SDR) であり、受信機と送信機を制御するソフトウェアです。Quisk は「brisk」と韻を踏んでおり、発音しやすくするために QSK にいくつかの文字を加えたものです。QSK はフルブレークインの CW を意味する Q 符号であり、Quisk は低遅延 CW 運用のために設計されています。SSB や AM でも問題なく動作します。Quisk は Python と C で記述されており、すべてのソースが含まれているため、ご自身で変更することができます。Quisk 受信機は、サンプル データを読み取り、同調し、フィルタを適用し、復調し、オーディオをサウンド カードに送って、外部ヘッドフォンもしくはスピーカーに出力することができます。Quisk 送信機はマイク入力を受け取り、サウンドカードもしくはイーサネット経由で送信機に送ることができます。CW の場合、Quisk はオーディオをミュートし、サイド トーンに置き換えることができます。

...(以下、略)

当局の視点でのQuiskの利点を列挙します。

QuiskはRS-HFIQをサポートしていません。どうすれば良いかを上記ホームページから続けて引用します。

サポートされているハードウェアをお持ちの場合は、Quisk をすぐに使用できます。その他の受信ハードウェアをお持ちの場合は、ファイル quisk_hardware.py を変更して受信機を Quisk に接続する必要があります。たとえば、シリアル ポートで VFO 周波数を変更する場合、シリアル ポートに文字を送信するように quisk_hardware.py を変更する必要があります。ファイル quisk_hardware.py は、習得と使用が非常に簡単な言語である Python プログラミング言語で記述されています。私が保有するハードウェア以外にも使用できるように、Quisk を簡単に変更できるようにしました。

RS-HFIQのオーディオIQ信号はサウンドカード経由でQuiskに接続するため、VFO周波数を変更するシリアルCAT通信のコードをquisk_hardware.pyとして準備すれば良いことになります。幸いなことに、DL1KSV局Volker Schroer OMが既にRS-HFIQ用のquisk_hardware.py(hardware_usbserial.py)を作って公開してくれています。

Linux用のコードですが、USBポートの名前をWindows用に変更するだけでWindows上のQuiskでも動作しました(詳細後述)。Pythonなのでmake(コンパイル&リンク)の必要はありません。

Quisk(Windows版)のインストール

Python環境の準備とQuiskのインストール

最新バージョンの 64 ビット Python 3.9 をインストールする必要があるとのホームページの記述から、64 ビット Python 3.9の仮想環境を準備しました。後はインストール手順に従って、いくつかの Python モジュールを最新バージョンにアップグレードしてから、Quisk をpipでインストールすれば完了です。

HDSDRと比較すると、QuiskのGUIは操作ボタン類を下部にまとめた簡素な造りになっており、改造し易い雰囲気を纏っています。

Quisk's GUI has a simple structure with operation buttons grouped at the bottom.

RS-HFIQ用のhardware_usbserial.pyのインストール

DL1KSV局Volker Schroer OMの上記GitHubから、「Code 」→ 「Download ZIP」でダウンロードし、適当(適切)な場所に保存します。後でQuiskにその任意のパスを参照設定します。

オリジナルコードはLinux用です。

serialport.port = "/dev/ttyUSB0"   ## Linux

serialport.portの指定をWindows表現に変更します。

serialport.port = "COM6" ## Windows

なお、シリアルポート名の番号はWindowsの周辺機器接続状況に応じて変化します。ハードコーディングなのは不便ですが、Pythonなので変更は容易です。

QuiskへのRS-HFIQの登録設定

ここからはGUI上で設定を進めます。

新しいRadioとしてのRS-HFIQの登録

  1. 「Config」ボタンをクリックします。
  2. 「Radios」タグを選択します。
  3. 「RS-HFIQ」(任意)を新しいRadio名としてキー入力します。
  4. 「Add」ボタンをクリックします。
  5. Quiskスタート時のRadioとして「RS-HFIQ」をプルダウンから選択します。
  6. 「RS-HFIQ」タグが作られます。

Registration of RS-HFIQ as a new Radio in Quisk.

ハードウェアファイル(hardware_usbserial.py)のパス設定

  1. 「RS-HFIQ」タグを選択します。
  2. サブ画面の「Hardware」タグを選択します。
  3. 「Change」ボタンをクリックします
  4. 開いたファイルダイアログでhardware_usbserial.pyを選択しパスを設定します。

Path setting to inform Quisk of the location of the hardware file (hardware_usbserial.py).

サウンドドライバの設定

使用するPC周辺機器の構成によって変わります。下記は一例です。

  1. 「RS-HFIQ」タグのサブ画面の「Sound」タグを選択します。
  2. スピーカのドライバを選択します。
  3. スピーカのサンプリングレートを選択します。
  4. マイクのドライバを選択します。
    (HDSDRでは選択できなかったUSB PnP Audio Deviceを選択できました。)
  5. マイクのサンプリングレートを選択します。
  6. RS-HFIQのQSDからの受信IQ信号をPCに入力するサウンドカードのドライバを選択します。(PCから見るともう一つのマイク入力に見えます。)
  7. 受信IQ信号のサンプリングレートを選択します。
  8. RS-HFIQのQSEへの送信IQ信号をPCから出力するサウンドカードのドライバを選択します。(PCから見るともう一つのヘッドフォン出力に見えます。)
  9. 送信IQ信号のサンプリングレートを選択します。

Configuration of sound drivers to Quisk.

RS-HFIQと接続したQuiskの起動

ノイズレベルの確認

ダミーロードに接続したRS-HFIQのIQ信号をQuiskで復調しました。40mバンドで S3 -72.84 dB のノイズレベルでした。

サンプリングレート98kHzのサウンドカードを使用しているため、サンプリング定理からバンドスコープの帯域は48kHz(LO±24kHz)になります。HDSDRと同様に、バンドスコープの中央にキャリア漏れが見られました。その他に、両側の帯域外にアーティファクトと思しき角が立っていました。アンチエイリアスフィルタの性能不足による帯域外から帯域内への折り返し雑音の理屈は分かりますが、帯域外に角が立つ理屈は分かりませんでした。FFTの理屈からは、帯域内パターンが帯域外に繰り返すだけと思っていたのですが・・・。帯域外はクリップする等で表示を制限した方が分かり易いと思いました。

なお、Keith's SDRのサンプリングレートはこの半分の48kHzであり、バンドスコープの帯域も半分の24kHz(LO±12kHz)になります。

Noise level of Quisk connected to RS-HFIQ.

右端のズームスライダで周波数軸を拡大できます。拡大すると、キャリア漏れがツインピークになっていることが分かりました。これはHDSDRと同じ結果で矛盾はありません。RBW(Resolution Band Width)を可変できるHDSDRよりも、Quiskの表示周波数分解能は粗いようです。RBWを変更できるかどうかは不明です。この辺が低遅延のQuiskの軽快さを確保するためにバランスを取っている所かもしれません。

Zoom magnification of the frequency axis of the spectrum.

LSBのディフォルトフィルタは2.5kHzでした。「Rx Filter」ボタンをクリックすると、フィルタの形状を確認できます。

Frequency response of 2.5 kHz filter.

タップ数まで調べることが出来ていませんが、シャープな形状から判断すると、Keith's SDRのFilterConvオブジェクトのタップ数(513タップ)より多いように見えます。

送信仮試験

Quiskの「PTT」ボタンをクリックすると、RS-HFIQフロントパネルのTX LEDがオレンジ色に点灯しました。時間が経過してもCLIP LEDが赤色に点灯することはありませんでした。送信レベルが飽和するような動作はしていないことだけ現時点で確認できました。

気付き LO-Tuneの非同期

2つの「・」ボタンをクリックすると、LOが10kHzステップでUp/Downします。その時に、赤線のTuneマーカとその左のLSBフィルタ帯域幅を表すグレーハッチは移動しません。LO周波数の変更に対してTune周波数は非同期です。

周波数エントリ(図では 7 020 000 Hz)の数字の上側をクリックするとTune周波数がUpし、下側をクリックするとDownします。その時にLOは移動しません。Tune周波数の変更に対してLO周波数は非同期です。

サンプリング定理から48kHz(LO±24kHz)帯域の信号はQuiskに取り込んでいるため、その帯域内の任意の信号を切り取って再生できるというのはSDR受信機の動作としては正しいのかもしれません。しかし、SDRトランシーバの動作としては違和感があります。HDSDRでもLO周波数とTune周波数が上下2段に表示されていましたが、少なくともディフォルト状態で両者は同期していました。Quiskの同期ボタンや同期設定を探したのですが見つかっていません。LO-Tune同期機能が無ければ、改造課題の1つになります。

気付き RS-HFIQ組込みテスト機能の起動不可

Quiskの「Test 1」ボタンでAFトーン信号を発生できますが、Quiskの中で発生させ表示させているだけで、RS-HFIQのテストはできません。RS-HFIQ内蔵のテスト機能を使用してRFトーン信号を発生させるためには、HobbyPCB社提供の「RS-HFIQ Control Panel」を利用する必要があります。

しかし、Quiskが立ち上がっていると「RS-HFIQ Control Panel」は立ち上がりません。逆もまたしかりです。QuiskはOmni-Rigを利用せずにシリアル通信ポートを排他独占するため、当然の結果です。ここにきてOmni-Rigの便利さに気付いた次第です。「RS-HFIQ Control Panel」のテスト機能をQuiskに組み込むことが、もう一つの改造課題になりました。

付録 操作ボタンの調査

操作ボタンは最小限の大きさに留められ、見て機能が分かるラベルが必ずしも付いていません。そこで、ソースコードを検索して、ボタンからコールバックされるイベント関数を割り出しました。イベント関数名が機能が推測する一助になると思います。

スライダ

左にスピーカ音量調整のスライダを1つ配置しています。
右にサイドトーン、Ritスケール、グラフのY軸のスケール、グラフのY軸のゼロ点、グラフのX軸の拡大/縮小の5つのスライダを配置しています。

Table of Quisk slider labels and event functions to be called back.

ボタンパネルの左列1行目

Tune周波数、LO周波数の操作関係のボタンが配置されています。HDSDRのようにマウスホイールによる操作はサポートされていないようです。周波数entryで操作するTune周波数と、BandのUp/Downでステップ操作するLO周波数が同期していないのは上述の通りです。

Frequency adjustment widgets in the first row of the left column of the button panel.

ボタンパネルの右列1行目

右端に数値表示のSメータがあります。

Buttons and numerical S-meter in the first row of the right column of the button panel.

ボタンパネルの左列2行目

バンド切換のボタンが並んでいます。ソースコードが公開されているため、許可されている各バンドの上限及び下限に加えて、バンドプランも設定可能です。

Band switching button on the second row of the left column of the button panel.

ボタンパネルの右列2行目

モード切換ボタンが並んでいます。USBが無いようですが、バンド切換に連動してLSBと入れ代ります。

Mode switching button on the second row of the right column of the button panel.

ボタンパネルの左列3行目

受信に関係する機能のボタンが並んでいます。

Buttons for functions related to the receiver in the third row of the left column of the button panel.

ボタンパネルの右列3行目

フィルタ帯域の切換ボタンが並んでいます。モード切換に連動して、選択可能なフィルタが入れ代ります。

Buttons for switching the filter bandwidth in the third row of the right column of the button panel.

ボタンパネルの左列4行目

送信に関係する機能のボタンが並んでいます。

Buttons for functions related to the transmitter in the fourth row of the left column of the button panel.

ボタンパネルの右列4行目

ボタンパネル上部の画面を切り換えるボタンが並んでいます。

Button to switch the upper screen in the fourth row of the right column of the button panel.