Dear Vienna 5G SL Developers,
I’ve encountered an unexpected behavior when comparing channel matrices (H
) generated by the smallScaleFading.TR38901Container
for omnidirectional antennas versus array antennas. The figures are listed below. Here’s the issue:
- Observed Discrepancy:
- For omnidirectional antennas, the channel matrix
H
is orders of magnitude larger than for array antennas.
- This seems primarily due to the antenna gain handling:
- Omnidirectional antennas use
G_TX_LOS = ones(nBS, nUE, N_LOS, M_LOS)
(gain = 1, 0 dB).
- Array antennas compute gains via
G_TX_NLOS(ii, jj, kk, ll) = 10.^((gaindB - gain_direct)/10)
, where gain_direct
leads to very small values (often -X dB),eg. -36dB.
- Key Questions:
- (a) What is
gain_direct
?
- Is it the boresight gain of the array antenna? Why must it be subtracted here?
- (b) Should omnidirectional antennas also subtract
gain_direct
?
- If
gain_direct
accounts for a reference gain (e.g., isotropic), omnidirectional antennas might need similar normalization to avoid overestimating H
.
- (c) Is this a bug or intended behavior?
- The current implementation makes omnidirectional
H
unrealistically large. Is there a missing normalization step?
- Reproduction Steps:
- Use
TR38901Container
with:
- Omnidirectional:
G_TX = ones(...)
→ H
scales abnormally.
- Array:
G_TX = 10.^((gaindB - gain_direct)/10)
→ H
is much smaller.
- Expected Behavior:
- Both antenna types should produce comparable
H
scales when modeling the same propagation conditions (assuming proper gain normalization).
Could you clarify the role of gain_direct
and whether omnidirectional antennas require similar adjustments? Thank you for your support!
Best regards,
Nick Jay
I’d like to add that gaindB is a relatively small negative value while gain_direct is a significantly large positive value, and their combined effect results in the small gain of array antennas compared with omnidirectional antennas’.
Hello Nick_Jay,
TL;DR: the adjustment here is correct, but the antenna array gain is not calculated correctly in +networkElements.bs.antennas.AntennaArray
The TR 38.901 channel model is a later addition to the simulator. Therefore, the implementation uses some “hacks” to fit the previously existing structure of the simulator.
Here, you encounter one of those hacks. The TR 38.901 fast fading model includes the antenna gain in the fast fading value. Since, in a simulation, the antenna gain is added at a later time, the antenna gain of the three sector antenna has to be subtracted from the fast fading matrix in the small scale fading package. For the omnidirectional antenna, it is not relevant whether the antenna gain is removed or not, since the antenna has no gain.
However, there is an error in the antenna array gain calculation function in +networkElements.bs.antennas.AntennaArray
The lines
Av = min(12*((theta-90)/obj.theta3dB).^2, obj.maxAttenuation);
Ah = min(12*(phi/obj.phi3dB).^2, obj.maxAttenuation);
should be replaced with
Av = -min(12*((theta-90)/obj.theta3dB).^2, obj.maxAttenuation);
Ah = -min(12*(phi/obj.phi3dB).^2, obj.maxAttenuation);
After this bugfix, the final results with omnidirectional antennas and antenna arrays should be comparable.
Thank you for your questions!
Agnes
Dear Agnes,
Thank you for your detailed explanation regarding the anntennas.
I fixed the error in +networkElements.bs.antennas.AntennaArray
. Then I find the small scale channel H
is very large, by squaring the channel H
, the gain could reach 10^4-10^5 level, which is really large.
Is it reasonable?
Size of obj.channel
is (1,16,100,20,32),I plot abs(obj.channel(1,1,:,:,:))
in the figure, which is listed below, along with the antenna settings.
nAntElement = 4; % corresponds to 4x4
% see parameters.basestation.antennas.Parameters for more information on the settings
antenna = parameters.basestation.antennas.AntennaArray;
% number of antenna elements per panel in horizontal and vertical direction
antenna.nH = nAntElement;
antenna.nV = nAntElement;
% number of panels in horizontal and vertical direction
antenna.nPH = 1; % single panel
antenna.nPV = 1; % single panel
% number of transmit RF chains
antenna.nTX = nAntElement^2;
antenna.N1 = nAntElement; % horizontal tx chains
antenna.N2 = nAntElement; % vertical tx chains
antenna.dH = 0.5; % horizontal element spacing
antenna.dV = 0.5; % vertical element spacing
antenna.precoderAnalogType = parameters.setting.PrecoderAnalogType.none; % disable analog precoder
antenna.height = 4;
antenna.transmitPower = 40;
Best regards,
Nick Jay
Dear Nick Jay,
since the antenna gain is subtracted and later added again, it is possible that the values of H get quite large if the user is positioned in a direction where the antenna gain is very small.
If you want to make sure that the values are reasonable, you should look at the received power after the antenna gain is added again. Since this is likely concerning interfering signals, you would need to look at the interference calculation in the link quality model.
Best,
Agnes
Dear Agnes,
Thank you for your patience and detailed explanation regarding the antenna gain. I now understand why the values of H get quite large for antenna arrays.
By the way, when it comes to omnidirectional antennas, does this problem the values of H get quite large if the user is positioned in a direction where the antenna gain is very small
not happen? For the reason that, the omnidirectional antennas don’t have to subtract gain like G_TX = 10.^((gaindB - gain_direct)/10)
for antenna arrays?
Best regards,
Nick Jay
Dear Nick Jay,
the omnidirectional antennas have an antenna gain of 0 dB in all directions, or 1 in linear gain, so the problem does not appear.
It is possible to increase the antenna gain of the omnidirectional antennas, however, this is not recommended, since it is not physically sound. If you changed the gain of the omnidirectional antenna and want to keep it that way, then you should subtract the antenna gain for it to be added again later. But this is not recommended.
Best,
Agnes