www.gusucode.com > MIMO_OFDM系统的matlab仿真程序以及GUI界面的实现源码程序 > CH9/tx_radon_hurwitz.m
function ofdm_syms_out = tx_radon_hurwitz(mod_ofdm_syms,SimulationParameters) global SimulationConstants; %if there is zeropad option if SimulationParameters.ZeroPad num_symbols = length(mod_ofdm_syms)/sum(SimulationConstants.NumDataSubc); mod_syms = reshape(mod_ofdm_syms, sum(SimulationConstants.NumDataSubc), num_symbols); else num_symbols = length(mod_ofdm_syms)/SimulationParameters.FFTPoints; mod_syms = reshape(mod_ofdm_syms, SimulationParameters.FFTPoints, num_symbols); end if SimulationParameters.TxDiv==2 %if there is zeropad option if SimulationParameters.ZeroPad ant1_syms = zeros(sum(SimulationConstants.NumDataSubc), num_symbols); ant2_syms = zeros(sum(SimulationConstants.NumDataSubc), num_symbols); else ant1_syms = zeros(SimulationParameters.FFTPoints, num_symbols); ant2_syms = zeros(SimulationParameters.FFTPoints, num_symbols); end % unchanged symbols ant1_syms(:,1:2:num_symbols) = mod_syms(:,1:2:num_symbols); ant2_syms(:,1:2:num_symbols) = mod_syms(:,2:2:num_symbols); % transformed symbols ant1_syms(:,2:2:num_symbols) = -conj(mod_syms(:,2:2:num_symbols)); ant2_syms(:,2:2:num_symbols) = conj(mod_syms(:,1:2:num_symbols)); ofdm_syms_out = zeros(2, length(mod_ofdm_syms)); ofdm_syms_out(1,:) = ant1_syms(:).'; ofdm_syms_out(2,:) = ant2_syms(:).'; elseif SimulationParameters.TxDiv==4 %if there is zeropad option if SimulationParameters.ZeroPad %make the number of columns a multiple of 8 while rem(num_symbols,4)~=0 temp=zeros(sum(SimulationConstants.NumDataSubc),1); mod_syms=[mod_syms temp]; num_symbols=num_symbols+1; end ant1_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols); ant2_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols); ant3_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols); ant4_syms = zeros(sum(SimulationConstants.NumDataSubc), 2*num_symbols); else %make the number of columns a multiple of 8 while rem(num_symbols,4)~=0 temp=zeros(SimulationParameters.FFTPoints,1); mod_syms=[mod_syms temp]; num_symbols=num_symbols+1; end ant1_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols); ant2_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols); ant3_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols); ant4_syms = zeros(SimulationParameters.FFTPoints, 2*num_symbols); end % unchanged symbols ant1_syms(:,1:8:2*num_symbols) = mod_syms(:,1:4:num_symbols); ant2_syms(:,1:8:2*num_symbols) = mod_syms(:,2:4:num_symbols); ant3_syms(:,1:8:2*num_symbols) = mod_syms(:,3:4:num_symbols); ant4_syms(:,1:8:2*num_symbols) = mod_syms(:,4:4:num_symbols); % transformed symbols ant1_syms(:,2:8:2*num_symbols) = -mod_syms(:,2:4:num_symbols); ant2_syms(:,2:8:2*num_symbols) = mod_syms(:,1:4:num_symbols); ant3_syms(:,2:8:2*num_symbols) = -mod_syms(:,4:4:num_symbols); ant4_syms(:,2:8:2*num_symbols) = mod_syms(:,3:4:num_symbols); ant1_syms(:,3:8:2*num_symbols) = -mod_syms(:,3:4:num_symbols); ant2_syms(:,3:8:2*num_symbols) = mod_syms(:,4:4:num_symbols); ant3_syms(:,3:8:2*num_symbols) = mod_syms(:,1:4:num_symbols); ant4_syms(:,3:8:2*num_symbols) = -mod_syms(:,2:4:num_symbols); ant1_syms(:,4:8:2*num_symbols) = -mod_syms(:,4:4:num_symbols); ant2_syms(:,4:8:2*num_symbols) = -mod_syms(:,3:4:num_symbols); ant3_syms(:,4:8:2*num_symbols) = mod_syms(:,2:4:num_symbols); ant4_syms(:,4:8:2*num_symbols) = mod_syms(:,1:4:num_symbols); ant1_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols)); ant2_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,2:4:num_symbols)); ant3_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,3:4:num_symbols)); ant4_syms(:,5:8:2*num_symbols) = conj(mod_syms(:,4:4:num_symbols)); ant1_syms(:,6:8:2*num_symbols) = -conj(mod_syms(:,2:4:num_symbols)); ant2_syms(:,6:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols)); ant3_syms(:,6:8:2*num_symbols) = -conj(mod_syms(:,4:4:num_symbols)); ant4_syms(:,6:8:2*num_symbols) = conj(mod_syms(:,3:4:num_symbols)); ant1_syms(:,7:8:2*num_symbols) = -conj(mod_syms(:,3:4:num_symbols)); ant2_syms(:,7:8:2*num_symbols) = conj(mod_syms(:,4:4:num_symbols)); ant3_syms(:,7:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols)); ant4_syms(:,7:8:2*num_symbols) = -conj(mod_syms(:,2:4:num_symbols)); ant1_syms(:,8:8:2*num_symbols) = -conj(mod_syms(:,4:4:num_symbols)); ant2_syms(:,8:8:2*num_symbols) = -conj(mod_syms(:,3:4:num_symbols)); ant3_syms(:,8:8:2*num_symbols) = conj(mod_syms(:,2:4:num_symbols)); ant4_syms(:,8:8:2*num_symbols) = conj(mod_syms(:,1:4:num_symbols)); ofdm_syms_out = zeros(4, length(ant1_syms(:).')); ofdm_syms_out(1,:) = ant1_syms(:).'; ofdm_syms_out(2,:) = ant2_syms(:).'; ofdm_syms_out(3,:) = ant3_syms(:).'; ofdm_syms_out(4,:) = ant4_syms(:).'; end