www.gusucode.com > 实现不同收发天线数,不同调制方式下的误比特率测量matlab源码程序 > MIMO程序/ui_read_options.m

    function sim_options = ui_read_options

% frame length, in symbols
Frm_length = eval(get(findobj('Tag', 'FrmLen'),'String'));

% number of packets
NumberofPackets = eval(get(findobj('Tag', 'NumofPkt'),'String'));

% Modulation
modulation = get(findobj('Tag', 'Modulation'),'String');
modulation = modulation(get(findobj('Tag', 'Modulation'),'Value'),:);

% Channel models
if get(findobj('Tag', 'AWGN    '),'Value')
   chan_model = 'AWGN    ';
elseif get(findobj('Tag', 'Rayleigh'),'Value')
   chan_model = 'Rayleigh';
end

% Rx Diversity options
oneRx = get(findobj('Tag', '1Rx'),'Value');
if oneRx==1
    rx_div=1;
end
twoRx = get(findobj('Tag', '2Rx'),'Value');
if twoRx==1
    rx_div=2;
end
threeRx = get(findobj('Tag', '3Rx'),'Value');
if threeRx==1
    rx_div=3;
end
fourRx = get(findobj('Tag', '4Rx'),'Value');
if fourRx==1
    rx_div=4;
end
% Tx Diversity options
oneTx = get(findobj('Tag', '1Tx'),'Value');
if oneTx==1
    tx_div=1;
end
twoTx = get(findobj('Tag', '2Tx'),'Value');
if twoTx==1
    tx_div=2;
end
threeTx = get(findobj('Tag', '3Tx'),'Value');
if threeTx==1
    tx_div=3;
end
fourTx = get(findobj('Tag', '4Tx'),'Value');
if fourTx==1
    tx_div=4;
end
if isempty(rx_div)
    rx_div=2;
end
if isempty(tx_div)
    tx_div=2;
end
if rx_div==1 & tx_div==1
      uiwait(errordlg('STBC not applicable for SISO systems!! Program will exit to Command line.','Invalid Input','Modal'));
      return;
end
if (rx_div==3 & tx_div==1) || (rx_div==3 & tx_div==2) || (rx_div==4 & tx_div==2) || (rx_div==2 & tx_div==3) || ...
           (rx_div==3 & tx_div==3) || (rx_div==2 & tx_div==4) || (rx_div==3 & tx_div==4)
      uiwait(errordlg('STBC not coded for 1x3, 2x3, 2x4, 3x2, 3x3, 4x2 and 4x3 systems!!Program will exit to Command line.','Invalid Input','Modal'));
      return;
end
         
% channel estimation
ch_est=get(findobj('Tag', 'Channel_Est'),'Value');
if ch_est==1 & (rx_div~=2 || tx_div~=2)
    uiwait(errordlg('Channel Estimation: Code programmed for 2x2 system only!! Program will exit to Command line','Invalid Input','Modal'));
    return;
end

%receive correlation
rx_corr=get(findobj('Tag', 'Rx_corr'),'Value');

%Save file
savefile=get(findobj('Tag', 'Savefile'),'Value');
filename = get(findobj('Tag', 'FileName'),'String');

str1=filename;
if isempty(str1) & savefile==1
uiwait(errordlg('Enter file name!! Program will exit to Command line','Invalid Input','Modal'));
return;
end

%correlation coefficient
Rx_corr=get(findobj('Tag', 'Rx_corr'),'Value');
corr_val_str=eval(get(findobj('Tag', 'corr_value'),'String'));

if corr_val_str==0 & Rx_corr==1 || corr_val_str < 0 || corr_val_str > 1
uiwait(errordlg('Enter correlation coefficient value between 0 and 1!! Press CNTL+C to exit to Command line.','Invalid Input','Modal'));
return;
end

Rx_corr=get(findobj('Tag', 'Rx_corr'),'Value');
if Rx_corr==1 & (rx_div~=2 || tx_div~=2)
    uiwait(errordlg('Receive Correlation: Code programmed for 2x2 system only!! Press CNTL+C to exit to Command line.','Invalid Input','Modal'));
    return;
end

sim_options = struct('FrmLen', Frm_length, ...
   'NumberofPackets', NumberofPackets, ...
   'Modulation',modulation, ...
   'ChannelModel',chan_model, ...
   'TxDiv',tx_div, ...
   'RxDiv',rx_div, ...
   'Channel_Est',ch_est, ...
   'Rx_corr', rx_corr, ...
   'corr_value',corr_val_str, ...
   'Savefile',savefile,...
   'FileName',filename);