第52章 破壁(1/2)
於颖的matlab代码在当天凌晨发到了左城邮箱里。
三千多行,注释写得很规范——这是於颖做事的风格,任何交给別人的东西都整理得乾乾净净。左城花了两个小时通读了一遍,把循环平稳特徵检测的数学核心提炼出来。
核心思想並不复杂——通信信號天然具有周期平稳特性,比如载波频率、符號速率、帧结构都会在信號的二阶统计量中產生周期性的特徵峰。通过计算信號的循环自相关函数,可以在极低信噪比下把目標信號从噪声中分离出来,同时识別出信號的调製类型和占用带宽。
优雅。左城看完数学推导后在心里给了这个评价。
但问题也很明显——循环自相关函数的计算量是信號长度的平方级別。於颖的matlab仿真在pc上跑一个频谱感知周期需要四百毫秒,而天穹终端的嵌入式平台算力不到pc的十分之一。直接移植的话,单次感知需要四秒以上,远超实时性要求的五十毫秒。
差了將近两个数量级。
左城关掉matlab代码,打开了一个空白文档,开始写自己的方案。
他不需要复製於颖的实现,他需要的是把这个算法“翻译“成嵌入式平台能跑得动的形態。
这正是他的融合级叶片“嵌入式智能信道处理“赋予他的能力——三年等效的工程经验,让他对嵌入式平台的每一寸算力都了如指掌。
第一刀砍在计算精度上。循环自相关的全精度计算需要浮点运算,但嵌入式平台的定点运算单元速度是浮点的八倍。左城推导了一套十六位定点化方案,把关键的乘累加操作全部转为定点,精度损失控制在零点五个db以內,这对频谱感知来说完全可以接受。
这一刀砍掉了百分之六十的计算量。
第二刀砍在数据规模上。循环自相关需要对整段信號做二维扫描,但並不是所有的循环频率都有意义——卫星信號的载波频率和符號速率是已知的,可以预先计算出有限个候选循环频率,只在这些频率点上做检测。
这一刀又砍掉了百分之七十。
两刀下去,总计算量压缩到了原来的百分之十二。四百毫秒乘以零点一二,等於四十八毫秒。
卡在五十毫秒的线上,刚好够。
但“刚好够“不是左城的標准。
他又看了一遍嵌入式平台的硬体手册,找到了第三个优化点——平台的dma控制器支持数据预取,可以在cpu计算当前帧的同时,把下一帧的数据从adc搬到缓衝区。计算和搬运重叠执行,等效处理时间再降百分之二十。
四十八毫秒乘以零点八——三十八毫秒。
富余量百分之二十四。够了。
左城把整套优化方案写成了一份十二页的技术文档,从数学推导到工程实现每一步都写得清清楚楚。写完的时候天已经亮了,窗外能听到早起跑步的人经过的脚步声。
他没有立刻去睡觉,而是先把文档发给了方泽和刘伟。
方泽十分钟后回了消息——他也没睡,一直在调仿真平台的参数。
“方案看了。定点化精度损失零点五db我需要验证一下,给我两天。“
“好。“
刘伟的回覆晚了半个小时:“城哥,dma预取那个优化我之前在lora项目里试过类似的思路,確认可行。我来写这部分的驱动代码。“
左城看著这两条消息,嘴角微微弯了一下。
团队在成长。半年前这些优化方案只能他一个人写,现在每个人都能接住一块。
本章未完,点击下一页继续阅读。