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

📄 ser_sufficientgl.asv

📁 是关于空时编码的nrs
💻 ASV
字号:
%==========================================================================% "Least Square Channel Estimation Using Special Training Sequences for MIMO% OFDM Systems in the Presence of Intersymbol Interference"% Van Duc Nguyen, 15.06.2004, Agder University College, Norway% Results of SER%==========================================================================%clc;clear all;NFFT = 64;               % FFT lengthG = 10;                   % Guard interval lengthM_ary =4;                % Multilevel of M-ary symbolP_A = sqrt(2);           % Amplitude of pilot symbol D_f = 2;                 % Pilot distance in frequency domainD_t = 4;                 % pilot distance in time domainNofZeros = D_f-1;M = NFFT / (D_f);        % Number of pilot symbol  per OFDM symbolt_a = 50*10^(-9);       % Sampling duration of HiperLAN/2%-------------------------------------------------% Parameters for Monte Carlo channel%-------------------------------------------------symbol_duration = NFFT * t_a;   %OFDM symbol durationnumber_of_summations = 40;      % Number of summations for Monte-Carlo methodf_dmax = 50.0;                  % Maximum Doppler frequencyload h_decimation.am -ascii;h11_initial = h_decimation;h12_initial = h_decimation;h21_initial = h_decimation;h22_initial = h_decimation;                                N_P  = length(h_decimation); NofOFDMSymbol = 1000;        %Number of data and pilot OFDM symbolNo_Of_OFDM_Data_Symbol = NofOFDMSymbol-ceil(NofOFDMSymbol/D_t);                            %Number of datay symbolslength_data = (No_Of_OFDM_Data_Symbol) * NFFT;                              % The total data length                                                                                Number_Relz = 100;ser_relz = [];for number_of_relialization= 1: Number_Relz;u11 = rand(N_P,number_of_summations); % A random variableu12 = rand(N_P,number_of_summations); % A random variableu21 = rand(N_P,number_of_summations); % A random variableu22 = rand(N_P,number_of_summations); % A random variable%-------------% Source bites%-------------source_data1 = randint(length_data,2);source_data2 = randint(length_data,2);%--------------------% bit to symbol coder%--------------------symbols1 = bi2de(source_data1);  symbols2 = bi2de(source_data2);  %----------------------------% QPSK modulator in base band%----------------------------------------------QASK_Symbol1 = dmodce(symbols1,1,1,'qask',M_ary);QASK_Symbol2 = dmodce(symbols2,1,1,'qask',M_ary);%-----------------------------------------------% Preparing data pattern%%-----------------------------------------------Data_Pattern1 = []; % Transmitted Signal before IFFTm = 0;for i=0:No_Of_OFDM_Data_Symbol-1;    QASK_tem = [];    for n=1:NFFT;          QASK_tem = [QASK_tem,QASK_Symbol1(i*NFFT+n)];    end;    Data_Pattern1 = [Data_Pattern1;QASK_tem];        clear QASK_tem;end;Data_Pattern2 = []; % Transmitted Signal before IFFTm = 0;for i=0:No_Of_OFDM_Data_Symbol-1;    QASK_tem = [];    for n=1:NFFT;          QASK_tem = [QASK_tem,QASK_Symbol2(i*NFFT+n)];    end;    Data_Pattern2 = [Data_Pattern2;QASK_tem];        clear QASK_tem;end;%------------------------% Preparing pilot pattern for Antenna 1%------------------------PP_A1 = []; for m = 0:M-1;         PP_A1 = [PP_A1,P_A*exp(j*D_f*pi*(m)^2/NFFT)];      for l = 1:D_f -1;    PP_A1=[PP_A1,zeros(1,NofZeros)];     end;    end;%------------------------% preparing pilot pattern for Antenna 2%------------------------PP_A2 = [];for m = 0:M-1;      PP_A2 = [PP_A2,P_A*exp(j*D_f*pi*(m+M/2)^2/NFFT)];    for l = 1:D_f -1;    PP_A2=[PP_A2,zeros(1,NofZeros)];     end;      end;%----------------------------------------% FFT matrix%----------------------------------------F = [];for k=0:NFFT-1    W_tem = [];    for n = 0:NFFT-1;        W_tem = [W_tem,exp(-j*2*pi*n*k/NFFT)];    end;    F = [F;W_tem];end;%---------------------------------------% Least square filter coefficients%---------------------------------------PP = [diag(PP_A1)*F(:,1:N_P),diag(PP_A2)*F(:,1:N_P)];Q = inv(PP'*PP);%******************************************************************% Transmitted Signal of Antenna 1 (Insert pilot sequence into data% sequence)%------------------------------------------------------------------TS1_BeforeIFFT = Insert_PilotSymbol(PP_A1,Data_Pattern1,D_t,NofOFDMSymbol,NFFT);%******************************************************************% Transmitted Signal of Antenna 2 (Insert pilot sequence into data% sequence)%------------------------------------------------------------------TS2_BeforeIFFT = Insert_PilotSymbol(PP_A2,Data_Pattern2,D_t,NofOFDMSymbol,NFFT);%------------------------------------------------------------------------% Transmitted signal of trasmitt antena 1 to receive antenna 1 (channel: h11)% and transmitted signal of trasmitt antena 1 to receive antenna 2 (channel: h12)%-----------------------------------------------------------------------ser_without_isic = [];snr_min =0;snr_max =50;step = 5;for snr = snr_min:step:snr_max;     rs11_frame = [];rs12_frame = [];initial_time=0;                 % Initial timefor i=0:NofOFDMSymbol-1;   OFDM_signal_tem = OFDM_Modulator(TS1_BeforeIFFT(i+1,:),NFFT,G);   % OFDM signal from the first transmitt antenna is created      [h11, t] = MCM_channel_model(u11, initial_time, number_of_summations, symbol_duration, ...,       f_dmax, h11_initial);   [h12, t] = MCM_channel_model(u12, initial_time, number_of_summations, symbol_duration, ...,       f_dmax, h12_initial);         initial_time = t;      rs11 = conv(OFDM_signal_tem, h11);   rs12 = conv(OFDM_signal_tem, h12);   % The received signal over multhipath channel is created   rs11 = awgn(rs11,snr,'measured','dB');   rs12 = awgn(rs12,snr,'measured','dB');      rs11_frame = [rs11_frame; rs11];   rs12_frame = [rs12_frame; rs12];   clear OFDM_signal_tem;end;%------------------------------------------------------------------------% Transmitted signal of antenna 2 to receive antenna 1 (channel: h21)% and transmitted signal of antenna 2 to receive antenna 2 (channel: h22)%-----------------------------------------------------------------------rs21_frame = [];rs22_frame = [];initial_time=0;                 % Initial timefor i=0:NofOFDMSymbol-1;   OFDM_signal_tem = OFDM_Modulator(TS2_BeforeIFFT(i+1,:),NFFT,G);   % OFDM signal from the second antenna is created      [h21, t] = MCM_channel_model(u21, initial_time, number_of_summations, symbol_duration, ...,       f_dmax, h21_initial);      [h22, t] = MCM_channel_model(u22, initial_time, number_of_summations, symbol_duration, ...,       f_dmax, h22_initial);         initial_time = t;      rs21 = conv(OFDM_signal_tem, h21);   rs22 = conv(OFDM_signal_tem, h22);   % The received signal over multhipath channel is created   rs21 = awgn(rs21,snr,'measured','dB');   rs22 = awgn(rs22,snr,'measured','dB');   rs21_frame = [rs21_frame; rs21];   rs22_frame = [rs22_frame; rs22];   clear OFDM_signal_tem;end;%-----------------% Recever 1: OFDM demodulator, channel estimation%-----------------estimated_h11_21 = [];Received_PP= []; % Prepare a matrix for reveived pilot symbolsReceiver_Data = []; %  Prepare a matrix for reveived data symbolsSignalPostFFT1 = [];SignalPostFFT2 = [];d1 = []; % Received signal of the first receive antennad2 = []; % Received signal of the second receive antennadata_symbol_1 = [];data_symbol_2 = [];for i=1:NofOFDMSymbol;   if (N_P > G+1) & (i>1)          % if it is not the first symbol and the length of CIR is longer than          % the gaurd interval length, then the ISI term must be taken into           % account          previous_symbol11 = rs11_frame(i-1,:);                           % previous OFDM symbol of the first transmitt                           % antenna to the first receive antenna          previous_symbol21 = rs21_frame(i-1,:);                           % previous OFDM symbol of the second transmitt antenna                           % to the first receive antenna          previous_symbol12 = rs12_frame(i-1,:);                           % previous OFDM symbol of the first transmitt                           % antenna to the second receive antenna          previous_symbol22 = rs22_frame(i-1,:);                           % previous OFDM symbol of the second transmitt antenna                           % to the second receive antenna                                                                                 ISI_term11 = previous_symbol11(NFFT+2*G+1:NFFT+G+N_P-1);                            % the position from NFFT+2G+1: NFFT+G+N_P-1 is ISI term          ISI_11 = [ISI_term11,zeros(1,length(previous_symbol11)-length(ISI_term11))];                                                ISI_term21 = previous_symbol21(NFFT+2*G+1:NFFT+G+N_P-1);                     ISI_21 = [ISI_term21,zeros(1,length(previous_symbol21)-length(ISI_term21))];                                ISI_term12 = previous_symbol12(NFFT+2*G+1:NFFT+G+N_P-1);                           % the position from NFFT+2G+1: NFFT+G+N_P-1 is ISI term          ISI_12 = [ISI_term12,zeros(1,length(previous_symbol12)-length(ISI_term12))];                                                ISI_term22 = previous_symbol22(NFFT+2*G+1:NFFT+G+N_P-1);                     ISI_22 = [ISI_term22,zeros(1,length(previous_symbol22)-length(ISI_term22))];                    %rs1_i = rs11_frame(i,:) + rs21_frame(i,:);                                      %rs2_i = rs12_frame(i,:) + rs22_frame(i,:);                    rs1_i = rs11_frame(i,:) + rs21_frame(i,:) + ISI_11 +  ISI_21;            rs2_i = rs12_frame(i,:) + rs22_frame(i,:) + ISI_12 +  ISI_22;                        % the ISI term is added to the current OFDM symbol      else                    rs1_i = rs11_frame(i,:) + rs21_frame(i,:);          rs2_i = rs12_frame(i,:) + rs22_frame(i,:);   end;           if (mod(i-1,D_t)==0)        %Demodulated_Pilot1 = PilotSymbolExtractor(rs1_i,NFFT,NFFT,G,D_f);         Demodulated_Pilot1 = OFDM_Demodulator(rs1_i,NFFT,NFFT,G);                SignalPostFFT1 = [SignalPostFFT1; Demodulated_Pilot1];        %Demodulated_Pilot2 = PilotSymbolExtractor(rs2_i,NFFT,NFFT,G,D_f);        Demodulated_Pilot2 = OFDM_Demodulator(rs2_i,NFFT,NFFT,G);                SignalPostFFT2 = [SignalPostFFT2; Demodulated_Pilot2];        Demodulated_P1 = [];        Demodulated_P2 = [];        for i = 1:NFFT;            Demodulated_P1 = [Demodulated_P1; Demodulated_Pilot1(i)];            Demodulated_P2 = [Demodulated_P2; Demodulated_Pilot2(i)];        end;                      estimated_h11_21_i = Q * PP' * Demodulated_P1;                he11_21_i = estimated_h11_21_i;                he11_i = he11_21_i(1:length(estimated_h11_21_i)/2);        H11_i = fft([he11_i;zeros(NFFT-N_P,1)]);        he21_i = he11_21_i(length(he11_21_i)/2+1:length(he11_21_i));        H21_i = fft([he21_i;zeros(NFFT-N_P,1)]);                estimated_h12_22_i = Q * PP' * Demodulated_P2;                he12_22_i = estimated_h12_22_i;        he12_i = he12_22_i(1:length(he12_22_i)/2);        H12_i = fft([he12_i;zeros(NFFT-N_P,1)]);                he22_i = he12_22_i(length(he12_22_i)/2+1:length(he12_22_i));        H22_i = fft([he22_i;zeros(NFFT-N_P,1)]);                                   else        %-----------------------------------------------------------        % OFDM demodulator        %-----------------------------------------------------------        Demodulated_signal1_i = OFDM_Demodulator(rs1_i,NFFT,NFFT,G);          SignalPostFFT1 = [SignalPostFFT1; Demodulated_signal1_i];        Demodulated_signal2_i = OFDM_Demodulator(rs2_i,NFFT,NFFT,G);         SignalPostFFT2 = [SignalPostFFT2; Demodulated_signal2_i];               d1_i = [];        d2_i = [];        for k = 1:NFFT;            H_k = [H11_i(k),H21_i(k); H12_i(k),H22_i(k)];            y = [Demodulated_signal1_i(k);Demodulated_signal2_i(k)];            x = inv(H_k) * y;            d1_i = [d1_i,x(1)];            d2_i = [d2_i,x(2)];        end;                %--------------------------        % Demodulated signal         %--------------------------        d1 = [d1; d1_i];                d2 = [d2; d2_i];                demodulated_symbol_1i = ddemodce(d1_i,1,1,'qask',M_ary);        demodulated_symbol_2i = ddemodce(d2_i,1,1,'qask',M_ary);        data_symbol_1 = [data_symbol_1, demodulated_symbol_1i];                data_symbol_2 = [data_symbol_2, demodulated_symbol_2i];                    end;end;    data_symbol_1 = data_symbol_1';    data_symbol_2 = data_symbol_2';    [number1_without_isic, ratio1_without_isic] = symerr(symbols1,data_symbol_1);            ser_without_isic = [ser_without_isic, ratio1_without_isic];    end;ser_relz = [ser_relz;ser_without_isic];end;ser = sum(ser_relz)/Number_Relz;snr = snr_min:step:snr_max;semilogy(snr, ser,'b*');ylabel('SER');xlabel('SNR');data = [snr; ser];save ser_sufficientGL.am data -ascii;

⌨️ 快捷键说明

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