字預(yù)失真技術(shù)全解析)
1. 從一次調(diào)試翻車說起為什么PA的非線性問題繞不開剛?cè)胄心菚何邑?fù)責(zé)一個2.4GHz的無線通信模塊調(diào)試。發(fā)射鏈路裝好之后頻譜儀上一看鄰道功率比ACPR慘不忍睹EVM星座圖糊成一團(tuán)。當(dāng)時第一反應(yīng)是基帶算法有問題查了半天代碼最后發(fā)現(xiàn)罪魁禍?zhǔn)资巧漕l功率放大器PA工作在接近飽和區(qū)時產(chǎn)生的非線性失真。這個經(jīng)歷讓我深刻認(rèn)識到只要做射頻發(fā)射鏈路PA的非線性就是一道必須跨過去的坎。PA也就是功率放大器是射頻發(fā)射鏈路里最“吃電”也最容易“惹事”的器件。它的核心任務(wù)是把微弱的射頻信號放大到足夠的功率然后通過天線輻射出去。但問題在于PA的晶體管本身是非線性器件——輸入功率小的時候輸出還比較“聽話”線性放大一旦輸入功率增大到接近飽和點輸出就開始“不聽話”了幅度被壓縮、相位被扭曲產(chǎn)生各種諧波和互調(diào)分量。這些非線性產(chǎn)物落到相鄰信道里就是干擾落到自己星座圖上就是誤碼。解決這個問題的核心技術(shù)就是DPDDigital Pre-Distortion數(shù)字預(yù)失真。它的思路很巧妙既然PA本身是非線性的那我就在信號進(jìn)入PA之前先人為地加入一個“反向失真”讓這個反向失真和PA的失真相互抵消最終讓整個鏈路的輸出變得線性。打個比方PA像一面哈哈鏡把人照變形了DPD就是在鏡子前面再放一面“反向哈哈鏡”兩面鏡子疊加之后照出來的人就正常了。這套技術(shù)目前已經(jīng)成了基站、手機(jī)、衛(wèi)星通信、雷達(dá)等射頻系統(tǒng)的標(biāo)配。不管你是剛?cè)腴T的射頻工程師還是做基帶算法的開發(fā)者只要涉及發(fā)射鏈路PA非線性和DPD預(yù)失真都是繞不開的核心知識點。接下來我會從PA非線性的根源講起把DPD的原理、模型、實現(xiàn)步驟、調(diào)試經(jīng)驗一層層拆開盡量讓不同基礎(chǔ)的讀者都能看懂、能上手。2. PA非線性到底從哪來根源拆解與影響分析2.1 晶體管為什么會“不聽話”要理解PA的非線性得先從半導(dǎo)體器件的物理特性說起。以最常見的GaAs HBT或LDMOS晶體管為例它的輸入輸出特性曲線并不是一條直線。在小信號區(qū)域晶體管的跨導(dǎo)基本恒定輸出功率和輸入功率呈線性關(guān)系但隨著輸入功率增大晶體管進(jìn)入大信號工作區(qū)跨導(dǎo)開始壓縮增益下降輸出功率不再隨輸入功率線性增長。這個過程可以用一個簡單的多項式模型來描述。假設(shè)輸入信號為x(t)輸出信號為y(t)那么y(t) a1·x(t) a2·x2(t) a3·x3(t) ...其中a1是線性增益系數(shù)a2、a3是高階非線性系數(shù)。正是這些高階項導(dǎo)致了諧波和互調(diào)產(chǎn)物的產(chǎn)生。比如輸入一個單音信號cos(ωt)經(jīng)過三次方項之后會產(chǎn)生cos(3ωt)的三次諧波如果輸入的是雙音信號cos(ω1t)cos(ω2t)三次方項會產(chǎn)生2ω1-ω2和2ω2-ω1的互調(diào)分量這就是著名的三階互調(diào)IMD3。在實際工程中我們通常用1dB壓縮點P1dB和三階交調(diào)截點IP3來衡量PA的線性度。P1dB是指實際增益比理想線性增益低1dB時的輸出功率點IP3則是通過雙音測試外推得到的假想截點。這兩個參數(shù)越大說明PA的線性度越好但通常也意味著更高的功耗和更低的效率——這就是射頻設(shè)計里經(jīng)典的線性度與效率的權(quán)衡。2.2 非線性帶來的三類典型危害PA非線性造成的危害可以從三個維度來看理解了這些危害才能明白為什么DPD如此重要。第一類是頻譜再生Spectral Regrowth。非線性產(chǎn)生的互調(diào)分量會落在工作頻帶兩側(cè)的相鄰信道上造成鄰道干擾。在OFDM系統(tǒng)中由于信號本身峰均比PAPR很高信號包絡(luò)波動大PA更容易被推到非線性區(qū)頻譜再生問題尤其嚴(yán)重。運(yùn)營商對ACPR有嚴(yán)格的指標(biāo)要求比如基站通常要求ACPR低于-45dBc甚至-50dBc不滿足這個指標(biāo)設(shè)備根本不能入網(wǎng)。第二類是星座圖畸變Constellation Distortion。非線性會導(dǎo)致信號的幅度和相位同時發(fā)生畸變在QAM星座圖上表現(xiàn)為星座點偏移、擴(kuò)散。幅度壓縮AM-AM失真讓外圈星座點向內(nèi)收縮相位偏移AM-PM失真讓星座點發(fā)生旋轉(zhuǎn)。這兩種失真疊加直接導(dǎo)致EVM惡化誤碼率上升。第三類是記憶效應(yīng)Memory Effect。當(dāng)信號帶寬較寬時PA的偏置網(wǎng)絡(luò)和熱效應(yīng)會導(dǎo)致非線性特性不僅與當(dāng)前時刻的輸入有關(guān)還與之前的輸入歷史有關(guān)。這種記憶效應(yīng)讓非線性建模和補(bǔ)償變得更加復(fù)雜也是寬帶DPD必須面對的挑戰(zhàn)。2.3 為什么不能只靠“回退”解決問題有人可能會想既然PA在大功率下非線性嚴(yán)重那我讓PA工作在遠(yuǎn)低于飽和點的區(qū)域不就行了這就是所謂的功率回退Power Back-off。理論上確實可以但代價太大了。功率回退意味著PA的輸出功率遠(yuǎn)低于它的最大能力效率急劇下降。一個AB類PA在飽和點附近效率可能有40%-50%回退6dB之后效率可能只剩10%-15%。對于基站這種7×24小時運(yùn)行的設(shè)備電費(fèi)和維護(hù)成本會大幅上升對于手機(jī)這種電池供電的設(shè)備續(xù)航直接崩掉。所以工程上的主流思路是讓PA盡量工作在高效區(qū)接近飽和點然后用DPD來補(bǔ)償非線性。這樣既保證了效率又滿足了線性度要求。這就是DPD技術(shù)的核心價值所在。3. DPD預(yù)失真技術(shù)原理用“反向失真”抵消“正向失真”3.1 預(yù)失真的基本思想DPD的核心思想可以用一句話概括在PA前面級聯(lián)一個非線性模塊這個模塊的特性是PA非線性特性的逆函數(shù)。如果PA的傳遞函數(shù)是F(·)那么DPD的傳遞函數(shù)就是F?1(·)兩者級聯(lián)之后總傳遞函數(shù)為F?1(F(x)) x理論上就是完全線性的。當(dāng)然實際中不可能做到完全理想的逆函數(shù)因為PA的非線性特性會隨溫度、頻率、老化等因素變化而且記憶效應(yīng)讓逆函數(shù)不是簡單的靜態(tài)曲線。但基本思路就是這樣用數(shù)字信號處理的方式在基帶生成一個預(yù)失真信號經(jīng)過DAC和上變頻之后送入PA最終在PA輸出端得到線性化的信號。3.2 從無記憶模型到有記憶模型DPD的模型經(jīng)歷了從簡單到復(fù)雜的發(fā)展過程理解這個演進(jìn)過程對選擇合適方案很有幫助。最早的DPD采用無記憶多項式模型也就是只根據(jù)當(dāng)前時刻的輸入信號幅度來計算預(yù)失真量。常見的實現(xiàn)方式是查找表LUT把輸入信號的幅度作為索引查表得到對應(yīng)的增益和相位調(diào)整量。這種方式實現(xiàn)簡單、資源消耗小但只能補(bǔ)償無記憶非線性對寬帶信號效果有限。后來為了處理記憶效應(yīng)出現(xiàn)了有記憶多項式模型最經(jīng)典的是記憶多項式MP模型y(n) Σ Σ a(k,m) · x(n-m) · |x(n-m)|^k其中k是多項式階數(shù)m是記憶深度。這個模型同時考慮了當(dāng)前和過去若干個采樣點的輸入能夠較好地擬合帶有記憶效應(yīng)的PA特性。MP模型的參數(shù)提取通常用最小二乘法LS或遞歸最小二乘法RLS在FPGA或DSP中實現(xiàn)時需要考慮計算復(fù)雜度和數(shù)值穩(wěn)定性。再往后還有Volterra級數(shù)模型、Wiener-Hammerstein模型、神經(jīng)網(wǎng)絡(luò)模型等更復(fù)雜的方案。Volterra模型理論上可以逼近任意非線性系統(tǒng)但參數(shù)數(shù)量隨階數(shù)和記憶深度指數(shù)增長工程實現(xiàn)難度大。神經(jīng)網(wǎng)絡(luò)模型如BP神經(jīng)網(wǎng)絡(luò)、LSTM近年來研究很多擬合能力強(qiáng)但訓(xùn)練復(fù)雜、實時性差目前在商用產(chǎn)品中還不如MP模型普及。3.3 自適應(yīng)DPD讓系統(tǒng)自己“學(xué)習(xí)”固定參數(shù)的DPD只能在一個特定工作點下有效一旦PA特性漂移比如溫度變化、天線駐波比變化線性化效果就會惡化。所以實際系統(tǒng)普遍采用自適應(yīng)DPD架構(gòu)。自適應(yīng)DPD的基本流程是從PA輸出端耦合一小部分信號經(jīng)過下變頻和ADC采樣后送回基帶與原始的參考信號進(jìn)行對比計算出當(dāng)前的誤差然后根據(jù)誤差自適應(yīng)地更新DPD模型的參數(shù)。這個反饋環(huán)路讓DPD能夠?qū)崟r跟蹤PA特性的變化保持穩(wěn)定的線性化效果。常用的自適應(yīng)算法包括LMS最小均方、RLS遞歸最小二乘和間接學(xué)習(xí)結(jié)構(gòu)ILA。ILA的思路是先訓(xùn)練一個“后失真”模型來擬合PA的逆特性然后把訓(xùn)練好的參數(shù)復(fù)制給DPD模塊。這種方式收斂速度快實現(xiàn)相對簡單是目前商用DPD中最常用的架構(gòu)之一。4. DPD系統(tǒng)實現(xiàn)全流程從建模到驗證的實操步驟4.1 第一步PA特性測量與建模DPD設(shè)計的第一步是準(zhǔn)確測量PA的非線性特性。沒有準(zhǔn)確的PA模型后續(xù)的DPD參數(shù)提取就是空中樓閣。測量平臺通常包括矢量信號發(fā)生器VSG產(chǎn)生激勵信號矢量信號分析儀VSA采集PA輸出信號兩者通過GPIB或LAN接口與PC連接由MATLAB或Python腳本控制整個測試流程。激勵信號的選擇很關(guān)鍵——常用的有雙音信號、多音信號、OFDM類信號和啁啾信號。雙音信號適合測IMD3和IP3OFDM類信號適合評估實際系統(tǒng)性能。采集到輸入輸出數(shù)據(jù)后需要進(jìn)行時間對齊和幅度歸一化。時間對齊是因為VSG和VSA之間存在觸發(fā)延遲和傳輸延遲如果對齊不準(zhǔn)后續(xù)建模誤差會很大。常用的對齊方法是互相關(guān)法找到輸入輸出信號的互相關(guān)峰值位置然后據(jù)此調(diào)整采樣點。幅度歸一化則是為了消除鏈路增益的影響讓模型只關(guān)注非線性特性本身。建模時我通常先用MP模型試一下階數(shù)從3階、5階開始記憶深度從2、4開始通過交叉驗證確定最優(yōu)的階數(shù)和記憶深度組合。判斷標(biāo)準(zhǔn)是NMSE歸一化均方誤差一般要求低于-35dB才算合格。如果NMSE降不下去可能需要考慮更復(fù)雜的模型或者檢查測量數(shù)據(jù)質(zhì)量。4.2 第二步DPD參數(shù)提取與驗證有了PA模型之后就可以提取DPD參數(shù)了。如果采用ILA架構(gòu)步驟是這樣的先用PA的輸入輸出數(shù)據(jù)訓(xùn)練一個后失真模型這個模型的輸入是PA輸出輸出是PA輸入訓(xùn)練好之后把這個模型的參數(shù)直接作為DPD的參數(shù)。參數(shù)提取的核心算法是LS或RLS。以MP模型為例把輸入信號及其各階各記憶項構(gòu)造成一個矩陣Φ輸出信號構(gòu)造成向量y那么參數(shù)向量θ (Φ?Φ)?1Φ?y。這個計算在MATLAB中一行代碼就能搞定但在FPGA中實現(xiàn)時需要考慮矩陣求逆的資源消耗通常會用QR分解或Cholesky分解來降低復(fù)雜度。提取完參數(shù)后需要在仿真環(huán)境中驗證DPD效果。把DPD模型和PA模型級聯(lián)輸入原始信號觀察輸出信號的ACPR、EVM和星座圖。如果ACPR改善量達(dá)到15dB以上EVM改善量達(dá)到5dB以上基本可以認(rèn)為DPD設(shè)計合格。如果效果不理想需要回頭檢查PA模型精度、時間對齊是否準(zhǔn)確、DPD階數(shù)和記憶深度是否合適。4.3 第三步FPGA/DSP實現(xiàn)要點從仿真到硬件實現(xiàn)是DPD開發(fā)中最容易踩坑的環(huán)節(jié)。仿真里用浮點數(shù)計算硬件里通常是定點數(shù)量化誤差會直接影響DPD效果。定點化設(shè)計時需要仔細(xì)規(guī)劃每個環(huán)節(jié)的位寬。輸入信號通常12-16bitDPD系數(shù)18-20bit乘法器輸出需要截位處理。截位策略很關(guān)鍵——直接截斷會引入直流偏移四舍五入會增加資源消耗飽和截斷則可能引入非線性。我一般先用MATLAB做定點仿真掃描不同位寬組合找到滿足性能要求的最小位寬配置然后再寫RTL代碼。FPGA實現(xiàn)DPD時流水線設(shè)計是提高吞吐率的關(guān)鍵。MP模型的計算可以分解為多個流水級第一級計算各階項第二級計算各記憶項第三級做乘累加。這樣每個時鐘周期都能處理一個新采樣點滿足寬帶信號的實時性要求。資源方面一個5階4記憶的MP模型大約需要20-30個DSP48單元對于中端FPGA來說完全可以承受。4.4 第四步系統(tǒng)聯(lián)調(diào)與性能優(yōu)化硬件實現(xiàn)完成后需要在實際系統(tǒng)中聯(lián)調(diào)。這一步最常見的問題是反饋環(huán)路延遲估計不準(zhǔn)。自適應(yīng)DPD要求反饋信號和參考信號嚴(yán)格對齊如果延遲估計有偏差參數(shù)更新就會發(fā)散。延遲估計通常分兩步粗估計用互相關(guān)法精度到采樣點級別細(xì)估計用分?jǐn)?shù)延遲濾波器精度到亞采樣點級別。粗估計的搜索范圍要覆蓋整個反饋環(huán)路的最大可能延遲細(xì)估計則用LMS自適應(yīng)濾波器來跟蹤延遲變化。另一個常見問題是DPD環(huán)路帶寬不足。如果反饋ADC的采樣率不夠高或者下變頻濾波器的帶寬太窄反饋信號就無法完整捕獲PA輸出的非線性分量DPD效果自然打折扣。一般來說反饋通道的帶寬至少要是信號帶寬的3-5倍才能保證足夠的線性化效果。5. 常見問題與排查技巧實錄5.1 DPD效果不達(dá)預(yù)期的排查思路DPD調(diào)試中最常見的問題就是“仿真效果好實測效果差”。遇到這種情況我一般按以下順序排查排查項可能問題檢查方法解決措施時間對齊反饋與參考信號未對齊觀察互相關(guān)峰值是否尖銳重新做延遲估計檢查觸發(fā)同步反饋通道ADC飽和或帶寬不足看反饋信號頻譜是否截頂調(diào)整耦合器衰減量增加反饋帶寬模型階數(shù)階數(shù)/記憶深度不夠看NMSE是否低于-35dB增加階數(shù)或記憶深度定點精度量化誤差過大對比浮點和定點仿真增加關(guān)鍵環(huán)節(jié)位寬溫度漂移PA特性變化監(jiān)測不同溫度下ACPR提高自適應(yīng)更新速率這個表格是我自己調(diào)試時總結(jié)的基本上80%的問題都能在里面找到對應(yīng)項。特別提醒一點時間對齊是重中之重我遇到過好幾次DPD效果差最后發(fā)現(xiàn)就是延遲估計差了半個采樣點。5.2 記憶效應(yīng)導(dǎo)致的“不對稱”問題寬帶信號下PA的記憶效應(yīng)會導(dǎo)致互調(diào)分量不對稱——比如三階互調(diào)中2ω1-ω2和2ω2-ω1的幅度不相等。這種不對稱性如果只用無記憶DPD是補(bǔ)償不掉的。解決方法是增加DPD模型的記憶深度。我實測過一個GaN PA在100MHz帶寬信號下記憶深度從2增加到4ACPR改善量從8dB提升到18dB。但記憶深度也不是越大越好太大容易導(dǎo)致參數(shù)提取時的數(shù)值病態(tài)問題而且資源消耗線性增長。一般建議從2開始試逐步增加找到性能拐點即可。5.3 自適應(yīng)環(huán)路的穩(wěn)定性問題自適應(yīng)DPD的反饋環(huán)路如果參數(shù)設(shè)置不當(dāng)會出現(xiàn)發(fā)散或振蕩。常見原因有三個步長太大、延遲估計錯誤、反饋信號信噪比太低。步長選擇上LMS算法的步長μ需要滿足0 μ 2/λmax其中λmax是輸入自相關(guān)矩陣的最大特征值。實際中我一般從μ0.001開始試觀察收斂曲線如果收斂太慢就適當(dāng)增大如果振蕩就減小。RLS算法收斂快但計算量大適合對收斂速度要求高的場景。反饋信號信噪比也很關(guān)鍵。如果耦合器耦合量太小反饋信號太弱ADC量化噪聲就會主導(dǎo)導(dǎo)致參數(shù)更新方向錯誤。一般要求反饋信號功率比ADC底噪高20dB以上。5.4 多頻段多模式下的DPD適配現(xiàn)在的通信系統(tǒng)往往支持多個頻段和多種制式這對DPD提出了更高要求。不同頻段下PA的特性差異很大不能共用一套DPD參數(shù)。我的做法是為每個頻段單獨(dú)訓(xùn)練DPD參數(shù)存儲在非易失存儲器中系統(tǒng)根據(jù)當(dāng)前工作頻段加載對應(yīng)參數(shù)。如果頻段切換頻繁還需要考慮參數(shù)切換的過渡問題避免切換瞬間出現(xiàn)頻譜突變。有些高端方案會采用分段DPD或者多維DPD把頻段信息也作為模型的一個維度這樣一套模型就能覆蓋多個頻段但實現(xiàn)復(fù)雜度會高不少。6. 工具選型與實戰(zhàn)建議6.1 仿真與測量工具怎么選DPD開發(fā)涉及仿真、測量和實現(xiàn)三個環(huán)節(jié)每個環(huán)節(jié)的工具選擇都會影響開發(fā)效率。仿真階段MATLAB是絕對的主力。它的Communications Toolbox和RF Toolbox提供了完整的PA建模和DPD算法函數(shù)上手快、驗證方便。Python方面NumPy和SciPy也能做但射頻相關(guān)的專用庫不如MATLAB豐富。如果要做電路級仿真ADS和AWR是主流選擇可以結(jié)合器件模型做更精確的非線性分析。測量階段矢量信號發(fā)生器和矢量信號分析儀是核心設(shè)備。Keysight、Rohde Schwarz、Anritsu是三大主流品牌各有優(yōu)勢。如果預(yù)算有限可以考慮用USRP等軟件無線電平臺搭建簡易測量環(huán)境雖然精度和動態(tài)范圍不如專業(yè)儀器但勝在靈活、成本低適合前期算法驗證。實現(xiàn)階段FPGA是主流平臺Xilinx和Intel原Altera的器件都有豐富的DSP資源。開發(fā)流程一般是MATLAB仿真驗證→定點化→RTL編碼→綜合實現(xiàn)→板級調(diào)試。如果團(tuán)隊有HLS高層次綜合經(jīng)驗可以用C/C寫算法再綜合成RTL開發(fā)效率會高很多。6.2 給新手的三個實操建議第一先把PA模型建準(zhǔn)再談DPD。我見過太多人一上來就調(diào)DPD參數(shù)結(jié)果PA模型本身就不準(zhǔn)怎么調(diào)都調(diào)不好。花時間把PA特性測準(zhǔn)、模型建準(zhǔn)后面的事情會順利很多。第二從窄帶開始逐步擴(kuò)展到寬帶。窄帶信號下記憶效應(yīng)不明顯可以先驗證無記憶DPD的基本功能確認(rèn)鏈路通了、對齊準(zhǔn)了再逐步增加帶寬和記憶深度。這樣出問題容易定位。第三重視反饋通道設(shè)計。DPD的效果上限很大程度上取決于反饋通道的質(zhì)量。耦合器方向性、衰減器精度、ADC位數(shù)、濾波器帶寬每一個環(huán)節(jié)都要認(rèn)真對待。我在一個項目里因為耦合器方向性不好導(dǎo)致反饋信號里混入了反射波DPD怎么調(diào)都差3dB換了耦合器之后立刻達(dá)標(biāo)。6.3 效率與線性度的平衡藝術(shù)最后聊一個射頻工程師永遠(yuǎn)繞不開的話題效率和線性度的平衡。DPD讓我們可以把PA推到更接近飽和點從而獲得更高的效率但DPD本身的補(bǔ)償能力也是有上限的。如果PA非線性太嚴(yán)重DPD也救不回來。實際設(shè)計中我一般會先確定系統(tǒng)對ACPR和EVM的硬性要求然后找到一個合適的功率回退點使得在這個點上PA的非線性程度在DPD的可補(bǔ)償范圍內(nèi)。這個點通常比P1dB低3-6dB具體取決于信號PAPR和DPD能力。找到這個平衡點之后再優(yōu)化DPD參數(shù)把性能推到指標(biāo)要求之上留出余量。我個人在實際項目中的體會是DPD不是萬能的它更像是一個“放大器”能把PA的線性度提升一個檔次但前提是PA本身不能太差。選一款線性度底子好的PA再配合精心調(diào)試的DPD才能做出既高效又干凈的發(fā)射鏈路。這個內(nèi)容后續(xù)還可以往寬帶DPD、多頻段DPD、以及基于機(jī)器學(xué)習(xí)的DPD方向繼續(xù)深挖每一個方向都有不少值得折騰的細(xì)節(jié)。