[ns] Calculate Signal strength in ns2

Liceven feixianyexin at 163.com
Sun Aug 31 21:44:17 PDT 2008


Hello,all
      I want to calculate the signal strength received from some APS. But up
to now, I just have written some codes like below to implement this
function[of course, i am not sure it is correct or not]:-((

proc record {} {
  global filepr pt l lambda gt gr pi node
   set ns [Simulator instance] 
   set time 0.1;# record 0.5 second
   set m_x [$node(1) set X_]
   set m_y [$node(1) set Y_]
   set n_x [$node(0) set X_]
   set n_y [$node(0) set Y_]
   set d [expr (sqrt(pow(($m_x - $n_x),2)+ pow(($m_y-$n_y),2)))]
   set m [expr (1 /(4 * $pi * $d))]
   set pr [expr ($pt * $gr * $gt * $m * $m / 1)]
   set now [$ns now]
  
   puts $filepr "$d\t$pr"
   $ns at [expr $now + $time] "record"
}
I set all the parameters but d to calculate Pr. About d, I record the
dynamic coordinate(x,y), and then compared it to the coordiate of AP(x1,y1)
to get d.
But now, I want to implement using a function written in the file
/mobile/propagation.cc

double FreeSpace::Pr(PacketStamp *t, PacketStamp *r, WirelessPhy *ifp)
{
	double L = ifp->getL();		// system loss
	double lambda = ifp->getLambda();   // wavelength

	double Xt, Yt, Zt;		// location of transmitter
	double Xr, Yr, Zr;		// location of receiver

	t->getNode()->getLoc(&Xt, &Yt, &Zt);
	r->getNode()->getLoc(&Xr, &Yr, &Zr);

	// Is antenna position relative to node position?
	Xr += r->getAntenna()->getX();
	Yr += r->getAntenna()->getY();
	Zr += r->getAntenna()->getZ();
	Xt += t->getAntenna()->getX();
	Yt += t->getAntenna()->getY();
	Zt += t->getAntenna()->getZ();

	double dX = Xr - Xt;
	double dY = Yr - Yt;
	double dZ = Zr - Zt;
	double d = sqrt(dX * dX + dY * dY + dZ * dZ);

	// get antenna gain
	double Gt = t->getAntenna()->getTxGain(dX, dY, dZ, lambda);
	double Gr = r->getAntenna()->getRxGain(dX, dY, dZ, lambda);

	// calculate receiving power at distance
	double Pr = Friis(t->getTxPr(), Gt, Gr, lambda, L, d);
	// warning: use of `l' length character with `f' type character
	//  - Sally Floyd, FreeBSD.
	printf("%lf: d: %lf, Pr: %e\n", Scheduler::instance().clock(), d, Pr);

	return Pr;
}

The question is I don't know how to call this c++ function using tcl script
?
So, thanks very much.
Liceven

-- 
View this message in context: http://www.nabble.com/Calculate-Signal-strength-in-ns2-tp18536913p19248835.html
Sent from the ns-users mailing list archive at Nabble.com.



More information about the Ns-users mailing list