上个星期有位朋友发来一张仿真图,说单天线瑞利衰落信道下QPSK的误码率到了0dB还停在10%,怎么加发射功率都降不下来。我一看就明白,他踩了几乎所有做链路仿真的人都会踩的第一个坑:把衰落当成了普通的高斯噪声,以为功率够了就能覆盖,却不知道瑞利深衰落这种“乘性干扰”根本不是靠功率能硬扛的。后来我们把实验改成L=2和L=4的MRC分集接收,同一套调制曲线明显掉头向下,这才把误码性能真正拉到了可用的区间。这篇文章就是我那次实验的完整记录,题目里的关键词基本就是全部工作:瑞利衰落信道、最大比合并(MRC)分集、误码率、BPSK/QPSK/8PSK/16QAM四种调制方式对比。内容不涉及复杂的推导,所有结论都能用一段MATLAB代码复现,适合正在做通信课程设计、需要画误码率曲线、或者想验证分集理论的同学直接参考。你不需要完整的数学底子,能看懂复数乘法和星座图,就能跟着把曲线跑出来。1. 瑞利衰落为什么这么“难缠”:单支路的真实性能到底有多差1.1 单根天线在深衰落面前的无力感先做一个思想实验。假设信道只有高斯白噪声,BPSK在10dB信噪比下误码率大约在2e-6量级,直接可用;换成平坦瑞利衰落信道,同样10dB平均信噪比,平均误码率立刻涨到2.3e-2左右,差了四个数量级。这不是因为接收机做错了什么,而是因为信号幅度本身在随机波动。瑞利衰落的基带模型是:接收信号 r = h·s + n,其中 h 是复高斯随机变量。问题在于 h 不是一个固定衰减,而是随时间随机游走的乘性干扰。当 h 的模值跌到很小——也就是所谓“深衰落”——哪怕只有几个符号周期,这期间接收信噪比会瞬间掉到0dB以下。这种深度衰落是随机出现的,而且出现的概率并不会随着发射功率增大而迅速消失。直观类比:高斯噪声像房间里均匀的背景嘈杂声,你把说话音量调高就能压过去;瑞利衰落则像对面那个人有时候站到隔壁房间去,你再怎么大声喊,他那边听起来还是像蚊子叫。发射功率根本无法对抗这种“人跑到隔壁房间”的瞬间。1.2 中断概率才是衰落信道的第一指标很多初学者只看平均误码率,忽略了中断概率这个更本质的指标。在瑞利信道下,瞬时信噪比 γ 服从指数分布。假设平均信噪比 γ̄ = 10(也就是10dB),瞬时信噪比低于0dB(γ_th = 1)的概率是:P(γ < 1) = 1 - e^(-1/10) ≈ 0.095也就是说,大约有10%的时间,这条链路实际上处于0dB以下的工作状态,这个时候任何高阶调制都会崩溃。更麻烦的是,随着平均信噪比增加,中断概率只是近似线性下降。单个支路从10dB平均信噪比提到20dB,中断概率从约9.5%降到约1%,降幅有限,但代价是发射功率翻了十倍。分集接收解决的是这个根本问题:如果有 L 条统计独立的衰落支路,那么只有当所有支路同时处于深衰落时,通信才会中断。独立瑞利支路下,这个联合概率近似是每条支路中断概率的 L 次方。L=2时上面的中断概率从9.5%降到0.9%,L=4时直接降到8e-5量级。这才是分集真正的意义——不是简单抬高平均信噪比,而是把“深衰落同时发生”的概率压到极低。1.3 独立衰落支路从哪里来,仿真该假设什么分集支路不是凭空产生的。现实中常见四种来源:空间分集(两根天线距离超过半个波长),时间分集(通过交织把衰落打散到不同时隙),频率分集(多载波上相同信息重复发送),以及极化分集。在做仿真时,我们不需要纠结具体用哪种物理手段,只需要假设 L 条支路的复信道增益 h_l 是独立同分布的复高斯随机变量,平均功率归一化为1。这里有个均匀性细节必须说明:很多同学把“分支路”理解成“把信号复制L份再合并”,如果直接让每条支路都等于同一个 h,那L=2和L=1完全没区别,因为两条支路同时深衰落。分集的本质是“独立”二字,不是数量。仿真代码里要分别产生L个独立的随机信道,不能共用同一个随机数。仿真还隐含了几个理想假设:第一,接收端能完美估计每条支路的信道 h_l;第二,噪声是加性高斯白噪声,且各支路噪声独立;第三,信道是平坦瑞利块衰落,即一个符号内 h 不变,不同符号间重新随机。这些假设在入门验证阶段完全够用,但到了后面换导频估计、加时间选择性时,每一个都会给性能带来真实损失,后面专门讲。2. MRC合并的本质:把L条支路的“声音”按信噪比加权叠加2.1 三种合并方式:为什么选择合并和等增益合并都不如MRC分集合并常见三种策略:选择合并(SC)、等增益合并(EGC)、最大比合并(MRC)。用一次生活类比讲清楚:三个人一起听远处的说话声,A站在讲话者旁边非常清楚,B隔着两米、背景有些噪音,C则在隔壁房间基本听不清。选择合并的做法是:只让A的声音通过,B和C直接弃用,好处是简单,坏处是浪费了B听到的那部分有效信息。等增益合并的做法是:三个人音量调到一样大再叠加,B的噪音和C的噪音也会一并被放大,结果信噪比提升有限。最大比合并则是:给A很大的权重、给B中等权重、给C几乎为零的权重,然后叠加。每个支路的权重与它自身的信道质量成正比,好支路说话算数,差支路闭嘴。在复基带模型里,MRC合并后的输出信噪比等于所有支路信噪比之和。如果每条支路平均信噪比相同,则合并后平均信噪比直接提升为单支路的 L 倍。这个结论表明MRC是线性合并中的最优策略,也是为什么它在无线通信接收机里被广泛使用。2.2 权重推导一句话:共轭相乘,能量相加假设发送符号为 s,第 l 条支路的接收信号是:r_l = h_l·s + n_l其中 n_l 是复高斯噪声,各支路独立。MRC的合并方式是:z = sum(a_l * r_l, l=1..L)要使得合并后信号信噪比最大,最优的加权系数是:a_l = h_l^* (或者乘以一个公共常数,不影响判决)把 a_l = h_l^* 代入,信号分量为 sum(|h_l|²)·s,噪声分量是 sum(h_l^*·n_l)。合并后的信号能量正比于 sum(|h_l|²),噪声功率正比于 sum(|h_l|²)·N0,两者相除正好得到 sum(SNR_l)。这个推导的关键在于“共轭相乘”同时完成了两件事:相位对齐和幅度加权。相位对齐解决的是多支路相干叠加的问题——如果没有共轭,各支路相位随机,叠加时可能互相抵消;幅度加权则是让强支路在最终判决里拥有更大的话语权。这两件事加在一起,才是“最大比”三个字的真正含义。2.3 平均误码率的“斜率变陡”才是分集的核心收益分集对误码率的影响分两个维度:一是同一误码率下所需信噪比下降(功率增益),二是误码率曲线的斜率变陡。后者常被忽略,却至关重要。瑞利衰落单支路下,BPSK的平均误码率在高信噪比时近似为 1/(4·γ̄),也就是随信噪比增加,误码率近似线性下降,但每增加10dB只能让误码率下降一个数量级。这也是为什么单支路曲线“拖着一根长尾巴”下不去。L=2时,BPSK的平均误码率渐近行为变成 3/(16·γ̄²),信噪比每增加10dB,误码率下降两个数量级;L=4时则是按 γ̄^(-4) 下降,曲线斜率越来越陡。同样的信噪比增量,在分集系统里获得的误码率改善比单支路大得多。作为验证,用闭式公式算两个点:L=1、平均信噪比10dB时,BPSK平均BER = 1/2·[1 - sqrt(γ̄/(1+γ̄))] ≈ 2.3e-2L=2、同样的10dB平均信噪比,BER = ((1-μ)/2)²·(2+μ),其中 μ = sqrt(γ̄/(1+γ̄)),算出来约 1.6e-3同样的10dB平均信噪比,L=2比L=1误码率改善超过一个数量级;继续算L=4,改善会更加明显。这就是我们选MRC做分集合并、并且非要对比L=1/2/4的原因——单看一个分集阶数,根本看不出分集的完整威力。3. 四种调制方式在衰落信道下的理论底线3.1 星座图的最小距离:一句话判断抗噪声能力在不同调制方式之间对比之前,先建立一把“尺子”:星座点之间的最小欧氏距离 d_min 直接决定抗噪声能力。平均符号能量归一化为1时,四种调制的 d_min 差异巨大:调制方式每符号比特数 k星座点数归一化最小距离 d_min相对BPSK的距离损失BPSK122.0000dBQPSK241.414-3dB8PSK380.765-8.3dB16QAM4160.632-10dB这张表的信息量很大:从BPSK到QPSK,每符号多传1比特,星座距离损失3dB,但误码性能在相干瑞利信道下其实没有损失,因为QPSK可以看成两路正交BPSK,比特能量减半的同时噪声也在两个维度上各减半,结果是每比特误码率与BPSK几乎一致。但从QPSK往8PSK、16QAM走,每多传1比特,最小距离都在明显缩小,衰落信道下这种距离损失会被放大。所以关键不是“谁的星座点更多”,而是“多出来的星座点付出了多大的距离代价”。3.2 BPSK与QPSK在相干瑞利信道下的等价性BPSK把信息放在一个实维度上,星座点只有±1,d_min最大。QPSK把两个比特分别放在实部和虚部两个正交维度上,每个维度上依然是二电平判决,所以理论误码率曲线与BPSK完全相同。前提是采用格雷映射——相邻星座点之间只有一个比特不同,这样符号错误时误码率不会因为某个符号错判到远端而额外增加。这是很多入门者容易忽略的一点:如果QPSK映射比较随意,误码率会比BPSK差。仿真代码里建议严格按照格雷映射表来,不要自己随便给符号编号。后面我的结果里BPSK和QPSK曲线几乎重合,就是这个原因。3.3 8PSK的相位脆弱性:从90°间隔缩到45°8PSK的8个星座点均匀分布在单位圆上,相邻点之间的相位间隔是45°,而QPSK是90°。衰落信道下存在随机相位扰动,一旦相位估计有偏差或者噪声叠加使相位越过判决边界,8PSK很容易错到相邻符号。虽然平均功率恒定包络是它的优点,但在不加分集的瑞利信道里,这个优点被深衰落完全压住——深衰落时接收能量很小,相位判决的置信度跟着急剧下降。8PSK理论闭式误码率非常复杂,一般不用解析表达式,而是通过蒙特卡洛仿真或MGF数值积分来画曲线。实际仿真里你会发现8PSK在L=1时曲线下降得比QPSK慢很多,达到1e-2误码率大约需要多4dB左右信噪比,这正好对应星座最小距离8.3dB的损失的一部分。3.4 16QAM:幅度和相位联合受害16QAM是三种高阶调制里最复杂的一种:它同时用幅度和相位承载信息。星座图上12个点不再是等幅的,内圈点能量低、外圈点能量高。平均功率归一化后,最小距离只有0.632,判错边界很窄。瑞利衰落对16QAM特别不友好,因为衰落会直接扭曲接收星座的幅度分布。某个符号原本落在内圈某个点,经过一个小的 h 后接收点向原点收缩;另一个符号落在外圈,经过一个大的 h 后向外扩展。不同符号遭受不同的幅度缩放,判决区域发生畸变,误码率因而远高于相同平均信噪比下8PSK的表现。此外16QAM的峰均比高,对功放线性度和自动增益控制也更敏感,但这些在纯链路仿真中体现不出来。4. 仿真程序搭建与关键代码拆解4.1 参数设计与公平性前提开始写代码之前必须先想清楚几个参数,否则结果没有意义。第一,横轴必须用每比特信噪比 Eb/N0,不能直接用符号信噪比 Es/N0。BPSK每符号只有1比特,16QAM每符号有4比特,如果横轴统一用Es/N0,16QAM会“看起来”性能和BPSK差不多,但这是错觉,因为它每个符号里携带的信息量是BPSK的4倍。只有用Eb/N0做横轴,才能公平比较“传输一个比特需要花多少信噪比”。第二,衰落信道的平均功率要归一化,也就是 E[|h|²] = 1。否则L=2相比L=1多了一条支路,平均接收功率翻倍,误码率改善到底是来自功率翻倍还是来自分集就没法区分了。我们这里每条支路都归一化,合并后的平均信噪比才真正等于 L·γ̄。第三,每个信噪比点上的蒙特卡洛符号数要足够。我在后面的试验中用 N = 5e5 个符号,目标是能统计学可靠地估计到1e-4量级的误码率。有个经验法则:期望的错误比特数至少要有几十个,如果某个信噪比点只测出几个错误,那这个点的误码率读数基本是噪声,不上不下乱跳。4.2 发送、信道、MRC合并:一段可以直接跑通的核心代码下面的MATLAB代码省略了外层循环和具体的星座表函数,保留了链路最核心的结构,你在自己的工程里照这个框架扩展就行。N = 5e5; % 每个SNR点的符号数 k = log2(M); % 每符号比特数,M=2/4/8/16 EbN0_dB = 0:2:24; % 在循环内部,某个EbN0点上的处理如下: EbN0 = 10^(EbN0_dB(idx)/10); EsN0 = k * EbN0; % 符号信噪比 % --- 发送端:随机比特 -> 调制符号(平均功率归一化到1) bits = randi([0 1], 1, N*k); txBits = reshape(bits, k, N).'; symIdx = bi2de(txBits, 'left-msb'); % 十进制符号索引 x = constellation(M, symIdx + 1); % 查星座表,平均功率=1 % --- 瑞利信道:L条独立支路 h = (randn(L,N) + 1j*randn(L,N)) / sqrt(2); % --- 加性高斯白噪声(复噪声每维方差N0/2) N0 = 1 / EsN0; % 符号能量归一化后 n = sqrt(N0/2) * (randn(L,N) + 1j*randn(L,N)); % --- 接收与MRC合并 r = h .* x + n; % 每根支路接收信号 w = conj(h); % MRC权重:共轭信道 g = sum(abs(h).^2, 1); % 合并增益 sum|h_l|^2 z = sum(w .* r, 1) ./ g; % 除以增益,恢复发送星座尺度 % --- 最小欧氏距离判决(通用,避免手写阈值) diffMat = abs(z.' - constellation); % N x M [~, estIdx] = min(diffMat, [], 2); estBits = de2bi(estIdx-1, k, 'left-msb'); % --- 统计误比特数 bitErr = sum(estBits(:) ~= bits(:)); ber = bitErr / (N*k);这里有个很容易写错的地方要专门提醒:MRC合并后必须除以增益 g。如果不除以 g,z 的信号部分是 g·x,而 g 是随信道随机变化的,直接把 z 丢进星座判决函数,星座点的尺度一直在漂移,误码率会异常高,或者看起来“永远降不下去”。除以 g 之后,z 恢复成 x + 等效噪声,等效噪声功率与 g 成反比,这时再用固定星座做最小距离判决才是正确的。4.3 星座映射与判决:统一用最小欧氏距离我建议不要给每种调制手写一组判决阈值,尤其是16QAM,手写阈值容易出错且不好扩展到更高阶调制。统一做法是:发送端维护一个星座点向量,接收端对合并后的符号计算它到所有星座点的欧氏距离,取最近点索引,再通过索引反查比特。这样代码结构统一,换调制方式时只需要换星座表。星座表定义注意两个细节:QPSK要用格雷映射;16QAM的标准星座坐标取 [-3, -1, 1, 3] 的笛卡尔积,然后除以 sqrt(10) 做平均功率归一化。这样星座表的平均能量正好是1,与信道模型里的 Es=1 保持口径一致。4.4 蒙特卡洛次数多少才可信很多同学的误码率曲线最后一段“翘起来”,大概率不是算法问题,而是符号数不够。比如你目标是测到1e-4,却只发了1e4个符号,那这个信噪比点上如果碰巧没有错误,误码率就被记为0,在log坐标里直接掉到图外;如果碰巧有1个错误,误码率就是1e-4。这两种结果都不可用。我的经验是目标误码率比要测的最低误码率再低一个量级。要稳定显示1e-3附近的曲线,N = 5e5 是起步值;要测到1e-4,N 至少要到5e6。时间不够时可以先用低N跑全范围找到大致拐点,再在重点信噪比区间用大N加密,效率会高很多。5. 实测结果该怎么读:四条曲线背后的设计含义5.1 整体走势:BPSK/QPSK重合,高阶调制被“惩罚”把四种调制和L=1/2/4组合下的BER曲线画在同一张图上,最直观的结论有三个。第一,BPSK和QPSK的曲线在三种分集阶数下几乎完全重合,差距不超过0.1dB。这是因为相干检测下QPSK本质就是两路正交BPSK,格雷映射又没有额外的比特损失。所以在瑞利衰落信道里,如果每符号传输2比特,直接选QPSK,不要犹豫,性能和BPSK一样好,频谱效率却翻倍。第二,8PSK在L=1时比QPSK差约4dB,16QAM比QPSK差约7-8dB(以1e-2误码率为参考点),而且差距会随着误码率要求变严而拉大。这说明高阶调制在没有分集的衰落环境里非常吃亏,单纯加大发射功率去补这个差距,代价极高。第三,增加分集阶数后,所有调制方式的曲线斜率都变陡。L=2相比L=1,达到1e-2所需Eb/N0大约下降8-9dB;L=4相比L=1大约下降12-13dB。不同调制之间的“绝对差距”在L增大后有所缩小,但相对排序不变。5.2 分集阶数与调制阶数的匹配:用表格说话为了方便起见,我把本次仿真的相对读数整理成表。表里的“0”代表BPSK在L=1下达到1e-2所需Eb/N0,其他数字是相对这个基准的差值,负值代表所需信噪比更低。调制方式L=1 相对需求L=2 相对需求L=4 相对需求BPSK0.0 dB-8.7 dB-12.6 dBQPSK0.1 dB-8.6 dB-12.5 dB8PSK4.2 dB-5.5 dB-9.8 dB16QAM7.8 dB-2.8 dB-7.4 dB这张表读出来的信息很实用:如果你要求误码率1e-2、可用信噪比只有10dB,L=1时能用QPSK但用不了8PSK和16QAM;加上L=2之后,8PSK瞬间变得可行,16QAM还差一些;如果升级到L=4,16QAM也能站稳。这就是“分集与调制匹配”的含义——调制阶数决定频谱效率的天花板,分集阶数决定可靠性下限。需要强调,这些数值是本次仿真条件下的近似读数,不同随机种子、不同衰落生成方式会有零点几到1dB的浮动,趋势才是可迁移的结论。5.3 为什么分集增益不能简单地“当成加几dB功率”经常有人问:L=2让所需信噪比下降8-9dB,是不是相当于把发射功率提高了8-9dB?在某个固定误码率参考点上可以这么近似,但换个误码率目标,你会发现这个“等效增益”不是常数。因为分集改变了误码率曲线的斜率,而不是简单地把曲线往左平移。这就是为什么用分集对抗衰落,本质上是改变性能曲线的形状,而不是单纯增加功率预算。设计系统时,一旦明确了目标误码率,就不要说“分集增益约等于多少dB”,而要具体看目标误码率处的读数。6. 仿真实验里的典型误区与排查建议6.1 误区一:横轴用Es/N0,四条曲线互相“骗人”我在4.1里强调过,但这里值得单独拿出来作为排错经验。如果用Es/N0做横轴,16QAM和QPSK的曲线会靠得很近,甚至16QAM在某些信噪比点看起来比8PSK还“好”。这不是真的,只是因为每个16QAM符号携带4比特,而横轴没有除以每符号比特数。正确的做法是统一用Eb/N0,也就是在循环里先把Es/N0除以k。凡是画出来出现“调制阶数越高性能越好”这种反直觉结果的,先检查这一步。6.2 误区二:MRC合并后忘了除以增益,判决尺度漂移这个问题我在代码注释里特意标了。现象是:L=1时曲线还算正常,L加到2或4之后,低信噪比段BER反而升高,或者曲线在中段出现异常平台。原因就是 z 的信号幅度随 sum(|h|²) 随机漂移,你把一个幅度一直在变的量直接丢进固定星座判决区域。线性的修正方式就是在合并后除以 g。这一点做完,曲线马上恢复正常。6.3 误区三:从理想信道估计换成导频估计,分集增益大幅缩水入门仿真里都用理想估计,也就是直接把真实的 h 拿来做MRC权重。但实际系统里 h 是从导频里估计出来的,估计误差在高阶调制下会被放大。常见表现是16QAM在L=4时的误码率曲线有一个“地板”,无论怎么增加信噪比都降不下去。这不是分集理论错了,而是导频密度不够导致信道估计精度跟不上升噪比。想研究这个问题,可以在仿真里给 h 加一个估计误差:h_est = h + e,其中 e 是方差取决于导频信噪比的高斯噪声,看看分集增益会退化多少。这个实验做完,你会对导频开销的意义有更深的理解。6.4 扩展方向:从平坦瑞利到频率选择性信道本实验假设平坦块衰落,信道在一个符号内不变。如果后面想把问题做深,可以考虑频率选择性信道,即不同时延的径相互叠加。这时MRC不再够用,通常要搭RAKE接收机,把每条时延支路也看作一个分集支路,再做合并。你会发现分集思想并没有变,只是“支路”的定义从空间天线扩展到了多径时延。理解了平坦瑞利下的MRC,RAKE的原理只需要一天就能上手。最后再分享一个排查经验。每次跑完仿真,先别急着贴曲线,随便挑一个信噪比点,把理论值和仿真值对一下。BPSK、L=1有任何信噪比下都有闭式公式,理论对不上就说明代码有bug,不要往下跑其他调制。我这个习惯帮我省掉了大量在8PSK和16QAM上无意义的时间浪费。
上个星期有位朋友发来一张仿真图,说单天线瑞利衰落信道下QPSK的误码率到了0dB还停在10%,怎么加发射功率都降不下来。我一看就明白,他踩了几乎所有做链路仿真的人都会踩的第一个坑:把衰落当成了普通的高斯噪声,以为功率够了就能覆盖,却不知道瑞利深衰落这种“乘性干扰”根本不是靠功率能硬扛的。后来我们把实验改成L=2和L=4的MRC分集接收,同一套调制曲线明显掉头向下,这才把误码性能真正拉到了可用的区间。这篇文章就是我那次实验的完整记录,题目里的关键词基本就是全部工作:瑞利衰落信道、最大比合并(MRC)分集、误码率、BPSK/QPSK/8PSK/16QAM四种调制方式对比。内容不涉及复杂的推导,所有结论都能用一段MATLAB代码复现,适合正在做通信课程设计、需要画误码率曲线、或者想验证分集理论的同学直接参考。你不需要完整的数学底子,能看懂复数乘法和星座图,就能跟着把曲线跑出来。1. 瑞利衰落为什么这么“难缠”:单支路的真实性能到底有多差1.1 单根天线在深衰落面前的无力感先做一个思想实验。假设信道只有高斯白噪声,BPSK在10dB信噪比下误码率大约在2e-6量级,直接可用;换成平坦瑞利衰落信道,同样10dB平均信噪比,平均误码率立刻涨到2.3e-2左右,差了四个数量级。这不是因为接收机做错了什么,而是因为信号幅度本身在随机波动。瑞利衰落的基带模型是:接收信号 r = h·s + n,其中 h 是复高斯随机变量。问题在于 h 不是一个固定衰减,而是随时间随机游走的乘性干扰。当 h 的模值跌到很小——也就是所谓“深衰落”——哪怕只有几个符号周期,这期间接收信噪比会瞬间掉到0dB以下。这种深度衰落是随机出现的,而且出现的概率并不会随着发射功率增大而迅速消失。直观类比:高斯噪声像房间里均匀的背景嘈杂声,你把说话音量调高就能压过去;瑞利衰落则像对面那个人有时候站到隔壁房间去,你再怎么大声喊,他那边听起来还是像蚊子叫。发射功率根本无法对抗这种“人跑到隔壁房间”的瞬间。1.2 中断概率才是衰落信道的第一指标很多初学者只看平均误码率,忽略了中断概率这个更本质的指标。在瑞利信道下,瞬时信噪比 γ 服从指数分布。假设平均信噪比 γ̄ = 10(也就是10dB),瞬时信噪比低于0dB(γ_th = 1)的概率是:P(γ < 1) = 1 - e^(-1/10) ≈ 0.095也就是说,大约有10%的时间,这条链路实际上处于0dB以下的工作状态,这个时候任何高阶调制都会崩溃。更麻烦的是,随着平均信噪比增加,中断概率只是近似线性下降。单个支路从10dB平均信噪比提到20dB,中断概率从约9.5%降到约1%,降幅有限,但代价是发射功率翻了十倍。分集接收解决的是这个根本问题:如果有 L 条统计独立的衰落支路,那么只有当所有支路同时处于深衰落时,通信才会中断。独立瑞利支路下,这个联合概率近似是每条支路中断概率的 L 次方。L=2时上面的中断概率从9.5%降到0.9%,L=4时直接降到8e-5量级。这才是分集真正的意义——不是简单抬高平均信噪比,而是把“深衰落同时发生”的概率压到极低。1.3 独立衰落支路从哪里来,仿真该假设什么分集支路不是凭空产生的。现实中常见四种来源:空间分集(两根天线距离超过半个波长),时间分集(通过交织把衰落打散到不同时隙),频率分集(多载波上相同信息重复发送),以及极化分集。在做仿真时,我们不需要纠结具体用哪种物理手段,只需要假设 L 条支路的复信道增益 h_l 是独立同分布的复高斯随机变量,平均功率归一化为1。这里有个均匀性细节必须说明:很多同学把“分支路”理解成“把信号复制L份再合并”,如果直接让每条支路都等于同一个 h,那L=2和L=1完全没区别,因为两条支路同时深衰落。分集的本质是“独立”二字,不是数量。仿真代码里要分别产生L个独立的随机信道,不能共用同一个随机数。仿真还隐含了几个理想假设:第一,接收端能完美估计每条支路的信道 h_l;第二,噪声是加性高斯白噪声,且各支路噪声独立;第三,信道是平坦瑞利块衰落,即一个符号内 h 不变,不同符号间重新随机。这些假设在入门验证阶段完全够用,但到了后面换导频估计、加时间选择性时,每一个都会给性能带来真实损失,后面专门讲。2. MRC合并的本质:把L条支路的“声音”按信噪比加权叠加2.1 三种合并方式:为什么选择合并和等增益合并都不如MRC分集合并常见三种策略:选择合并(SC)、等增益合并(EGC)、最大比合并(MRC)。用一次生活类比讲清楚:三个人一起听远处的说话声,A站在讲话者旁边非常清楚,B隔着两米、背景有些噪音,C则在隔壁房间基本听不清。选择合并的做法是:只让A的声音通过,B和C直接弃用,好处是简单,坏处是浪费了B听到的那部分有效信息。等增益合并的做法是:三个人音量调到一样大再叠加,B的噪音和C的噪音也会一并被放大,结果信噪比提升有限。最大比合并则是:给A很大的权重、给B中等权重、给C几乎为零的权重,然后叠加。每个支路的权重与它自身的信道质量成正比,好支路说话算数,差支路闭嘴。在复基带模型里,MRC合并后的输出信噪比等于所有支路信噪比之和。如果每条支路平均信噪比相同,则合并后平均信噪比直接提升为单支路的 L 倍。这个结论表明MRC是线性合并中的最优策略,也是为什么它在无线通信接收机里被广泛使用。2.2 权重推导一句话:共轭相乘,能量相加假设发送符号为 s,第 l 条支路的接收信号是:r_l = h_l·s + n_l其中 n_l 是复高斯噪声,各支路独立。MRC的合并方式是:z = sum(a_l * r_l, l=1..L)要使得合并后信号信噪比最大,最优的加权系数是:a_l = h_l^* (或者乘以一个公共常数,不影响判决)把 a_l = h_l^* 代入,信号分量为 sum(|h_l|²)·s,噪声分量是 sum(h_l^*·n_l)。合并后的信号能量正比于 sum(|h_l|²),噪声功率正比于 sum(|h_l|²)·N0,两者相除正好得到 sum(SNR_l)。这个推导的关键在于“共轭相乘”同时完成了两件事:相位对齐和幅度加权。相位对齐解决的是多支路相干叠加的问题——如果没有共轭,各支路相位随机,叠加时可能互相抵消;幅度加权则是让强支路在最终判决里拥有更大的话语权。这两件事加在一起,才是“最大比”三个字的真正含义。2.3 平均误码率的“斜率变陡”才是分集的核心收益分集对误码率的影响分两个维度:一是同一误码率下所需信噪比下降(功率增益),二是误码率曲线的斜率变陡。后者常被忽略,却至关重要。瑞利衰落单支路下,BPSK的平均误码率在高信噪比时近似为 1/(4·γ̄),也就是随信噪比增加,误码率近似线性下降,但每增加10dB只能让误码率下降一个数量级。这也是为什么单支路曲线“拖着一根长尾巴”下不去。L=2时,BPSK的平均误码率渐近行为变成 3/(16·γ̄²),信噪比每增加10dB,误码率下降两个数量级;L=4时则是按 γ̄^(-4) 下降,曲线斜率越来越陡。同样的信噪比增量,在分集系统里获得的误码率改善比单支路大得多。作为验证,用闭式公式算两个点:L=1、平均信噪比10dB时,BPSK平均BER = 1/2·[1 - sqrt(γ̄/(1+γ̄))] ≈ 2.3e-2L=2、同样的10dB平均信噪比,BER = ((1-μ)/2)²·(2+μ),其中 μ = sqrt(γ̄/(1+γ̄)),算出来约 1.6e-3同样的10dB平均信噪比,L=2比L=1误码率改善超过一个数量级;继续算L=4,改善会更加明显。这就是我们选MRC做分集合并、并且非要对比L=1/2/4的原因——单看一个分集阶数,根本看不出分集的完整威力。3. 四种调制方式在衰落信道下的理论底线3.1 星座图的最小距离:一句话判断抗噪声能力在不同调制方式之间对比之前,先建立一把“尺子”:星座点之间的最小欧氏距离 d_min 直接决定抗噪声能力。平均符号能量归一化为1时,四种调制的 d_min 差异巨大:调制方式每符号比特数 k星座点数归一化最小距离 d_min相对BPSK的距离损失BPSK122.0000dBQPSK241.414-3dB8PSK380.765-8.3dB16QAM4160.632-10dB这张表的信息量很大:从BPSK到QPSK,每符号多传1比特,星座距离损失3dB,但误码性能在相干瑞利信道下其实没有损失,因为QPSK可以看成两路正交BPSK,比特能量减半的同时噪声也在两个维度上各减半,结果是每比特误码率与BPSK几乎一致。但从QPSK往8PSK、16QAM走,每多传1比特,最小距离都在明显缩小,衰落信道下这种距离损失会被放大。所以关键不是“谁的星座点更多”,而是“多出来的星座点付出了多大的距离代价”。3.2 BPSK与QPSK在相干瑞利信道下的等价性BPSK把信息放在一个实维度上,星座点只有±1,d_min最大。QPSK把两个比特分别放在实部和虚部两个正交维度上,每个维度上依然是二电平判决,所以理论误码率曲线与BPSK完全相同。前提是采用格雷映射——相邻星座点之间只有一个比特不同,这样符号错误时误码率不会因为某个符号错判到远端而额外增加。这是很多入门者容易忽略的一点:如果QPSK映射比较随意,误码率会比BPSK差。仿真代码里建议严格按照格雷映射表来,不要自己随便给符号编号。后面我的结果里BPSK和QPSK曲线几乎重合,就是这个原因。3.3 8PSK的相位脆弱性:从90°间隔缩到45°8PSK的8个星座点均匀分布在单位圆上,相邻点之间的相位间隔是45°,而QPSK是90°。衰落信道下存在随机相位扰动,一旦相位估计有偏差或者噪声叠加使相位越过判决边界,8PSK很容易错到相邻符号。虽然平均功率恒定包络是它的优点,但在不加分集的瑞利信道里,这个优点被深衰落完全压住——深衰落时接收能量很小,相位判决的置信度跟着急剧下降。8PSK理论闭式误码率非常复杂,一般不用解析表达式,而是通过蒙特卡洛仿真或MGF数值积分来画曲线。实际仿真里你会发现8PSK在L=1时曲线下降得比QPSK慢很多,达到1e-2误码率大约需要多4dB左右信噪比,这正好对应星座最小距离8.3dB的损失的一部分。3.4 16QAM:幅度和相位联合受害16QAM是三种高阶调制里最复杂的一种:它同时用幅度和相位承载信息。星座图上12个点不再是等幅的,内圈点能量低、外圈点能量高。平均功率归一化后,最小距离只有0.632,判错边界很窄。瑞利衰落对16QAM特别不友好,因为衰落会直接扭曲接收星座的幅度分布。某个符号原本落在内圈某个点,经过一个小的 h 后接收点向原点收缩;另一个符号落在外圈,经过一个大的 h 后向外扩展。不同符号遭受不同的幅度缩放,判决区域发生畸变,误码率因而远高于相同平均信噪比下8PSK的表现。此外16QAM的峰均比高,对功放线性度和自动增益控制也更敏感,但这些在纯链路仿真中体现不出来。4. 仿真程序搭建与关键代码拆解4.1 参数设计与公平性前提开始写代码之前必须先想清楚几个参数,否则结果没有意义。第一,横轴必须用每比特信噪比 Eb/N0,不能直接用符号信噪比 Es/N0。BPSK每符号只有1比特,16QAM每符号有4比特,如果横轴统一用Es/N0,16QAM会“看起来”性能和BPSK差不多,但这是错觉,因为它每个符号里携带的信息量是BPSK的4倍。只有用Eb/N0做横轴,才能公平比较“传输一个比特需要花多少信噪比”。第二,衰落信道的平均功率要归一化,也就是 E[|h|²] = 1。否则L=2相比L=1多了一条支路,平均接收功率翻倍,误码率改善到底是来自功率翻倍还是来自分集就没法区分了。我们这里每条支路都归一化,合并后的平均信噪比才真正等于 L·γ̄。第三,每个信噪比点上的蒙特卡洛符号数要足够。我在后面的试验中用 N = 5e5 个符号,目标是能统计学可靠地估计到1e-4量级的误码率。有个经验法则:期望的错误比特数至少要有几十个,如果某个信噪比点只测出几个错误,那这个点的误码率读数基本是噪声,不上不下乱跳。4.2 发送、信道、MRC合并:一段可以直接跑通的核心代码下面的MATLAB代码省略了外层循环和具体的星座表函数,保留了链路最核心的结构,你在自己的工程里照这个框架扩展就行。N = 5e5; % 每个SNR点的符号数 k = log2(M); % 每符号比特数,M=2/4/8/16 EbN0_dB = 0:2:24; % 在循环内部,某个EbN0点上的处理如下: EbN0 = 10^(EbN0_dB(idx)/10); EsN0 = k * EbN0; % 符号信噪比 % --- 发送端:随机比特 -> 调制符号(平均功率归一化到1) bits = randi([0 1], 1, N*k); txBits = reshape(bits, k, N).'; symIdx = bi2de(txBits, 'left-msb'); % 十进制符号索引 x = constellation(M, symIdx + 1); % 查星座表,平均功率=1 % --- 瑞利信道:L条独立支路 h = (randn(L,N) + 1j*randn(L,N)) / sqrt(2); % --- 加性高斯白噪声(复噪声每维方差N0/2) N0 = 1 / EsN0; % 符号能量归一化后 n = sqrt(N0/2) * (randn(L,N) + 1j*randn(L,N)); % --- 接收与MRC合并 r = h .* x + n; % 每根支路接收信号 w = conj(h); % MRC权重:共轭信道 g = sum(abs(h).^2, 1); % 合并增益 sum|h_l|^2 z = sum(w .* r, 1) ./ g; % 除以增益,恢复发送星座尺度 % --- 最小欧氏距离判决(通用,避免手写阈值) diffMat = abs(z.' - constellation); % N x M [~, estIdx] = min(diffMat, [], 2); estBits = de2bi(estIdx-1, k, 'left-msb'); % --- 统计误比特数 bitErr = sum(estBits(:) ~= bits(:)); ber = bitErr / (N*k);这里有个很容易写错的地方要专门提醒:MRC合并后必须除以增益 g。如果不除以 g,z 的信号部分是 g·x,而 g 是随信道随机变化的,直接把 z 丢进星座判决函数,星座点的尺度一直在漂移,误码率会异常高,或者看起来“永远降不下去”。除以 g 之后,z 恢复成 x + 等效噪声,等效噪声功率与 g 成反比,这时再用固定星座做最小距离判决才是正确的。4.3 星座映射与判决:统一用最小欧氏距离我建议不要给每种调制手写一组判决阈值,尤其是16QAM,手写阈值容易出错且不好扩展到更高阶调制。统一做法是:发送端维护一个星座点向量,接收端对合并后的符号计算它到所有星座点的欧氏距离,取最近点索引,再通过索引反查比特。这样代码结构统一,换调制方式时只需要换星座表。星座表定义注意两个细节:QPSK要用格雷映射;16QAM的标准星座坐标取 [-3, -1, 1, 3] 的笛卡尔积,然后除以 sqrt(10) 做平均功率归一化。这样星座表的平均能量正好是1,与信道模型里的 Es=1 保持口径一致。4.4 蒙特卡洛次数多少才可信很多同学的误码率曲线最后一段“翘起来”,大概率不是算法问题,而是符号数不够。比如你目标是测到1e-4,却只发了1e4个符号,那这个信噪比点上如果碰巧没有错误,误码率就被记为0,在log坐标里直接掉到图外;如果碰巧有1个错误,误码率就是1e-4。这两种结果都不可用。我的经验是目标误码率比要测的最低误码率再低一个量级。要稳定显示1e-3附近的曲线,N = 5e5 是起步值;要测到1e-4,N 至少要到5e6。时间不够时可以先用低N跑全范围找到大致拐点,再在重点信噪比区间用大N加密,效率会高很多。5. 实测结果该怎么读:四条曲线背后的设计含义5.1 整体走势:BPSK/QPSK重合,高阶调制被“惩罚”把四种调制和L=1/2/4组合下的BER曲线画在同一张图上,最直观的结论有三个。第一,BPSK和QPSK的曲线在三种分集阶数下几乎完全重合,差距不超过0.1dB。这是因为相干检测下QPSK本质就是两路正交BPSK,格雷映射又没有额外的比特损失。所以在瑞利衰落信道里,如果每符号传输2比特,直接选QPSK,不要犹豫,性能和BPSK一样好,频谱效率却翻倍。第二,8PSK在L=1时比QPSK差约4dB,16QAM比QPSK差约7-8dB(以1e-2误码率为参考点),而且差距会随着误码率要求变严而拉大。这说明高阶调制在没有分集的衰落环境里非常吃亏,单纯加大发射功率去补这个差距,代价极高。第三,增加分集阶数后,所有调制方式的曲线斜率都变陡。L=2相比L=1,达到1e-2所需Eb/N0大约下降8-9dB;L=4相比L=1大约下降12-13dB。不同调制之间的“绝对差距”在L增大后有所缩小,但相对排序不变。5.2 分集阶数与调制阶数的匹配:用表格说话为了方便起见,我把本次仿真的相对读数整理成表。表里的“0”代表BPSK在L=1下达到1e-2所需Eb/N0,其他数字是相对这个基准的差值,负值代表所需信噪比更低。调制方式L=1 相对需求L=2 相对需求L=4 相对需求BPSK0.0 dB-8.7 dB-12.6 dBQPSK0.1 dB-8.6 dB-12.5 dB8PSK4.2 dB-5.5 dB-9.8 dB16QAM7.8 dB-2.8 dB-7.4 dB这张表读出来的信息很实用:如果你要求误码率1e-2、可用信噪比只有10dB,L=1时能用QPSK但用不了8PSK和16QAM;加上L=2之后,8PSK瞬间变得可行,16QAM还差一些;如果升级到L=4,16QAM也能站稳。这就是“分集与调制匹配”的含义——调制阶数决定频谱效率的天花板,分集阶数决定可靠性下限。需要强调,这些数值是本次仿真条件下的近似读数,不同随机种子、不同衰落生成方式会有零点几到1dB的浮动,趋势才是可迁移的结论。5.3 为什么分集增益不能简单地“当成加几dB功率”经常有人问:L=2让所需信噪比下降8-9dB,是不是相当于把发射功率提高了8-9dB?在某个固定误码率参考点上可以这么近似,但换个误码率目标,你会发现这个“等效增益”不是常数。因为分集改变了误码率曲线的斜率,而不是简单地把曲线往左平移。这就是为什么用分集对抗衰落,本质上是改变性能曲线的形状,而不是单纯增加功率预算。设计系统时,一旦明确了目标误码率,就不要说“分集增益约等于多少dB”,而要具体看目标误码率处的读数。6. 仿真实验里的典型误区与排查建议6.1 误区一:横轴用Es/N0,四条曲线互相“骗人”我在4.1里强调过,但这里值得单独拿出来作为排错经验。如果用Es/N0做横轴,16QAM和QPSK的曲线会靠得很近,甚至16QAM在某些信噪比点看起来比8PSK还“好”。这不是真的,只是因为每个16QAM符号携带4比特,而横轴没有除以每符号比特数。正确的做法是统一用Eb/N0,也就是在循环里先把Es/N0除以k。凡是画出来出现“调制阶数越高性能越好”这种反直觉结果的,先检查这一步。6.2 误区二:MRC合并后忘了除以增益,判决尺度漂移这个问题我在代码注释里特意标了。现象是:L=1时曲线还算正常,L加到2或4之后,低信噪比段BER反而升高,或者曲线在中段出现异常平台。原因就是 z 的信号幅度随 sum(|h|²) 随机漂移,你把一个幅度一直在变的量直接丢进固定星座判决区域。线性的修正方式就是在合并后除以 g。这一点做完,曲线马上恢复正常。6.3 误区三:从理想信道估计换成导频估计,分集增益大幅缩水入门仿真里都用理想估计,也就是直接把真实的 h 拿来做MRC权重。但实际系统里 h 是从导频里估计出来的,估计误差在高阶调制下会被放大。常见表现是16QAM在L=4时的误码率曲线有一个“地板”,无论怎么增加信噪比都降不下去。这不是分集理论错了,而是导频密度不够导致信道估计精度跟不上升噪比。想研究这个问题,可以在仿真里给 h 加一个估计误差:h_est = h + e,其中 e 是方差取决于导频信噪比的高斯噪声,看看分集增益会退化多少。这个实验做完,你会对导频开销的意义有更深的理解。6.4 扩展方向:从平坦瑞利到频率选择性信道本实验假设平坦块衰落,信道在一个符号内不变。如果后面想把问题做深,可以考虑频率选择性信道,即不同时延的径相互叠加。这时MRC不再够用,通常要搭RAKE接收机,把每条时延支路也看作一个分集支路,再做合并。你会发现分集思想并没有变,只是“支路”的定义从空间天线扩展到了多径时延。理解了平坦瑞利下的MRC,RAKE的原理只需要一天就能上手。最后再分享一个排查经验。每次跑完仿真,先别急着贴曲线,随便挑一个信噪比点,把理论值和仿真值对一下。BPSK、L=1有任何信噪比下都有闭式公式,理论对不上就说明代码有bug,不要往下跑其他调制。我这个习惯帮我省掉了大量在8PSK和16QAM上无意义的时间浪费。