
关注我追更更多通信仿真代码文章目录摘要1. 引言2. 理论基础2.1 MIMO 系统模型2.2 基于 SVD 的信道对角化2.3 注水算法与容量最大化2.4 空间相关信道模型Kronecker 模型3 仿真设计与结果3.1 仿真参数配置仿真参数配置表3.2 对比方案与评估指标3.3 注水算法迭代3.4 仿真结果与性能分析3.5 部分代码4 、总结摘要在多输入多输出MIMO通信系统中传统的等功率空间复用方案因未考虑空间子信道质量的差异性在低信噪比或强空间相关性场景下存在显著的功率浪费。本文基于奇异值分解SVD理论将 MIMO 信道解耦为并行独立子信道并结合注水Water-Filling算法实现发射功率的自适应最优分配。通过 MATLAB 蒙特卡洛仿真对比分析了注水优化、等功率分配、特征波束赋形及 SISO 基准四种方案的遍历容量。仿真结果表明注水算法在低信噪比下自动退化为波束赋形以获取分集增益在高信噪比下退化为等功率分配以实现满复用在强空间相关性且低信噪比条件下注水算法相比等功率分配可获得约 40%∼60% 的容量增益验证了其在非理想信道环境下的鲁棒性。1. 引言随着无线通信业务对数据传输速率需求的爆炸式增长多输入多输出MIMO技术已成为 4G/5G 乃至 6G 系统的核心物理层技术之一。MIMO 系统通过在收发两端部署多根天线能够在不增加额外频谱带宽的前提下利用空间自由度显著提升系统容量。其中空间复用Spatial Multiplexing是获取高频谱效率的关键手段其核心思想是在同一时频资源上并行传输多个独立数据流。然而实际 MIMO 信道的各空间子信道即特征模式强度往往不均衡这源于两方面物理因素一是信道矩阵的天然随机性如瑞利衰落二是收发端天线阵列的紧凑布局引发的空间相关性。在传统开环传输模式下发射端若采用固定等功率分配Equal Power Allocation则必然会将相当一部分功率浪费在增益极低的弱子信道上导致系统性能严重下降甚至在低信噪比区域劣于单天线系统。为了逼近 MIMO 信道的理论容量上界发射端需依赖信道状态信息CSIT实施预处理。奇异值分解SVD 能够将 MIMO 信道解耦为多个互不干扰的并行单入单出SISO子信道而 注水Water-Filling算法 则根据各子信道的信噪比以拉格朗日乘数法为理论工具在总功率约束下实现功率的最优分配。本文基于上述理论在 MATLAB 平台上搭建了完整的 2×2 MIMO 链路级仿真系统通过 蒙特卡洛实现计算遍历容量。重点研究了注水算法在不同信噪比和不同空间相关系数下的自适应行为并与等功率 SVD 复用、单流波束赋形及 SISO 基准进行系统性对比。2. 理论基础2.1 MIMO 系统模型2.2 基于 SVD 的信道对角化2.3 注水算法与容量最大化2.4 空间相关信道模型Kronecker 模型3 仿真设计与结果3.1 仿真参数配置仿真参数配置表参数名称符号 / 数值设定发射天线数N t 2 N_t 2Nt2接收天线数N r 2 N_r 2Nr2总发射功率P total 1.0 P_{\text{total}} 1.0Ptotal1.0归一化信噪比扫描范围− 10 -10−10dB 至30 3030dB步进2 22dB蒙特卡洛实现次数5 000 5\,0005000次遍历容量统计平均空间相关系数容量对比图ρ 0.5 \rho 0.5ρ0.5中等相关空间相关系数增益扫描图ρ 0 : 0.1 : 0.9 \rho 0 : 0.1 : 0.9ρ0:0.1:0.9全相关区间扫描固定分析 SNR增益图− 4 -4−4dB低信噪比注水优势区关键数学公式对应注水功率分配P i ∗ max ( 0 , μ − σ n 2 σ i 2 ) P_i^* \max\left(0, \; \mu - \frac{\sigma_n^2}{\sigma_i^2}\right)Pi∗max(0,μ−σi2σn2)3.2 对比方案与评估指标3.3 注水算法迭代3.4 仿真结果与性能分析可以看到注水算法在低信噪比下自动退化为波束赋形以获取分集增益在高信噪比下退化为等功率分配以实现满复用从而完整包络了其余对比方案的性能上界。可以看到注水相对于等功率的容量提升幅度随信道病态程度加剧而急剧攀升在ρ0.9的强相关紧凑天线场景下可达约40%~60%充分验证了注水算法通过主动关闭劣质模态并集中功率于优势模态在非理想相关信道中有效避免了等功率分配固有的功率浪费。3.5 部分代码clear;clc;close all;%清空工作区、命令窗口关闭所有图形窗口%自动获取当前脚本所在目录的上级目录并将其加入 MATLAB 搜索路径 root_dirfileparts(fileparts(mfilename(fullpath)));addpath(genpath(root_dir));%--------------------系统参数设置--------------------Nt2;%发射天线数 Nr2;%接收天线数 P_total1.0;%总发射功率归一化 snr_db_vec-10:2:30;%信噪比扫描范围单位 dB num_trials5000;%每个 SNR 点的蒙特卡洛仿真次数 rho_values[0,0.5,0.9];%预设的空间相关系数图2中可能用于对比%创建保存图片的文件夹figures若不存在则新建 fig_dirfullfile(fileparts(mfilename(fullpath)),figures);if~exist(fig_dir,dir),mkdir(fig_dir);end%%--------------------1.固定相关系数下的容量对比图1--------------------rho_test0.5;%设定相关系数为0.5中等相关 C_wfzeros(length(snr_db_vec),1);%预分配注水容量向量 C_epzeros(length(snr_db_vec),1);%预分配等功率容量向量 C_bfzeros(length(snr_db_vec),1);%预分配波束赋形容量向量 C_sisozeros(length(snr_db_vec),1);%预分配 SISO 基准容量向量fprintf(Running ergodic capacity sweepsforrho%.1f...\n,rho_test);%外层循环遍历每个 SNR 点fors_idx1:length(snr_db_vec)snr_dbsnr_db_vec(s_idx);snr_lin10^(snr_db/10);%将 dB 转换为线性值 noise_varP_total/snr_lin;%由 SNR 和总功率计算噪声方差%各容量的累加器用于后续求平均 cap_wf_sum0;cap_ep_sum0;cap_bf_sum0;cap_siso_sum0;%内层循环蒙特卡洛多次信道实现fork1:num_trials%生成一次空间相关的瑞利衰落信道矩阵收发相关系数均为 rho_test[H,~,~]generate_correlated_channel(Nt,Nr,rho_test,rho_test,1);ssvd(H);%对 H 进行奇异值分解获得奇异值向量 sigma_sqs.^2;%奇异值平方各子信道增益%----------1)注水Water-Filling容量----------[P_wf,~,~]water_filling_algorithm(sigma_sq,P_total,noise_var);cap_wfsum(log2(1P_wf.*sigma_sq/noise_var));cap_wf_sumcap_wf_sumcap_wf;%----------2)等功率分配Equal Power容量----------P_ep(P_total/Nt)*ones(size(sigma_sq));cap_epsum(log2(1P_ep.*sigma_sq/noise_var));cap_ep_sumcap_ep_sumcap_ep;%----------3)主特征模式波束赋形Rank-1容量----------cap_bflog2(1P_total*sigma_sq(1)/noise_var);cap_bf_sumcap_bf_sumcap_bf;%----------4)SISO 瑞利基准容量----------h_siso(randn1j*randn)/sqrt(2);cap_sisolog2(1P_total*abs(h_siso)^2/noise_var);cap_siso_sumcap_siso_sumcap_siso;end%对当前 SNR 点的多次实现求平均得到遍历容量C_wf(s_idx)cap_wf_sum/num_trials;C_ep(s_idx)cap_ep_sum/num_trials;C_bf(s_idx)cap_bf_sum/num_trials;C_siso(s_idx)cap_siso_sum/num_trials;end%----------绘制图1容量 vs SNR 曲线全中文标注----------figure(Name,遍历容量对比,Position,[100,100,850,520]);plot(snr_db_vec,C_wf,r-o,LineWidth,2.2,MarkerFaceColor,r,...DisplayName,最优 SVD 注水 (自适应秩));hold on;plot(snr_db_vec,C_ep,b--s,LineWidth,1.8,MarkerFaceColor,b,...DisplayName,SVD 等功率分配 (固定秩-2));plot(snr_db_vec,C_bf,m-.d,LineWidth,1.8,MarkerFaceColor,m,...DisplayName,主特征模式波束赋形 (秩-1));plot(snr_db_vec,C_siso,k:,LineWidth,1.6,...DisplayName,SISO 瑞利基准 (1x1));grid on;xlabel(平均信噪比 (dB));%X轴标签中文ylabel(遍历频谱效率 (bps/Hz));%Y轴标签中文title(sprintf(固定2x2 MIMO 遍历容量注水优化(\\rho%.1f),rho_test));legend(Location,northwest,FontSize,10);%图例位置%保存图片到 figures 文件夹文件名保留英文防止乱码saveas(gcf,fullfile(fig_dir,capacity_wf_vs_equal_power.png));%%--------------------2.注水增益 vs 空间相关系数图2--------------------fprintf(Analyzing capacity gain over correlation sweep...\n);rho_sweep0:0.1:0.9;%相关系数扫描向量 snr_low-4;%固定低 SNR 点此处注水优势最明显 gain_low_snrzeros(length(rho_sweep),1);%预存增益百分比%外层循环遍历每个相关系数forr_idx1:length(rho_sweep)rhorho_sweep(r_idx);noise_varP_total/(10^(snr_low/10));%计算固定 SNR 下的噪声方差 cap_wf_accum0;cap_ep_accum0;%内层蒙特卡洛循环fork1:num_trials[H,~,~]generate_correlated_channel(Nt,Nr,rho,rho,1);ssvd(H);sigma_sqs.^2;%注水容量[P_wf,~,~]water_filling_algorithm(sigma_sq,P_total,noise_var);cap_wf_accumcap_wf_accumsum(log2(1P_wf.*sigma_sq/noise_var));%等功率容量 P_ep(P_total/Nt)*ones(size(sigma_sq));cap_ep_accumcap_ep_accumsum(log2(1P_ep.*sigma_sq/noise_var));end%计算注水相对于等功率的容量提升百分比gain_low_snr(r_idx)((cap_wf_accum-cap_ep_accum)/cap_ep_accum)*100;end%----------绘制图2柱状图全中文标注----------figure(Name,注水增益 vs 空间相关性,Position,[150,150,750,480]);bar(rho_sweep,gain_low_snr,0.5,FaceColor,[0.20.60.8]);grid on;xlabel(空间相关系数 (\rho));%X轴标签中文ylabel(注水相比等功率的容量增益 (%));%Y轴标签中文title(sprintf(固定 2x2 MIMO 注水优化优势 (SNR %d dB),snr_low));4 、总结本文通过理论分析与 MATLAB 仿真系统研究了基于 SVD 与注水算法的 MIMO 功率优化策略。结果表明注水算法能够根据信道状态自适应分配功率在低信噪比下退化为波束赋形以获取分集增益在高信噪比下退化为等功率分配以实现满复用。尤其在强空间相关信道中注水算法相比等功率分配可带来 40%~60% 的显著容量增益有效避免了功率浪费验证了其在非理想信道环境下的优越性与鲁棒性。完整仿真代码可见往期文章文末VX公众号包含往期博客所有代码所见即所得