lte-spectrum-phy.ccvoid

LteSpectrumPhy::StartRxData (Ptr<LteSpectrumSignalParametersDataFrame> params)
{
  NS_LOG_FUNCTION (this);
  switch (m_state)
    {
       :
      case RX_DATA: #ステータスがRX_DATA
        // the behavior is similar when
        // we're IDLE or RX because we can receive more signals
        // simultaneously (e.g., at the eNB).
        {
          // To check if we're synchronized to this signal, we check
          // for the CellId which is reported in the
          //  LteSpectrumSignalParametersDataFrame
          if (params->cellId  == m_cellId) #cellIdが一致
            {
    :
    :
              ChangeState (RX_DATA); #ステータス変更
              if (params->packetBurst) #パケットBurstが存在していたら
                {
                  m_rxPacketBurstList.push_back (params->packetBurst); #追加
                  m_interferenceData->StartRx (params->psd);      #干渉影響とSpectrumValueを各配列に+=している。この辺りからSNR計算ができたら何とかなる?

                  m_phyRxStartTrace (params->packetBurst);
                }
                NS_LOG_DEBUG (this << " insert msgs " << params->ctrlMsgList.size ());
              m_rxControlMessageList.insert (m_rxControlMessageList.end (), params->ctrlMsgList.beg\
in (), params->ctrlMsgList.end ());

m_interferenceData = class LteInterfecence
LteInterferenceは、class SpectrumValueのm_rxSignalを持つ。SpectrumValueはスペクトル密度(The power spectral density)である。実体はメンバ変数でstd:vector

lte-interference.ccvoid

LteInterference::StartRx (Ptr<const SpectrumValue> rxPsd)
{
  if (m_receiving == false)
    :
   初回の初期化がある
    :
  else

    {
      NS_LOG_LOGIC ("additional signal" << *m_rxSignal);
      // receiving multiple simultaneous signals, make sure they are synchronized
      NS_ASSERT (m_lastChangeTime == Now ());
      // make sure they use orthogonal resource blocks
      NS_ASSERT (Sum ((*rxPsd) * (*m_rxSignal)) == 0.0);
      (*m_rxSignal) += (*rxPsd);
 #内部的には、std:vectorをiterで回して各要素ごとに+=しているだけ。
    }