ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

通感一体化融合架构:从OFDM波形到资源调度的工程实践

通感一体化融合架构:从OFDM波形到资源调度的工程实践

简介:这份文档资料聚焦5G-A与6G阶段的通感一体化融合架构及关键技术,面向通信领域研究人员、标准化工作者及高校相关专业师生,帮助读者系统理解通感融合的网络架构设计思路与技术演进路径。资源为1个docx文档,压缩包约141KB,内容围绕5G-A广域与局域场景下的通感融合架构、6G高低频协作及算力网络两种架构建议展开,并深入分析新型一体化波形、全双工等关键技术。文档结合3GPP、IMT2020等标准化进展,梳理了通感融合的研究需求与架构特征,可为后续网络部署提供技术参考。目前已有834人学习下载,适合需要快速把握通感融合整体框架、开展相关课题研究或技术预研的读者参考使用。

1. 通感一体化融合架构:为什么现在做的人都在聊“一张网既通信又感知”

如果你最近在关注 6G 预研、车路协同或者低空经济,大概率会反复撞见“通感一体化”这个词。它说的是同一套硬件、同一段频谱、同一帧信号,既把数据传出去,又把周围环境“看”回来——通信和感知不再是两套独立系统,而是共用波形、共用基带、共用天线阵列。这件事的价值很直接:基站密度已经很高,再单独铺一张感知网,成本和频谱都吃不消;而通感一体化让现有站点顺手多干一份活。它适合谁?做无线算法、雷达信号处理、边缘计算网关的工程师,以及需要低成本区域感知能力的集成方。但“融合架构”四个字容易把人带偏,以为只是把两个模块塞进一个机箱。真正的难点在波形设计、资源调度和干扰抑制三件事上,下面按落地顺序拆开讲。

2. 融合架构到底融在哪:从波形到调度的三层拆解

2.1 通感一体化的三个融合层级

很多人第一次接触通感一体化,会默认它是“通信模块 + 雷达模块”的物理拼装。实际做下来,融合分三层,层级越深,收益越大,但改动也越大。

第一层是硬件与射频前端融合。通信和感知共用天线阵列、功放和收发链路,靠时分或频分切换工作模式。这一层最容易落地,改造成本低,但感知和通信互相抢时间片,效率上不去。

第二层是波形与基带融合。用同一套 OFDM 波形同时承载数据和感知回波处理,通信信息调制在子载波上,感知靠回波时延和多普勒解算。这一层是当前主流研究方向,也是“融合架构”真正区别于“共站部署”的地方。

第三层是资源调度与协议融合。在 MAC 层统一分配时频资源,根据业务需求动态倾斜——车流量大的路口多给感知资源,数据回传高峰多给通信资源。这一层决定系统能不能在真实场景里跑稳。

我一般建议从第二层切入,因为第一层收益有限,第三层依赖第二层的波形基础。下面给一个最小可跑的 OFDM 通感一体基带仿真骨架,用 Python 写,方便你直接改参数验证。

import numpy as np # 系统参数:子载波间隔 30kHz,带宽 20MHz,FFT 1024 点 N_fft = 1024 N_cp = 72 # 循环前缀长度,约 2.4us scs = 30e3 # 子载波间隔 fs = N_fft * scs # 采样率 30.72MHz T_sym = N_fft / fs # 有效符号时长 # 通信数据占用的子载波(中间段),感知占用边缘子载波 comm_subcarriers = np.arange(200, 824) sens_subcarriers = np.concatenate([np.arange(100, 200), np.arange(824, 924)]) def generate_isdac_symbol(comm_bits, sens_waveform): """生成一个通感一体 OFDM 符号""" freq_grid = np.zeros(N_fft, dtype=complex) # 通信:QPSK 映射到中间子载波 qpsk = (2 * comm_bits[0::2] - 1) + 1j * (2 * comm_bits[1::2] - 1) freq_grid[comm_subcarriers] = qpsk[:len(comm_subcarriers)] / np.sqrt(2) # 感知:边缘子载波放已知参考序列,用于回波相关 freq_grid[sens_subcarriers] = sens_waveform[:len(sens_subcarriers)] # IFFT 加 CP time_sym = np.fft.ifft(freq_grid) * N_fft return np.concatenate([time_sym[-N_cp:], time_sym]) # 生成一帧:14 个符号 frame = [] for _ in range(14): bits = np.random.randint(0, 2, 2 * len(comm_subcarriers)) ref = np.exp(1j * 2 * np.pi * np.random.rand(len(sens_subcarriers))) frame.append(generate_isdac_symbol(bits, ref)) frame = np.concatenate(frame) print(f"一帧样本数: {len(frame)}, 时长: {len(frame)/fs*1e3:.3f} ms")

这段代码的关键设计点:通信和感知占用不重叠的子载波,避免相互干扰。感知用已知参考序列,接收端做匹配滤波就能提取时延。参数上,N_cp决定最大无模糊感知距离,按c * N_cp / (2 * fs)算,这里约 350 米,城市微站够用;scs越大,对多普勒越不敏感,但覆盖半径缩小,30kHz 是通感折中的常见选择。

2.2 感知回波处理链路怎么接

波形发出去只是第一步,回波处理才是感知能力的来源。接收端要做的事:去掉 CP、FFT 回到频域、在感知子载波上做参考序列的共轭相乘、再 IFFT 得到距离-多普勒二维图。

def range_doppler_map(rx_frame, ref_seq, n_sym=14): """从接收帧生成距离-多普勒图""" sym_len = N_fft + N_cp rd_matrix = np.zeros((N_fft, n_sym), dtype=complex) for i in range(n_sym): seg = rx_frame[i*sym_len + N_cp : i*sym_len + sym_len] freq = np.fft.fft(seg) / N_fft # 只在感知子载波上做相关 corr = freq[sens_subcarriers] * np.conj(ref_seq[:len(sens_subcarriers)]) # 补零到 N_fft 做距离维 IFFT full = np.zeros(N_fft, dtype=complex) full[sens_subcarriers] = corr rd_matrix[:, i] = np.fft.ifft(full) # 多普勒维 FFT rd_map = np.fft.fftshift(np.fft.fft(rd_matrix, axis=1), axes=1) return np.abs(rd_map) # 模拟一个目标:距离 bin 120,速度对应多普勒 bin 3 rx = frame.copy() delay = 120 doppler_shift = 3 rx = np.roll(rx, delay) * np.exp(1j*2*np.pi*doppler_shift*np.arange(len(rx))/N_fft) rd = range_doppler_map(rx, np.exp(1j*2*np.pi*np.random.rand(len(sens_subcarriers)))) peak = np.unravel_index(np.argmax(rd), rd.shape) print(f"检测到峰值: 距离bin={peak[0]}, 多普勒bin={peak[1]}")

逻辑说明:range_doppler_map先逐符号做频域相关,再在符号间做 FFT 提取多普勒。距离分辨率由带宽决定,20MHz 对应约 7.5 米;速度分辨率由帧时长决定,一帧 0.5ms 对应约 ±30m/s 无模糊范围。参数上,感知子载波数量越多,相关增益越高,但留给通信的资源越少,一般感知占 10%~20% 子载波是常见配比。

2.3 资源分配:通信和感知怎么分才不打架

固定分配简单但浪费。真实系统里,通信业务是突发的,感知需求也随场景变化。常见做法是设一个资源仲裁器,按优先级和队列深度动态调整。

分配策略通信吞吐损失感知检测概率适用场景
固定 8:2约 12%0.92业务稳定、感知要求固定
时分轮询约 8%0.88通信突发性强
动态加权约 5%0.90车路协同、低空监测

动态加权的核心是给感知资源设一个下限,保证最小检测概率,剩余资源按通信队列长度分配。实现上可以用一个滑动窗口统计过去 100ms 的通信缓冲占用率,超过阈值就把感知子载波压缩到下限。

3. 从仿真到半实物:把通感一体链路跑起来的四个步骤

3.1 用 SDR 搭最小验证平台

仿真跑通后,下一步是上软件无线电平台验证。常见组合是 USRP 或类似 SDR 加一台主机,收发共用天线。步骤:

  1. 在主机上把上面的 Python 链路改成实时流式处理,采样率对齐 SDR 能力,一般降到 10MHz 以内。
  2. 配置 SDR 中心频率和增益,通信和感知共用同一射频通道。
  3. 发送端循环发帧,接收端持续采集,用环形缓冲区分帧。
  4. 在接收端跑range_doppler_map,把结果实时画出来。
# 以常见 SDR 工具链为例,先确认设备识别和采样率设置 # 具体命令随平台不同,这里只示意参数位置 sdr_tool --args "type=b200" --rate 10e6 --freq 3.5e9 --gain 40 --ant TX/RX

参数说明:rate决定距离分辨率,10MHz 对应约 15 米;freq选在合法可用的实验频段;gain太大会饱和,太小感知回波淹没在噪声里,一般从 30dB 起步,看接收频谱调。

3.2 同步与定时:通感一体的隐形门槛

通信对定时误差的容忍度是 CP 长度的一部分,感知对定时误差更敏感,因为时延直接映射距离。常见做法是用通信链路的同步信号做粗同步,再用感知参考序列做精同步。

def fine_sync(rx, ref): """用感知参考序列做滑动相关,找精确起始点""" corr = np.correlate(rx[:len(ref)*4], ref, mode='valid') return np.argmax(np.abs(corr)) # 粗同步后,在 ±CP 范围内做精同步 coarse = 0 fine = fine_sync(frame[coarse:coarse+5000], np.tile(ref[:100], 4)) print(f"精同步偏移: {fine - coarse} 样本")

逻辑:粗同步给出大致帧头,精同步在局部窗口内找相关峰。偏移量超过 CP 长度就会产生符号间干扰,感知距离也会整体偏移。实测中,采样时钟不同源时,偏移会随帧数累积,需要定期重同步。

3.3 干扰抑制:通信和感知互扰怎么压

即使子载波不重叠,功放非线性也会产生带外泄漏,感知弱回波容易被通信强信号淹没。三个常用手段:

  • 功率控制:通信子载波功率回退 3~6dB,感知子载波满功率发。
  • 保护带:通信和感知子载波之间留 5~10 个空子载波。
  • 接收端滤波:在感知相关前,先对感知子载波做窄带滤波,抑制通信泄漏。

我一般先加保护带,代价最小;不够再上功率回退,最后才动接收端滤波,因为滤波会引入额外时延。

4. 通感一体化落地避坑:五个真实翻车点

4.1 感知距离算出来总是偏大

现象:仿真里目标在 100 米,实测解出来 130 米。原因:射频链路和滤波器引入固定群时延,没做校准。解决:在已知距离放一个强反射体,测出固定偏移,从所有距离结果里减掉。这个校准值随温度和增益变化,建议每次开机做一次。

4.2 多普勒维出现假峰

现象:静止目标在多普勒图上出现对称的两个峰。原因:I/Q 不平衡导致镜像干扰。解决:在接收端做 I/Q 幅相校正,或者用实数采样加希尔伯特变换。校正系数可以用一个单音信号提前标定。

4.3 通信误码率在感知开启后飙升

现象:单独跑通信 BER 正常,一开感知就恶化。原因:感知子载波功率太高,功放进入非线性区,产生互调。解决:降低感知子载波功率,或者把感知子载波放在频谱边缘,让互调产物落在带外。实测中,感知功率比通信低 3dB 时,互调影响基本可忽略。

4.4 动态调度导致感知帧率不稳

现象:通信忙的时候,感知结果更新明显变慢。原因:资源仲裁器没有给感知设硬下限。解决:在调度器里给感知资源设一个最小配额,比如每 10ms 至少保证 2 个感知符号。这个下限按最小检测概率反推,不要拍脑袋。

4.5 长时间跑出现时钟漂移

现象:跑十几分钟后,感知距离整体缓慢偏移。原因:收发时钟不同源,采样率有微小偏差。解决:用通信链路的导频做时钟跟踪,定期调整接收端重采样相位。或者直接用同一个时钟源给收发两端。

5. 把通感一体做扎实的一个进阶习惯:先定感知指标再调通信参数

很多团队做通感一体,习惯先把通信链路调通,再往上加感知。这个顺序容易导致后期为了感知指标反复改通信参数,返工量大。我踩过几次坑之后,习惯反过来:先定感知的最小可用指标,再倒推通信参数的可调范围。

具体做法是列一张指标对照表,把感知的距离分辨率、速度分辨率、检测概率和通信的吞吐、时延、误码率放在一起,标出哪些参数是共享的、哪些是独立的。

指标决定参数与通信的耦合关系
距离分辨率带宽带宽越大通信速率越高,正相关
速度分辨率帧时长帧越长通信时延越大,负相关
检测概率感知子载波数占用越多通信吞吐越低,负相关
通信误码率发射功率功率越高感知回波越强,正相关但受非线性限制

这张表的作用是:当感知检测概率不达标时,你知道可以动哪些参数,以及动了之后通信会受什么影响。比如检测概率差 5%,优先加感知子载波数,而不是加功率,因为加功率会先触发功放非线性,通信先崩。

另一个习惯是每次改参数只动一个,并且记录改动前后的感知和通信指标。通感一体的参数耦合比纯通信或纯感知都强,一次动两个,出了问题根本分不清是谁引起的。我一般用一个简单的 CSV 记录:时间、改动项、旧值、新值、感知检测概率、通信吞吐、误码率。跑上几十组,参数敏感度就清楚了。

最后说一个验证技巧:在暗室或开阔场地放两个角反射器,一个静止一个移动,看距离-多普勒图上两个峰是否稳定分离。如果两个峰在距离维分不开,说明带宽不够;在多普勒维分不开,说明帧太短。这个测试比看单一指标直观得多,也更容易说服团队加资源。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进