SDR OFDM RX 的详细原理是什么?
摘要:目录效果展示一、定时同步、细频率补偿与载荷提取1.1 同步与频率估算层 (Schmidl & Cox OFDM synch)1.2 频率校正层 (Freq Mod & Multiply)1.3
目录效果展示一、定时同步、细频率补偿与载荷提取1.1 同步与频率估算层 (Schmidl & Cox OFDM synch)1.2 频率校正层 (Freq Mod & Multiply)1.3 帧分割与解复用层 (Header/Payload Demux)总结:数据流的生命周期二、信道估计、均衡与星座图提取2.1 频域转换层 (FFT)2.2 信道估计与均衡层 (OFDM Channel Estimation & Equalizer)2.3 序列化与有效载荷提取 (OFDM Serializer)总结:从波形到符号的蜕变三、星座解调、header 和 payload 数据提取3.1 header 部分3.2 payload 部分总结
效果展示
系列项目主页:https://beautifulzzzz.com/gnuradio/
一、定时同步、细频率补偿与载荷提取
这部分流程图展示了一个完整的 OFDM 接收机物理层同步与解复用网络。它的核心任务是将天线接收到的连续复采样信号,变成一个个整齐的、频率校准过的、区分了“报头”和“载荷”的数据包。
在无线传输中,信号会经历频率偏移(由于多径或晶振误差)和时间上的不确定性。这个电路的作用就像是一个自动对焦+自动裁剪的相机:
自动对焦:修正频率偏移,让星座图不再旋转
自动裁剪:在一长串噪声和信号中,精准地把属于数据包的那一段“剪”出来,并分给后续的解码器
1.1 同步与频率估算层 (Schmidl & Cox OFDM synch)
1)功能概述:这是整个系统的“眼睛”
Schmidl & Cox 模块:利用特定的训练序列(前导码)。它在信号流中寻找两个完全相同的半周期。
Output 0 (freq_offset):计算出信号偏了多少 Hz,输出一个比例值。
Output 1 (detect):一旦抓到同步序列的结尾,发出一声“哨响”(触发脉冲)。
Delay (延时器):数值为 80(即 \(64\) FFT + \(16\) CP)。
原理:S&C 模块需要处理完一整个符号才能给出结果。为了让后面校正频率时,“校正信号”能对准“原始信号”的开头,必须把原始信号拉后 80 个采样点。
2)原理详解
首先我们参考《[30]. GNU Radio 系列教程(三十)—— OFDM TX 详解:1.1.2 总结该块的功能》,了解到:
实际发送时,先在 64 个子载波上发送 Sync Words 1,然后再发送 Sync Words 2,然后再将 448 字节数据按照 Occupied Carriers 的顺序分配到每个子载波上,不足 48 的整数倍,进行补 0。
Schmidl & Cox 算法的本质是寻找时域上的重复性:
条目
细则
巧妙的同步字设计
我们在发送端设计的 sync_word1 = [0., 0., ..., 1.414, 0., -1.414, 0., ...] 在频域上是每隔一个子载波填充一个值,奇数位置全是 0。
根据 IFFT 的特性,频域上的这种“空位填充”在时域上会产生两个完全相同的半周期(如果在频域每隔一个点取一个值(中间补0),那么在时域就会产生两个完全一样的重复周期)。
定时同步
模块维护一个滑动窗口,计算当前半个符号与后半个符号的互相关 \(P(d)\) 和能量 \(R(d)\):
- 度量函数 \(M(d)\):\(M(d) = \frac{|P(d)|^2}{(R(d))^2}\)。
- 表现:当窗口滑到 sync_word1 时,\(M(d)\) 会出现一个明显的“平台区”(由于循环前缀 CP 的存在,平台宽度等于 CP 长度)。该模块通过检测这个平台的下降沿或中心点,在 detect 端口输出触发脉冲。
频率偏移估算
- 原理:由于频率偏移的存在,时域上本应完全相同的两部分会产生相位差 \(\phi\)。
- 计算:\(\phi = \text{angle}(P(d))\)。
- 范围:这种方法(细频偏)只能检测到 \(\pm 1\) 子载波间隔内的偏移。如果偏移太大(比如偏了 2 个子载波),相位会发生 \(2\pi\) 翻转,导致失效(这就是为什么还需要 sync_word2 来做粗频偏补偿的原因,但在本模块中主要输出的是细频偏)。
备注:假设 \(L\) 是半个 OFDM 符号的长度(在我们 OFDM 的设置中,fft_len=64,所以 \(L=32\))。接收到的采样序列为 \(r(n)\)。
