ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

通信原理同步技术:载波、位、群、网同步原理与工程调试

通信原理同步技术:载波、位、群、网同步原理与工程调试 调过接收机的人大概都有这么一段记忆频谱仪上信号明明在功率也不低可解调出来的星座图像被谁揉过一遍点不聚误码率死活下不去。这时候老手一般不会先去怀疑编码或者滤波器而是先问一句——同步稳不稳同步是通信原理里最不起眼、又最要命的一环。调制、编码、信道这些环节做对了只保证信息发得出去同步做不对信息就收不回来。它本质上解决的是三个对齐问题接收端本地载波和发端载波的相位要对齐采样时刻要和码元边界对齐帧的起点要和发端的帧头对齐再往上全网各节点的时钟还要彼此对齐。这四个层次各自有独立的数学工具和工程手段考试里是重点工程里是天天要面对的坑。下面这篇内容适合正在啃通信原理的学生也适合做无线电、数据采集、嵌入式通信、分布式系统的工程朋友主要讲清楚每一类同步为什么必须存在、怎么实现、参数怎么算、以及实际调试时最容易踩的坑在哪。1. 同步到底在解决什么问题从一个解调失败的现场说起1.1 相干解调为什么非要一个对准的载波先从最直观的场景切入。假设发端用 BPSK 调制把基带符号 $a_k \in {1,-1}$ 乘上载波 $\cos(2\pi f_c t)$ 发出去。接收端要做相干解调就得再乘一次本地载波然后过低通。这一步的数学很朴素接收信号 $r(t)a_k\cos(2\pi f_c t)$本地载波 $c(t)\cos(2\pi f_c t\varphi)$相乘后展开得到两项一项是 $a_k\cos\varphi/2$ 的直流分量一项是 $2f_c$ 的高频分量。低通滤掉高频剩下的就是 $\frac{a_k}{2}\cos\varphi$。问题就出在这个 $\cos\varphi$ 上。当 $\varphi0$输出是完整的 $\pm\frac{1}{2}$判决门限在零点判决做得很舒服一旦 $\varphi$ 偏离到 90 度$\cos\varphi$ 变成 0输出直接塌成 0判决器只能随机猜。也就是说相位误差不是稍微降低一点质量而是在接近正交时让整个判决彻底失效。更麻烦的地方在于接收端本地晶振和发端晶振永远不可能严格同频两者之间总有频率偏差相位误差是随时间累积的$\varphi(t)2\pi\Delta f t\varphi_0$。这就要求同步系统必须持续跟踪而不是开机时对一次就完事。这也是为什么载波同步通常用闭环结构实现而不是一个静态的相位查找表。理解了这一点后面所有的环路设计、环路带宽取舍、锁相环参数计算才有落脚点。1.2 位同步、群同步、网同步各自分管什么载波同步解决的是相位对齐但相位对齐了还有第二个问题你这个采样时刻采到的是码元的正中间还是正好踩在码元的跳变沿上这就是位同步也常叫符号同步、定时同步要管的事。采样点踩在跳变沿上得到的值介于前后两个符号之间判决结果一半靠运气。所以位同步要提供的是一个周期为 $T_b$码元宽度的时钟脉冲序列且脉冲位置尽量落在每个码元的中心。位同步解决之后还有第三个问题我拿到了正确的比特流可哪几个比特是一组、哪一位是这一帧的开头群同步帧同步负责在一串连续比特里找到分组的边界。它通常靠发端插入特定的同步码字收端在比特流上滑动搜索匹配上了就认为找到了帧头。再往上一层是网同步解决的是一个通信网内多个节点、多个交换设备时钟频率彼此不一致的问题——各节点各用各的晶振长期运行必然出现读写速率差缓冲区迟早会溢出或者读空。网同步的手段包括主从同步、互同步、准同步等属于体系级别的设计。表 1 四种同步的对比同步类型对齐对象典型实现手段失效后的直接后果载波同步本地载波相位平方环、科斯塔斯环、插入导频解调幅度按 cos φ 衰减误码率恶化位同步采样时刻与码元边界数字锁相环、早迟门、Gardner 算法采样点偏移判决门限裕量被吃掉群同步帧的起止位置集中插入同步码、分散插入帧解析错位数据整块作废网同步全网节点时钟主从、互同步、准同步缓冲区滑码、丢包、时序混乱1.3 这四层为什么会互相牵连新手容易把这四层当成四个独立模块分开做实际系统里它们是串起来的。载波没锁住位同步环路的鉴相输出就是乱的因为位同步的定时误差信息往往来自解调后的基带信号位同步环路在抖群同步的相关峰就会时高时低导致同步码漏检群同步偶尔丢帧上层协议就频繁重传反过来又会让你误判是信道太差。我在调试一套短波数据链路时碰到过一个典型案例误码率一直卡在 1e-2 下不去怀疑是信道问题换了几组频率都没改善。后来把示波器探头挂到解调后的基带眼图上才发现眼图是在缓慢地左右漂移说明位同步环路的跟踪带宽太窄跟不上收发两端晶振的慢漂移。把环路带宽放宽之后误码率直接掉到 1e-4 量级。这个例子说明排查同步问题要养成从眼图和星座图往上看的习惯而不是一上来就怀疑算法。2. 载波同步相位误差如何一点点吃掉你的信噪比2.1 直接提取法平方环和科斯塔斯环的区别在哪载波同步的第一大类思路是直接从接收信号里把载波提出来叫直接法。最经典的是平方变换法把接收信号平方$\cos^2(2\pi f_c t)(1\cos(4\pi f_c t))/2$于是信号里出现了 $2f_c$ 的分量用一个窄带滤波器或者锁相环把这个二倍频分量提出来再二分频就得到 $f_c$ 的载波。这里有个绕不开的坑二分频器件的输出初相是随机的可能是 0 也可能是 π这叫相位模糊。对 BPSK 来说相位翻转 180 度意味着所有比特都取反判决出来的数据整个是错的。解决办法通常是差分编码——把信息承载在相邻符号的变化上而不是绝对相位上收端做差分解码就算整体翻了个身也能还原。这是我强烈建议在做 BPSK、QPSK 系统时默认开启的一步代价极小收益极大。科斯塔斯环是另一条路它不需要平方直接在基带上做。结构上把输入分别乘上同相和正交两路本地载波各自低通然后两路相乘作为鉴相输出再经过环路滤波器去控制 VCO。它对抑制载波的信号比如 BPSK、QPSK特别有效因为它天然抵消了调制信息。两者的取舍大致是这样平方环结构简单、适合硬件实现但对谐波滤波要求高二倍频处如果有干扰会直接影响性能科斯塔斯环在数字域实现更方便抗噪能力好一些但需要两路乘法器和低通运算量更大。现在做软件无线电我几乎都用科斯塔斯环因为 DSP 里多两个乘法器的成本可以忽略。2.2 插入导频法为什么要正交插入第二大类思路是发端主动插入一个导频信号收端把它滤出来当参考。这里有个很容易被忽略的细节导频不能直接加在载波频率的相位上否则它会和调制信号的频谱重叠收端根本分不出来。工程上的做法是正交插入——在载波的正交相位上插入导频也就是说信号是 $a_k\cos\omega_c t - A\sin\omega_c t$导频位于 $\sin$ 那一支。收端用一个窄带滤波器把导频提出来移相 90 度之后就能得到和发端同相的载波。为什么要费这个劲因为正交插入之后导频和调制分量在理想情况下互不干扰解调时把接收信号乘以提取出的载波导频项乘出来是 $\sin\cdot\cos$ 形式积分一个周期为零不产生直流偏置。如果图省事同相插入导频会直接给判决器带来一个固定的直流偏移把判决门限顶偏。这个细节在做单边带话音或者残留边带系统时尤其关键因为这类信号的频谱本身就贴近载波导频位置一旦不当滤出来的是混着信号的东西环路会被信号拖走。另外还有一种时域插入的做法就是在每帧数据的前面专门留一段时间发导频接收端在这段时间里锁相后面数据段就用锁住的相位。这种方法实现简单但缺点是数据段期间环路没有参考只能靠晶振自由振荡对晶振稳定度要求高适合帧结构固定、帧长不长的系统。2.3 相位误差到底带来多少损失一个可算的量很多人只知道相位误差会恶化性能但不知道恶化多少。这个是可以算的。前面推导过相干解调输出正比于 $\cos\varphi$所以由相位误差带来的信噪比损失是损失(dB) 20 * log10(cos φ)代几个数进去感受一下相位误差 φcos φ信噪比损失0°1.0000 dB10°0.9850.13 dB20°0.9400.54 dB30°0.8661.25 dB45°0.7073.01 dB60°0.5006.02 dB这张表很实用。它告诉你小于 20 度的稳态相位误差基本可以接受30 度左右开始明显吃亏超过 45 度就没法用了。设计环路时你可以把允许的稳态相位误差作为指标反推环路增益对于二阶锁相环稳态相位误差和环路直流增益成反比增益越大误差越小但增益太大环路会不稳定、容易失锁。这就是典型的工程折中——不是把参数拉到极限就好而是要在跟踪精度和稳定性之间找平衡点。我一般的做法是先用 30 度作为设计上限留出足够裕量实测再收紧。2.4 一段可以直接跑的科斯塔斯环仿真纸上推完最好还是能动手验证一遍。下面这段 Python 代码实现了一个简化版的 BPSK 科斯塔斯环你可以调环路增益看它锁定过程也可以故意加个频偏看它能不能跟上。import numpy as np import matplotlib.pyplot as plt np.random.seed(7) N 4000 # 符号数 sps 8 # 每符号采样点数 fc 0.05 # 归一化载波频率 alpha 0.02 # 环路增益 freq_offset 0.0005 # 收发频偏故意引入 # 发端BPSK 映射 上采样 bits np.random.randint(0, 2, N) * 2 - 1 baseband np.repeat(bits, sps) t np.arange(N * sps) / sps tx baseband * np.cos(2 * np.pi * (fc freq_offset) * t) # 收端科斯塔斯环 phase 0.0 freq fc i_out, q_out, err_hist [], [], [] for n, sample in enumerate(tx): i sample * np.cos(2 * np.pi * freq * n / sps phase) q sample * -np.sin(2 * np.pi * freq * n / sps phase) # 一阶低通简易滑动平均 if n sps: i 0.6 * i 0.4 * i_out[-1] q 0.6 * q 0.4 * q_out[-1] err i * q # 鉴相输出 phase alpha * err # 相位修正 i_out.append(i) q_out.append(q) err_hist.append(err) freq_est np.mean(np.diff([p for p in err_hist[-500:]])) if False else None plt.figure(figsize(10, 4)) plt.subplot(1, 2, 1) plt.plot(err_hist) plt.title(discriminator output) plt.subplot(1, 2, 2) plt.plot(i_out[-500:]) plt.title(in-phase arm after lock) plt.tight_layout() plt.show()几个实操上要注意的点第一低通滤波器的带宽要和环路带宽匹配低通太窄会让鉴相输出延迟过大环路容易振荡低通太宽则噪声灌进环路相位抖动变大。第二图中的鉴相输出收敛到零附近说明环路锁定如果它一直在某个非零值附近摆动通常是频偏超出了环路捕获范围需要引入频率扫描或者先用 FFT 粗估频偏。第三这段代码用的是最粗糙的一阶环路实际工程里至少用二阶否则对频率阶跃的稳态误差不为零。3. 位同步采样时刻的毫厘之争3.1 外同步和自同步两条路线的取舍位同步的实现路线分成两类。外同步是发端额外发一路时钟或者从数据里分出专门的定时分量收端直接用。它简单可靠但要多占一路信道或者带宽在频带资源紧张的场景不划算。自同步是从数据本身的跳变信息里提取定时不需要额外开销代价是电路或算法复杂度高一些。自同步里又分成滤波法和锁相法。滤波法的思路是数字基带信号的功率谱里本身就含有位定时分量只要把信号做非线性变换比如取绝对值、平方然后过一个中心频率等于码元速率的窄带滤波器就能把定时分量提出来。锁相法则是用锁相环持续跟踪这个定时分量性能更稳但环路参数要仔细设计。实际工程里软件无线电几乎全用锁相类方法因为纯数字实现更灵活而且能顺便做插值把采样点搬到最佳位置上去不需要真的调整采样时钟。这里插一句经验如果你用的 ADC 采样率是码元速率的整数倍且两者同源那位同步的压力会小很多因为你只需要在整数倍采样点里挑一个最合适的相位。但如果两者不同源就必须做分数间隔的插值这时候一个性能良好的插值滤波器常见的是 Farrow 结构比环路本身还重要。我见过不少项目在环路算法上花了大力气结果被一个三阶插值器的通带纹波拖了后腿。3.2 数字锁相环位同步的实现细节数字锁相环位同步的经典结构是这样的本地有一个高稳定晶振频率是码元速率的 $n$ 倍经过 $n$ 次分频得到位同步脉冲。鉴相器比较接收码元的跳变沿和位同步脉冲的相位输出超前或滞后信号控制器根据这个信号在分频链路上扣除或者增加一个时钟脉冲从而微调位同步脉冲的位置。这个结构有一个内在的性能上限因为它只能在整数个时钟周期上调所以稳态相位误差最大是 $\pm T_b/(2n)$其中 $T_b$ 是码元周期。这就给了你一个选 $n$ 的依据。假设码元速率 1 Mbps你希望稳态相位误差不超过码元宽度的 5%那么 $1/(2n) \le 0.05$得到 $n \ge 10$。反过来如果系统里已经有 100 MHz 时钟$n100$相位量化误差就只有 0.5%完全够用。这个计算很朴素但很多人在设计时压根没算过直接拍一个分频比最后发现抖得厉害。还有一个容易忽略的问题数字锁相环对输入数据的跳变密度敏感。如果你的数据里连续出现很长的同号序列比如全 1 或全 0跳变沿就很少鉴相器长时间没有输入环路相当于饿着只能靠晶振自由振荡。解决办法是加扰码或者用编码保证跳变密度比如曼彻斯特编码、8b/10b 编码天然保证跳变。这也是为什么基带传输系统里经常规定最大连零长度这个指标。3.3 早迟门和 Gardner两种主流的定时误差检测早迟门Early-Late Gate的思路非常直观在估计的最佳采样点前后各取一个点如果这两个点的幅度相等说明采样点在正中间如果超前点幅度大说明采样偏后了反之偏前了。它本质上是利用信号的对称性来构造误差信号。Gardner 算法是另一个常被提到的方案它对每个符号只需要两个采样点一个在符号中心附近一个在符号边界附近计算量小在 QPSK 等系统里表现稳。它的一个好处是对载波相位误差不敏感可以先做定时同步再做载波同步两个环路不互相干扰。这点在做高阶调制时挺重要因为环路互相耦合会让你调参数调到头秃。选择上我的看法是如果你做的是低阶调制、采样率富裕早迟门够用而且好理解如果是高阶调制或者需要多个采样点做插值Gardner 更省资源。不要迷信某个算法一定更好先看你手上有多少采样率预算再谈算法。3.4 位同步调试中最容易踩的三个坑第一个坑是环路带宽设置过于保守。位同步的本质是跟踪收发时钟的相对漂移漂移速率决定了环路带宽的下限。如果你把带宽设得太窄环路反应慢眼图会缓慢左右漂移就像我前面说的短波案例。经验值是环路带宽取符号速率的千分之一到百分之一之间具体要看晶振精度和温度环境。第二个坑是没做去偏。定时误差检测器的输出往往带一个直流偏置这个偏置会让环路稳定在一个错误的位置上眼图看起来锁住了其实一直偏着。工程上一般会在误差信号进环路滤波器之前加一个直流消除环节或者在初始化阶段做一次偏差估计。第三个坑是复位和重锁逻辑没设计。信道中断或者突发干扰之后环路应该能重新捕获而不是死锁在一个错误相位上。这就要求有失锁检测机制比如监测误差信号的方差超过门限就复位环路。这个逻辑在实验室里不容易暴露一到现场长时间运行就出问题。4. 群同步在一串比特里找到开头4.1 起止式同步和集中插入法群同步最原始的形式是起止式同步也就是异步串口那一套每个字符前面加一个起始位低电平后面加停止位高电平收端检测到从空闲电平到起始位的跳变就开始计数。这种方法简单开销是每字节多两三位效率不高但适合低速、短帧的场合。更高效的是同步式传输靠同步码字来定帧。集中插入法是把一组特定的同步码字放在每帧的开头收端用滑动相关器在比特流上搜索相关峰超过门限就认为找到帧头。分散插入法则是把同步码分散埋进数据流里周期性出现收端要靠多个位置的累积判断来确认捕获时间长但抗干扰能力强适合那些信道条件恶劣、又有较长同步时间预算的系统。集中插入法的关键参数是同步码的长度和允许错几位。这两个参数直接决定漏同步概率和假同步概率下面算一下。4.2 漏同步和假同步两个必须一起看的概率假设同步码长 $n$ 位允许 $m$ 位错。漏同步是指真正的同步码位置因为误码导致匹配失败它发生的概率大致是P_miss 1 - Σ(i0..m) C(n,i) * Pe^i * (1-Pe)^(n-i)假同步是指在非同步码位置随机数据碰巧和同步码匹配上P_false 2^(-n) * Σ(i0..m) C(n,i)拿具体数字感受一下。取 $n7$$m0$信道误码率 $Pe10^{-3}$漏同步概率 $P_{miss}1-(1-10^{-3})^7 \approx 0.70%$假同步概率 $P_{false}2^{-7}0.78%$。看起来都不高但假同步是每个位置都要判一次的。假设帧长 512 位每个帧周期内要做 511 次滑动判决那么每帧期望的假同步次数约为 $511\times0.0078\approx4$ 次。这就完全不可接受了——也就是说光靠一个 7 位同步码几乎每帧都会误判到假位置上去。这个计算的意义在于它解释了为什么实际系统里要么用更长的同步码比如 13 位、16 位甚至 32 位要么加同步保护逻辑必须连续若干帧都在预期位置检测到同步码才确认进入同步态同样必须连续若干帧检测失败才判定失去同步。前者叫前方保护后者叫后方保护。加了保护之后假同步概率被压到可以忽略的量级。表 2 同步码长度与假同步概率的关系允许 0 位错同步码长度 n单个位置假同步概率帧长 512 时的每帧期望误判次数77.8e-3约 4 次114.9e-4约 0.25 次131.2e-4约 0.06 次161.5e-5约 0.008 次246.0e-8约 3e-5 次4.3 巴克码为什么被反复提起同步码本身也有讲究。理想的自相关特性是和自己完全对齐时相关值最大错开一位就迅速降到很低。满足这个性质的序列里巴克码是最有名的一类。它的定义是自相关函数旁瓣绝对值不超过 1 的二元序列已知存在的长度只有 2、3、4、5、7、11、13 这几种。短小、旁瓣低所以特别适合做帧同步码。不过巴克码的长度上限就是 13这对高可靠性系统来说往往不够。工程上的替代方案是用伪随机序列m 序列、Gold 序列它们的自相关旁瓣虽然不像巴克码这么完美但可以通过选择长度和本原多项式把旁瓣压下去而且长度可以做到几百上千位抗干扰能力更强。做扩谱通信的人对这套非常熟悉因为扩谱的同步本质上就是在一个很大的码相位空间里搜索捕获过程比普通帧同步困难得多。4.4 群同步的实现代码骨架下面给一个滑动相关做帧同步的骨架思路简单但直接可用于验证同步码的设计是否合理import numpy as np SYNC np.array([1,1,1,0,0,1,0]) # 7 位巴克码按你的系统替换 def sliding_correlate(bitstream, sync, max_err0): 滑动窗口相关返回所有匹配位置 n len(sync) hits [] for i in range(len(bitstream) - n 1): window bitstream[i:in] errs np.sum(window ! sync) if errs max_err: hits.append(i) return hits def frame_sync_with_protect(bitstream, sync, frame_len, need_lock2, need_loss3): 带前后方保护的帧同步 n len(sync) state search lock_count, loss_count 0, 0 expect_pos None for pos in range(0, len(bitstream) - frame_len, frame_len): window bitstream[pos:posn] matched (np.sum(window ! sync) 0) if state search: if matched: lock_count 1 if lock_count need_lock: state, expect_pos locked, pos frame_len else: lock_count 0 else: if matched: loss_count 0 else: loss_count 1 if loss_count need_loss: state, lock_count search, 0 return state这里最值得说的是前后方保护的实现方式。很多教程只讲原理不讲实现结果自己写的时候不知道保护计数该放在哪一层。我的做法是把搜索态和锁定态彻底分开搜索态下允许误差、允许滑动锁定态下严格按帧长推下一个期望位置只在期望位置附近做判决不再全流搜索。这样既降低了计算量也避免了锁定后又跳到别的假位置上去。5. 从通信原理延展出去系统级的时间一致性问题5.1 网同步的三种基本体制把视角拉高到网络层面多个节点各自有时钟如何进行时间同步主流有三种体制。主从同步是指定一个基准时钟逐级向下传递所有节点都跟踪上级。优点是频率精度高、实现简单缺点是基准节点故障或者链路中断会导致下游失锁。互同步是所有节点互相比较通过加权平均得到一个公共频率没有单点故障风险但稳态频率和网络结构耦合调整起来复杂。准同步则是各节点独立运行高精度时钟互不控制靠滑动stuffing来处理速率差——当缓冲快溢出或者快读空时插入或者删除一些填充位。这种方式成本低、灵活但会有周期性的滑码不适合对时钟严格敏感的业务。在实际的城域传输网里常见做法是分层混用核心层用主从同步保证精度边缘接入用准同步降低成本。还有一些系统会同时跑两套机制一套保证频率同步一套保证时间同步相位对齐两者指标要求不完全一样——频率同步允许有相位慢漂移时间同步则对相位也有硬要求。5.2 时钟抖动和漂移两个被混为一谈的指标做系统级同步时有两个指标必须分清抖动jitter和漂移wander。抖动是高频的相位波动通常在几赫兹以上主要影响采样判决和高速接口的时序裕量漂移是低频的相位变化通常在几赫兹以下主要影响缓冲区深度和长期稳定性。测抖动一般看相位噪声谱或者时间间隔误差的短窗统计测漂移则要看 MTIE最大时间间隔误差和 TDEV时间偏差这类长窗指标。为什么要把这两个分开因为它们的应对手段完全不同。抖动大你要查电源噪声、地平面完整性、时钟走线的串扰漂移大你要看晶振的温度特性和年老化率或者检查温度补偿电路是否生效。我曾经遇到过一个设备短时间测试各项指标都合格连续运行一周后开始丢包。最后发现是晶振的温漂在机房空调周期性的温度变化下积累了相位差超出了缓冲深度触发滑码。解决办法是给缓冲加自适应水位调节或者换温度特性更好的晶振。这类问题在实验室里是测不出来的必须靠长时间在线运行才能暴露。5.3 硬件同步在其他场景里的影子同步这个词其实在各个技术领域反复出现底层逻辑惊人地相似。比如数据采集领域多台仪器要同步采样就得让它们共享同一个触发源和同一个时基本质上是把位同步里的定时对齐搬到了设备级别分布式系统里多个副本要保持数据一致用的也是定一个基准、逐级传递、靠协商处理偏差这套思路和网同步的三种体制能一一对应上。甚至数字电路里的复位设计也有类似问题异步复位、同步释放这个经典结构解决的就是复位信号什么时候生效、什么时候撤销这个时间窗口对齐问题——撤销时刻如果离时钟沿太近触发器会进入亚稳态所以要让释放动作和时钟对齐。你把这几个场景放在一起看会发现所有同步问题的本质都是同一件事在存在独立时钟源和传输延迟的前提下如何让多个动作在同一时间基准上协调。理解了这个统一视角再回头看通信原理里的载波同步、位同步、群同步就不是背公式了而是在看同一套思想在不同尺度上的应用。6. 常见问题与排查实录6.1 常见问题速查表下面这张表是我这些年积累下来的排查清单绝大部分同步类问题都能在里面找到对应项。表 3 同步类故障速查表现象可能原因排查动作处理手段星座图旋转不收敛载波频偏超出环路捕获范围用 FFT 粗估频偏加频率扫描或两级捕获星座图整体翻 180°二分频相位模糊检查解调数据是否整体取反启用差分编码眼图缓慢左右漂移位同步环路带宽过窄长时间观察眼图位置放宽环路带宽眼图稳定但偏在一侧定时误差检测有直流偏置统计误差信号均值加直流消除环节误码率突发性恶化群同步假同步频繁触发统计帧头位置分布加长同步码、加同步保护连续同号序列后失步定时分量不足检查连零长度加扰码或换编码方式长时间运行后丢包时钟漂移超出缓冲深度测 MTIE、TDEV自适应缓冲水位、更换晶振复位后偶发异常复位释放时刻靠近时钟沿检查复位同步器异步复位同步释放6.2 用示波器和频谱仪做现场判定的几个动作排查同步问题仪表用对了能省大量时间。我常用的几个动作是第一看眼图而不是看星座图。星座图反映的是最终判决点眼图反映的是整个符号周期内的信号质量。眼图的交叉点位置和张开度能直接告诉你定时是否对齐、噪声裕量有多少。如果眼图交叉点模糊先解决位同步再谈别的。第二把本地载波和发端载波或者导频恢复出的载波同时接到示波器两个通道用 XY 模式看李萨如图形。两个频率严格一致时图形稳定有频差时图形会持续旋转旋转速度就是频差。这是个很直观的粗测手段。第三频谱仪上看同步码相关峰。如果你的系统在每帧发送同步码那么在时域上同步码位置会出现周期性的能量突起。用频谱仪的零扫宽模式观察同步码的周期性会表现为一条谱线通过观察它的稳定度可以判断群同步是否规律。第四长时间记录误码分布而不是只看平均误码率。突发错误和随机错误的处理思路完全不同。突发错误往往是同步瞬时失锁造成的随机错误更多是信噪比问题。建议把误码位置打出来画成图是均匀散布还是成簇出现一眼就能区分。6.3 我自己踩过的坑和一些体会说几个具体的教训。有一次做一套无线数传实验室里跑得好好的拉到外场就频繁掉线。折腾了很久才发现是外场温度变化大晶振频偏比实验室环境下大了一个量级超出了我设定的捕获范围。后来学乖了凡是涉及环路捕获的设计一律按工作温度范围的极端值来算频偏而不是按常温下的标称值。还有一次是做多通道同步采集各通道之间有固定的相位偏差。一开始怀疑是走线长度不一致量了半天发现走线误差只有几十皮秒解释不了观察到的偏差。最后定位到是各通道的采样时钟来自不同的时钟树分支虽然同源但经过了不同数量的缓冲器引入了不同的延迟。解决办法是把时钟树改成等长结构或者干脆用一个专门的时钟分发芯片。这个经历让我意识到同源不等于同相时钟树上的每一级缓冲都会带来延迟。最后一个体会是关于验证方法的。同步系统的很多问题只有在长时间运行、大范围温度变化、强干扰环境下才会暴露。所以我现在做同步类项目一定会安排至少一次连续 72 小时以上的老化测试并且在测试期间记录相位误差的时间序列而不是只记录最终误码率。那个时间序列往往能告诉你很多误码率反映不出来的信息比如是否存在周期性扰动、是否在特定温度点性能下降。这些信息对于定位根因非常关键比任何单点测试数据都有价值。
返回列表