diff --git a/.txt b/.txt index 262e41c..8a0e301 100644 --- a/.txt +++ b/.txt @@ -2,25 +2,25 @@ --==[ Path Profile Analysis ]==-- 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 -Antenna height: 36.00 meters AGL / 36.00 meters AMSL -Distance to Rx: 1.00 kilometers -Azimuth to Rx: 91.27 degrees -Depression angle to Rx: -1.5004 degrees +Antenna height: 30.00 meters AGL / 30.00 meters AMSL +Distance to Rx: 5.00 kilometers +Azimuth to Rx: 89.97 degrees +Depression angle to Rx: -0.3433 degrees 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 -Antenna height: 10.00 meters AGL / 10.00 meters AMSL -Distance to Tx: 1.00 kilometers -Azimuth to Tx: 271.29 degrees -Elevation angle to Tx: +1.4914 degrees +Antenna height: 2.00 meters AGL / 2.00 meters AMSL +Distance to Tx: 5.00 kilometers +Azimuth to Tx: 270.03 degrees +Elevation angle to Tx: +0.2984 degrees Longley-Rice path calculation parameters used in this analysis: Earth's Dielectric Constant: 15.000 Earth's Conductivity: 0.005 Siemens/meter Atmospheric Bending Constant (N-units): 301.000 ppm -Frequency: 900.000 MHz +Frequency: 5900.000 MHz Radio Climate: 5 (Continental Temperate) Polarisation: 1 (Vertical) Fraction of Situations: 50.0% @@ -30,17 +30,3 @@ Fraction of Time: 50.0% 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. diff --git a/CHANGELOG b/CHANGELOG index 6ca0927..341ff2f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,9 @@ 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 Improved model error handling Tweaked params for Ericsson model and inverted environment variables to match rest diff --git a/build.sh b/build.sh index 0dc8a4c..d060e04 100755 --- a/build.sh +++ b/build.sh @@ -3,4 +3,5 @@ rm -f signalserver 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 -DHD -o signalserverHD ./signalserver diff --git a/main.cpp b/main.cpp index cb57821..541bd19 100755 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,4 @@ -double version=2.43; +double version=2.44; /****************************************************************************\ * 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 */ - fprintf(fd2,"Receiver site: %s\n",destination.name); + fprintf(fd2,"\nReceiver site: %s\n",destination.name); 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) { - 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 Conductivity: %.3lf Siemens/meter\n",LR.sgm_conductivity); 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,"\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) 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 txelev=elev[2]+(source.alt*METERS_PER_FOOT); - switch (propmodel) + switch (propmodel) { case 1: // 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,"Longley-Rice path loss: %.2f dB\n",loss); + fprintf(fd2,"Computed path loss: %.2f dB\n",loss); if (free_space_loss!=0.0) 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,"Mode of propagation: %s\n",strmode); + if(propmodel==1){ fprintf(fd2,"Longley-Rice model error number: %d",errnum); - switch (errnum) - { - case 0: - fprintf(fd2," (No error)\n"); - break; + switch (errnum) + { + case 0: + fprintf(fd2," (No error)\n"); + break; - case 1: - fprintf(fd2,"\n Warning: Some parameters are nearly out of range.\n"); - fprintf(fd2," Results should be used with caution.\n"); - break; + case 1: + fprintf(fd2,"\n Warning: Some parameters are nearly out of range.\n"); + fprintf(fd2," Results should be used with caution.\n"); + break; - case 2: - fprintf(fd2,"\n Note: Default parameters have been substituted for impossible ones.\n"); - break; + case 2: + fprintf(fd2,"\n Note: Default parameters have been substituted for impossible ones.\n"); + break; - case 3: - fprintf(fd2,"\n Warning: A combination of parameters is out of range.\n"); - fprintf(fd2," Results are probably invalid.\n"); - break; + case 3: + fprintf(fd2,"\n Warning: A combination of parameters is out of range.\n"); + fprintf(fd2," Results are probably invalid.\n"); + break; - default: - fprintf(fd2,"\n Warning: Some parameters are out of range.\n"); - fprintf(fd2," Results are probably invalid.\n"); - } + default: + fprintf(fd2,"\n Warning: Some parameters are out of range.\n"); + fprintf(fd2," Results are probably invalid.\n"); + } + } - fprintf(fd2,"\n%s\n\n",dashes); } ObstructionAnalysis(source, destination, LR.frq_mhz, fd2); diff --git a/modeltest.py b/modeltest.py new file mode 100644 index 0000000..1a8bbd7 --- /dev/null +++ b/modeltest.py @@ -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 diff --git a/signalserver b/signalserver index 75f9451..35a7379 100755 Binary files a/signalserver and b/signalserver differ diff --git a/signalserverHD b/signalserverHD new file mode 100755 index 0000000..bc544e0 Binary files /dev/null and b/signalserverHD differ