function pathloss_dB = PathLoss_Hotspot_Floors(frequency_GHz,distance_m, number_floors, environment) % Give the pathloss between UE and BS located in the same building and % differents floors. % Propagation model extracted from IUT-R P.1238-8 (July 2015) % %%%%%%%%%%%%%%%%%%%%% % ---------------------- % INPUT parameters % ---------------------- % *frequency_GHz: emission frequency (GHz) % *distance_m: distance between transmitter Tx et receiver Rx (m) % Right if distance_m > 1m % *number_floors: Number of floors between BS and UE % *environment: Explain what is the environment. % Possible values: 'Residential', 'Office', 'Commercial', 'Factory', 'Corridor' % PLEASE RESPECT THE SYNTAX % % ---------------------- % OUTPUT parameters % ---------------------- % *pathloss_dB % % ---------------------- % FUNCTIONS used % ---------------------- % *interpolation.m % % ---------------------- % COMMENTS % ---------------------- % *For the 'Residential' environment, it can be separated into two environments: "House" and "Apartment". % In this case, Power_loss_coefficient and floor_penetration may changed. % Not implemented yet. % % *To calculate power_loss_coefficient (N), we used linear interpolation or % extrapolation if the given frequency is not in the tables. % Extrapolation function not implemented yet. % % * A lot of particularities are described in the IUT-R P.1238-8 original document. % Refer to it, if you have some uncertainties. % % % % %%%%%%%%%%%%%%%%%%%%% frequency_MHz = frequency_GHz*10^3; CST_EPSILON=0.01; % BLOC 1: DETERMINE POWER LOSS COEFFICIENT = N % Create Power Loss Coefficients (N) table from IUT-R P.1238-8. % Input: frequency_GHz, environment % Output: power_loss_N % Structures in Matlab are used to create 2 tables (frequencyGHz and N) for each environment. switch(environment) case 'Residential' power_loss_coefficient.Residential.frequencyGHz=[1.9 2.4 5.2]; power_loss_coefficient.Residential.N=[28 28 30]; for i=1:1:length(power_loss_coefficient.Residential.frequencyGHz) if frequency_GHz==power_loss_coefficient.Residential.frequencyGHz(i) power_loss_N = power_loss_coefficient.Residential.N(i); else if frequency_GHz < 5.2 && frequency_GHz > 1.9 %use Linear Interpolation power_loss_N = interpolation(frequency_GHz, power_loss_coefficient.Residential.frequencyGHz); else % use Linear Extrapolation, not implemented yet... disp('ERROR_Residential: Linear Extrapolation not implemented yet') pathloss_dB=0; return end end end case 'Office' power_loss_coefficient.Office.frequencyGHz=[0.9 1.25 1.9 2.1 2.4 3.5 2.625 4 5.2 5.8 60 70]; power_loss_coefficient.Office.N=[33 32 30 25.5 30 27 44 28 31 24 22 22]; for i=1:1:length(power_loss_coefficient.Office.frequencyGHz) if frequency_GHz==power_loss_coefficient.Office.frequencyGHz(i) power_loss_N = power_loss_coefficient.Office.N(i); else if frequency_GHz < 70 && frequency_GHz > 0.9 %use Linear Interpolation power_loss_N = interpolation(frequency_GHz, power_loss_coefficient.Office.frequencyGHz); else % use Linear Extrapolation, not implemented yet... disp('ERROR_Office: Linear Extrapolation not implemented yet') pathloss_dB=0; return end end end case 'Commercial' power_loss_coefficient.Commercial.frequencyGHz=[0.9 1.25 1.9 2.1 4 27.6 17]; power_loss_coefficient.Commercial.N=[20 22 22 20 22 27.6 17]; for i=1:1:length(power_loss_coefficient.Commercial.frequencyGHz) if frequency_GHz==power_loss_coefficient.Commercial.frequencyGHz(i) power_loss_N = power_loss_coefficient.Commercial.N(i); else if frequency_GHz < 60 && frequency_GHz > 0.9 %use Linear Interpolation power_loss_N = interpolation(frequency_GHz, power_loss_coefficient.Commercial.frequencyGHz); else % use Linear Extrapolation, not implemented yet... disp('ERROR_Commercial: Linear Extrapolation not implemented yet') pathloss_dB=0; return end end end case 'Factory' power_loss_coefficient.Factory.frequencyGHz=[2.1 2.625]; power_loss_coefficient.Factory.N=[21.1 33]; for i=1:1:length(power_loss_coefficient.Factory.frequencyGHz) if frequency_GHz==power_loss_coefficient.Factory.frequencyGHz(i) power_loss_N = power_loss_coefficient.Factory.N(i); else if frequency_GHz < 2.625 && frequency_GHz > 2.1 %use Linear Interpolation power_loss_N = interpolation(frequency_GHz, power_loss_coefficient.Factory.frequencyGHz); else % use Linear Extrapolation, not implemented yet... disp('ERROR_Factory: Linear Extrapolation not implemented yet') pathloss_dB=0; return end end end case 'Corridor' power_loss_coefficient.Corridor.frequencyGHz=[2.1 60]; power_loss_coefficient.Corridor.N=[17 16]; if LOS_probability(distance_m,'InH')>0.5 for i=1:1:length(power_loss_coefficient.Corridor.frequencyGHz) if frequency_GHz==power_loss_coefficient.Corridor.frequencyGHz(i) power_loss_N = power_loss_coefficient.Corridor.N(i); else if frequency_GHz < 60 && frequency_GHz > 2.1 %use Linear Interpolation power_loss_N = interpolation(frequency_GHz, power_loss_coefficient.Corridor.frequencyGHz); else % use Linear Extrapolation, not implemented yet... disp('ERROR_Corridor: Linear Extrapolation not implemented yet') pathloss_dB=0; return end end end else disp('For Corridor environment, BS and UE must be in LOS.') disp('Probability to be in LOS < 0.5.') pathloss_dB=0; return end end % BLOC 2: DETERMINE FLOOR PENETRATION LOSS FACTOR = Lf = floor_penetration % Create Floor penetration loss factor from IUT-R P.1238-8. % Input: frequency_GHz, number_floors % Output: floor_penetration switch(environment) case 'Residential' if frequency_GHz <2 && frequency_GHz>1.8 floor_penetration = 4*number_floors; elseif frequency_GHz >= 2.4 && frequency_GHz <= 2.6 floor_penetration = 10; % We can use Office results for (0.9, 3.5, 5.8)GHz frequencies elseif abs(frequency_GHz-0.9) 1.8 && frequency_GHz < 2 floor_penetration = 15 + 4*(number_floors-1); elseif frequency_GHz >= 2.4 && frequency_GHz <= 2.6 floor_penetration = 14; elseif abs(frequency_GHz-3.5) 1.8 && frequency_GHz < 2 floor_penetration = 6 +3*(number_floors-1); else disp('Calcul of floor_penetration:') disp('No reference in IUT-R P.1238-8 for this frequency') disp('By default: floor_penetration = 0') floor_penetration = 0; return end end % Basic model equation pathloss_dB = 20*log10(frequency_MHz)-28 + power_loss_N*log10(distance_m) + floor_penetration; end