我们队用高云GW2A做电赛FPGA题,四路ADC同步采样后做1024点FFT,发现频谱泄露比仿真大很多。检查了窗函数加了汉宁窗,但采样时钟用的是PLL分频,怀疑时钟抖动导致。有没有做过类似项目的同学,怎么判断是窗函数问题还是时钟质量问题?
2026年电子设计竞赛FPGA赛题,队伍用国产高云GW2A做「多路ADC同步采集+实时FFT」,为什么频谱泄露严重,是窗函数没加还是采样时钟抖动?
3 个回答

先别急着怀疑窗函数,汉宁窗都加了还泄露明显,多半不是它。判断顺序我建议这样:拿一台信号源给一个已知的、和采样率非整数倍关系的单频正弦(比如采样率1MHz,就给个97.3kHz),只采一路,把FFT结果存下来看。如果主瓣旁边有对称的裙边、底噪整体抬升,那基本是时钟质量的问题;如果只是主瓣展宽、旁瓣形状还算规整,那才回头查窗和数据归一化。你们采样时钟走PLL分频,这是重点怀疑对象,PLL的VCO和分频器抖动会直接调制采样时刻,等效于给信号加了相位噪声,频谱上就是泄露和底噪抬高。能试的话把ADC采样时钟切到晶振直出,哪怕降点频率,对比一下FFT底噪有没有改善,一测就知道。你们ADC是并行LVDS还是串行接口,采样率大概多少?这个会影响判断难易。

个人感觉你们现在把两个问题混在一起了,得先解耦。窗函数的作用是压旁瓣,它解决的是截断导致的泄露,但前提是采样时钟本身干净。如果时钟抖动大,等效采样时刻随机偏移,这属于相位噪声,加什么窗都救不回来,反而汉宁窗还会把主瓣拉宽,让你更难分辨。所以第一步永远是用已知单音去测,别用真实信号。
具体操作:信号源输出一个频率落在两个FFT bin正中间的单音,理论上加汉宁窗后能量应该集中在相邻几个bin里,其余地方是漂亮的低电平。如果出现宽裙边,几乎可以锁定时钟。这时候拿示波器看时钟眼图或者用相位噪声分析仪测一下PLL输出的相噪,当然电赛现场没这条件,那就做对照实验:一路ADC时钟用晶振直连,另一路用PLL分频,同样信号同时采,FFT叠加对比,差异一目了然。
还有个容易被忽略的点:四路ADC同步采集,如果时钟是PLL分频后扇出到四片,走线不等长、扇出buffer的附加抖动也会恶化。建议先只做单路验证,别一上来四路一起上。另外确认FFT输入有没有去直流,直流分量不处理会在bin0堆一大坨,看着也像泄露。你们四路是用同一片PLL还是各自分频?

这条我想从工程取舍的角度多说一点,因为电赛这种题,时间紧,方向错了比不优化更亏。
频谱泄露的本质是信号能量从主瓣漏到旁瓣,来源无非三类:一是截断效应,靠窗函数缓解;二是采样时钟的时间不确定性,包括抖动和相位噪声,靠时钟树设计缓解;三是数据本身的非理想,比如ADC量化噪声、去直流不干净、定点数溢出。你们已经加了汉宁窗,说明第一类大概率处理过了,那就把精力压到后两类。
为什么PLL分频这么可疑?因为PLL本质是个反馈环路,VCO的相位噪声在环路带宽内会被参考时钟和鉴相器主导,带宽外则是VCO自由振荡主导,分频器再叠一层。分频比越大,输出抖动通常越差,而且是那种低频漂移加高频抖动的复合形态,FFT上表现为底噪整体抬升加主瓣附近不对称的裙边。晶振直出就没有这个问题,它的相噪在近端非常好。
实操上,你们可以做一个很便宜的对照:把ADC采样时钟从PLL输出改接到板上晶振,如果频率不合适就换个能整除的晶振,哪怕采样率降一半,只要FFT点数不变,看底噪和SFDR有没有改善。有改善就说明PLL是元凶,后续要么换低抖动时钟芯片,要么优化PLL环路参数、降低分频比、用整数分频。
再说排查顺序,我一般建议:先单路、后多路;先已知单音、后真实信号;先看时域采样数据、后看频域。时域上如果能抓到采样点的抖动,比在频域猜要准得多。用ChipScope或者高云自己的在线逻辑分析仪抓一段原始ADC数据,导出来在MATLAB里做FFT,顺便验算SFDR。SFDR差基本就是时钟问题,SNR差还要考虑ADC本身和前端。
最后提醒一句,窗函数别乱换,汉宁窗对连续信号够用了,换成Blackman只会让主瓣更宽,分辨率更差,得不偿失。先把时钟这条线走通,再谈其他。你们现在的采样率和ADC型号是什么?这个决定了抖动容限到底有多紧。
发表回答
登录后可在本页底部提交回答