⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mimo_ofdm_vblast_simulation.m

📁 用matlab对MIMO-OFDM通信系统的设计仿真的源代码
💻 M
字号:
% MIMO Linear Prediction based semi-blind channel estimation for MIMO-OFDM
%                         by Feng Wan
%       Begin Feb,2006,  Last Edited Feb.15,2007
%

% close all;
clear all;

rand('seed',1);
randn('seed',1);

disp_start='******Begin Time:***********';
disp_time_start1='hours:';
disp_time_start2='minutes:';
date_start=date;
time_start=clock;
fprintf('%s \n',disp_start);
fprintf('%s \n',date_start);
fprintf('%s %d %s %d \n',disp_time_start1,time_start(4),disp_time_start2,time_start(5));
fprintf('%s \n \n',disp_start);

disp('********  Initialization: *********');

% Define parameters
MIMO_OFDM_system_par=MIMO_OFDM_system_parset;
MIMO_OFDM_link_par=MIMO_OFDM_link_parset;

if(MIMO_OFDM_system_par.num_frame~=MIMO_OFDM_system_par.num_frame_channel_inv)
    error('num_frame~=num_frame_channel_inv!');
end


num_frame=MIMO_OFDM_system_par.num_frame;
num_frame_channel_inv=MIMO_OFDM_system_par.num_frame_channel_inv;
if(rem(num_frame,num_frame_channel_inv)==0)          %%%%%%%%%% rem是求余数
    num_frame_equ=num_frame/num_frame_channel_inv;
    MIMO_OFDM_system_par.num_frame_equ=num_frame_equ;
else
    error('Error! num_frame_channel_inv must divide num_frame.');
end
num_tx_antenna=MIMO_OFDM_system_par.num_tx_antenna;
num_rx_antenna=MIMO_OFDM_system_par.num_rx_antenna;
channel_length=MIMO_OFDM_system_par.channel_length;
num_carriers=MIMO_OFDM_system_par.num_carriers;

%%% BEGIN the Simulation for different SNR
num_SNR=3;
minmum_SNR=5;
step_SNR=5;

num_MonteCarlo=10;

if(MIMO_OFDM_system_par.enable_LS_algorithm==1)
    MSE_LS_SNR=zeros(num_SNR,1);
    BER_LS_SNR=zeros(num_SNR,1);        
end

BER_realch_SNR=zeros(num_SNR,1);  

    channel_0_range_min=0;
    channel_0_range_max=1;
    

%%% LOOP :Simulation for different SNR
for n_SNR=1:num_SNR   %%% Simulation for different SNR
%%% LOOP :Simulation for different SNR

    if(rem(n_SNR,1)==0)
       fprintf('\n *** In the iterations for different SNR *** totoal: %d  *** now: %d' ,num_SNR,n_SNR);
    end        
    MIMO_OFDM_system_par.SNR=step_SNR*(n_SNR-1)+minmum_SNR;

    
%%% BEGIN the Monte Carlo Simulation

if(MIMO_OFDM_system_par.enable_LS_algorithm==1)
    MSE_LS_MC=zeros(num_MonteCarlo,1);  
    BER_LS_MC=zeros(num_MonteCarlo,1);    
end

BER_realch_MC=zeros(num_MonteCarlo,1);

%%% LOOP : Monte Carlo Simulation
for n_MonteCarlo=1:num_MonteCarlo   %%% Monte Carlo Simulation
%%% LOOP : Monte Carlo Simulation
    if(rem(n_MonteCarlo,100)==0)
       fprintf('\n *** In the Monte Carlo iterations *** totoal: %d  *** now: %d' ,num_MonteCarlo,n_MonteCarlo);
    end        
       
% MIMO OFDM channel
% disp('********  Generate the channel: *********');
[channel_matrix_all,channel_matrix_equivalent_all,channel_matrix_upsampling_all,MIMO_OFDM_link_par]=...
    MIMO_OFDM_channel_generation(MIMO_OFDM_system_par,MIMO_OFDM_link_par,...
    channel_0_range_min,channel_0_range_max);

    
    if(MIMO_OFDM_system_par.pulse_type==1)
        channel_matrix=channel_matrix_all;  % here   channel_matrix=channel_matrix_all
        channel_matrix_equivalent=channel_matrix_equivalent_all;
        channel_matrix_upsampling=channel_matrix_upsampling_all;
%         norm_channel_matrix=0;
%         norm_channel_matrix_equivalent=0;
%         for n1=1:size(channel_matrix,3)
%             norm_channel_matrix=norm_channel_matrix+sum(sum(abs(channel_matrix(:,:,n1,1).^2)));
%         end
% 
%         for n1=1:size(channel_matrix,3)
%             norm_channel_matrix_equivalent=norm_channel_matrix_equivalent+...
%                 sum(sum(abs(channel_matrix_equivalent(:,:,n1,1).^2)));
%         end        

    else
        channel_matrix=channel_matrix_all;
        channel_matrix_equivalent=channel_matrix_equivalent_all; 
        channel_matrix_upsampling=0;       
%         norm_channel_matrix=0;
%         norm_channel_matrix_equivalent=0;
%         for n1=1:size(channel_matrix,3)
%             norm_channel_matrix=norm_channel_matrix+sum(sum(abs(channel_matrix(:,:,n1,1).^2)));
%         end
% 
%         for n1=1:size(channel_matrix,3)
%             norm_channel_matrix_equivalent=norm_channel_matrix_equivalent+...
%                 sum(sum(abs(channel_matrix_equivalent(:,:,n1,1).^2)));
%         end        
       
    end
    
    norm_channel_matrix=1;
    norm_channel_matrix_equivalent=1;
    
    % MIMO OFDM transmiter
    [tx_signal_time,tx_data_pilot]=MIMO_OFDM_transmiter(MIMO_OFDM_system_par);

    % MIMO OFDM channel
    MIMO_OFDM_channel_par=0;
    [rx_signal_time]=MIMO_OFDM_channel(MIMO_OFDM_system_par,tx_signal_time,...
        channel_matrix,channel_matrix_upsampling);


    % MIMO OFDM receiver
    [rx_data_pilot_frequency,rx_data_depulsed_time]=MIMO_OFDM_receiver(rx_signal_time,MIMO_OFDM_system_par);

    [BER]  = MIMO_OFDM_VBLAST_receiver(channel_matrix_equivalent(:,:,:,1),tx_data_pilot,...
             rx_data_pilot_frequency,MIMO_OFDM_system_par);
        
    BER_realch_MC(n_MonteCarlo)=BER;  
    
    if(MIMO_OFDM_system_par.enable_LS_algorithm==1)
        [channel_est_LS]=MIMO_OFDM_LS(rx_data_pilot_frequency,tx_data_pilot,MIMO_OFDM_system_par);
        if(MIMO_OFDM_system_par.pulse_type==1)
            MSE_LS_MC(n_MonteCarlo)=sum(sum(sum(abs(channel_matrix_equivalent(:,:,:,1)-channel_est_LS).^2)))/...
                norm_channel_matrix_equivalent;
        else
            MSE_LS_MC(n_MonteCarlo)=sum(sum(sum(abs(channel_matrix_equivalent(:,:,:,1)-channel_est_LS).^2)))/...
                norm_channel_matrix_equivalent;
        end
        [BER]  = MIMO_OFDM_VBLAST_receiver(channel_est_LS,tx_data_pilot,rx_data_pilot_frequency,MIMO_OFDM_system_par);
        
        BER_LS_MC(n_MonteCarlo)=BER;  

    end

    
end %  End the iterations for Monte Carlo Simulations
% disp('********  End the iterations for Monte Carlo Simulations: *********');


if(MIMO_OFDM_system_par.enable_LS_algorithm==1)
    MSE_LS_SNR(n_SNR)=sum(MSE_LS_MC)/num_MonteCarlo;   
    BER_LS_SNR(n_SNR)=sum(BER_LS_MC)/num_MonteCarlo;    
end
BER_realch_SNR(n_SNR)=sum(BER_realch_MC)/num_MonteCarlo;

%%% LOOP :Simulation for different SNR
end   %%% Simulation for different SNR
%%% LOOP :Simulation for different SNR



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%  End the iterations for the equivalent frames
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp(' ');
disp('BER using the real channel:');    
BER_realch_SNR

if(MIMO_OFDM_system_par.enable_LS_algorithm==1)
    disp('MSE of channel estimation using LS:');
    MSE_LS_SNR
    disp('BER using the LS channel estimate:');    
    BER_LS_SNR
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -