• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2022-11-12
  • 语言: Matlab
  • 标签: 块对角化  BD算法  

资源简介

多用化下行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);
%-----------等效信道(信

评论

共有 条评论