基于相关峰检测的信号定时同步器

算法原理说明:基于相关峰检测的信号定时同步器

1. 概述

本模块 corr_sync_top 用于在接收链路中检测已知前导序列(Preamble)的到达时刻,输出一个单周期定时同步脉冲 m_axis_sync_pulse,标记帧边界。核心方法是滑动窗互相关 + 能量峰值判决 + 多径保护窗抑制。

适用场景:突发通信帧同步、BPSK/QPSK 前导捕获、雷达/声呐脉冲对齐、扩频码同步等需要"在噪声中找到已知模板出现位置"的定时恢复问题。


2. 算法数学模型

2.1 互相关

设接收复信号为 r(n)=rI(n)+j rQ(n)r(n) = r_I(n) + j\,r_Q(n)r(n)=rI(n)+jrQ(n),本地已知前导序列为 c(k), k=0,1,...,N−1c(k),\ k=0,1,\dots,N-1c(k), k=0,1,...,N−1。滑动窗互相关定义为:

R(n)=∑k=0N−1c(k)⋅r(n−k) R(n) = \sum_{k=0}^{N-1} c(k)\cdot r(n-k) R(n)=k=0∑N−1c(k)⋅r(n−k)

当接收窗内的数据与本地前导对齐时,R(n)R(n)R(n) 出现显著峰值。本设计前导为 BPSK 码,即 c(k)∈{+1,−1}c(k)\in\{+1,-1\}c(k)∈{+1,−1},因此乘法退化为条件加减:

R(n)=∑k=0N−1 c(k)=1 ? +r(n−k) : −r(n−k)  R(n) = \sum_{k=0}^{N-1}\big\\,c(k)=1\\ ?\\ +r(n-k)\\ :\\ -r(n-k)\\,\\big R(n)=k=0∑N−1c(k)=1 ? +r(n−k) : −r(n−k)

这一退化是硬件实现的关键------省去了 NNN 个通用乘法器,只保留符号选择的加减树。

2.2 相关能量

对复相关结果取模平方,得到与相位无关的能量指标:

P(n)=∣R(n)∣2=RI2(n)+RQ2(n) P(n) = |R(n)|^2 = R_I^2(n) + R_Q^2(n) P(n)=∣R(n)∣2=RI2(n)+RQ2(n)

用能量而非幅度,是为了对载波相位偏移不敏感------只要码型对齐,无论初相如何,能量都会出现峰值。这是抗频偏/相偏的基础。

2.3 判决准则

同时满足以下三条才判定为有效同步点:

{P(nc)>T超过门限P(nc)≥P(nc+1) 且 P(nc)>P(nc−1)局部极大保护窗空闲非多径副瓣 \begin{cases} P(n_c) > T & \text{超过门限} \\ P(n_c) \ge P(n_c{+}1)\ \text{且}\ P(n_c) > P(n_c{-}1) & \text{局部极大} \\ \text{保护窗空闲} & \text{非多径副瓣} \end{cases} ⎩ ⎨ ⎧P(nc)>TP(nc)≥P(nc+1) 且 P(nc)>P(nc−1)保护窗空闲超过门限局部极大非多径副瓣

其中 ncn_cnc 是 3 点滑窗的中心点,TTT 为可配门限。局部极大值判定用于精确定位峰尖,避免在峰的上升/下降沿误触发。


3. 关键设计决策与本质

很多人以为同步器就是"算个相关再比大小",但真正决定上板稳定性的是三个底层问题:长路径时序、DSP 对齐、多径虚警。逐一说明。

3.1 为什么用树形流水加法,而不是直接累加

N=16N=16N=16 点直接串联累加会形成 15 级加法器的组合长路径,最高频率 FmaxF_{max}Fmax 被这条路径压死在百兆以下。

解决方式是把累加拆成 2 级二叉树 + 1 级归约,每级插寄存器:

复制代码
16点 --Stage1--> 8点 --Stage2--> 4点 --Stage3--> 1点
(17bit)         (18bit)         (20bit)

本质:用寄存器面积换关键路径长度。每级只有 1~2 个加法器的延迟,FmaxF_{max}Fmax 可拉到 300MHz+。位宽逐级 +1 是为了防止累加溢出(每加一次最多进位 1 位)。

3.2 为什么显式写 DSP48 对齐寄存器

I2+Q2I^2+Q^2I2+Q2 的平方用 DSP48 硬核实现。DSP48 内部有 AREG/BREG(输入寄存器)和 PREG(乘积寄存器)。如果不在 RTL 里显式打拍,综合工具可能不把寄存器推进 DSP,导致布线延迟大、时序难收敛。

本设计显式写了两级寄存:a/b(对应 AREG/BREG)→ mult(对应 PREG),确保 100% 映射进 DSP 硬核流水,不依赖工具猜测。

3.3 为什么需要多径保护窗

真实无线信道存在多径:主径之后会有延迟、衰减的回波。回波同样是前导码的副本,也会产生一个(较弱的)相关峰。如果不处理,一帧会触发多个同步脉冲,造成帧定位混乱。

解决方式是命中后启动保护窗 protect_cnt = PROTECT_LEN(建议取 2N2N2N),在窗内屏蔽一切新的判决,逐拍递减到 0 才解除。本质是"抓住第一个强主径,吞掉后续所有副瓣"。


4. 定点化设计

节点 位宽 说明
输入 I/Q 16-bit signed 接收采样量化
Stage1 17-bit 2 点加减,进位 +1
Stage2 18-bit 再 +1
Stage3 (相关值) 20-bit 16 点累加,log2(16)=4 位余量
乘积 mult 40-bit 20×20
能量截断 39:8 右移 8 位,映射到 32-bit 比较空间
能量求和 33-bit → 饱和 32-bit 防 I²+Q² 相加回绕

能量截断的取舍 :取高位段 [39:8] 相当于右移 8 位,丢弃低位精度换取比较器位宽可控。峰值理论值可由此推算,例如满幅前导 ∣R∣=16×1000=16000|R|=16\times1000=16000∣R∣=16×1000=16000,则 P=2×160002/256≈2 000 000P=2\times16000^2/256\approx2\,000\,000P=2×160002/256≈2000000,门限即据此设定。


5. 流水线时延

从有效输入到能量输出,pipe_valid[0..6] 共 7 级:

复制代码
Stage1(1) → Stage2(1) → Stage3(1) → AREG/BREG(1) → PREG(1) → 能量求和(1) → 判决(1)

s_axis_din_valid 拉高后约 7 个时钟周期,对应的 m_axis_corr_power 才输出。做时序对齐或与其他链路合并时须计入这个固定延迟。


6. 接口与握手

采用 AXI-Stream valid-ready 双向握手:

  • 上游:s_axis_din_valid / s_axis_din_ready,本设计内部无阻塞,ready 恒高;若后续加 FIFO 反压,握手协议天然支持挂起。
  • 下游:m_axis_sync_pulse(单周期脉冲)、m_axis_corr_power(实时能量)、m_axis_peak_power(峰值锁存,供 SNR 估计)。

跨时钟域注意m_axis_sync_pulse 是单周期脉冲,若下游位于异步时钟域,必须外接脉冲同步器(cdc_pulse_sync),禁止直接跨域连接,否则会丢脉冲或产生亚稳态。


7. 参数配置

参数 默认 含义
N 16 前导序列长度
PROTECT_LEN 32 多径保护窗长度,建议 2N
PREAMBLE_PATTERN 16'b1011_0101_0000_1111 本地前导码(1=正,0=负),换协议改此处
TH_MIN / TH_MAX 1e4 / 5e7 门限上下限钳位,防配 0 全虚警或超大全漏警

8. 性能与局限

适用:静态或慢变信道、码型已知、SNR 中等以上的突发同步。

局限

  • 大频偏下 R(n)R(n)R(n) 会因码内相位旋转而衰减,若频偏超过约 1/(N⋅Ts)1/(N\cdot T_s)1/(N⋅Ts) 量级,需先做频偏预估或改用差分相关。
  • 门限 TTT 为静态配置,强时变噪声下建议改用基于滑动噪声功率的动态门限(归一化相关)。
  • 保护窗为固定长度,若多径时延扩展超过 PROTECT_LEN,仍可能漏抑;需按信道最大时延调 PROTECT_LEN

9. 参考对照

  • 相关峰检测:Van Trees, Detection, Estimation, and Modulation Theory
  • 前导同步经典:Schmidl & Cox 定时同步算法(OFDM 场景可延展)
  • DSP48 流水结构:Xilinx UG579《UltraScale DSP48E2 用户指南》

沉淀的资产

  1. 一份可复用的相关峰同步算法数学模型(互相关 → 能量 → 三准则判决)
  2. "树形流水 + DSP 显式对齐 + 多径保护窗"三大工程决策的本质说明,可迁移到其他相关类模块
  3. 完整定点位宽表与峰值理论值推导,直接指导门限设定