字下變頻:FPGA實(shí)現(xiàn)帶通采樣及抽取濾波鏈路設(shè)計(jì))
1. 從射頻到基帶中頻采樣到底在解決什么問(wèn)題搞過(guò)軟件無(wú)線電或者雷達(dá)接收鏈路的人大概率都繞不開(kāi)一個(gè)經(jīng)典架構(gòu)選擇射頻信號(hào)下來(lái)之后到底是在射頻直接采樣還是先搬到中頻再采樣這個(gè)問(wèn)題我在不同項(xiàng)目里反復(fù)遇到過(guò)每次選型都得重新算一遍賬。中頻采樣與數(shù)字下變頻這套組合拳本質(zhì)上解決的是一個(gè)很樸素的矛盾——ADC的采樣率上限和信號(hào)帶寬需求之間的沖突。先說(shuō)背景。按照奈奎斯特采樣定理要無(wú)失真地恢復(fù)一個(gè)信號(hào)采樣率至少得是信號(hào)最高頻率的兩倍。假設(shè)你有一個(gè)中心頻率2.4GHz、帶寬20MHz的射頻信號(hào)如果直接對(duì)這個(gè)射頻信號(hào)采樣理論上采樣率得超過(guò)4.8GHz。這個(gè)量級(jí)的ADC不僅貴得離譜功耗和散熱也是災(zāi)難。但如果你先把射頻信號(hào)通過(guò)模擬混頻搬到一個(gè)較低的中頻比如70MHz或者140MHz這時(shí)候信號(hào)的中心頻率降下來(lái)了帶寬還是20MHz你只需要一個(gè)采樣率略高于140MHz的ADC就能搞定。這就是中頻采樣存在的第一個(gè)理由用模擬混頻換取ADC采樣率的降低。但中頻采樣還有第二個(gè)更精妙的地方叫做帶通采樣。這個(gè)概念很多人第一次接觸會(huì)覺(jué)得反直覺(jué)。假設(shè)中頻信號(hào)中心頻率70MHz帶寬20MHz信號(hào)實(shí)際占據(jù)的頻譜范圍是60MHz到80MHz。按照低通采樣的思路采樣率得大于160MHz。但帶通采樣定理告訴我們只要采樣率滿足特定條件用遠(yuǎn)低于信號(hào)最高頻率的采樣率也能無(wú)混疊地采到這個(gè)帶通信號(hào)。具體來(lái)說(shuō)如果信號(hào)帶寬為B中心頻率為f0采樣率fs滿足2B ≤ fs ≤ 2f0/(m)這樣的關(guān)系m取滿足條件的整數(shù)就能實(shí)現(xiàn)頻譜搬移式的采樣。比如上面這個(gè)例子選fs50MHz信號(hào)會(huì)被搬到12.5MHz附近依然完整保留20MHz帶寬的信息。這里有個(gè)關(guān)鍵點(diǎn)容易被忽略帶通采樣不是沒(méi)有代價(jià)的。采樣之后信號(hào)的頻譜會(huì)以fs為周期進(jìn)行延拓如果參數(shù)選得不好延拓出來(lái)的頻譜副本會(huì)和原始頻譜重疊產(chǎn)生混疊。所以選采樣率的時(shí)候必須畫頻譜圖驗(yàn)證不能拍腦袋。我一般會(huì)先在紙上把信號(hào)頻譜、采樣頻率、各次諧波的位置都標(biāo)出來(lái)確認(rèn)沒(méi)有重疊再往下走。那數(shù)字下變頻又是在干什么ADC采樣之后你拿到的是一個(gè)實(shí)信號(hào)序列頻譜關(guān)于零頻對(duì)稱正負(fù)頻率各有一半。但通信或者雷達(dá)處理真正關(guān)心的是基帶復(fù)信號(hào)也就是I/Q兩路。數(shù)字下變頻的核心任務(wù)就是把中頻上的帶通信號(hào)搬到零頻附近同時(shí)產(chǎn)生正交的I/Q兩路并且通過(guò)抽取濾波把采樣率降下來(lái)減輕后續(xù)處理壓力。整個(gè)過(guò)程用數(shù)字方式實(shí)現(xiàn)避免了模擬混頻器的本振泄漏、I/Q不平衡等一堆麻煩事。所以這套架構(gòu)的完整鏈路是射頻信號(hào) → 模擬混頻搬到中頻 → ADC帶通采樣 → 數(shù)字下變頻混頻抽取濾波→ 基帶I/Q信號(hào) → 后續(xù)解調(diào)或脈壓處理。每一步都有它的道理缺一不可。適合閱讀這篇內(nèi)容的人應(yīng)該是對(duì)FPGA信號(hào)處理有一定了解、正在做接收機(jī)鏈路設(shè)計(jì)、或者想搞清楚軟件無(wú)線電底層原理的工程師。如果你之前只是調(diào)用過(guò)現(xiàn)成的IP核沒(méi)自己算過(guò)參數(shù)、沒(méi)踩過(guò)混疊的坑那接下來(lái)的內(nèi)容應(yīng)該能幫你把這條鏈路真正吃透。2. 帶通采樣的參數(shù)計(jì)算別讓混疊毀掉你的鏈路2.1 采樣率選擇的約束條件推導(dǎo)帶通采樣的采樣率選擇不是隨便挑一個(gè)大于兩倍帶寬的數(shù)就行。我見(jiàn)過(guò)太多人在這里翻車包括我自己早期做的一個(gè)項(xiàng)目當(dāng)時(shí)選了個(gè)自認(rèn)為很安全的采樣率結(jié)果頻譜搬移之后發(fā)現(xiàn)邊帶剛好壓在一起信噪比直接掉了十幾個(gè)dB。后來(lái)老老實(shí)實(shí)把公式推了一遍才搞明白問(wèn)題出在哪。帶通采樣定理的完整表述是這樣的對(duì)于一個(gè)帶寬為B、最高頻率為fH的帶通信號(hào)如果采樣率fs滿足fs ≥ 2B保證帶寬信息不丟失存在整數(shù)m使得 2fH/m ≤ fs ≤ 2fL/(m-1)其中fL是信號(hào)最低頻率fH是最高頻率m取滿足條件的正整數(shù)。這個(gè)公式看起來(lái)有點(diǎn)繞但實(shí)際操作的時(shí)候可以換個(gè)思路先確定你希望信號(hào)被搬到哪個(gè)頻率位置然后反推采樣率。舉個(gè)實(shí)際例子。假設(shè)中頻信號(hào)中心頻率140MHz帶寬20MHz所以fL130MHzfH150MHz。我想讓采樣后的信號(hào)落在20MHz到40MHz這個(gè)區(qū)間中心30MHz那么采樣率應(yīng)該選多少信號(hào)搬移后的中心頻率f_if和原始中心頻率f0、采樣率fs的關(guān)系是f_if |f0 - k·fs|其中k是某個(gè)整數(shù)。代入f0140MHzf_if30MHz如果k1則fs110MHz如果k2則fs55MHz。驗(yàn)證一下55MHz是否滿足帶通采樣條件2B40MHz ≤ 55MHz且2fH/m ≤ fs ≤ 2fL/(m-1)取m52×150/5602×130/46560 ≤ 55不成立。取m62×150/6502×130/55250 ≤ 55 ≤ 52不成立。所以55MHz不行。再試110MHzm2時(shí)2×150/21502×130/1130130 ≤ 110不成立。m3時(shí)2×150/31002×130/2130100 ≤ 110 ≤ 130成立。所以110MHz是可行的。這個(gè)計(jì)算過(guò)程看起來(lái)繁瑣但實(shí)際做幾次就有感覺(jué)了。我通常會(huì)在Excel里拉一個(gè)表把可能的m值和對(duì)應(yīng)的采樣率范圍都列出來(lái)然后從中挑一個(gè)和ADC器件支持的采樣率最接近的值。2.2 采樣后頻譜搬移的直觀理解很多人對(duì)帶通采樣的頻譜搬移感到困惑覺(jué)得信號(hào)怎么就從140MHz跑到30MHz去了。其實(shí)用一句話就能解釋清楚采樣就是在頻域上把原始頻譜以fs為周期進(jìn)行復(fù)制粘貼。原始信號(hào)在140MHz附近采樣之后它的頻譜副本會(huì)出現(xiàn)在140±n·fs的位置上。你只需要找到其中一個(gè)落在低頻區(qū)域的副本那就是你想要的。還是用上面的例子fs110MHz原始信號(hào)在130到150MHz。采樣后頻譜副本出現(xiàn)在130-11020MHz 到 150-11040MHz這就是我們要的130110240MHz 到 150110260MHz130-220-90MHz 到 150-220-70MHz負(fù)頻率對(duì)應(yīng)正頻率的鏡像可以看到20到40MHz這個(gè)副本完整保留了20MHz的帶寬信息而且和別的副本沒(méi)有重疊。這就是帶通采樣的精髓用低采樣率把高頻信號(hào)折疊到低頻同時(shí)保證折疊后的頻譜不重疊。但這里有個(gè)坑如果信號(hào)本身不是理想的帶通信號(hào)比如帶外有噪聲或者雜散這些成分也會(huì)被折疊進(jìn)來(lái)。所以中頻濾波器的作用非常關(guān)鍵必須在ADC之前把帶外成分濾干凈。我一般會(huì)在中頻放大器后面加一個(gè)聲表濾波器或者LC帶通濾波器把帶外抑制做到40dB以上這樣折疊進(jìn)來(lái)的噪聲才不會(huì)影響靈敏度。2.3 采樣時(shí)鐘抖動(dòng)對(duì)信噪比的影響選好了采樣率接下來(lái)要關(guān)注的是采樣時(shí)鐘的質(zhì)量。ADC的信噪比不僅取決于量化位數(shù)還和采樣時(shí)鐘的抖動(dòng)密切相關(guān)。時(shí)鐘抖動(dòng)會(huì)導(dǎo)致采樣時(shí)刻偏離理想位置對(duì)于高頻信號(hào)來(lái)說(shuō)這個(gè)偏差會(huì)被放大。具體的關(guān)系可以用這個(gè)公式估算SNR_jitter -20·log10(2π·f·σ_t)其中f是信號(hào)頻率σ_t是時(shí)鐘抖動(dòng)的RMS值。假設(shè)你的中頻信號(hào)在140MHz時(shí)鐘抖動(dòng)是1ps RMS那么SNR_jitter -20·log10(2π×140e6×1e-12) ≈ -20·log10(8.8e-4) ≈ 61dB。如果你用的是12位ADC理論SNR大約是74dB但時(shí)鐘抖動(dòng)把實(shí)際SNR限制到了61dB。如果時(shí)鐘抖動(dòng)惡化到10psSNR直接掉到41dB12位ADC就浪費(fèi)了。所以選中頻采樣方案的時(shí)候時(shí)鐘源的選擇和PCB布局的走線質(zhì)量必須重視。我一般會(huì)選相位噪聲指標(biāo)好的晶振或者時(shí)鐘芯片比如-150dBc/Hz10kHz偏移這種級(jí)別的。PCB上時(shí)鐘走線要遠(yuǎn)離數(shù)字信號(hào)線盡量走差分包地處理。這些細(xì)節(jié)看起來(lái)不起眼但實(shí)測(cè)的時(shí)候差別很大。3. 數(shù)字下變頻的FPGA實(shí)現(xiàn)從混頻到抽取的完整鏈路3.1 數(shù)字混頻把中頻信號(hào)搬到零頻ADC采樣之后你拿到的是實(shí)信號(hào)序列假設(shè)采樣率110MHz信號(hào)中心在30MHz。數(shù)字下變頻的第一步是混頻也就是把這個(gè)30MHz的信號(hào)搬到零頻。做法很簡(jiǎn)單把ADC數(shù)據(jù)分別乘以cos(2π·30e6·n/110e6)和-sin(2π·30e6·n/110e6)得到I路和Q路。在FPGA里實(shí)現(xiàn)這個(gè)乘法通常用查找表或者CORDIC算法生成正余弦值。查找表的做法是把一個(gè)周期的正余弦波形量化成N個(gè)點(diǎn)存到ROM里然后用一個(gè)相位累加器控制讀取地址。相位累加器的位寬決定了頻率分辨率比如32位累加器時(shí)鐘110MHz頻率分辨率就是110e6/2^32 ≈ 0.0256Hz完全夠用。這里有個(gè)實(shí)際的問(wèn)題NCO數(shù)控振蕩器的輸出頻率必須和ADC采樣率相干否則混頻之后會(huì)有殘余的頻率偏差。所謂相干就是NCO頻率和采樣率之比是有理數(shù)而且最好能整除。比如采樣率110MHzNCO頻率30MHz110/3011/3不是整數(shù)比但相位累加器每3個(gè)采樣點(diǎn)走11個(gè)周期還是能保證相位連續(xù)。如果NCO頻率是27.5MHz110/27.54正好整除相位累加器每4個(gè)點(diǎn)走一個(gè)完整周期實(shí)現(xiàn)起來(lái)更簡(jiǎn)單?;祛l之后的信號(hào)是復(fù)數(shù)形式I路和Q路各一路。這時(shí)候信號(hào)的頻譜已經(jīng)從30MHz搬到了零頻附近正頻率部分在0到10MHz負(fù)頻率部分在-10到0MHz。但注意由于輸入是實(shí)信號(hào)I路和Q路是相關(guān)的不是獨(dú)立的。真正要得到獨(dú)立的I/Q還需要后面的低通濾波和抽取。3.2 抽取濾波降采樣率同時(shí)保留有用信號(hào)混頻之后信號(hào)帶寬還是20MHz但采樣率還是110MHz數(shù)據(jù)率太高后續(xù)處理吃不消。這時(shí)候需要抽取也就是每隔M個(gè)點(diǎn)取一個(gè)把采樣率降到110/M MHz。但直接抽取會(huì)出問(wèn)題如果抽取后的采樣率不滿足奈奎斯特條件信號(hào)會(huì)混疊。所以在抽取之前必須先低通濾波把信號(hào)帶寬限制到新的奈奎斯特頻率以內(nèi)。假設(shè)我要把采樣率降到27.5MHz抽取因子M4。新的奈奎斯特頻率是13.75MHz而信號(hào)帶寬是20MHz從-10到10MHz超過(guò)了13.75MHz。所以不能直接抽4倍得先濾波把帶寬限制到13.75MHz以內(nèi)。但這樣會(huì)損失信號(hào)帶寬不行。那怎么辦答案是用多級(jí)抽取先濾掉一部分抽一次再濾再抽。實(shí)際工程中常用的結(jié)構(gòu)是CIC濾波器加半帶濾波器再加FIR濾波器。CIC濾波器適合大倍數(shù)抽取不需要乘法器但通帶不平坦需要后級(jí)補(bǔ)償。半帶濾波器系數(shù)對(duì)稱有一半是零乘法器用量少適合2倍抽取。FIR濾波器可以做成任意響應(yīng)但資源消耗大一般放在最后一級(jí)做精細(xì)整形。我做過(guò)的一個(gè)項(xiàng)目中采樣率110MHz信號(hào)帶寬20MHz目標(biāo)是把采樣率降到27.5MHz。方案是第一級(jí)CIC抽取2倍采樣率降到55MHz第二級(jí)半帶濾波器抽取2倍降到27.5MHz。CIC的通帶衰減在10MHz處大約是0.5dB半帶濾波器在10MHz處也有約0.5dB衰減加起來(lái)1dB左右可以接受。如果對(duì)通帶平坦度要求更高可以在最后加一個(gè)小的補(bǔ)償FIR。3.3 多相濾波結(jié)構(gòu)資源優(yōu)化的關(guān)鍵技巧抽取濾波器的直接實(shí)現(xiàn)有個(gè)問(wèn)題如果先濾波再抽取濾波器在每個(gè)采樣點(diǎn)都要算一遍但抽取之后只保留M個(gè)點(diǎn)中的一個(gè)意味著M-1個(gè)點(diǎn)的計(jì)算被浪費(fèi)了。多相濾波結(jié)構(gòu)就是來(lái)解決這個(gè)問(wèn)題的。多相濾波的思路是把濾波器的系數(shù)按照抽取因子M分成M組每組系數(shù)對(duì)應(yīng)一個(gè)相位。輸入數(shù)據(jù)也按照M的節(jié)奏分配給不同的相位分支每個(gè)分支只計(jì)算自己那一路的卷積最后把M個(gè)分支的輸出按順序拼接起來(lái)。這樣計(jì)算量降到了原來(lái)的1/M資源消耗大幅降低。具體實(shí)現(xiàn)的時(shí)候假設(shè)濾波器有N個(gè)抽頭抽取因子M那么每個(gè)多相分支有N/M個(gè)抽頭。輸入數(shù)據(jù)以M為周期輪流進(jìn)入各個(gè)分支每個(gè)分支的輸出就是該分支系數(shù)和對(duì)應(yīng)輸入數(shù)據(jù)的卷積。最后用一個(gè)M選一的并串轉(zhuǎn)換把各路輸出合成一路。這個(gè)結(jié)構(gòu)在FPGA里實(shí)現(xiàn)起來(lái)很自然因?yàn)镕PGA本來(lái)就擅長(zhǎng)并行處理。我一般會(huì)用移位寄存器組來(lái)緩存輸入數(shù)據(jù)然后用M個(gè)并行的乘加單元同時(shí)計(jì)算各分支的輸出。如果資源緊張也可以只用一個(gè)乘加單元分時(shí)復(fù)用但那樣時(shí)鐘頻率得跑得更高。4. 實(shí)測(cè)中容易踩的坑與排查思路4.1 頻譜出現(xiàn)鏡像I/Q不平衡的排查數(shù)字下變頻之后理想情況下正頻率和負(fù)頻率應(yīng)該完全分開(kāi)頻譜上只看到一邊。但實(shí)際調(diào)試的時(shí)候經(jīng)常會(huì)在另一邊看到一個(gè)鏡像分量幅度可能只比主信號(hào)低20到30dB。這個(gè)鏡像就是I/Q不平衡造成的。I/Q不平衡的來(lái)源有幾個(gè)一是NCO產(chǎn)生的正余弦幅度不一致二是I路和Q路的濾波器系數(shù)有差異三是混頻之后的增益不一致。排查的時(shí)候可以逐級(jí)看先在混頻輸出接一個(gè)頻譜儀或者用FPGA的ILA抓數(shù)據(jù)做FFT看I路和Q路的幅度是否一致然后看濾波器的頻率響應(yīng)是否對(duì)稱最后看NCO的查找表精度是否夠。解決I/Q不平衡的辦法最直接的是提高NCO查找表的精度和濾波器的對(duì)稱性。如果硬件已經(jīng)定了也可以在數(shù)字域做校正比如用一個(gè)復(fù)數(shù)濾波器來(lái)補(bǔ)償幅度和相位誤差。我一般會(huì)在設(shè)計(jì)階段就把NCO的查找表做到16位以上濾波器系數(shù)用對(duì)稱結(jié)構(gòu)這樣鏡像抑制能做到50dB以上。4.2 輸出頻譜出現(xiàn)雜散時(shí)鐘泄漏與量化噪聲另一個(gè)常見(jiàn)問(wèn)題是輸出頻譜上有莫名其妙的雜散。有一次我調(diào)一個(gè)鏈路發(fā)現(xiàn)輸出在某個(gè)特定頻率上總有一個(gè)小尖峰換了采樣率就消失換回來(lái)又出現(xiàn)。后來(lái)查了半天發(fā)現(xiàn)是采樣時(shí)鐘的諧波和NCO頻率混頻產(chǎn)生的。這種雜散的根源是時(shí)鐘泄漏。ADC的采樣時(shí)鐘會(huì)通過(guò)電源或者地平面耦合到模擬輸入端和信號(hào)一起被采樣。如果時(shí)鐘頻率的某個(gè)諧波剛好落在信號(hào)帶內(nèi)就會(huì)產(chǎn)生固定的雜散。解決辦法一是改善時(shí)鐘的屏蔽和濾波二是在數(shù)字域用陷波器把已知的雜散頻率濾掉。量化噪聲也是雜散的來(lái)源之一。ADC的量化誤差不是白噪聲而是和輸入信號(hào)相關(guān)的確定性誤差會(huì)產(chǎn)生諧波失真。如果輸入信號(hào)幅度太接近滿量程諧波失真會(huì)惡化。我一般會(huì)把輸入信號(hào)幅度控制在滿量程的-6dB到-12dB之間留足夠的余量。4.3 抽取濾波器通帶邊緣衰減過(guò)大抽取濾波器的通帶邊緣衰減是個(gè)容易被忽視的問(wèn)題。CIC濾波器的頻率響應(yīng)是sinc函數(shù)在通帶邊緣衰減很明顯。如果信號(hào)帶寬剛好到通帶邊緣衰減可能達(dá)到3dB甚至更多導(dǎo)致信號(hào)幅度不一致。解決這個(gè)問(wèn)題有兩個(gè)思路一是讓濾波器的通帶比信號(hào)帶寬寬一些比如信號(hào)帶寬20MHz濾波器通帶做到25MHz這樣20MHz處的衰減就很小了二是加補(bǔ)償濾波器把CIC的sinc衰減補(bǔ)回來(lái)。補(bǔ)償濾波器的系數(shù)可以用MATLAB的firls函數(shù)設(shè)計(jì)讓它的頻率響應(yīng)和CIC的衰減相反。我一般會(huì)先用MATLAB把整個(gè)抽取鏈路的頻率響應(yīng)仿真一遍看看通帶波動(dòng)和阻帶衰減是否滿足要求。如果通帶波動(dòng)超過(guò)0.5dB就加補(bǔ)償如果阻帶衰減不夠就增加濾波器階數(shù)或者換更高級(jí)的濾波器結(jié)構(gòu)。5. 從仿真到上板我的調(diào)試流程與經(jīng)驗(yàn)5.1 MATLAB仿真先把算法跑通再寫RTL我見(jiàn)過(guò)不少人直接上手寫Verilog結(jié)果調(diào)了半天發(fā)現(xiàn)算法本身就有問(wèn)題。我的習(xí)慣是先在MATLAB里把整個(gè)鏈路仿真一遍包括信號(hào)生成、帶通采樣、數(shù)字混頻、抽取濾波最后看頻譜和星座圖是否正常。MATLAB仿真的好處是可以快速試錯(cuò)改個(gè)參數(shù)幾秒鐘就能看到結(jié)果比在FPGA里改代碼再綜合快得多。仿真的時(shí)候要注意幾點(diǎn)一是采樣率要設(shè)成和實(shí)際一致二是要加入噪聲和時(shí)鐘抖動(dòng)模型三是要用定點(diǎn)數(shù)仿真而不是浮點(diǎn)數(shù)因?yàn)镕PGA里是定點(diǎn)運(yùn)算。定點(diǎn)數(shù)的位寬選擇很關(guān)鍵位寬不夠會(huì)導(dǎo)致量化噪聲大位寬太大浪費(fèi)資源。我一般會(huì)先用浮點(diǎn)仿真確認(rèn)算法正確然后逐步降低位寬看性能惡化到什么程度找到一個(gè)平衡點(diǎn)。5.2 FPGA上板調(diào)試ILA抓數(shù)據(jù)做FFT算法仿真通過(guò)之后接下來(lái)是寫RTL、綜合、上板。上板之后第一件事是用ILA抓ADC的原始數(shù)據(jù)做一次FFT看看頻譜對(duì)不對(duì)。如果頻譜和MATLAB仿真不一致那說(shuō)明ADC配置或者時(shí)鐘有問(wèn)題。確認(rèn)ADC數(shù)據(jù)正確之后再逐級(jí)抓混頻輸出、濾波輸出看每一級(jí)的頻譜是否符合預(yù)期。ILA抓數(shù)據(jù)的深度有限一般只能抓幾千個(gè)點(diǎn)做FFT的頻率分辨率不夠高。如果需要更精細(xì)的頻譜分析可以把數(shù)據(jù)通過(guò)UART或者以太網(wǎng)傳到上位機(jī)用MATLAB或者Python做離線分析。我一般會(huì)在FPGA里加一個(gè)數(shù)據(jù)緩存模塊把需要分析的數(shù)據(jù)存到RAM里然后慢慢往外傳。5.3 資源與時(shí)序的平衡數(shù)字下變頻鏈路在FPGA里占的資源不少尤其是FIR濾波器乘法器用量很大。如果FPGA資源緊張可以考慮幾個(gè)優(yōu)化方向一是用時(shí)分復(fù)用的方式共享乘法器二是用CSD編碼或者分布式算法減少乘法器數(shù)量三是降低濾波器階數(shù)或者用更高效的濾波器結(jié)構(gòu)。時(shí)序方面高速采樣率下比如110MHz以上乘加運(yùn)算的流水線設(shè)計(jì)很關(guān)鍵。我一般會(huì)把乘法和加法分成多級(jí)流水確保每級(jí)之間的邏輯延遲不超過(guò)時(shí)鐘周期。如果時(shí)序不滿足可以插入額外的寄存器但會(huì)增加延遲。延遲增加會(huì)影響整個(gè)鏈路的實(shí)時(shí)性需要權(quán)衡。6. 幾個(gè)值得關(guān)注的擴(kuò)展方向6.1 多通道幅相一致性校準(zhǔn)如果你做的是相控陣或者多通道接收機(jī)數(shù)字下變頻之后還需要關(guān)注各通道之間的幅相一致性。不同通道的ADC、混頻器、濾波器不可能完全一致會(huì)導(dǎo)致波束形成的時(shí)候旁瓣升高。校準(zhǔn)的方法是在每個(gè)通道注入一個(gè)已知的參考信號(hào)測(cè)量各通道的幅度和相位差異然后在數(shù)字域補(bǔ)償。6.2 自適應(yīng)濾波在數(shù)字下變頻中的應(yīng)用如果干擾信號(hào)很強(qiáng)而且頻率會(huì)變化固定系數(shù)的濾波器就不夠用了。這時(shí)候可以用自適應(yīng)濾波比如LMS算法讓濾波器系數(shù)根據(jù)輸入信號(hào)自動(dòng)調(diào)整把干擾抑制掉。自適應(yīng)濾波的計(jì)算量比固定濾波大不少但在FPGA里用并行結(jié)構(gòu)實(shí)現(xiàn)也是可行的。6.3 高采樣率下的JESD204B接口當(dāng)采樣率超過(guò)200MHz的時(shí)候傳統(tǒng)的并行LVDS接口走線太多PCB布局困難。JESD204B接口用高速串行鏈路傳輸ADC數(shù)據(jù)線數(shù)少同步機(jī)制完善適合高采樣率多通道的應(yīng)用。但JESD204B的調(diào)試比LVDS復(fù)雜需要配置鏈路參數(shù)、做同步測(cè)試上手門檻高一些。我在實(shí)際項(xiàng)目里用JESD204B的時(shí)候最頭疼的是鏈路同步問(wèn)題。有時(shí)候鏈路能建立但數(shù)據(jù)不對(duì)查半天發(fā)現(xiàn)是SYSREF信號(hào)的時(shí)序不滿足要求。后來(lái)學(xué)乖了每次上電都先讀JESD204B的狀態(tài)寄存器確認(rèn)鏈路同步、幀同步、多幀同步都正常了再往下走。這個(gè)習(xí)慣幫我省了不少調(diào)試時(shí)間。最后分享一個(gè)小技巧數(shù)字下變頻鏈路里的NCO頻率、抽取因子、濾波器系數(shù)這些參數(shù)最好做成寄存器可配置的而不是寫死在RTL里。這樣調(diào)試的時(shí)候可以通過(guò)上位機(jī)動(dòng)態(tài)修改不用每次都重新綜合。我一般會(huì)用一個(gè)SPI或者UART接口來(lái)配置這些參數(shù)配合上位機(jī)軟件調(diào)試效率能提高好幾倍。