[未答复] 关于mimo的映射问题,谁懂可以帮忙看下,想把一对一换成多对一

[复制链接]
Ivory灬 发表于 3 天前
本帖最后由 Ivory灬 于 2021-5-7 12:46 编辑

这是全部代码
% SM simulation

% Nt Transmit Antenna
% Nr Receive Antenna
% M  BPSK/QPSK... Modulation
% no bit/s/Hz Transmission

clc;
clear;
M = 16;
N = 20000;                      % Number of Symbols per frame每帧符号数
Es_N0_dB = [0:2:20];
k = log2(M);                    % bits per symbol
Nt =3;                         % Tx antennas
Nr =2;                         % Rx antennas
no = k + (log2 (Nt))    ;        % 6 bit transmission

E=2/3*(M-1);
K_QAM=sqrt(E);                  % 对发送符号能量进行归一化因子
% K_QAM=sqrt(6);                % 对M=8时 要用这个,不用上面的那个式子算
% K_QAM=sqrt(20);               % 对于M=32时的归一化因子                                 带解释

BER(1,length(Es_N0_dB)) = zeros;
bit_errors(1,length(Es_N0_dB)) = zeros;

symbol=qammod((0:M-1),M);                                                                        %解释

for xx=1:length(Es_N0_dB)
    xx
       for a=1:N

          bin_ip = round(rand(1,no));      % Generate Binary Input 生成2进制输入
          dec_ip = 0;


           for aa=1:length(bin_ip)          % Convert to Decimal Input 转换成十进制输入

              if bin_ip(aa)== 1

                  dec_ip = dec_ip + 2^(no-aa);                  %每位信号十进制数字

              end

           end

         %===================================================================
         %Spatial Modulation Mapper映射
         %===================================================================
         bin_choose=zeros(1,2);  
         for i=1:log2 (Nt)

                  bin_choose(i)=bin_ip(i);              %选择天线的信号位


            end
            bin_choose;
            dec_choose=0;
            for aa=1:length(bin_choose)          % Convert to Decimal  转换为十进制

                if bin_choose(aa)== 1

                   dec_choose = dec_choose + 2^(log2(Nt)-aa);               %选择天线的十进制表示

                end

            end
            tx_ant_no=dec_choose+1;
            offset=mod(dec_ip,M);                      % 选择天线参数以外的信号


            x = zeros(Nt,1);
            x(tx_ant_no) = (symbol(offset+1 ));
        %===================================================================
          sigma = (10^(-Es_N0_dB(xx)/20))*K_QAM;
          n = (1/sqrt(2))*(randn(Nr,1)+j*randn(Nr,1)); % white Gaussian Noise 0dB variance 白高斯噪声0分贝方差

        %==================================================================
         %Generate NrxNt Channel Matrix  生成 Nr*Nt 信道矩阵
        %==================================================================
        H = (1/sqrt(2))*(randn(Nr,Nt) + 1j*randn(Nr,Nt));

        y = H*x + n*sigma;
        %=================================================================
        %Optimal Detection Scheme 最佳检测方案最大似然
        %=================================================================
        p =1;
        for b=1:Nt
            for aa=1:M
                sy=symbol(aa);
                g = H(:,b)*sy;
                g_f = 0;

                for w=1:Nr

                    g_f = (abs(g(w)))^2 + g_f;

                end

                argmin(aa+(b-1)*M) = sqrt(p)*g_f - 2*(real(y'*g));            %  原理记住

            end
        end
        %=================================================================
        argmin;

         %Position of element with the minimum argument stored in est 元素的最小参数存储在 est 中

        [d,est] = min(argmin);             % argmin是列向量?
        est = est - 1;

        %==================================================================
        %Spatial Modulation Demapper 解调
        %==================================================================
        demod_bin = zeros(1,no);      

        est;

        %Convert to binary 转换成2进制
        for aa=0:(no-1)
            if ((est/(2^(no-1-aa)))>= 1)
                est = est - 2^(no-1-aa);
                demod_bin(aa+1) = 1;
            end
        end

       %Count bit errors 计数位错误
       bit_errors(xx) = bit_errors(xx) + length(find(demod_bin~=bin_ip));
    end
   BER(xx) = bit_errors(xx)/(N*no);
end
save('SM4_4_8QAM.mat','Es_N0_dB','BER');
semilogy(Es_N0_dB,BER,'bs-','LineWidth',1);
hold on
grid on
xlabel('Es/No, dB')
ylabel('Bit Error Rate')
这是多对一映射代码
void CreateAntennaIndex(struct OTFS * OTFS_trans)
{
        int i;
        int index_size = 1 << Bits_antenna;
        int index_small = 1 << (Bits_antenna - 1);
        for (i = 0; i < index_size; i++)
        {
                if (i < Nt)
                {
                        OTFS_trans->ant_selection = i;
                }
                else
                {
                        OTFS_trans->ant_selection = i - index_small;
                }

        }

}

怎么改,改好q2316734904有偿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表