www.gusucode.com > ofdm结合2x2的m.. > ofdm结合2x2的m...构的WLAN环境数据传输仿真程序matlab版,包括信道估计和同步等模块/transmitter.m
% Generates transmitted signal for one packet. function [tx_signal, inf_bits, tx_bits] = transmitter(sim_options); global sim_consts; % Generate the information bits inf_bits = randn(1, sim_options.PacketLength) > 0; % Convolutional encoding coded_bit_stream = tx_conv_encoder(inf_bits); %Puncturing tx_bits = tx_puncture(coded_bit_stream, sim_options.ConvCodeRate); % Generate number bits that is an integer multiple of OFDM symbols rdy_to_mod_bits = tx_make_int_num_ofdm_syms(tx_bits, sim_options); if sim_options.InterleaveBits == 1 %Interleave padded bit stream rdy_to_mod_bits = tx_interleaver(rdy_to_mod_bits, sim_options); end %Modulate mod_syms = tx_modulate(rdy_to_mod_bits, sim_options.Modulation); % Transmit diversity mod_syms = tx_diversity(mod_syms, sim_options); %Add pilot symbols if ~sim_options.UseTxDiv mod_ofdm_syms = tx_add_pilot_syms(mod_syms, sim_options); else mod_ofdm_syms(1,:) = tx_add_pilot_syms(mod_syms(1,:), sim_options); mod_ofdm_syms(2,:) = tx_add_pilot_syms(mod_syms(2,:), sim_options); end % Tx symbols to time domain time_syms = tx_freqd_to_timed(mod_ofdm_syms); % Add cyclic prefix time_signal = tx_add_cyclic_prefix(time_syms); % Construction of the preamble preamble = tx_gen_preamble(sim_options); % Concatenate preamble and data part and normalize the average signal power to 1 tx_signal = [preamble time_signal]*64/sqrt(52)/sqrt(size(time_signal,1)); % Model phase noise if sim_options.UsePhaseNoise phase_noise = phase_noise_model(sim_options.PhaseNoisedBcLevel, ... sim_options.PhaseNoiseCFreq, sim_options.PhaseNoiseFloor, size(tx_signal,2)); tx_signal = tx_signal.*exp(j*repmat(phase_noise,size(tx_signal,1), 1)); end %Power amplifier model if sim_options.UseTxPA if ~sim_options.UseTxDiv [tx_signal, pwr_in, pwr_out] = tx_power_amplifier(tx_signal, 1, 1, 1, 2, size(tx_signal,2)); % normalize average tx power to one tx_signal(1,:) = tx_signal(1,:)/sqrt(pwr_out); else % first antenna [tx_signal(1,:), pwr_in, pwr_out] = tx_power_amplifier(tx_signal(1,:), 1, 1, 1, 2, size(tx_signal(1,:),2)); % normalize average tx power to one tx_signal(1,:) = tx_signal(1,:)/sqrt(pwr_out); % second antenna [tx_signal(2,:), pwr_in, pwr_out] = tx_power_amplifier(tx_signal(2,:), 1, 1, 1, 2, size(tx_signal(2,:),2)); % normalize average tx power to one tx_signal(2,:) = tx_signal(2,:)/sqrt(pwr_out); end end % Generates passband signal from which the tx power spectrum can be estimated if sim_options.TxPowerSpectrum if ~sim_options.UseTxDiv interp_tx_signal = interp(tx_signal, 16); else interp_tx_signal(1,:) = interp(tx_signal(1,:), 16); interp_tx_signal(2,:) = interp(tx_signal(2,:), 16); end % upconvert, and extract passband signal rf_tx_signal = interp_tx_signal.*exp(repmat(j*2*pi*4/16* ... (0:size(interp_tx_signal,2)-1), size(interp_tx_signal, 1), 1)); rf_tx_signal = real(rf_tx_signal); end