This commit is contained in:
alex
2015-03-25 20:38:47 +00:00
parent 0c4ff44a6e
commit d2233ddb43
7 changed files with 127 additions and 54 deletions

36
.txt
View File

@@ -2,25 +2,25 @@
--==[ Path Profile Analysis ]==-- --==[ Path Profile Analysis ]==--
Transmitter site: Tx Transmitter site: Tx
Site location: 51.8648 North / 2.2022 West Site location: 50.0000 North / 350.0000 West
Ground elevation: 0.00 meters AMSL Ground elevation: 0.00 meters AMSL
Antenna height: 36.00 meters AGL / 36.00 meters AMSL Antenna height: 30.00 meters AGL / 30.00 meters AMSL
Distance to Rx: 1.00 kilometers Distance to Rx: 5.00 kilometers
Azimuth to Rx: 91.27 degrees Azimuth to Rx: 89.97 degrees
Depression angle to Rx: -1.5004 degrees Depression angle to Rx: -0.3433 degrees
Receiver site: Rx Receiver site: Rx
Site location: 51.8646 North / 2.1877 West Site location: 50.0000 North / 349.9300 West
Ground elevation: 0.00 meters AMSL Ground elevation: 0.00 meters AMSL
Antenna height: 10.00 meters AGL / 10.00 meters AMSL Antenna height: 2.00 meters AGL / 2.00 meters AMSL
Distance to Tx: 1.00 kilometers Distance to Tx: 5.00 kilometers
Azimuth to Tx: 271.29 degrees Azimuth to Tx: 270.03 degrees
Elevation angle to Tx: +1.4914 degrees Elevation angle to Tx: +0.2984 degrees
Longley-Rice path calculation parameters used in this analysis: Longley-Rice path calculation parameters used in this analysis:
Earth's Dielectric Constant: 15.000 Earth's Dielectric Constant: 15.000
Earth's Conductivity: 0.005 Siemens/meter Earth's Conductivity: 0.005 Siemens/meter
Atmospheric Bending Constant (N-units): 301.000 ppm Atmospheric Bending Constant (N-units): 301.000 ppm
Frequency: 900.000 MHz Frequency: 5900.000 MHz
Radio Climate: 5 (Continental Temperate) Radio Climate: 5 (Continental Temperate)
Polarisation: 1 (Vertical) Polarisation: 1 (Vertical)
Fraction of Situations: 50.0% Fraction of Situations: 50.0%
@@ -30,17 +30,3 @@ Fraction of Time: 50.0%
Summary for the link between Tx and Rx: Summary for the link between Tx and Rx:
Free space path loss: 91.52 dB
Longley-Rice path loss: 92.83 dB
Attenuation due to terrain shielding: 1.32 dB
Mode of propagation:
Longley-Rice model error number: 0 (No error)
No obstructions to LOS path due to terrain were detected
The first Fresnel zone is clear.
60% of the first Fresnel zone is clear.

View File

@@ -1,5 +1,9 @@
SIGNAL SERVER CHANGE LOG SIGNAL SERVER CHANGE LOG
2.44 - 25 Mar 2015
Improved PPA text report to list other prop models
Added HD mode to build script
2.43 - 06 Mar 2015 2.43 - 06 Mar 2015
Improved model error handling Improved model error handling
Tweaked params for Ericsson model and inverted environment variables to match rest Tweaked params for Ericsson model and inverted environment variables to match rest

View File

@@ -3,4 +3,5 @@
rm -f signalserver rm -f signalserver
rm -f signalserverHD rm -f signalserverHD
g++ -Wall -O3 -s -lm -fomit-frame-pointer itwom3.0.cpp models.cpp main.cpp -o signalserver g++ -Wall -O3 -s -lm -fomit-frame-pointer itwom3.0.cpp models.cpp main.cpp -o signalserver
g++ -Wall -O3 -s -lm -fomit-frame-pointer itwom3.0.cpp models.cpp main.cpp -DHD -o signalserverHD
./signalserver ./signalserver

103
main.cpp
View File

@@ -1,4 +1,4 @@
double version=2.43; double version=2.44;
/****************************************************************************\ /****************************************************************************\
* Signal Server: Server optimised SPLAT! by Alex Farrant * * Signal Server: Server optimised SPLAT! by Alex Farrant *
****************************************************************************** ******************************************************************************
@@ -4003,7 +4003,7 @@ void PathReport(struct site source, struct site destination, char *name, char gr
/* Receiver */ /* Receiver */
fprintf(fd2,"Receiver site: %s\n",destination.name); fprintf(fd2,"\nReceiver site: %s\n",destination.name);
if (destination.lat>=0.0) if (destination.lat>=0.0)
{ {
@@ -4058,7 +4058,53 @@ void PathReport(struct site source, struct site destination, char *name, char gr
if (LR.frq_mhz>0.0) if (LR.frq_mhz>0.0)
{ {
fprintf(fd2,"Longley-Rice path calculation parameters used in this analysis:\n\n"); fprintf(fd2,"\nPropagation model: ");
switch (propmodel)
{
case 1:
fprintf(fd2,"Irregular Terrain Model\n");
break;
case 2:
fprintf(fd2,"Line of sight\n");
break;
case 3:
fprintf(fd2,"Okumura-Hata\n");
break;
case 4:
fprintf(fd2,"ECC33 (ITU-R P.529)\n");
break;
case 5:
fprintf(fd2,"Stanford University Interim\n");
break;
case 6:
fprintf(fd2,"COST231-Hata\n");
break;
case 7:
fprintf(fd2,"Free space path loss (ITU-R.525)\n");
break;
case 8:
fprintf(fd2,"ITWOM 3.0\n");
break;
case 9:
fprintf(fd2,"Ericsson\n");
break;
}
fprintf(fd2,"Model sub-type: ");
switch (pmenv)
{
case 1:
fprintf(fd2,"City / Conservative\n");
break;
case 2:
fprintf(fd2,"Suburban / Average\n");
break;
case 3:
fprintf(fd2,"Rural / Optimistic\n");
break;
}
fprintf(fd2,"Earth's Dielectric Constant: %.3lf\n",LR.eps_dielect); fprintf(fd2,"Earth's Dielectric Constant: %.3lf\n",LR.eps_dielect);
fprintf(fd2,"Earth's Conductivity: %.3lf Siemens/meter\n",LR.sgm_conductivity); fprintf(fd2,"Earth's Conductivity: %.3lf Siemens/meter\n",LR.sgm_conductivity);
fprintf(fd2,"Atmospheric Bending Constant (N-units): %.3lf ppm\n",LR.eno_ns_surfref); fprintf(fd2,"Atmospheric Bending Constant (N-units): %.3lf ppm\n",LR.eno_ns_surfref);
@@ -4151,9 +4197,8 @@ void PathReport(struct site source, struct site destination, char *name, char gr
fprintf(fd2," (%+.2f dBm)\n",dBm); fprintf(fd2," (%+.2f dBm)\n",dBm);
} }
fprintf(fd2,"\n%s\n\n",dashes);
fprintf(fd2,"Summary for the link between %s and %s:\n\n",source.name, destination.name); fprintf(fd2,"\nSummary for the link between %s and %s:\n\n",source.name, destination.name);
if (patterndB!=0.0) if (patterndB!=0.0)
fprintf(fd2,"%s antenna pattern towards %s: %.3f (%.2f dB)\n", source.name, destination.name, pattern, patterndB); fprintf(fd2,"%s antenna pattern towards %s: %.3f (%.2f dB)\n", source.name, destination.name, pattern, patterndB);
@@ -4241,7 +4286,7 @@ void PathReport(struct site source, struct site destination, char *name, char gr
dkm=(elev[1]*elev[0])/1000; // km dkm=(elev[1]*elev[0])/1000; // km
txelev=elev[2]+(source.alt*METERS_PER_FOOT); txelev=elev[2]+(source.alt*METERS_PER_FOOT);
switch (propmodel) switch (propmodel)
{ {
case 1: case 1:
// Longley Rice ITM // Longley Rice ITM
@@ -4332,7 +4377,7 @@ void PathReport(struct site source, struct site destination, char *name, char gr
fprintf(fd2,"Free space path loss: %.2f dB\n",free_space_loss); fprintf(fd2,"Free space path loss: %.2f dB\n",free_space_loss);
} }
fprintf(fd2,"Longley-Rice path loss: %.2f dB\n",loss); fprintf(fd2,"Computed path loss: %.2f dB\n",loss);
if (free_space_loss!=0.0) if (free_space_loss!=0.0)
fprintf(fd2,"Attenuation due to terrain shielding: %.2f dB\n",loss-free_space_loss); fprintf(fd2,"Attenuation due to terrain shielding: %.2f dB\n",loss-free_space_loss);
@@ -4362,35 +4407,35 @@ void PathReport(struct site source, struct site destination, char *name, char gr
fprintf(fd2,"Voltage across 75 ohm dipole at %s: %.2f uV (%.2f dBuV)\n",destination.name,voltage,20.0*log10(voltage)); fprintf(fd2,"Voltage across 75 ohm dipole at %s: %.2f uV (%.2f dBuV)\n",destination.name,voltage,20.0*log10(voltage));
} }
fprintf(fd2,"Mode of propagation: %s\n",strmode); if(propmodel==1){
fprintf(fd2,"Longley-Rice model error number: %d",errnum); fprintf(fd2,"Longley-Rice model error number: %d",errnum);
switch (errnum) switch (errnum)
{ {
case 0: case 0:
fprintf(fd2," (No error)\n"); fprintf(fd2," (No error)\n");
break; break;
case 1: case 1:
fprintf(fd2,"\n Warning: Some parameters are nearly out of range.\n"); fprintf(fd2,"\n Warning: Some parameters are nearly out of range.\n");
fprintf(fd2," Results should be used with caution.\n"); fprintf(fd2," Results should be used with caution.\n");
break; break;
case 2: case 2:
fprintf(fd2,"\n Note: Default parameters have been substituted for impossible ones.\n"); fprintf(fd2,"\n Note: Default parameters have been substituted for impossible ones.\n");
break; break;
case 3: case 3:
fprintf(fd2,"\n Warning: A combination of parameters is out of range.\n"); fprintf(fd2,"\n Warning: A combination of parameters is out of range.\n");
fprintf(fd2," Results are probably invalid.\n"); fprintf(fd2," Results are probably invalid.\n");
break; break;
default: default:
fprintf(fd2,"\n Warning: Some parameters are out of range.\n"); fprintf(fd2,"\n Warning: Some parameters are out of range.\n");
fprintf(fd2," Results are probably invalid.\n"); fprintf(fd2," Results are probably invalid.\n");
} }
}
fprintf(fd2,"\n%s\n\n",dashes);
} }
ObstructionAnalysis(source, destination, LR.frq_mhz, fd2); ObstructionAnalysis(source, destination, LR.frq_mhz, fd2);

37
modeltest.py Normal file
View File

@@ -0,0 +1,37 @@
from math import sin, cos, asin, sqrt, degrees, radians
import os, sys
Earth_radius_km = 6371.0
RADIUS = Earth_radius_km
def dist2degs(lat, lon, km):
dlat = km / RADIUS
dlon = asin(sin(dlat) / cos(radians(lat)))
return degrees(dlon)
lat=50
lon=10
pm=sys.argv[1]
pe=sys.argv[2]
erp=sys.argv[3]
f=int(sys.argv[4])
rad=int(sys.argv[5])
for km in range(1,31):
rlo = lon+dist2degs(lat,lon,rad);
cmd = "./signalserver -m -lat "+str(lat)+" -lon "+str(lon)+" -rla "+str(lat)+" -rlo "+str(rlo)+" -txh 30 -rxh 2 -f "+str(f)+" -pm "+pm+" -pe "+pe+" -res 1200"
out = os.popen(cmd).read().split("\n")
#print out
try:
db = out[1]
dbm = out[2]
dbuv = out[3]
except:
db = 0
dbm = 0
dbuv = 0
#print str(rad)+"km, "+str(f)+"MHz = "+str(db)
print str(db)+",",
f=f+200

Binary file not shown.

BIN
signalserverHD Executable file

Binary file not shown.