Veins中实现Nakagami-m信道模型(一种简单的方法)--------补充部分

之前的一篇博文:《Veins中实现Nakagami-m信道模型(一种简单的方法)》中,用简单的方法实现了车载自组织网络信道模型,但是文中的方法有缺陷,故本文作为一个补充,将信道实现的方法进一步完善,供大家参考,并欢迎指正:


按照之前的方法修改成Nakagami随机信道后,我发现传输范围R以外的车辆完全不能接收到其余车辆发来的消息,这明显与常识不符。通过翻看代码,发现还有一个ConnectionManager的模块起到了很大的作用:ConnectionManager继承BaseConnectionManager类,且只重写了其 double calcInterfDist( )函数。要解释这个ConnectionManager模块的作用,就需要再回顾上一篇<Veins 数据包收发基本流程简单总结>:当A节点的PHY层将Airframe发到信道上时,要决定该Airframe传输给哪一个节点的PHY层进行处理;此时,在A的PHY层,以遍历的方式将Airframe发送给那些与自己gate连接的节点的gate(好绕口),两个gate之间是否连接,就是由ConnectionManager决定的。怎么决定呢?其实就是通过调用calcInterfDist( )函数,得出一个距离R,与A距离超过R的节点,则不予连接,否则会连接。也就是说,A发送数据后,R以外的节点是绝对不会接收到的,R以外的节点没有任何一丁点的影响。以下是原始calcInterfDist()函数的具体情况:

double ConnectionManager::calcInterfDist()
{
	double interfDistance;
	//the minimum carrier frequency for this cell
	double carrierFrequency = par("carrierFrequency").doubleValue();
	//maximum transmission power possible
	double pMax             = par("pMax").doubleValue();
	if (pMax <=0) {
		error("Max transmission power is <=0!");
	}
	//minimum signal attenuation threshold
	double sat              = par("sat").doubleValue();//-95dbm
	//minimum path loss coefficient
	double alpha            = par("alpha").doubleValue();//2
	double waveLength     = (BaseWorldUtility::speedOfLight/carrierFrequency);
	//minimum power level to be able to physically receive a signal
	double minReceivePower = pow(10.0, sat/10.0);
	interfDistance = pow(waveLength * waveLength * pMax
					       / (16.0*M_PI*M_PI*minReceivePower),
					     1.0 / alpha);
	ccEV << "max interference distance:" << interfDistance << endl;
	return interfDistance;
}
很容易看出,这个R其实就是自由空间传输模型下的传输范围。如果继续使用这个传输范围,用以实现随机信道,是不准确的。因为随机信道时,在超过R后仍然可能接收到数据,且这个可能性还不小。

通过尝试,我修改了该函数,将返回值设置为1.5*interfDistance,这样结果应该就比较精确了:(三种不同的随机信道;横轴是距离,R在图中间的位置;纵轴是接收概率;如果没有修改calcInterfDist函数,则大于R的节点接受概率为0)

Veins中实现Nakagami-m信道模型(一种简单的方法)--------补充部分_第1张图片

(此外,Veins中的CSThresh值等于TXThresh值,有时间再总结之)




你可能感兴趣的:(仿真,车载自组织网络)