第十八章 七十二小時
決賽之前,左城必須先把環節二的硬仗打完。
算法移植到定製晶片上的問題已經解決了,接下來是系統集成和聯調——把移植後的算法裝進藍灣通信南區實驗基站的信號處理單元,和基站的其他模塊完成對接,確保整套系統能協同運轉。
韓哲給左城開了遠程訪問權限,但聯調階段的最後一步必須到現場做——因為真實基站的射頻模塊和天線陣列沒法遠程模擬,信號鏈路的端到端測試必須在物理設備上跑。
十一月八號,左城和方澤一起去了藍灣通信南區基站。
基站建在一棟商業樓的樓頂,外面是一排白色的天線陣列,裡面是一個不到二十平米的設備間,塞滿了機櫃、光纖和散熱風扇,嗡嗡聲吵得說話要抬高音量。
藍灣通信派了一個現場工程師配合他們,叫老吳,四十多歲,穿一件油漬斑斑的工裝,說話帶著濃重的南方口音。
」你們就是學校來的?」老吳上下打量了他倆一眼,語氣裡帶著善意的懷疑,」這麼年輕,行不行啊?」
」試試就知道了。」左城笑了一下,打開筆記本電腦接入基站的調試埠。
聯調的前半段出乎意料地順利。算法模塊和基站的基帶處理單元對接成功,數據通路跑通了,信號採集和輸出都正常。方澤全程盯著嵌入式平台的運行狀態,內存占用、CPU負載、中斷響應時間全部在安全線以內。
問題出在射頻端。
當左城把算法切換到實時處理模式,開始接收天線陣列送過來的真實無線信號時,輸出數據出現了一種詭異的周期性抖動——每隔大約四秒鐘,信道估計值會突然偏移一次,然後又恢復正常。
偏移幅度不大,但足以讓性能指標掉到達標線以下。
」這個抖動不是算法的問題。」方澤看著示波器上的波形,皺起眉頭,」周期太規律了,四秒一次,像是外部干擾。」
左城也注意到了這個規律。他轉頭看向老吳:」基站周圍有沒有什麼設備會產生四秒周期的電磁干擾?」
老吳想了想,一拍大腿:」隔壁樓頂有個氣象監測站,上面那個雷達每四秒轉一圈。之前就有工程師反映過這個問題,但因為不影響常規通信,一直沒處理。」
左城和方澤對視了一眼。
氣象雷達的旁瓣信號泄露到了基站的接收頻段,每轉一圈就干擾一次。常規通信算法對這種級別的干擾不敏感,但左城的自適應追蹤算法精度更高,反而把這個干擾給」看見」了。
精度太高也是一種煩惱。
」兩條路。」左城在筆記本上飛快地畫了個示意圖,」第一條,在算法前端加一個陷波濾波器,把氣象雷達的頻段直接濾掉。簡單粗暴,但會損失一小段有用頻譜。第二條,在自適應追蹤模塊里加一個周期性干擾識別機制,讓算法自己學會區分雷達干擾和有用信號。」
」第二條更優雅,但開發時間——」方澤說。
」兩個小時夠。」左城說。
方澤看了他一眼,沒有質疑,轉身去調試環境裡開了一個新分支。
左城坐下來寫代碼。周期性干擾的識別邏輯不複雜——干擾的頻率、幅度和持續時間都是固定的,只要在追蹤模塊的輸入端加一層模式匹配,識別出干擾特徵後將其從信號中剝離,剩下的就是純淨的有用信號。
一個半小時後,新模塊寫完了。方澤把代碼刷進晶片,重新跑測試。
四秒周期的抖動消失了。信道估計值的曲線變得光滑而穩定,所有性能指標回到了達標線以上。
老吳站在旁邊看了全程,原本掛在臉上的懷疑表情早就沒了,取而代之的是一種老工程師特有的欣慰。
」小伙子們可以啊。」他拍了拍左城的肩膀,力氣大得左城往前踉蹌了半步,」這個雷達干擾的問題困擾我們半年了,你們一下午就給解決了。」
」是順手的事。」左城穩住身形,笑了笑。
聯調全部完成。
接下來是最後的關卡——七十二小時連續運行驗證。
算法必須在真實基站環境中不間斷運行三天三夜,處理數千名真實用戶的通信信號,期間不能出現任何崩潰、死機或性能驟降。
十一月十號上午十點,左城啟動了七十二小時測試。
前二十四小時風平浪靜。算法運行穩定,各項指標在達標線以上,波動極小。左城每隔兩小時通過遠程系統檢查一次運行狀態,方澤同步監控嵌入式平台的資源消耗。
第三十六小時,凌晨四點,左城被手機震醒了。
方澤發來消息:」內存泄漏。很慢,每小時大概增長0.3%,但如果持續下去,預計在第六十小時左右會撞到上限。」
左城一個激靈坐起來,打開電腦遠程連入基站調試系統。
方澤說得沒錯。嵌入式平台的內存占用在以極其緩慢的速度上升——每小時0.3%,在短時間內完全感覺不到,但七十二小時就是超過20%的增長。一旦內存占滿,系統要麼變慢要麼直接崩潰。
」定位到了。」方澤在凌晨四點二十分又發來一條消息,」干擾識別模塊的緩衝區沒有做循環覆寫,每識別到一次干擾就分配一小塊新內存記錄日誌,但記錄完之後沒有釋放。常規測試時間短看不出來,長時間運行就累積了。」
左城閉了一秒鐘眼。
這是他自己寫的代碼里的bug。一個半小時趕工寫出來的模塊,測試不夠充分,漏掉了內存釋放。
」能熱修復嗎?」他問。熱修復是指不重啟系統的情況下在線打補丁——如果必須重啟,七十二小時測試就得從頭計時。
方澤回了兩個字:」能。但需要你這邊遠程把補丁包編好,我來推送。」
左城用了十五分鐘寫完補丁——把緩衝區改成環形結構,固定大小,新數據自動覆蓋最老的數據,內存占用恆定不變。方澤遠程推送,熱修復成功。
內存占用曲線立刻走平了。
凌晨四點四十二分,一切恢復正常。
左城靠在椅背上,後背全是冷汗。
如果方澤沒有在凌晨四點發現這個問題,等到第六十小時內存崩潰再處理,七十二小時測試就廢了,環節二的期限也會變得極其緊張。
他給方澤發了一條消息:」謝了。這個bug是我的鍋。」
方澤回了一句:」寫代碼的人都會有bug,重要的是發現得早。睡吧,後面我盯著。」
左城沒有再睡。他坐在黑暗的宿舍里,盯著電腦屏幕上緩慢跳動的運行數據,一直看到天亮。
第七十二小時。
十一月十三號上午十點。
左城、方澤和老吳三個人站在基站設備間裡,盯著監控屏幕上的最終報告。
連續運行72小時。處理用戶信號總量:4,217,603條。信道估計平均精度:超出基準值34.2%。系統崩潰次數:0。性能驟降次數:0。內存泄漏:已修復,修復後運行36小時無異常。
老吳嘬了口保溫杯里的濃茶,點了點頭:」過了。漂漂亮亮地過了。」
左城看著屏幕上的數字,什麼都沒說,只是長長地吐了一口氣。
光幕在意識中亮起:
【主線任務鏈·通信破局·環節二:完成!】
【實測驗證評價:優秀(72小時零崩潰,性能超標34.2%)】
【獎勵發放中——】
【解鎖葉片:通信系統工程 ✓】
【積分+10(當前積分:23)】
【因評價等級為」優秀」,環節三期限額外延長7天。】
【環節三即將解鎖——】
二十三個積分。五枚葉片。
左城關掉面板,看了方澤一眼。方澤靠在機柜上,雙手插兜,面無表情,但嘴角有一個極其輕微的弧度。
」走。」左城說,」回學校。四天後決賽。」
算法移植到定製晶片上的問題已經解決了,接下來是系統集成和聯調——把移植後的算法裝進藍灣通信南區實驗基站的信號處理單元,和基站的其他模塊完成對接,確保整套系統能協同運轉。
韓哲給左城開了遠程訪問權限,但聯調階段的最後一步必須到現場做——因為真實基站的射頻模塊和天線陣列沒法遠程模擬,信號鏈路的端到端測試必須在物理設備上跑。
十一月八號,左城和方澤一起去了藍灣通信南區基站。
基站建在一棟商業樓的樓頂,外面是一排白色的天線陣列,裡面是一個不到二十平米的設備間,塞滿了機櫃、光纖和散熱風扇,嗡嗡聲吵得說話要抬高音量。
藍灣通信派了一個現場工程師配合他們,叫老吳,四十多歲,穿一件油漬斑斑的工裝,說話帶著濃重的南方口音。
」你們就是學校來的?」老吳上下打量了他倆一眼,語氣裡帶著善意的懷疑,」這麼年輕,行不行啊?」
」試試就知道了。」左城笑了一下,打開筆記本電腦接入基站的調試埠。
聯調的前半段出乎意料地順利。算法模塊和基站的基帶處理單元對接成功,數據通路跑通了,信號採集和輸出都正常。方澤全程盯著嵌入式平台的運行狀態,內存占用、CPU負載、中斷響應時間全部在安全線以內。
問題出在射頻端。
當左城把算法切換到實時處理模式,開始接收天線陣列送過來的真實無線信號時,輸出數據出現了一種詭異的周期性抖動——每隔大約四秒鐘,信道估計值會突然偏移一次,然後又恢復正常。
偏移幅度不大,但足以讓性能指標掉到達標線以下。
」這個抖動不是算法的問題。」方澤看著示波器上的波形,皺起眉頭,」周期太規律了,四秒一次,像是外部干擾。」
左城也注意到了這個規律。他轉頭看向老吳:」基站周圍有沒有什麼設備會產生四秒周期的電磁干擾?」
老吳想了想,一拍大腿:」隔壁樓頂有個氣象監測站,上面那個雷達每四秒轉一圈。之前就有工程師反映過這個問題,但因為不影響常規通信,一直沒處理。」
左城和方澤對視了一眼。
氣象雷達的旁瓣信號泄露到了基站的接收頻段,每轉一圈就干擾一次。常規通信算法對這種級別的干擾不敏感,但左城的自適應追蹤算法精度更高,反而把這個干擾給」看見」了。
精度太高也是一種煩惱。
」兩條路。」左城在筆記本上飛快地畫了個示意圖,」第一條,在算法前端加一個陷波濾波器,把氣象雷達的頻段直接濾掉。簡單粗暴,但會損失一小段有用頻譜。第二條,在自適應追蹤模塊里加一個周期性干擾識別機制,讓算法自己學會區分雷達干擾和有用信號。」
」第二條更優雅,但開發時間——」方澤說。
」兩個小時夠。」左城說。
方澤看了他一眼,沒有質疑,轉身去調試環境裡開了一個新分支。
左城坐下來寫代碼。周期性干擾的識別邏輯不複雜——干擾的頻率、幅度和持續時間都是固定的,只要在追蹤模塊的輸入端加一層模式匹配,識別出干擾特徵後將其從信號中剝離,剩下的就是純淨的有用信號。
一個半小時後,新模塊寫完了。方澤把代碼刷進晶片,重新跑測試。
四秒周期的抖動消失了。信道估計值的曲線變得光滑而穩定,所有性能指標回到了達標線以上。
老吳站在旁邊看了全程,原本掛在臉上的懷疑表情早就沒了,取而代之的是一種老工程師特有的欣慰。
」小伙子們可以啊。」他拍了拍左城的肩膀,力氣大得左城往前踉蹌了半步,」這個雷達干擾的問題困擾我們半年了,你們一下午就給解決了。」
」是順手的事。」左城穩住身形,笑了笑。
聯調全部完成。
接下來是最後的關卡——七十二小時連續運行驗證。
算法必須在真實基站環境中不間斷運行三天三夜,處理數千名真實用戶的通信信號,期間不能出現任何崩潰、死機或性能驟降。
十一月十號上午十點,左城啟動了七十二小時測試。
前二十四小時風平浪靜。算法運行穩定,各項指標在達標線以上,波動極小。左城每隔兩小時通過遠程系統檢查一次運行狀態,方澤同步監控嵌入式平台的資源消耗。
第三十六小時,凌晨四點,左城被手機震醒了。
方澤發來消息:」內存泄漏。很慢,每小時大概增長0.3%,但如果持續下去,預計在第六十小時左右會撞到上限。」
左城一個激靈坐起來,打開電腦遠程連入基站調試系統。
方澤說得沒錯。嵌入式平台的內存占用在以極其緩慢的速度上升——每小時0.3%,在短時間內完全感覺不到,但七十二小時就是超過20%的增長。一旦內存占滿,系統要麼變慢要麼直接崩潰。
」定位到了。」方澤在凌晨四點二十分又發來一條消息,」干擾識別模塊的緩衝區沒有做循環覆寫,每識別到一次干擾就分配一小塊新內存記錄日誌,但記錄完之後沒有釋放。常規測試時間短看不出來,長時間運行就累積了。」
左城閉了一秒鐘眼。
這是他自己寫的代碼里的bug。一個半小時趕工寫出來的模塊,測試不夠充分,漏掉了內存釋放。
」能熱修復嗎?」他問。熱修復是指不重啟系統的情況下在線打補丁——如果必須重啟,七十二小時測試就得從頭計時。
方澤回了兩個字:」能。但需要你這邊遠程把補丁包編好,我來推送。」
左城用了十五分鐘寫完補丁——把緩衝區改成環形結構,固定大小,新數據自動覆蓋最老的數據,內存占用恆定不變。方澤遠程推送,熱修復成功。
內存占用曲線立刻走平了。
凌晨四點四十二分,一切恢復正常。
左城靠在椅背上,後背全是冷汗。
如果方澤沒有在凌晨四點發現這個問題,等到第六十小時內存崩潰再處理,七十二小時測試就廢了,環節二的期限也會變得極其緊張。
他給方澤發了一條消息:」謝了。這個bug是我的鍋。」
方澤回了一句:」寫代碼的人都會有bug,重要的是發現得早。睡吧,後面我盯著。」
左城沒有再睡。他坐在黑暗的宿舍里,盯著電腦屏幕上緩慢跳動的運行數據,一直看到天亮。
第七十二小時。
十一月十三號上午十點。
左城、方澤和老吳三個人站在基站設備間裡,盯著監控屏幕上的最終報告。
連續運行72小時。處理用戶信號總量:4,217,603條。信道估計平均精度:超出基準值34.2%。系統崩潰次數:0。性能驟降次數:0。內存泄漏:已修復,修復後運行36小時無異常。
老吳嘬了口保溫杯里的濃茶,點了點頭:」過了。漂漂亮亮地過了。」
左城看著屏幕上的數字,什麼都沒說,只是長長地吐了一口氣。
光幕在意識中亮起:
【主線任務鏈·通信破局·環節二:完成!】
【實測驗證評價:優秀(72小時零崩潰,性能超標34.2%)】
【獎勵發放中——】
【解鎖葉片:通信系統工程 ✓】
【積分+10(當前積分:23)】
【因評價等級為」優秀」,環節三期限額外延長7天。】
【環節三即將解鎖——】
二十三個積分。五枚葉片。
左城關掉面板,看了方澤一眼。方澤靠在機柜上,雙手插兜,面無表情,但嘴角有一個極其輕微的弧度。
」走。」左城說,」回學校。四天後決賽。」