通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  新兵

注册:2014-10-19
跳转到指定楼层
1#
发表于 2015-7-25 20:16:47 |只看该作者 |倒序浏览
本书在第352页的预编码设计仿真中,H_used如果不是方阵怎么办啊?
clear all;
clc;
warning('off','commbsolete:randint');
mode=1;
N_frame=10;
N_packet=1000;
b=2;
M=2^b;
mod_obj=modem.qammod('M',M,'SymbolOrder','Gray','InputType','bit');%调制器
demod_obj=modem.qamdemod(mod_obj);%解调器
NT=4;%基站天线数
N_user=20;
N_act_user=4;
sq2=sqrt(2);
I=eye(N_act_user,NT);
N_pbits=N_frame*NT*b;%每组的bit数
N_tbits=N_pbits*N_packet;%总共的bit数
% fprintf('=========================================================\n');
% fprintf('Pre-MMSE transmission');
% fprintf('\n %d x %d MIMO\n  %d QAM',NT,NR,M);
% fprintf('\n SImulation bits:%d',N_tbits);
% fprintf('=========================================================\n');
SNRdBs=[0:2:20];%信噪比,在每一种信噪比下,即每个环境下,通过调制,解调,计算误码率

for i_SNR=1:length(SNRdBs)
    SNRdB=SNRdBs(i_SNR);
    noise_var=NT*0.5*10^(-SNRdB/10);
    sigma=sqrt(noise_var);
    rand('seed',1);
    rand('seed',1);
    N_ebits=0;
   
   
    %%%%%%%%%%%%%%%%%%%%%%%%%发射机%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i_packet=1:N_packet;
        msg_bit=randint(N_pbits,1);
        symbol=modulate(mod_obj,msg_bit);
        Scale=modnorm(symbol,'avpow',1);
        Symbol_nomalized=reshape(Scale*symbol,NT,N_frame);
        for i_user=1:N_user
            H(i_user,:)=(randn(1,NT)+j*randn(1,NT))/sq2;
         
            Channel_norm(i_user)=norm(H(i_user,:));
        end
        
        [CH_norm,Index]=sort(Channel_norm,'descend');
        H_used=H(Index(1:N_act_user),:);

        temp_W=H_used'*inv(H_used*H_used'+(mode==1)*noise_var*I);
        beta=sqrt(NT/trace(temp_W*temp_W'));
        W=beta*temp_W;
        Tx_signal=W*Symbol_nomalized;
        %%%%%%%%%%%%%%%%%%%%%%%%信道和噪声%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         Rx_signal=H_used*Tx_signal+sigma*(randn(N_act_user,N_frame)+j*randn(N_act_user,N_frame));
        %%%%%%%%%%%%%%%%%%%%%%%接收机%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         y=Rx_signal/beta;
         Symbol_hat=reshape(y/Scale,NT*N_frame,1);
         msg_hat=demodulate(demod_obj,Symbol_hat);
         N_ebits=N_ebits+sum(msg_hat~=msg_bit);
        
    end
    BER(i_SNR)=N_ebits/N_tbits;
   

end
semilogy(SNRdBs,BER,'-r^','LineWidth',1)
hold on

grid on
xlabel('SNR[dB]');
ylabel('BER');
legend('pre_MMSE','pre_ZF');

举报本楼

本帖有 1 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-5-12 10:48 , Processed in 0.131444 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部