www.gusucode.com > LTE仿真Matlab源码 > LTE_feedback_SISO.m
function [CQI,CQI_bar] = LTE_feedback_SISO(sigma_n2,channel,UE,LTE_params) % author Stefan Schwarz % contact stefan.schwarz@nt.tuwien.ac.at % calculates the CQI feedback for SISO %% channel prediction % save channel matrix for channel prediction UE.previous_channels = circshift(UE.previous_channels,[0,0,-1,0,0]); UE.previous_channels(:,:,end,:,:)=channel(:,:,:,:); H_est_complete = LTE_channel_predictor(UE.previous_channels,LTE_params.uplink_delay,LTE_params.ChanMod_config.filtering,UE.predict); if LTE_params.feedback.channel_averaging % use channel averaging RB_max = LTE_params.Nrb; SNR = zeros(RB_max,2); else RB_max = LTE_params.Ntot; SNR = zeros(RB_max,2); end for RB_i = 1:RB_max for slot_i = 1:2 if LTE_params.feedback.channel_averaging freq_band = (RB_i-1)*LTE_params.Nsc+1:min(RB_i*LTE_params.Nsc,size(H_est_complete,1)); else freq_band = RB_i; end % freq_band = (RB_i-1)*LTE_params.Nsc+1:min(RB_i*LTE_params.Nsc,size(H_est_complete,1)); H_est = H_est_complete(freq_band,(slot_i-1)*LTE_params.Ns+1:slot_i*LTE_params.Ns,:,:); H_t = reshape(mean(mean(H_est,1),2),size(H_est,3),size(H_est,4)); % Channel of current RB and slot MSE_mean = mean(UE.MSE(:,freq_band),2); % Channel estimator MSE F = pinv(H_t); SNR(RB_i,slot_i) = 1./((sigma_n2+MSE_mean(1)).*sum(abs(F).^2,2)); end end CQI = zeros(LTE_params.Nrb,2); if LTE_params.UE_config.CQI_fb if UE.CQI_fb_gran ~= 1 % single CQI value for whole bandwidth CQIs = 0:15; SINReff = UE.SINR_averager.average(SNR,CQIs,[LTE_params.CQI_params(20).modulation_order,LTE_params.CQI_params(CQIs(2:end)).modulation_order]); CQI_temp = LTE_common_CQI_mapping_table(LTE_params.CQI_mapping,SINReff,CQIs+1); CQI = CQI_temp*ones(LTE_params.Nrb,2); CQI_bar = CQI_temp; else for RB_ii = 1:LTE_params.Nrb if LTE_params.feedback.channel_averaging rb_ii = RB_ii; else rb_ii = (RB_ii-1)*LTE_params.Nsc+1:RB_ii*LTE_params.Nsc; end for slot_ii = 1:2 CQIs = (0:15); SNR_tmp = SNR(rb_ii,slot_ii); SINReff = UE.SINR_averager.average(SNR_tmp(:),CQIs,[LTE_params.CQI_params(20).modulation_order,LTE_params.CQI_params(CQIs(2:end)).modulation_order]); % SINReff = UE.SINR_averager.average(SNR(RB_ii,slot_ii),CQIs,[LTE_params.CQI_params(CQIs+1).modulation_order]); CQI_temp = LTE_common_CQI_mapping_table(LTE_params.CQI_mapping,SINReff,CQIs+1); CQI(RB_ii,slot_ii) = CQI_temp; end end SINReff = UE.SINR_averager.average(SNR,CQIs,[LTE_params.CQI_params(20).modulation_order,LTE_params.CQI_params(CQIs(2:end)).modulation_order]); CQI_temp = LTE_common_CQI_mapping_table(LTE_params.CQI_mapping,SINReff,CQIs+1); CQI_bar = CQI_temp; end else CQI = []; end