资源简介
多用化下行MIMO 预处理块对角化BD算法的完整代码,希望可以帮助到你的学习运用
代码片段和文件信息
%算法Block Diagonalized Channel Inversion for Multiuser MIMO Downlink
%块对角信道逆转,仅发送端做处理。接收端没有参与处理。
%[2 2 4]情况共两个用户,每个用户2个接收天线
clear all;
close all;
%----------------仿真的参数配置-------------------------------
Nt=4;
Nr=[22];
K=2;
num_symbol=Nr(1);%一个符号时间内对每个用户来说发送的符号数
M=4;
num_bit=log2(M)*num_symbol;%一个符号持续时间一个符号所包含的比特数
N_loop=15;
total_num_bit=2*num_bit*N_loop;%在所有仿真循环内,所有用户总共收到的比特数
SNR_dB=[0 2 4 6 8 10 12 14 16 18 20 ];
SNR= 10.^(SNR_dB./10);
Eb=1/(2*num_bit);%每个比特能量其中假定总共的发送功率为1
No = Eb ./ SNR;
nstdv = sqrt(No./2); %计算噪声功率(方差)
BER=zeros(1length(SNR_dB));
%---------------仿真开始-----------------------------
%----------产生发送符号----------------
for loop=1:N_loop;%信道实现次数循环
%----------产生各个用户的发送信号(由比特序列开始,格雷映射,调制)------------
d1=zeros(Nr(1)1);
bits1=rand(1num_bit)>0.5;%生成比特序列,进行格雷映射
for i=1:num_symbol;
b1=bits1(2*i-1);
b2=bits1(2*i);
if b1==0&b2==0;
d1(i)=0;
elseif b1==0&b2==1;
d1(i)=1;
elseif b1==1&b2==0;
d1(i)=2;
else d1(i)=3;
end;
end;
d2=zeros(Nr(2)1);
bits2=rand(1num_bit)>0.5;
for i=1:num_symbol;
b1=bits2(2*i-1);
b2=bits2(2*i);
if b1==0&b2==0;
d2(i)=0;
elseif b1==0&b2==1;
d2(i)=1;
elseif b1==1&b2==0;
d2(i)=2;
else d2(i)=3;
end;
end;
%-----------4QAM调制产生符号---------------
s1=qammod(d1M);
s2=qammod(d2M);
%------------分别产生各个用户的信道矩阵,信道矩阵的各个元素为独立复高斯分布,每个元素的功率为1-------------------
normalized=1/sqrt(2); %归一化
H1=randn(24)+j*randn(24); %用户1信道矩阵
H1=normalized*H1;
H2=randn(24)+j*randn(24); %用户2信道矩阵
H2=normalized*H2;
%-------------BD算法的开始---------------
[USV] = svd(H2);
F1=V(:3:4);%计算预编码矩阵
[USV] = svd(H1);
F2=V(:3:4);
%-----------等效信道(信
评论
共有 条评论