概述
之前的一篇博文:《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中的CSThresh值等于TXThresh值,有时间再总结之)
最后
以上就是欢喜纸飞机为你收集整理的Veins中实现Nakagami-m信道模型(一种简单的方法)--------补充部分的全部内容,希望文章能够帮你解决Veins中实现Nakagami-m信道模型(一种简单的方法)--------补充部分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复