Skip to content

Commit 80c131f

Browse files
Sandra Lagenbiljkus
authored andcommitted
spectrum: (fixes #1314) Use std::conj for RX beamforming in long-term component
1 parent 8214f95 commit 80c131f

File tree

4 files changed

+11
-1
lines changed

4 files changed

+11
-1
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ fixes, use `./ns3 run "clang-tidy -fix"`.
6363
Procedure A updates are applied; if it exceeds 1 m, channel parameters are re-generated (new realization).
6464
For stationary links, the channel remains unchanged. See `spectrum.rst` for ns-3 update triggering and
6565
1 m step-size handling.
66+
* (spectrum): Correct long-term combining in the 3GPP channel model to use RX Hermitian combining (conjugate
67+
transpose of RX beamforming weights); previously the RX beamforming vector was not conjugated (issue #1314).
6668

6769
## Changes from ns-3.46 to ns-3.46.1
6870

RELEASE_NOTES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ been tested on Linux. As of this release, the latest known version to work with
6262
- (wifi) #1295 - Avoid floating point precision issues in wifi-error-rate-models-test.cc
6363
- (internet) !2624 - Fix TCP LEDBAT congestion window growth calculation
6464
- (wifi) #1284 - Fix radiotap for received packets
65+
- (spectrum) #1314 - Fix missing complex conjugation of RX beamforming vector in 3GPP long-term channel component calculation.
6566

6667
## Release 3.46.1
6768

src/spectrum/model/three-gpp-spectrum-propagation-loss-model.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ ThreeGppSpectrumPropagationLossModel::CalculateLongTermComponent(
176176
auto uIndex = startU;
177177
for (size_t rIndex = 0; rIndex < uPortElems; rIndex++, uIndex++)
178178
{
179-
rxSum += uW[uIndex - startU] * params->m_channel(uIndex, sIndex, cIndex);
179+
rxSum += std::conj(uW[uIndex - startU]) * params->m_channel(uIndex, sIndex, cIndex);
180180
const auto testV = rIndex % uElemsPerPort;
181181
if (const auto ptInc = uElemsPerPort - 1; testV == ptInc)
182182
{

src/spectrum/model/three-gpp-spectrum-propagation-loss-model.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,13 @@ class ThreeGppSpectrumPropagationLossModel : public PhasedArraySpectrumPropagati
192192
/**
193193
* @brief Computes a longTerm component from a specific port of s device to the
194194
* specific port of u device and for a specific cluster index
195+
*
196+
* The beamformed (long-term) effective channel coefficient:
197+
* \f$ h_{\rm eff} = \mathbf{w}_{\rm rx}^H \mathbf{H} \mathbf{w}_{\rm tx} \f$.
198+
*
199+
* @note The RX beamforming vector is stored on the antenna as \f$\mathbf{w}_{\rm rx}\f$.
200+
* This function applies it as a Hermitian inner product (i.e., uses the complex
201+
* conjugate of the RX weights) when forming \f$\mathbf{w}_{\rm rx}^H\f$.
195202
* @param params The params that include the channel matrix
196203
* @param sAnt pointer to first antenna
197204
* @param uAnt uAnt pointer to second antenna

0 commit comments

Comments
 (0)