前面两节把信号如何被削弱、被拨动讲清了,本节补上第三类损伤——噪声与干扰的量级估算,然后把这些"医学事实"装进仿真脚本:抽头延迟线加衰落生成的完整信道模型,让算法在逼真的空中损伤上先跑通再上场。
阅读完本节,你应当能够:
接收机再干净,热噪声也消不掉——那是金属与电阻里电子热运动的固有产物。它的功率有定式,几乎每个射频工程师都背:
N = k · T · B,dBm 写法是 N_dBm = -174 + 10·log10(B),再加噪声系数。
k·T·B 的别名"噪声底"里,k 是玻尔兹曼常数,T 开尔文温度,B 赫兹带宽。常温 8MHz 带宽一算,噪声底约 -174+69 = -105 dBm。够小?可接收机接收灵敏度到 -95 dBm,信噪比才 10 dB 上下,离香农说的"可靠边界"并不宽裕。所以噪声底决定了你能谈多少信噪比,进而决定容量。第 1.3 节的容量公式,落地时卡的就是这个数。
真实接收机还要叠一层噪声系数:LNA 与后面每一级混频、放大都会把等效噪声底抬高几 dB,端到端把理论底"撑大"。设想噪声系数 3 dB 的前端,你的等效噪声底就从 -105 抬到约 -102 dBm,灵敏度窗口被压缩 3 dB。低噪声放大器之所以总被摆在最前面,正因为它在噪声才刚进天线的第一时间就把它放大,从而让后面各级的相对噪声贡献被压倒——这一"第一级唯一原则",是射频接收前端设计的底层直觉。
与噪声是"物理注定"不同,干扰是"别人家信号不请自来",可分三类对症:
判断的尺度同样是信干噪比(SINR)而非信噪比——把干扰功率和噪声一起放分母。5G 系统设计里,真正卡容量的常常不是噪而是干扰,因为频谱早就复用得密密麻麻。
要验证一个算法,你得先在一张"足可复现的空中损坏场"上跑起来。最实用的信道模型是抽头延迟线:把信道冲激响应近似成有限个抽头,每个抽头一个复增益、一个相对时延。第 2.2 节的三径冲激响应天然就是这个形态。
关键参数来自前面标尺的迭代:
这样既有大尺度的平均骨架,又有小尺度的剧烈抖动,还能漂移——三套损伤齐活。
把上述装配落成可复现代码,体验"发一段、过信道、看残骸"。下面把历伤模型折成一个阵:每列一个时隙,行是一径,再用卷积+高斯噪声合成接收。
import numpy as np TAPS = 3 # 三径 delays = np.array([0, 1, 2]) # 相对时延(以采样间隔计) tauRMS = 1.5 # 时延扩展 sigma2 = np.exp(-delays / tauRMS) # 越晚越弱的平均功率 gains = np.sqrt(sigma2) * (np.random.randn(TAPS) + 1j*np.random.randn(TAPS)) / np.sqrt(2) x = np.array([1, 0, 0, 0, 0, 0, 0, 0]) # 一段冲激探测 h_full = np.zeros(len(x) + delays[-1]) for i, d in enumerate(delays): h_full[d] += gains[i] # 摆进各自时延 y = np.convolve(x, h_full) + 0.1 * np.random.randn(len(x) + delays[-1]) print("信道冲激响应(含噪声观测):", np.round(y.real, 2))
这段代码把"多径+衰落+噪声"一次性喂给你:冲激进去,出来一条带着旁瓣和噪声尾巴的响应。看懂它,就懂了后续均衡器要对付的东西从哪来。
扎实的实践者会问我:既然能建出模型、用公式算个大概,为何还要滚仿真?因为理论给的是平均,仿真给的是"某一个倒霉实例"。同样的瑞利信道,跑一万次会比一次更好地暴露深层故障——某次深衰落恰逢导频位置,估计就会崩。所以好习惯是:先理论定预期,再用信道仿真正反验证、再加足重玩次数看方差。这套"预期-仿真-对账"的循环,是判断算法是否真正稳定的试金石。
也因此,仿真脚本里常见一个朴素约定:固定随机种子、把遍历次数写进参数。固定种子保证结果可复现,方便别人跟你对账;遍历次数则决定你看到的是"一个幸运样本"还是"一整族样本的分布"。只看一次仿真的误码率是没有说服力的,那可能恰是一次深衰落撞出来的侥幸或倒霉。
第二章看完了信道如何伤波形,第三、四章分头把发射与接收搭起来——先让波形在出发时就被装上抗伤的装备。