APB−1を使ったラジオ受信機(Software Defined Radio)

おじさん工房 TOP へ  APB−1 のページへ  サポート掲示板へ  APB-1 キット頒布中  PRE-1 キット頒布中

■APB−1 ラジオ受信機開発過程

2009/11/29 ラジオ受信機プロジェクト開始
2010/01/17 近況報告 基板デバッグ中
2010/02/05 だいぶんできました。 テストソフト1
2010/03/09 スタンドアローン動作バージョンできました。 テストソフト2
2010/03/23 PRE-1 キット頒布開始します。 PRE−1基板組み立てマニュアル、ソフト一式をアップしました
2010/04/15 実行ソフト、ソース一式をアップしました。
2011/03/05 バグが見つかりました。
2011/10/14 IIR HPF/LOWSHELF フィルターにリミットサイクルがおきていました。
2011/11/02 AT91SAM の CDC ドライバーに対応しました(Window7 専用)。
2012/02/15 COM ポート処理のバグフィックス


2009/11/29

APB−1汎用実験基板プロジェクトも大分落ち着いてきましたので、基板の応用としてラジオ受信機を作り始めました。

スタンドアローンでも、PC操作でもどちらでも使えるものを目指します。

ここに書きましたように、まずプリアンプ基板を作ります。 周波数可変バンドパスフィルターを4組、ゲイン可変プリアンプ(AD8331)をユニバーサル基板に組んだものができました。
ただ、今回作ったものではAPB−1を測定器としても使いたい場合に具合が悪いので、基板化するときは形状を変更する予定です。


■ユニバーサル基板で試作

PRE-1 プロト基板写真

バンドパスフィルターは2ポールタイプで、0.5〜2MHz、2〜8MHz、8〜16MHz、16〜32MHzの4バンドに分けています。 0.5〜2MHzは普通のインダクタを使用し、それ以上の周波数はトロイダルコア(T37−6)に巻きました。 Qは20程度を狙っています。

バンドパスフィルターの中心周波数は8ビットDAコンバーターでチューニング電圧を1〜12Vぐらいまで可変して動かしています。 12Vはスイッチドキャパシタ電圧コンバーターで5Vを3倍圧して作っています。

バンドパスフィルターを通った信号はAD8331で最大43dB増幅します。 AD8331は120MHzの帯域がありますのでFM受信機にも使えそうですが、APB−1のクロックを80MHzから70MHz前後に変えないといけません。 66.6MHzの発振器が手元にありますので時間があったら挑戦することにしましょう。


■BPFの特性

BPF特性1 BPF特性1
BPF特性1 BPF特性1

まだ完全には調整しきれていませんのでリップルがあったりしますが、大体こんな特性になりました。

バンドパスフィルタースルー時を0dB基準にしています。 0dBより上がっているのはAD8331の入力インピーダンスを200Ωに設定してあるため昇圧ゲインがあるからです。 AD8331は200Ωぐらいで使うと特性が良いようですし、昇圧ゲインもあって一石二鳥です。

帯域外で持ち上がったり、ディップしたり、特性があばれていますが、基板化すればもう少しよくなると思います。 シールドも全然していないですし。




2010/01/17

昨年発注していた基板(年末年始をはさんだせいか1ヶ月かかりました)が届き、性能確認を行なっているところです。
前の試作基板から PIN ダイオードを CMOS アナログスイッチに変え、チューニング設定を2つから4つ(1つはアンテナ用)に増やしました。

■デバッグ中

PRE-1 デバッグ中写真

基板形状は APB-1 と同じで、今回の基板と APB-1 を上の写真のようにスタックして使えるようになっています。
ラジオとして使うときはプリアンプ出力と APB-1 の信号入力を BNC ケーブルで接続します。 BNC ケーブルをはずせば APB-1 をいままでと同様に測定器として使うことができます。



2010/02/05

基板のデバッグと平行してC#のテストアプリとFPGAのプログラムを作っていました。

このテストソフトは、APB−1基板単体でも使えます。 今までより性能のよい受信機になります。

テストソフトその1 20100205 (ZIP 161KB)
テストソフトその1(NetFramework 2.0) 20100207 (ZIP 161KB) ←NetFramework2.0バージョン
IIR 3K 20次 20100218 (ZIP 1KB) ← IIR フィルター係数

AT91SAMのフラッシュの変更が必要です。 以下の手順で書き込んでください。

  1. APB−1基板上の FLASH のところにショートピンを挿す。
  2. USBケーブルを挿す。
  3. プログラムの「デバッグ」メニューから「AT91SAMフラッシュ書き込み」を実行し、ZIP を解凍したフォルダーに入っている cmd.bin を選択して書き込む。
  4. USBケーブルを抜き、基板のショートピンをはずす。

上記手順は一回実行すればOKです。
またこの cmd.bin は上位コンパチなので今までどおり測定器としても使うことができます。

■テストソフト画面

テストソフト画面

受信状況によりFIRフィルターとIIRフィルターは係数を変更することができます。
フィルター係数サンプルファイルが解凍したフォルダーに入っていますのでいろいろと試して見ると面白いです。

FIRフィルター係数ファイルはサンプリング周波数156.25kHz、255タップのもので最後に0を足した256係数x2つ分の512個の係数でできています。

IIRフィルターはBiQuad15個が縦続接続されたもの+ゲインブロックになっています。 フィルターの設計は、Cookbook formulae for audio EQ biquad filter coefficientsを参考にしてください。

■FPGA内部ブロックダイアグラム

FPGA ブロックダイアグラム

FPGAには上記ブロックダイアグラムのものを実装しました。 受信機としては基本的なものだけです。

ADCに入力してから周波数変換、CICまではいままでとほぼ同じです。 いままでのAPB−1ではCIC出力をそのままAM復調していましたが、今回はFIRフィルターを追加しています。 これによって帯域外からの折り返しノイズが除去されS/Nがよくなります。

その後ゲインブロックを通ったあと、AM復調、SSB復調し、IIRフィルターで音声帯域制限します。
SSB復調は255タップのヒルベルト変換器を使っています。

■閑話休題



2010/03/09

スタンドアローン動作させるソフトをつくっていましたが、ようやくある程度動くようになりました。

いままでのアプリに実装されていた復調器ではPC側のソフトがすべてのコントロールをしていましたが、スタンドアローン版ではARM(AT91SAM7S321)がコントロールするようになります。 そのため、ARMに簡易OSをのせました。 この簡易OSは前にAVR用に作ったもの(そのまた前はH8用につくったITRONですが...)を移植したものでノンプリエンプティブなものですが、そのかわり必要メモリー量が少なくハード依存性が少ない(ほとんどC言語で書ける)という特徴があります。

スタンドアローン動作させるには周辺回路(スイッチ、ロータリーエンコーダー、LCD)が必要ですが、なくてもPC側から操作できるようになっています。

テストソフトその2 20100309 (ZIP 135KB) ←古いです。 20110305版をお使いください。


ARMのフラッシュの変更、およびデータフラッシュ上にファイルコピーが必要です。 以下の手順で書き込んでください。

■ARMのフラッシュの変更

  1. APB−1基板上の FLASH のところにショートピンを挿す。
  2. USBケーブルを挿す。
  3. APB-1_RADIO.exe を実行し、「デバッグ」メニューから「AT91SAMフラッシュ書き込み」を実行し、ZIP を解凍したフォルダーに入っている radio_main.bin を選択して書き込む。
  4. USBケーブルを抜き、基板のショートピンをはずす。
  5. APB-1_RADIO.exe を一度終了する。

■データフラッシュにファイルをコピー

  1. APB-1_RADIO.exe を実行し、「デバッグ」メニューから「DataFLash読み書き」を実行する。
  2. 一番上のボタン「Read FileSystem」を押し、ファイルがないことを確認する
  3. コンフィグデータ:「Write ConfigData」を押し、「apb-1_radio.bit」を選択し書き込む。
  4. FIR係数データ:「Write FIR data」を押し、「fircoef.txt」を選択し書き込む。
  5. IIR係数データ:「Write IIR data」を押し、「iircoef.txt」を選択し書き込む。
  6. 「Read FileSystem」を押し、ファイルが3つ(FPGAコンフィグ、FIR係数データ、IIR係数データ)ができていることを確認する

上記手順は一回実行すればOKです。

■ファイルシステム画面

ファイルシステム画面

この画面では何回も書き直しているので消去された部分がたくさん見えますが、有効なデータは3つだけです。
新たなデータを書き込むと古いデータは ID 部分だけを消去します(HDD上のファイル消去と同じやり方ですね)。

■テストソフトその2画面

テストソフトその2画面

まだ、メモリー関係(page#、Memory#、Read、Write)、NC(ノイズキャンセラー)は未実装です。

いじってみれば使い方はわかると思いますのでいろいろ変更して試して見てください。
AGCは 10ms ごとにレベル検出していますのでいままでのものに比べ滑らかになったと思います。

■スタンドアローン試作機

フロントパネル写真
フロントパネル上写真
フロントパネル裏側写真
LCD配線写真

動作に不都合がないか、基板はちゃんと収まるか、などの確認のためプラ板でフロントパネルを作って見ました。 高さ8cm、幅19cmです。
木の棒でタクトスイッチを押しています。 ロータリーエンコーダーは秋月で売っている24クリックのものです。

オペレーション

フロントパネル右側の4個+1個のスイッチでメニューを選び、ロータリーエンコーダーで項目を選択します。
PC側アプリからコントロールするときはこれら設定を直接設定しています。

■APB−1基板とスイッチ基板、LCDを接続するためのケーブル

接続ケーブル

PCのIDEケーブルを16ピン、16ピン、10ピンに切断したものです。
端っこの16ピンをAPB−1、CN11に接続、真ん中の16ピンを上の回路図のCN2に接続、端っこの10ピンをLCDに接続します。
LCDとは4ビットモードで接続しますのでコネクターの DA0−3 が LCDの D4−7 につながるようにします。
また、APB−1基板のR50をショートし、RV1に10kをマウントしてください。

■スタンドアローンで必要な回路

フロントパネル回路図

大きな回路図(pdf)はこちらです。

右下のコネクターとそれにつながるスイッチが必要です。
右上の電源制御回路はまだ構想段階です。
左下のオーディオ部分はまだ不要です。 替わりにPC用のスピーカーを使ってください。



2010/03/23

PRE−1基板のキット頒布を開始します。

PRE−1基板を使わなくてもラジオとして動作させることができますが、ADCが12ビットでNFが30〜40dBと悪いのでプリアンプのキット(PRE−1)をつくりました。 プリアンプをつけることによりゲインが40dBのときNFを6dB程度に改善することができます。

PRE−1組み立てマニュアル 20100415(PDF 968KB) ←20100415 差し替えました
PRE−1ソフト一式 20100319 (ZIP 146KB) ←古い
PRE−1回路図 20100319 (PDF 87KB)
PRE−1基板 20100319 (PDF 2611KB) ←レイヤーに分かれています





2010/04/15

ある程度バグも取れ、機能もノイズキャンセラーを除き実装しました。

ノイズキャンセラーは、SSM2000 のように信号レベルやスペクトラムに応じてLPFの特性を変化させるものを考えていましたが、帯域幅が狭い場合にはあまり効果が見込めず、AMの場合はビートノイズが多いので適応型フィルターはどうかななどと考えています。

APB−1_RADIO 実行ファイル一式 20100415 (ZIP 153KB) ←古い
C# ソース一式 20100415 (ZIP 1045KB)
FPGA ソース一式 20100415 (ZIP 11,112KB)
AT91SAM ソース一式 20100415 (ZIP 103KB)


前のバージョンから変わったのは、大きくは、
 1.メモリー読み出し、書き込み
 2.周波数微調整
です。

メモリーは、最大10ページx100で計1000局入ります。

まず最初にPC上のコントロールソフトから、「DataFlash読み書き」を選び、「Write RadioMem」ボタンから「ラジオ局メモリー設定リスト.txt」を選んで書いておく必要があります(最初に1回やればOKです)。 書く前にエディタで自分の好みの局のリストになるように修正しておくとよいでしょう。

その後 SW5(MEM) を押すとメモリー読み出しモードに入ります。 この状態で SW1(P) を押すとページ選択、SW2(M) を押すとメモリー番号選択になります。 もう一度 SW5(ENTER) を押すと通常モードに戻ります。

通常状態で SW5(MEM) を長押し(1秒以上)するとメモリー書き込みモードに入ります。 この状態で SW1(P) でページ選択、SW2(M) でメモリー番号選択、SW3(Nm) で局名入力モードになります。 SW4(Wrt) を押して Wrt の前に三角マークをつけた状態で SW5(ENTER) を押すと書き込まれます。

また逆に記録しているメモリーデータを「Read RadioMem」ボタンでファイルに落とすことができます。 ファイルに落としてから適当なエディターで修正し書き戻すことができます。 特にページ名は本体側で書き込むことができないのでPC上で用意して上記手順で書き込む必要があります。



周波数微調整機能は、SW4(MISC) を押したあと SW2(FAj) を押します。 数値x0.1ppm 分、受信周波数が変化します。

調整は、AM 放送を CW モードで受信して行ないます。 すると AM 放送のキャリアが 700Hz になりますので 700Hz からのずれがなくなるように数値を変化させればその放送局と同じ精度に調整することができます。 1MHzぐらい(AM放送)では 0.1ppm は 0.1Hz に相当しますので、調整値を1変化させるとだいたい 0.1Hz 受信周波数が変化します。

私のところで受信できる放送局を調べたところ、NHK1(594kHz)、NHK2(693kHz)、TBS(954kHz)、文化放送(1134kHz)、ラジオ日経1(3925kHz)、ラジオ日経2(6055kHz)、などが精度が高そうです。 東京近郊の方でしたら電通大の JG2XA がドップラー観測用に出している 5006kHz, 8006kHz が使えます。 また中国が標準電波(5MHz,10MHz)を出していますのでこちらを使っても良いのですが、内部からのかぶりが同じ周波数にあるのでまず AM 放送局で調整したあと標準電波で最後の微調整を行なうというのがよさそうです。
ちなみに私のところでは-6.8ppm(調整値-68)になりました。

700Hz への調整は WaveSpectra を使いました。

WaveSpectraで700Hzをみているところ

WaveSpectraの設定1 WaveSpectraの設定2

サンプルデータ数を多くし、サンプリング周波数を下げてなるべく周波数分解能を上げます。


(注)電源 OFF 時に内部設定を記憶させることを考えていますが、内部設定を保存するソフト及び電源制御回路をまだ作っていませんので今は電源を切るとこの設定は消えてしまいます。 正確な受信周波数が必要な方は調整値を覚えておいて電源ONしたあとに再設定してください。

■アルミでケースをつくりました

ラジオのケース

フロントパネルとリアパネル、スピーカーの取り付け板は80mm幅のコの字アルミです。 底板や天板は1mm厚アルミを折り曲げてつくりました。

フロントパネルには3mm厚のアクリル板を間に挟みフロントパネルにネジが出ないようにしました。 操作SWは6mmアクリル棒で作り、タクトSWにLEDを埋め込んで自照式にしてあります。

PRE−1基板はAPB−1基板の下のアルミシールドの中に入っています。




2011/03/05

いくつかバグが見つかりました。 AT91SAM のフラッシュの書き換えを行なってください。

APB−1_RADIO 実行ファイル一式 20110305 (ZIP 152KB)



変更点は以下のとおりです。
  1. PC 側コントロールソフト(C#) で DataFlash に書き込むとき DataFlash のビジーフラグチェックをしていませんでした。 そのため使う PC によっては DataFlash に正常に書き込みできませんでした(256 バイトおきに書き込めないなど)。

  2. AT91SAM のラジオ制御タスクがラジオ以外(測定器として使うときなど)にも動作しているためオーディオ DA 出力がでませんでした。 FPGA のコンフィグ状態を監視し、ラジオ以外ではラジオ制御タスクを止めるようにしました。

  3. ラジオの設定を変えたときにブチという雑音がでていました。 設定や周波数変更時のミューティング方法を変更しました。




2011/10/14

IIR HPF にリミットサイクルがおきていました。 特にカットオフが 100Hz のときに顕著で、低い周波数のノイズがのっています。

以下の IIR 係数ファイルをダウンロード、解凍し、APB-1_radio の デバッグ → DataFlash読み書き から Write IIR data ボタンを押して係数ファイルを書きかえてください。


IIR 係数ファイル 20111013 (ZIP 5KB)


変更点
  1. HPF を2次から1次に変更しました。 係数ファイルを比べてみると良く分かりますが、2次のときに比べ係数の構成が単純です。 1個の係数でカットオフ周波数を決定しますので係数感度が低くリミットサイクルがおきにくいです。

  2. LOWSHELFフィルター ( オーディオトーン設定での低域調整に使用 ) もリミットサイクルをおこしていたので1次のものに変更しました。 1次の IIR フィルターの設計は、Seven Woods Audio Inc の 「AN-11 First Order Digital Filters--An Audio Cookbook」 を参考にしました。 (2011/10/15 追記)



2011/11/02

Windows7 の cdc ドライバー対応版をつくりました。
XP では Windows の usbser.sys のバグ?のため一部動作しないので Windows7 専用です。


APB−1_RADIO 実行ファイル 20111102(ZIP 78KB)


すでに XP で動作させている場合はこのプログラムを実行するだけでOKです。

他のファイル(FPGAコンフィグ、AT91SAM、フィルター係数など)は、以前の記事の中のものをそのまま使います。



2012/02/15

別の USB シリアル変換をつないでいると COM 番号がずれてしまい正常にオープンできなくなるというバグがあることがわかりました。



実行ファイル以外は以前のものをそのまま使います。




inserted by FC2 system