📄 rx_diversity.m
字号:
function [data_syms_out] = rx_diversity(freq_data_syms, ...
channel_est, SimulationParameters)
% remove extra dimension from matrices, if rx diversity is not used
freq_data_syms = squeeze(freq_data_syms);
% tx diversity
% Radon-Hurwitz transmit diversity
if (SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==0) % 2x1
freq_data_syms = rx_radon_hurwitz(freq_data_syms, channel_est(:,:),SimulationParameters);
elseif (SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==0)%4x1
[freq_data_syms] = txfour(freq_data_syms,channel_est,SimulationParameters,3);
data_syms_out=freq_data_syms;
elseif (SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==2)%2x2
% Rx R-H performed to both receiver antennas
freq_data_syms(1,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(1,:,:)), ...
channel_est(:,1:2),SimulationParameters);
freq_data_syms(2,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(2,:,:)), ...
channel_est(:,3:4),SimulationParameters);
elseif (SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==4)%2x4
freq_data_syms(1,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(1,:,:)), ...
channel_est(:,1:2),SimulationParameters);
freq_data_syms(2,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(2,:,:)), ...
channel_est(:,3:4),SimulationParameters);
freq_data_syms(3,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(3,:,:)), ...
channel_est(:,5:6),SimulationParameters);
freq_data_syms(4,:,:) = rx_radon_hurwitz(squeeze(freq_data_syms(4,:,:)), ...
channel_est(:,7:8),SimulationParameters);
elseif (SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==2) %4x2
channel_est=channel_est(:,:);
[freq_data_syms] = txfour(freq_data_syms(1:2,:,:),channel_est,SimulationParameters,1);
data_syms_out=freq_data_syms;
elseif (SimulationParameters.TxDiv==4 & SimulationParameters.RxDiv==4) %4x4
% Rx R-H performed to 4 receiver antennas
[freq_data_syms1] = txfour(freq_data_syms(1:2,:,:),channel_est,SimulationParameters,1);
[freq_data_syms2] = txfour(freq_data_syms(3:4,:,:),channel_est,SimulationParameters,2);
data_syms_out=[freq_data_syms1 freq_data_syms2];
end
% rx diversity
if (SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==2)|(SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==4) %1x2,1x4
freq_data_syms = rx_mr_combiner(freq_data_syms, channel_est, SimulationParameters);
elseif SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==2 %2x2
freq_data_syms = squeeze(freq_data_syms(1,:,:) + freq_data_syms(2,:,:));
elseif SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==4 %2x4
freq_data_syms = squeeze(freq_data_syms(1,:,:) + freq_data_syms(2,:,:)+freq_data_syms(3,:,:) + freq_data_syms(4,:,:));
end
% no diversity
if (SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==0) %1x1
% Data symbols channel correction
chan_corr_mat = repmat(channel_est,1, size(freq_data_syms,2));
freq_data_syms = freq_data_syms.*conj(chan_corr_mat);
end
if (SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==0)|(SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==2)| ...
(SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==0)|(SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==2)| ...
(SimulationParameters.TxDiv==0 & SimulationParameters.RxDiv==4)|(SimulationParameters.TxDiv==2 & SimulationParameters.RxDiv==4)
%1x1,1x2,2x1,2x2,1x4,2x4
% Amplitude normalization
chan_sq_amplitude = sum(abs(channel_est(:,:)).^2, 2);
chan_sq_amplitude_mtx = repmat(chan_sq_amplitude,1, size(freq_data_syms,2));
data_syms_out = freq_data_syms./chan_sq_amplitude_mtx;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -