手把手实战 MATLAB 通信系统仿真 05

发布时间:2026/8/20 12:47:02
手把手实战 MATLAB 通信系统仿真 05 第 5 章 随机数、噪声、SNR 与 Eb/N0本章目标彻底掌握噪声方差由 Eb/N0 推导的完整物理逻辑精准区分 SNR、Es/N0、Eb/N0 三大易混淆指标熟练手工添加实 AWGN、复 AWGN 噪声规避 MATLAB 自带 awgn 函数的使用误区掌握单位换算方法仿真参数设置完全贴合通信理论标准。5.1 三个量不要混成一个量通信仿真中 90% 的参数错误都来源于SNR、Es/N0、Eb/N0 三者混用。三者物理定义完全不同无法直接等价必须根据调制阶数、采样倍率、编码率换算。核心定义区分SNR采样信噪比时域采样点的信号功率与噪声功率比值是MATLAB仿真、波形加噪的直接输入参数。Es/N0符号信噪比单个调制符号的能量与噪声单边功率谱密度之比聚焦符号级传输性能。Eb/N0比特信噪比单个信息比特的能量与噪声单边功率谱密度之比是通信系统性能评估、BER曲线的标准横轴指标。对于M阶调制单符号承载比特数。无编码、符号率采样的理想场景下三者换算关系固定。若存在过采样每符号个采样点、信道编码需要额外修正参数。完整换算公式线性 dB 版本换算关系线性公式dB 公式Es/N0 ↔ Eb/N0采样SNR ↔ Eb/N0无编码采样SNR ↔ Eb/N0含编码率R关键原理说明过采样sps1会让单个比特的能量分散到多个采样点上采样信噪比会降低因此公式需要减去采样倍率的对数项这是新手最容易遗漏的关键点。5.2 手工生成复 AWGN复基带通信系统QPSK/16QAM/64QAM均使用复高斯白噪声噪声实部、虚部相互独立且各自方差为噪声总功率等于。工程仿真统一标准固定平均符号能量 Es1通过 Eb/N0 反推噪声功率保证仿真物理意义统一、结果可复现。代码单位平均符号能量下的 M 进制复基带 AWGNM 16; k log2(M); EbN0dB 10; gamma_b 10^(EbN0dB/10); % 线性Eb/N0 % 固定符号能量Es1推导比特能量与噪声功率谱密度 Es 1; Eb Es/k; N0 Eb/gamma_b; % 噪声单边功率谱密度 Nsym 100000; % 复AWGN实部、虚部分别方差N0/2 noise sqrt(N0/2)*(randn(Nsym,1) 1j*randn(Nsym,1)); % 验证噪声功率 fprintf(Measured complex noise power %.4g\n,mean(abs(noise).^2)); fprintf(Target N0 %.4g\n,N0);运行观察与原理验证复噪声总功率无限逼近理论值噪声实部、虚部分量方差各自逼近完全符合AWGN信道标准模型该模板无工具箱依赖适配所有高阶调制复基带仿真零误差。5.3 工具箱 awgn 到底接收什么awgn(x,snr) 的第二个参数本质上是 SNR而不是自动理解成 Eb/N0。若输入信号不是 0 dBW可使用 awgn(x,snr,measured) 让函数测量输入信号功率。若你已知的是 Eb/N0则先按 k、sps、编码率换算成采样 SNR较新版本也可使用 convertSNR。核心用法解析awgn(x,snr)默认基于输入信号功率计算信噪比输入信号功率必须为标准参考值awgn(x,snr,measured)自动测量当前输入信号功率再叠加对应信噪比的噪声适配非标准功率信号已知Eb/N0时必须先通过调制参数、采样倍率换算为采样SNR再调用awgn函数。代码Eb/N0 转 SNR 后再调用 awgn【Communications Toolbox】M 16; k log2(M); sps 4; % 每符号4倍过采样 EbN0dB 10; % 方法1手工公式换算通用所有版本MATLAB snrDb EbN0dB 10*log10(k) - 10*log10(sps); % 方法2新版MATLAB(R2022a) convertSNR 官方换算 snrDb2 convertSNR(EbN0dB,ebno,snr, ... BitsPerSymbol,k,SamplesPerSymbol,sps,CodingRate,1); fprintf(手工换算SNR %.2f dB\n,snrDb); fprintf(官方函数换算SNR %.2f dB\n,snrDb2); % 叠加噪声x为已生成的基带过采样波形 % y1 awgn(x,snrDb,measured); % y2 awgn(x,snrDb2,measured);运行后应观察snrDb 与 snrDb2 应一致或仅有数值显示误差。注意 x 必须已经存在且代表每符号 sps 个采样点的波形。大坑衰落信道后使用 measured若信号经历随时间变化的衰落再在循环中对每一帧使用 awgn(x,snr,measured)会把每帧衰落后的功率重新“校准”从而改变你原本想模拟的物理条件。更稳妥做法是依据发送端标称能量固定 N0。5.4 BER 仿真为什么要累计“足够多错误”蒙特卡洛BER仿真存在统计偶然性误差。若系统真实误码率为仅仿真比特大概率无法采集到误码最终输出BER0完全失真无法反映真实系统性能。工程通用仿真准则每个Eb/N0仿真点至少累计300个以上误码统计结果置信度极高同时设置最大仿真比特数避免低误码率场景下仿真耗时过长。代码按错误数停止的蒙特卡洛框架targetErr 300; % 目标误码数保证统计精度 maxBits 2e7; % 最大仿真比特防止无限循环 numErr 0; numBits 0; while numErr targetErr numBits maxBits N 20000; bits randi([0 1],N,1); tx 2*bits - 1; % 此处插入你的加噪、解调判决代码 % rx tx noise; % bitsHat rx 0; % numErr numErr sum(bitsHat ~ bits); numBits numBits N; end ber numErr/numBits; fprintf(仿真总比特数%d误码数%dBER %.4e\n,numBits,numErr,ber);运行后应观察低 BER 点会自动使用更多比特统计结果比固定很短的数据块更可靠。本章小结• Eb/N0 是通信性能最常用横轴但 awgn 的输入通常是采样 SNR。• 复 AWGN 的实部、虚部各分到 N0/2。• BER 统计必须考虑罕见事件需要足够多比特或足够多错误。动手练习1. 推导BPSK仿真噪声公式当比特能量Eb1时证明噪声标准差。2. 已知QPSK调制k2、过采样sps4、Eb/N08dB手工计算对应的采样SNR数值。3. 生成个randn随机样本验证标准高斯分布均值趋近于0、方差趋近于1。