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で回して各要素ごとに+=しているだけ。
}