详解 IQ 文件
IQ 文件 是一种用于存储调制信号的文件格式,其中包含了调制信号的 I(同相分量,In-phase) 和 Q(正交分量,Quadrature) 数据。这些数据通常是调制信号在时域的表示,广泛用于无线通信、软件无线电(SDR)等领域。
什么是 I 和 Q?
-
I(同相分量,In-phase):
- 是信号与载波的正弦波(cosine wave)分量的幅度。
- 表示信号在载波的相位方向上投影的大小。
-
Q(正交分量,Quadrature):
- 是信号与载波的余弦波(sine wave)分量的幅度。
- 表示信号在与载波正交的方向上的投影。
数学表示:
调制后的信号可以表示为复数形式:
s
(
t
)
=
I
(
t
)
⋅
cos
(
2
π
f
c
t
)
+
Q
(
t
)
⋅
sin
(
2
π
f
c
t
)
s(t) = I(t) \cdot \cos(2\pi f_c t) + Q(t) \cdot \sin(2\pi f_c t)
s(t)=I(t)⋅cos(2πfct)+Q(t)⋅sin(2πfct)
或者
s
(
t
)
=
I
(
t
)
+
j
Q
(
t
)
s(t) = I(t) + jQ(t)
s(t)=I(t)+jQ(t)
其中:
- (I(t)) 是同相分量。
- (Q(t)) 是正交分量。
- (f_c) 是载波频率。
I 和 Q 的复数形式是信号的基带表示,便于数字化存储和处理。
IQ 文件的特点
-
存储内容:
- 包含时间序列的 I 和 Q 分量,通常是离散采样点的值。
- 数据可以以二进制形式(如 16 位整数或浮点数)存储,或者以文本格式存储(如 CSV 文件)。
-
表示的信号:
- 基带信号:表示未调载波的原始调制信号(基带)。
- 中频(IF)信号:表示带有特定频率偏移的调制信号。
-
数据格式:
- 常见格式为交错存储:
I1, Q1, I2, Q2, ...
。 - 每对 I 和 Q 对应一个采样点。
- 常见格式为交错存储:
-
用途:
- 分析信号的调制特性。
- 解调信号以恢复原始数据。
- 查看信号的频谱特性。
如何生成 IQ 文件?
在调制过程中,数字信号被映射到 I 和 Q 两个分量上。这些分量被采样并存储为 IQ 文件。
-
调制过程:
假设输入信号是二进制数据流0, 1, 1, 0
,经过 QPSK 调制(四相移键控)后映射为以下 IQ 数据:(I, Q) = (1, 1), (-1, 1), (-1, -1), (1, -1)
- (I) 和 (Q) 表示调制后的正弦和余弦分量。
-
采样:
调制后的信号经过采样,每个采样点记录对应的 I 和 Q 值。 -
存储:
- 将采样的 I 和 Q 分量存储为交错格式:
I1, Q1, I2, Q2, I3, Q3, ...
- 例如,用 16 位整型或浮点数存储每个分量。
- 将采样的 I 和 Q 分量存储为交错格式:
IQ 文件的常见用途
-
信号分析:
- 分析调制信号的特性(如星座图、误码率)。
- 查看频谱分布,识别干扰和噪声。
-
信号解调:
- 从 IQ 数据中提取调制信息,还原原始数字数据。
-
频谱监测:
- 使用快速傅里叶变换(FFT)从 IQ 文件中计算信号的频谱。
-
模拟信道传输:
- IQ 数据可以被直接用于仿真信道传输过程。
如何查看 IQ 文件?
-
星座图:
- 将 IQ 数据以复数形式绘制在二维平面上。
- X 轴为 I,Y 轴为 Q,点的位置反映了调制信号的特性。
-
频谱分析:
- 使用 FFT 对 IQ 数据进行频谱分析,查看信号的带宽、功率分布等。
-
工具:
- GNU Radio:一个开源的软件无线电工具,可以处理和可视化 IQ 文件。
- Matlab / Python:
- Python 中可以使用
numpy
和matplotlib
分析 IQ 数据。 - 示例代码:
import numpy as np import matplotlib.pyplot as plt # 加载 IQ 数据 iq_data = np.fromfile("iq_data.bin", dtype=np.float32).reshape(-1, 2) I = iq_data[:, 0] Q = iq_data[:, 1] # 绘制星座图 plt.scatter(I, Q, s=1) plt.title("Constellation Diagram") plt.xlabel("I (In-phase)") plt.ylabel("Q (Quadrature)") plt.grid() plt.show() # 计算频谱 fft_data = np.fft.fftshift(np.fft.fft(I + 1j * Q)) plt.plot(np.abs(fft_data)) plt.title("Frequency Spectrum") plt.show()
- Python 中可以使用
总结
- IQ 文件的作用:
- 存储调制后的 I 和 Q 分量,用于信号分析、解调或频谱监测。
- 核心概念:
- I 和 Q 分量是信号的复数表示,分别对应载波的正弦和余弦分量。
- 工具与分析:
- 使用专用工具(GNU Radio、Matlab)或编程语言(Python)分析 IQ 数据,提取信号特性。