三千多行,注释写得很规范——这是于颖做事的风格,任何交给别人的东西都整理得干干净净。左城花了两个小时通读了一遍,把循环平稳特征检测的数学内核提炼出来。
内核思想并不复杂——通信信号天然具有周期平稳特性,比如载波频率、符号速率、帧结构都会在信号的二阶统计量中产生周期性的特征峰。通过计算信号的循环自相关函数,可以在极低信噪比下把目标信号从噪声中分离出来,同时识别出信号的调制类型和占用带宽。
优雅。左城看完数学推导后在心里给了这个评价。
但问题也很明显——循环自相关函数的计算量是信号长度的平方级别。于颖的MATLAB仿真在PC上跑一个频谱感知周期需要四百毫秒,而天穹终端的嵌入式平台算力不到PC的十分之一。直接移植的话,单次感知需要四秒以上,远超实时性要求的五十毫秒。
差了将近两个数量级。
左城关掉MATLAB代码,打开了一个空白文档,开始写自己的方案。
他不需要复制于颖的实现,他需要的是把这个算法”翻译”成嵌入式平台能跑得动的形态。
这正是他的融合级叶片”嵌入式智能信道处理”赋予他的能力——三年等效的工程经验,让他对嵌入式平台的每一寸算力都了如指掌。
第一刀砍在计算精度上。循环自相关的全精度计算需要浮点运算,但嵌入式平台的定点运算单元速度是浮点的八倍。左城推导了一套十六位定点化方案,把关键的乘累加操作全部转为定点,精度损失控制在零点五个dB以内,这对频谱感知来说完全可以接受。
这一刀砍掉了百分之六十的计算量。
第二刀砍在数据规模上。循环自相关需要对整段信号做二维扫描,但并不是所有的循环频率都有意义——卫星信号的载波频率和符号速率是已知的,可以预先计算出有限个候选循环频率,只在这些频率点上做检测。
这一刀又砍掉了百分之七十。
两刀下去,总计算量压缩到了原来的百分之十二。四百毫秒乘以零点一二,等于四十八毫秒。
卡在五十毫秒的在线,刚好够。
但”刚好够”不是左城的标准。
他又看了一遍嵌入式平台的硬件手册,找到了第三个优化点——平台的DMA控制器支持数据预取,可以在CPU计算当前帧的同时,把下一帧的数据从ADC搬到缓冲区。计算和搬运重叠执行,等效处理时间再降百分之二十。
四十八毫秒乘以零点八——三十八毫秒。
富馀量百分之二十四。够了。
左城把整套优化方案写成了一份十二页的技术文档,从数学推导到工程实现每一步都写得清清楚楚。写完的时候天已经亮了,窗外能听到早起跑步的人经过的脚步声。
他没有立刻去睡觉,而是先把文档发给了方泽和刘伟。
方泽十分钟后回了消息——他也没睡,一直在调仿真平台的参数。
”方案看了。定点化精度损失零点五dB我需要验证一下,给我两天。”
”好。”
刘伟的回复晚了半个小时:”城哥,DMA预取那个优化我之前在LoRa项目里试过类似的思路,确认可行。我来写这部分的驱动代码。”
左城看着这两条消息,嘴角微微弯了一下。
团队在成长。半年前这些优化方案只能他一个人写,现在每个人都能接住一块。
两天后方泽的仿真验证结果出来了——定点化方案在一百二十路卫星信号的仿真环境下,频谱感知准确率百分之九十一点三,虚警率百分之零点七。准确率超过百分之九十的指标,虚警率远低于百分之五的上限。
左城看着这个数字,终于允许自己松了一口气。
频谱感知前端的内核算法问题,解决了。
系统光幕亮了。
【科技树感知:宿主完成”嵌入式循环平稳频谱感知”技术方案】
【该方案融合了叶片”频谱感知与管理”和”嵌入式智能信道处理(融合级)”
不是新叶片,不是新任务,只是一个被动效果的触发。但左城知道这个百分之二十的效率提升意味着什么——频谱感知前端从最拖后腿的模块,变成了有可能最先完成的模块。
当天晚上他给于颖打了电话。
”空空,你的循环平稳方案帮了大忙。内核算法的嵌入式优化方案已经出来了,仿真验证通过,准确率百分之九十一。”
电话那头安静了两秒。
”百分之九十一?”于颖的声音有一丝不确定,”我的MATLAB仿真在理想条件下也只有百分之九十三。你在嵌入式平台上用定点运