data_in_4 = zeros(1,data_length/2);
for i = 1:2:data_length
data_in_4(i - (i-1)/2) = data_in_pol(i)*2 + data_in_pol(i+1);
end
% define sample points between 0 and 2*pi
ts = linspace(0, 2*pi*QAM_periods, num_symbol_samples+1);
% Generate 16-QAM data
% total length of 16-QAM transmission
tx_length = num_OFDM_symbols * num_QAM_symbols * num_symbol_samples;
QAM_tx_data = zeros(1,tx_length);
for i = 1:2:data_length/2
for k = 1:num_symbol_samples
QAM_tx_data(k+((i-1)/2)*num_symbol_samples) = data_in_4(i)*cos(ts(k)) +
data_in_4(i+1)*sin(ts(k));
end
end
% Do channel simulation on QAM data
xmit = QAM_tx_data; % ch uses 'xmit' data and returns 'recv'
ch
QAM_rx_data = recv; % save QAM data after channel
clear recv % remove 'recv' so it won't interfere with OFDM
clear xmit % remove 'xmit' so it won't interfere with OFDM
disp('Receiving') % Recover Binary data (Decode QAM)
cos_temp = zeros(1,num_symbol_samples); %
sin_temp = cos_temp; %
xxx = zeros(1,data_length/4); % Initialize to zeros for speed
yyy = xxx; %
QAM_data_out_4 = zeros(1,data_length/2); %
for i = 1:2:data_length/2 % "cheating"
for k = 1:num_symbol_samples
% multiply by carriers to produce high frequency term and original data
cos_temp(k) = QAM_rx_data(k+((i-1)/2)*num_symbol_samples) * cos(ts(k));
sin_temp(k) = QAM_rx_data(k+((i-1)/2)*num_symbol_samples) * sin(ts(k));
end
% LPF and decide - we will do very simple LPF by averaging
xxx(1+(i-1)/2) = mean(cos_temp);
yyy(1+(i-1)/2) = mean(sin_temp);
% Reconstruct data in serial form
QAM_data_out_4(i) = xxx(1+(i-1)/2);
QAM_data_out_4(i+1) = yyy(1+(i-1)/2);
end