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

📄 asp project.m

📁 Adaptive Signal Processing tutorial project
💻 M
字号:
% Alamouti Scheme
% Muryong Kim
% Wireless Communications Lab.
% Dept. of EECS, KAIST

% Parameters
number_of_symbols = 10000;  % number of total symbols transmitted  
Es = 1;                     % transmitted energy from two Tx antennas per symbol duration
bits = 2;                   % number of bits per symbol
Eb = Es/bits;               % energy per bit

% Signal Constellation: Gray-coded QPSK
s00 = complex(sqrt(Es/2),0);    % signal power divided by the number of Tx antennas
s01 = complex(0,sqrt(Es/2));
s11 = complex(-sqrt(Es/2),0);
s10 = complex(0,-sqrt(Es/2));
% scatterplot([s00 s01 s11 s10]);

% Binary Data Source Generation & QPSK Mapper
rand('state',sum(100*clock));

for index=1:number_of_symbols,
    temp=rand;			  	% uniformly distributed between 0 and 1
  if (temp<0.25),
    dsource1(index)=0;
    dsource2(index)=0;
    symbol(index)=s00;
  elseif (temp<0.5),
    dsource1(index)=0;
    dsource2(index)=1;
    symbol(index)=s01;
  elseif (temp<0.75),
    dsource1(index)=1;
    dsource2(index)=0;
    symbol(index)=s10;
  else,
    dsource1(index)=1;
    dsource2(index)=1;
    symbol(index)=s11;
  end;
end;

% Fading Channel Generation
randn('state',sum(100*clock));
h_vector = complex(randn(1,number_of_symbols),randn(1,number_of_symbols));

% Alamouti Encoding Scheme
for index=1:2:number_of_symbols-3,
    symbol_faded(index)   =  h_vector(index)*symbol(index)         + h_vector(index+1)*symbol(index+1);
    symbol_faded(index+1) = -h_vector(index)*conj(symbol(index+1)) + h_vector(index+1)*conj(symbol(index));
end;
    symbol_faded(number_of_symbols)=0;
% Additive Noise Generation
noise_complex=complex(randn(1,number_of_symbols),randn(1,number_of_symbols));

SNR_in_dB=2:2:30;
for SNR_index=1:length(SNR_in_dB),
    % scaling noise variance  
    snr = 10^(SNR_in_dB(SNR_index)/10);	  % signal-to-noise ratio
    sgma = sqrt(Es/(bits*snr));	  	  % noise variance
    noise_scaled = sgma*noise_complex;
    
    symbol_received = symbol_faded + noise_scaled; % adding white gaussian noise
    
    % Combing Scheme at the Receiver
    for index=1:2:number_of_symbols,
        symbol_combined(index)   = (1/(conj(h_vector(index))*h_vector(index)+conj(h_vector(index+1))*h_vector(index+1)))*(conj(h_vector(index))*symbol_received(index)  + h_vector(index+1)*conj(symbol_received(index+1)));
        symbol_combined(index+1) = (1/(conj(h_vector(index))*h_vector(index)+conj(h_vector(index+1))*h_vector(index+1)))*(conj(h_vector(index+1))*symbol_received(index)-h_vector(index)*conj(symbol_received(index+1)));
    end;
    
        symbol_faded(number_of_symbols)=0;
    % Symbol Detection
    number_of_symbol_errors=0;
    number_of_bit_errors=0;
    for index=1:number_of_symbols,
        % metrics for ML symbol decision (for equal energy constellation)
        c00=dot([real(symbol_combined(index)) imag(symbol_combined(index))], [real(s00) imag(s00)]);
        c01=dot([real(symbol_combined(index)) imag(symbol_combined(index))], [real(s01) imag(s01)]);
        c10=dot([real(symbol_combined(index)) imag(symbol_combined(index))], [real(s10) imag(s10)]);
        c11=dot([real(symbol_combined(index)) imag(symbol_combined(index))], [real(s11) imag(s11)]);

        % ML symbol decision
        c_max=max([c00 c01 c10 c11]);
        if(c00==c_max),
            decision1=0; decision2=0;
        elseif(c01==c_max),
            decision1=0; decision2=1;
        elseif(c10==c_max),
            decision1=1; decision2=0;
        else,
            decision1=1; decision2=1;
        end;

        % bit & symbol error count
        symbol_error_flag=0;
        if(decision1~=dsource1(index)),
            number_of_bit_errors = number_of_bit_errors+1;
            symbol_error_flag=1;
        end;
        if(decision2~=dsource2(index)),
            number_of_bit_errors = number_of_bit_errors+1;
            symbol_error_flag=1;
        end;
        if(symbol_error_flag==1),
            number_of_symbol_errors = number_of_symbol_errors+1;
        end;
    end;
    SNR_in_dB(SNR_index)
    % Ps(SNR_index) = number_of_symbol_errors/number_of_symbols
    Pb(SNR_index) = number_of_bit_errors/(bits*number_of_symbols)
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
semilogy(2:2:30,Pb,'d-');
grid;
legend('Alamouti : 2 Tx, 1 Rx');
ylabel('Error Rate');
xlabel('Eb/No');

⌨️ 快捷键说明

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