在接收端计算SNR,在uwaloha中如何访问phy层信息,向底层发送phy层传送包,由UnderwaterMac::sendDown完成,调用Phy的sendDown函数,因此可以把SNR的计算放在Phy层上做,调用downtarget_->recv函数来完成。
SNR计算思路:
channel层接收包,调用mac层的recvprocess过程,然后根据接收时的参数计算出SNR,把参数传递给上层的mac,由mac曾传递给route层。
但是channel层接收感知信号接收包的过程并不是直接调用的函数,
s.schedule(rifp, newp, propdelay);
rifp在propdelay醒来,由rifp接收,具体是哪个接收函数?肯定是recv函数,该函数结构如下:
void
Phy::recv(Packet* p, Handler*)
{
struct hdr_cmn *hdr = HDR_CMN(p);
switch(hdr->direction()) {
case hdr_cmn::DOWN :
sendDown(p);
return;
case hdr_cmn::UP :
if (sendUp(p) == 0) {
Packet::free(p);
return;
} else {
uptarget_->recv(p, (Handler*) 0);
}
break;
default:
if (sendUp(p) == 0) {
Packet::free(p);
return;
} else {
uptarget_->recv(p, (Handler*) 0);
}
}
}
sendUp(p)在phy.cc中被声明为纯虚函数,在运行时就是underwaterphy的sendUp函数。
int UnderwaterPhy::sendUp(Packet *p){
uwsnnode *n1 = (uwsnnode*) node_
hdr_cmn* cmh = HDR_CMN(p)
rcvtime = hdr_cmn::access(p)->txtime()
if(n1->failure_status()==1)
return 0
recv_pro = n1->failure_pro()
error_pro = random::uniform()
if(error_pro <= recv_pro)
cmn->error() = 1
tansmissionstatus status = n1->transmissionstatus
packetstamp = s
double pr
int pkt_recvd = 0
SNR计算思路:
channel层接收包,调用mac层的recvprocess过程,然后根据接收时的参数计算出SNR,把参数传递给上层的mac,由mac曾传递给route层。
但是channel层接收感知信号接收包的过程并不是直接调用的函数,
s.schedule(rifp, newp, propdelay);
rifp在propdelay醒来,由rifp接收,具体是哪个接收函数?肯定是recv函数,该函数结构如下:
void
Phy::recv(Packet* p, Handler*)
{
struct hdr_cmn *hdr = HDR_CMN(p);
switch(hdr->direction()) {
case hdr_cmn::DOWN :
sendDown(p);
return;
case hdr_cmn::UP :
if (sendUp(p) == 0) {
Packet::free(p);
return;
} else {
uptarget_->recv(p, (Handler*) 0);
}
break;
default:
if (sendUp(p) == 0) {
Packet::free(p);
return;
} else {
uptarget_->recv(p, (Handler*) 0);
}
}
}
sendUp(p)在phy.cc中被声明为纯虚函数,在运行时就是underwaterphy的sendUp函数。
int UnderwaterPhy::sendUp(Packet *p){
uwsnnode *n1 = (uwsnnode*) node_
hdr_cmn* cmh = HDR_CMN(p)
rcvtime = hdr_cmn::access(p)->txtime()
if(n1->failure_status()==1)
return 0
recv_pro = n1->failure_pro()
error_pro = random::uniform()
if(error_pro <= recv_pro)
cmn->error() = 1
tansmissionstatus status = n1->transmissionstatus
packetstamp = s
double pr
int pkt_recvd = 0
本文探讨了在uwaloha中如何在Phy层计算接收端的SNR。通过调用UnderwaterMac::sendDown和Phy的sendDown函数,将SNR计算置于Phy层。接收包过程涉及channel层的recvprocess和Phy层的recv函数。SNR计算涉及接收时的参数,并通过mac层和route层传递。sendUp作为纯虚函数在运行时对应UnderwaterPhy的实现,处理错误概率和接收状态。
3233

被折叠的 条评论
为什么被折叠?



