トピックハブ

信号とスペクトラム

無線エンジニアが日常的に使う信号処理。複素ベースバンドとIQサンプル、サンプリングとエイリアシング、スペクトラムの読み方、フィルタ、パルス整形、デシベルでの計算を扱います。

更新 2026年11月15日 · 複素ベースバンド、IQサンプル、サンプリング、エイリアシング、FFT、窓関数、パルス整形、デシベル

概要

最近の無線機がADCの後段で行う処理は、ほぼすべてが複素数に対する離散時間信号処理です。3.5 GHzに同調した受信機は、3.5 GHzの波形そのものを処理するわけではありません。処理するのは、その搬送波の振幅と位相が時間とともにどう変化するかを表す複素サンプルの列です。この表現に慣れ、そのスペクトラムを示すFFTと信号を整形するフィルタを使いこなせるようになれば、物理層の残りの部分は少数の演算の変形として理解できます。

このハブでは、それらの演算をまとめます。PythonやCは書けるもののIQデータを扱った経験がないエンジニアと、ベースバンドチームが使うDSPの用語を身につけたいRFエンジニアを対象としています。

重要な考え方

複素ベースバンドとIQ

通過帯域信号は x(t) = Re[s(t) exp(j2π fc t)] と書けます。ここでfcは搬送波周波数、s(t)は複素ベースバンド信号です。s(t)の実部が同相成分I、虚部が直交成分Qです。直交ミキサは、下図のように受信信号にfcのコサインとサインをそれぞれ掛け、両方の積を低域通過フィルタに通すことでIとQを取り出します。

s(t)は複素数なので、そのスペクトラムは0 Hzに対して対称である必要がありません。負の周波数も実際の情報を持っており、搬送波より下側の帯域にあたります。サンプルレートfsのIQサンプルの列は、同調周波数を中心に−fs/2から+fs/2までの幅fsの帯域を表します。アナログ回路の不完全性は特徴的な形で現れます。DCオフセットは0 Hzにスパイクを生じます。IとQの間の利得や位相の不整合は、各信号の鏡像を0 Hzを軸にした反対側に生じます。

RF inLO fc90°cos(2π fc t)−sin(2π fc t)LPFLPFADCADCサンプルクロック fsI[n]Q[n]I + jQ複素サンプル
直交ダウンコンバータ。RF入力を分岐し、搬送波周波数fcの局部発振器のコサインと負のサインをそれぞれ掛けます。低域通過フィルタで和周波数成分を除去し、fsでクロックされる2個のADCでI系統とQ系統をサンプリングします。この2系統の組が1本の複素サンプル列になります。

サンプリングとエイリアシング

標本化定理によれば、帯域幅Bに制限された信号は、毎秒2B個の実数値で完全に表せます。実信号の場合、これは最高周波数の2倍、すなわちナイキストレートより速くサンプリングすることを意味します。複素サンプリングでは、各サンプルが2つの実数を持つため、毎秒fs個の複素サンプルで帯域幅fsをカバーできます。帯域外のエネルギーはエイリアシングとして折り返し、目的の信号に重なります。これは後から取り除けません。そのため、すべてのADCの前にアナログのアンチエイリアスフィルタを置き、すべての間引き(デシメーション)の前にデジタルの低域通過フィルタを入れる必要があります。

実際に使える帯域幅はfsよりいくらか狭くなります。現実のフィルタには遷移帯域が必要だからです。IQデータを記録するときは、サンプルレート、中心周波数、サンプル形式を一緒に保存してください。SigMFは、まさにこの目的のためのメタデータファイルを定義しています。

スペクトラム、窓関数、デシベル

離散フーリエ変換をFFTで計算すると、N個のサンプルが、fs/N間隔のN個の周波数ビンに変換されます。サンプルレート1 MHz、N = 1024の場合、ビン幅は約977 Hzです。有限長のサンプルブロックには暗黙のうちに矩形窓が掛かっており、純粋なトーンが多数のビンに広がります。Hann窓のようなテーパ付きの窓は、メインローブが広がりピークが下がる代わりに、この漏れを減らします。Hann窓はトーンのFFTピークを約6 dB下げ、等価雑音帯域幅を約1.5ビンに広げます。多数のFFTを平均すると(Welch法)、ノイズフロアが安定します。

スペクトラムはデシベルで読みます。dBで表した比は電力比の10 log10なので、3 dBは約2倍、10 dBは10倍です。dBで表した利得と損失は足し算できます。電力はそうはいきません。−80 dBmと−90 dBmの2つの信号の和は約−79.6 dBmで、これはミリワットで計算してからdBmに戻した値です。生サンプルのFFTはフルスケール基準のdB(dBFS)で表されます。既知の信号源で校正して初めてdBmになります。

フィルタとパルス整形

有限インパルス応答(FIR)フィルタは厳密な直線位相を持たせることができます。そのため、すべての周波数を等しく遅延させ、シンボル波形を歪ませません。無限インパルス応答(IIR)フィルタは、少ない係数で同じ選択度を実現できますが、位相を歪ませます。無線機のベースバンド処理系の大半はFIRフィルタを使い、リサンプリングにはポリフェーズ構成をよく用います。

パルス整形は、各シンボルが使う帯域幅を決めます。ロールオフ率βのレイズドコサインスペクトラムはシンボルレートの(1 + β)倍の帯域を占有し、正しいタイミングでサンプリングすれば符号間干渉がゼロになります。実際のシステムではこれを2つのルートレイズドコサインフィルタに分け、送信機と受信機に1つずつ置きます。こうすると受信フィルタが、判定点のSNRを最大にする整合フィルタにもなります。うまくいったかどうかはアイパターンで確認できます。

どこから始めるか

まず/learn/beginner/02-complex-baseband-and-iq/から始め、次に/learn/beginner/06-pulse-shaping-and-matched-filters/に進んでください。/learn/beginner/10-recording-and-reading-iq/ではIQファイルの保存と再読み込みの方法を、/learn/beginner/03-decibels-and-link-budgets/ではdB計算の演習を扱います。マルチレートフィルタリングを扱う中級レッスンは準備中です。

ツールとプラットフォーム

ツール 用途 ライセンス プラットフォーム
NumPy FFT IQ配列のFFTとスペクトラム BSD-3-Clause /platforms/opensource/
scipy.signal フィルタ設計、窓関数、Welch法によるスペクトラム、リサンプリング BSD-3-Clause /platforms/opensource/
GNU Radio ストリーミング処理のフィルタ・リサンプラ・FFTブロック(シミュレーションまたは実機) GPL-3.0 /platforms/gnuradio/
liquid-dsp ソフトウェア無線(SDR)向けのフィルタ・リサンプラ・NCO・モデムを集めたCライブラリ MIT /platforms/opensource/
SigMF 記録したIQファイル用のメタデータ形式 仕様はCC-BY-SA-4.0 /platforms/opensource/

同じフィルタを固定小数点ハードウェアで実装する方法は、FPGA Guideのハブ「DSP on FPGA」を参照してください。

よくある間違い

  • numpy.fft.fftshiftを使わずにFFTをプロットし、0 Hzが左端に、負の周波数が右端に表示される。
  • IとQを取り違え、スペクトラムが0 Hzを軸に反転する。
  • 先に低域通過フィルタを通さず、N個おきにサンプルを残すだけで間引きする。
  • dBFSをdBmとして読む。あるいは、FFTサイズ・窓関数・平均化の条件が異なるスペクトラム同士を比較する。
  • 電力をdBのまま足す。線形値に変換して足し、dBに戻す。
  • サンプルレートと占有帯域幅を混同する。

さらに深く