無線とSDR
RFSoCの直接RFサンプリングとデジタルフロントエンドから、OFDM、LDPCおよびポーラー復号器、5G NRブロック、FPGAオフロードを伴うGNU RadioとUSRPまで、FPGAが無線信号チェーンをどう担うかを解説します。
概要
ソフトウェア無線(SDR)は、信号チェーンのできるだけ多くをアナログハードウェアからデジタル処理へ移します。アンテナとソフトウェアの間には、どんなプロセッサも追いつけない数百メガサンプル毎秒の信号区間が依然として存在し、その区間こそFPGAの居場所です。このハブは、無線機、測定器、レーダー、スペクトラムセンシングを構築するエンジニアと、信号が搬送波になると何が変わるのかを理解したいDSPエンジニアのためのものです。
この分野には2つの極があります。一方の端は研究・趣味のSDRで、USRPなどのフロントエンドがGNU Radioを動かすホストにサンプルをストリームし、FPGAは間引きとフレーミングだけを行います。もう一方の端は5Gの無線ユニットで、RFSoCが帯域を直接デジタル化し、FPGAが物理層全体を実行します。商用の仕事の大半はその中間にあり、どのブロックがハードウェアに置く価値があるかを決めるのがスキルです。
重要な考え方
直接RFサンプリングとデジタルフロントエンド
AMDのZynq UltraScale+ RFSoCは、数ギガサンプル毎秒でサンプリングするADCとDACを、MPSoCおよびファブリックと同じダイに集積しています。それほど速いコンバータがあれば、2 GHzや4 GHzの信号をアナログミキサーなしで直接サンプリングでき、ベースバンドへのダウンコンバージョンはNCOで駆動されるデジタルミキサーで行われます。RFデータコンバータブロックにはそのミキサーと間引きフィルタのチェーンが含まれており、ファブリックは扱いやすいレートの複素ベースバンドストリームを受け取ります。第3世代とZynq RFSoC DFE製品は、ハード化されたデジタルフロントエンドブロック(デジタルアップ・ダウンコンバージョン、クレストファクタ低減、デジタルプリディストーション)を追加しています。これらは標準的な無線ユニット機能で、さもなければファブリックの大半を食い尽くすものです。Alteraなどは、ダイ上のコンバータではなく外部コンバータへのJESD204リンクを通して同様の統合を提供しており、AMD以外の設計の大半はその経路で動作しています。
OFDMパイプライン
Wi-Fi、LTE、5G NRで使われるOFDMは、広いチャネルを多数の狭いサブキャリアに分割し、逆FFTでそれらをまとめて変調します。受信パイプラインは固定機能ブロックの連なりです。タイミング・周波数同期、サイクリックプレフィックス除去、FFT、既知のパイロットシンボルからのチャネル推定、等化、各サブキャリアの軟判定ビットへのデマッピング、そして復号です。各ブロックはよく理解されたDSP構造なので、OFDM受信機は/topics/dsp/で説明する部品から組み立てるストリーミングFPGA設計によく合います。可変部分(帯域幅、サブキャリア間隔、5G用語でいうニューメロロジー)があるため、パラメータ化が主要な設計課題になります。
チャネル符号化: LDPCとポーラー
5G NRはデータにLDPC符号を、制御チャネルにポーラー符号を使います。LDPC復号器はチェックノードと変数ノードの間で一定の反復回数だけメッセージを受け渡し、5G符号の準巡回構造は、並列処理ユニットの行とバレルシフト式メモリとしてFPGAにマッピングされます。スループットは並列度に比例し、ギガビット毎秒の復号器は数十万LUTかハードブロックになります。AMDがまさにこの理由で一部のRFSoC製品に軟判定FECハードブロックを提供しています。ポーラー復号器は逐次除去リスト復号を使い、より逐次的でハードウェアには扱いにくいものです。どちらの復号器もゼロから書くのは本格的なプロジェクトです。ベンダーIP、商用IP、いくつかのオープンソース実装が存在します。
SDRフレームワークとFPGAオフロード
GNU Radioは、ブロックからソフトウェアで信号チェーンを構築するための標準的なオープンソースフレームワークです。Ettus Research(NIの一部)のUSRPファミリが一般的なフロントエンドで、そのFPGAが間引き、補間、フレーミングを実行し、RFNoCがUSRPのFPGAに自作ブロックを載せてGNU Radioのフローグラフに接続するためのフレームワークを提供します。その他のハードウェアは、FPGAをまったく持たない安価な受信機から、小さなFPGAを持つADALM-PlutoやLimeSDR、本格的なRFSoCボードまでさまざまです。判断は常に同じです。高速・固定・高レートの処理はFPGAに残し、低速・柔軟・低レートの処理はホストに移します。マイクロ秒で応答しなければならないMACのような、レイテンシに敏感なループもハードウェアに置くべきです。
どこから始めるか
- /learn/beginner/04-registers-clocks-and-state/と/learn/beginner/09-memories-block-ram-and-fifos/は、あらゆる受信チェーンに必要なパイプラインとバッファを扱います。
- DSPハブ/topics/dsp/は、このハブが前提とする算術、NCO、CICフィルタ、FFTを扱います。
- SoCハブ/topics/soc-fpgas/は、RFSoCのプロセッサ側を説明します。
NCOとデジタルミキサー、OFDMシンボル同期器、最初のRFSoCループバックに関する中級レッスンは準備中です。
ツールとベンダー
| プラットフォーム | FPGA | コンバータ | ソフトウェア | ハブ |
|---|---|---|---|---|
| Zynq UltraScale+ RFSoC、RFSoC DFE | AMD MPSoCファブリック | ダイ上、数GS/sで最大14ビット | Vivado、Vitis、PYNQ | /vendors/amd/ |
| 外部コンバータ付きAgilexおよびStratix 10 | Altera | 外部ADC・DACへのJESD204B/C | Quartus Prime、DSP Builder | /vendors/altera/ |
| USRP X410、N3xx、B2xx | AMD(各種) | ボード上 | UHD、RFNoC、GNU Radio | /vendors/amd/ |
| ADALM-Pluto | AMD Zynq 7000 | AD9363 | libiio、GNU Radio | /vendors/amd/ |
| LimeSDR | Altera Cyclone、Lattice(Mini 2.0) | LMS7002M | LimeSuite、SoapySDR、GNU Radio | /vendors/altera/、/vendors/lattice/ |
コンバータの分解能とサンプルレートは製品によって異なります。該当するRFSoC世代のデータシートを確認してください。
よくある間違い
- どのナイキストゾーンに入るか、アンチエイリアスフィルタが合っているかを確認せずに信号を直接サンプリングする。
- できるだけ早く間引くのではなく、チェーン全体をコンバータレートで動かす。
- コンバータのクロックジッタを無視する。高い入力周波数では、ADCの分解能よりもジッタの方がノイズフロアを決めます。
- チャネル復号器を過小評価する。LDPC復号器はブロックではなくプロジェクトです。
- 運びきれないインターフェースで生サンプルをホストにストリームし、ソフトウェアのせいにする。
- 無線機の送信は合法でなければならないことを忘れる。ダミーロードかシールドボックスに向けてテストしてください。
さらに深く
- AMD DS889, Zynq UltraScale+ RFSoC Data Sheet: Overview: 製品ごとのコンバータ数とレート。
- AMD PG269, Zynq UltraScale+ RFSoC RF Data Converter: コンバータブロックのミキサー、間引き、設定インターフェース。
- 3GPP TS 38.212, NR Multiplexing and channel coding: LDPCおよびポーラー符号の定義。
- GNU Radio documentation: フレームワーク、チュートリアル、ブロックリファレンス。
- Ettus UHD and RFNoC manual: USRPドライバとFPGAブロックフレームワーク。
- Harris, Multirate Signal Processing for Communication Systems: 上記すべてのチェーンの背後にあるデジタルフロントエンドの算術。