STM32 无专用芯片构建 SDR GPS 接收机
STM32F4 能够实时捕获并处理来自 GNSS 射频前端 MAX2769 的 2 位数据流,采样率为 16.368 MHz。整个从 ADC 到相关运算的链路均在软件中实现——无需 ASIC 或 FPGA——采用 DMA 和优化的位操作。
GNSS 接收机架构
传统 GPS 接收机依赖专用相关器(如 GP2021)来寻找 PRN 码的相关峰值。本项目用 MCU 取代硬件链路:
- 射频前端(MAX2769)将信号以 4.092 MHz 中频数字化
- DMA 将数据捕获到循环缓冲区
- 软件处理:载波擦除、码擦除、相关运算
一个 PRN 周期(1 ms)包含 16368 个采样点——正好每个芯片 16 个采样(1023 个芯片)。位打包数据按每个芯片 2 字节分组。
硬件:MAX2769 前端
MAX2769 在预配置设备状态模式(PGM=1,变体 2)下,无需 SPI 配置即可在 I1 输出一位符号信号。开发板包含:
- 16.368 MHz TCXO
- 3.0V LDO
- J3 上的有源天线
- P5 上的时钟输出
- P3 上的数据输出
频率选择确保完美对齐:16368 / 1023 = 16 采样/芯片。中频理想芯片模式:0b1100110011001100。
STM32F4-Discovery 数据捕获
STM32F4(Cortex-M4,168 MHz,192 KB RAM,1 MB Flash)使用 SPI + DMA 循环模式实现 16 Mbps 数据捕获。
- 双缓冲:4 KB 缓冲区半满/满时中断
- 每个 PRN 2 KB(2046 字节)
- 额外缓冲区用于处理,避免中断 DMA
DMA 代码确保连续接收:丢失哪怕一个字节都会破坏同步。
位优化的 DSP 处理
无浮点单元式处理(16 Msamples/s),借鉴自制 GPS/GLONASS 接收机技巧:用 XOR 取代乘法处理符号数据。
XNOR(反向 XOR)等价于乘法(-1 -1 = 1,-1 1 = -1)。连续 XOR 处理反转。
操作向量化到 32 位字以提升速度。
信号处理链路
- 载波 NCO:生成考虑多普勒、TCXO 误差和 4.092 MHz 中频的 I/Q 谐波。双混频器移至基带。
- 码 NCO:本地 PRN(1023 芯片)插值为 16 采样/芯片。
- 相关运算:输入数据与本地码逐元素 XOR + 累加。
复数 I/Q 形式分离边带。
// 位相关示例(伪代码)
for (i = 0; i < 2046; i += 4) {
uint32_t input = buffer[i];
uint32_t replica = prn_replica[i];
corr += __builtin_popcount(input ^ replica) - 16;
}
资源占用与限制
- 4 个相关通道:168 MHz 下占 ~70% CPU
- RAM:每个通道 12 KB(缓冲区 + 状态)
- 基础版无跟踪或导航数据
- 手动星历初始化
项目在 SNR > 35 dB·Hz 下,冷启动 30–60 秒。
关键要点
- STM32 全软件 GPS 链路——无 ASIC/FPGA
- 位 XOR 胜过乘法:DSP 加速 10 倍
- 16 采样/芯片精确 PRN 插值
- 连续 DMA 捕获对同步至关重要
- F4/F7 可扩展至 6–8 通道
- 开源代码用于 L1 C/A 实验
— Editorial Team
暂无评论。