www.gusucode.com > MIMO_OFDM系统的matlab仿真程序以及GUI界面的实现源码程序 > CH9/transmitter.m
% Generates transmitted signal for one packet. function [tx_signal,inf_bits, tx_bits] = transmitter(SimulationParameters); global SimulationConstants; %number of transmit antennas modulation=SimulationParameters.ModulationType; if modulation == 'BPSK ' Bits=1; elseif modulation == 'QPSK ' Bits=2; end num_data_carriers=SimulationConstants.NumDataSubc; % Generate the information bits if SimulationParameters.ZeroPad inf_bits=randn(1,num_data_carriers*Bits*10)> 0; else inf_bits=randn(1,SimulationParameters.FFTPoints*Bits*10)> 0; end save length(inf_bits); % Convolutional encoding coded_bit_stream = tx_conv_encoder(inf_bits); %Puncturing tx_bits = tx_puncture(coded_bit_stream, SimulationParameters.ConvCodeRate); %no vblast option if SimulationParameters.VBLAST~=1 % Generate number bits that is an integer multiple of OFDM symbols rdy_to_mod_bits = tx_round_ofdm_syms(tx_bits, SimulationParameters); %Interleave padded bit stream if SimulationParameters.InterleavingBits == 1 & SimulationParameters.ZeroPad~=1 rdy_to_mod_bits = tx_interleaver(rdy_to_mod_bits, SimulationParameters); end %Modulate mod_syms_prov = tx_modulate(rdy_to_mod_bits, SimulationParameters.ModulationType); % Transmit diversity mod_syms = tx_diversity(mod_syms_prov,SimulationParameters); % Tx symbols to time domainclc time_syms = tx_convert_to_time(mod_syms,SimulationParameters); % Add cyclic prefix time_signal = tx_add_cyclic_prefix(time_syms,SimulationParameters); % Construction of the preamble preamble = tx_gen_preamble(SimulationParameters); %check if there is zero padding if SimulationParameters.ZeroPad~=1 numdatasubc=1; else numdatasubc=SimulationConstants.NumDataSubc; end % Concatenate preamble and data part and normalize the average signal power to 1 tx_signal = [preamble time_signal]*SimulationParameters.FFTPoints/sqrt(numdatasubc)/sqrt(size(time_signal,1)); else % go vblast % # of transmit antennas M=SimulationParameters.M; % Generate number bits that is an integer multiple of OFDM symbols rdy_to_mod_bits = tx_round_ofdm_syms(tx_bits, SimulationParameters); %Modulate mod_syms_prov = tx_modulate(rdy_to_mod_bits, SimulationParameters.ModulationType); % Transmit diversity mod_syms = tx_diversity_vblast(mod_syms_prov, SimulationParameters); % Tx symbols to time domain time_syms = tx_convert_to_time(mod_syms,SimulationParameters); % Add cyclic prefix time_signal = tx_add_cyclic_prefix(time_syms,SimulationParameters); % Construction of the preamble(though not used in this simulator, channel % estimation facility is provided for the user with vblast). preamble = tx_gen_preamble_vblast(SimulationParameters); %check if there is zero padding if SimulationParameters.ZeroPad~=1 numdatasubc=1; else numdatasubc=SimulationConstants.NumDataSubc; end % Concatenate preamble and data part and normalize the average signal power to 1 tx_signal = [preamble time_signal]*SimulationParameters.FFTPoints/sqrt(numdatasubc)/sqrt(M); end