forked from ExternalVendorCode/Signal-Server
v2.3
Added ITWOM model now that it's under the GPL licence :)
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
Signal Server changelog
|
Signal Server changelog
|
||||||
|
|
||||||
|
v2.3 - 29 September 2014
|
||||||
|
Replaced itm.cpp with itwom3.0.cpp and added ITWOM model as result
|
||||||
|
|
||||||
v2.23 - 14 August 2014
|
v2.23 - 14 August 2014
|
||||||
Improved diffraction model to work only for dips deeper than 20m and not to exaggerate result by an arbitrary figure (3)
|
Improved diffraction model to work only for dips deeper than 20m and not to exaggerate result by an arbitrary figure (3)
|
||||||
Fixed false 'frequency too low' error message for FSPL model which was intended for Hata models only.
|
Fixed false 'frequency too low' error message for FSPL model which was intended for Hata models only.
|
||||||
|
@@ -2,7 +2,7 @@ Signal-Server RF coverage calculator
|
|||||||
====================================
|
====================================
|
||||||
|
|
||||||
/****************************************************************************\
|
/****************************************************************************\
|
||||||
* Signal Server 1.3.8: Server optimised SPLAT! by Alex Farrant *
|
* Signal Server: Server optimised SPLAT! by Alex Farrant *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* SPLAT! Project started in 1997 by John A. Magliacane, KD2BD *
|
* SPLAT! Project started in 1997 by John A. Magliacane, KD2BD *
|
||||||
* *
|
* *
|
||||||
|
2863
itwom3.0.cpp
Normal file
2863
itwom3.0.cpp
Normal file
File diff suppressed because it is too large
Load Diff
53
main.cpp
53
main.cpp
@@ -1,4 +1,4 @@
|
|||||||
double version=2.23;
|
double version=2.3;
|
||||||
/****************************************************************************\
|
/****************************************************************************\
|
||||||
* Signal Server: Server optimised SPLAT! by Alex Farrant *
|
* Signal Server: Server optimised SPLAT! by Alex Farrant *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
@@ -22,7 +22,12 @@ double version=2.23;
|
|||||||
******************************************************************************
|
******************************************************************************
|
||||||
* g++ -Wall -O3 -s -lm -fomit-frame-pointer itm.cpp hata.cpp cost.cpp fspl.cpp main.cpp -o ss *
|
* g++ -Wall -O3 -s -lm -fomit-frame-pointer itm.cpp hata.cpp cost.cpp fspl.cpp main.cpp -o ss *
|
||||||
\****************************************************************************/
|
\****************************************************************************/
|
||||||
|
/*
|
||||||
|
2.3 - Added ITWOM3.0
|
||||||
|
2.22 - Fixed LOS not outputting bounds
|
||||||
|
2.2 - Made .dot output opt in to save some disk space
|
||||||
|
2.1 - Added dual core support with -haf
|
||||||
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -62,7 +67,7 @@ double earthradius, max_range=0.0, forced_erp, dpp, ppd,
|
|||||||
|
|
||||||
int min_north=90, max_north=-90, min_west=360, max_west=-1, ippd, mpi,
|
int min_north=90, max_north=-90, min_west=360, max_west=-1, ippd, mpi,
|
||||||
max_elevation=-32768, min_elevation=32768, bzerror, contour_threshold,
|
max_elevation=-32768, min_elevation=32768, bzerror, contour_threshold,
|
||||||
pred,pblue,pgreen,ter,multiplier=256,debug=0,loops=64,jgets=0, MAXRAD, hottest=10,csv=0;
|
pred,pblue,pgreen,ter,multiplier=256,debug=0,loops=64,jgets=0, MAXRAD, hottest=10;
|
||||||
|
|
||||||
unsigned char got_elevation_pattern, got_azimuth_pattern, metric=0, dbm=0;
|
unsigned char got_elevation_pattern, got_azimuth_pattern, metric=0, dbm=0;
|
||||||
|
|
||||||
@@ -114,10 +119,16 @@ double elev[ARRAYSIZE+10];
|
|||||||
|
|
||||||
struct site tx_site[2];
|
struct site tx_site[2];
|
||||||
|
|
||||||
|
//ITWOM
|
||||||
void point_to_point(double elev[], double tht_m, double rht_m,
|
void point_to_point(double elev[], double tht_m, double rht_m,
|
||||||
double eps_dielect, double sgm_conductivity, double eno_ns_surfref,
|
double eps_dielect, double sgm_conductivity, double eno_ns_surfref,
|
||||||
double frq_mhz, int radio_climate, int pol, double conf,
|
double frq_mhz, int radio_climate, int pol, double conf,
|
||||||
double rel, double &dbloss, char *strmode, int &errnum);
|
double rel, double &dbloss, char *strmode, int &errnum);
|
||||||
|
//ITM
|
||||||
|
void point_to_point_ITM(double elev[], double tht_m, double rht_m,
|
||||||
|
double eps_dielect, double sgm_conductivity, double eno_ns_surfref,
|
||||||
|
double frq_mhz, int radio_climate, int pol, double conf,
|
||||||
|
double rel, double &dbloss, char *strmode, int &errnum);
|
||||||
|
|
||||||
double HataLinkdB(float f,float h_B, float h_M, float d, int mode);
|
double HataLinkdB(float f,float h_B, float h_M, float d, int mode);
|
||||||
|
|
||||||
@@ -294,10 +305,7 @@ int PutSignal(double lat, double lon, unsigned char signal)
|
|||||||
char dotfile[255];
|
char dotfile[255];
|
||||||
FILE *fd=NULL;
|
FILE *fd=NULL;
|
||||||
snprintf(dotfile,80,"%s.dot%c",tx_site[0].filename,0);
|
snprintf(dotfile,80,"%s.dot%c",tx_site[0].filename,0);
|
||||||
if(csv)
|
|
||||||
fd=fopen(dotfile,"a");
|
|
||||||
|
|
||||||
|
|
||||||
int x, y, indx;
|
int x, y, indx;
|
||||||
char found;
|
char found;
|
||||||
|
|
||||||
@@ -322,17 +330,10 @@ int PutSignal(double lat, double lon, unsigned char signal)
|
|||||||
// Write values to file
|
// Write values to file
|
||||||
dem[indx].signal[x][y]=signal;
|
dem[indx].signal[x][y]=signal;
|
||||||
|
|
||||||
if(signal>0 && csv){
|
|
||||||
fprintf(fd,"%.6f,%.6f,%d\n",lat,lon,signal);
|
|
||||||
}
|
|
||||||
if(csv)
|
|
||||||
fclose(fd);
|
|
||||||
return (dem[indx].signal[x][y]);
|
return (dem[indx].signal[x][y]);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
if(csv)
|
|
||||||
fclose(fd);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1787,7 +1788,7 @@ void PlotPropPath(struct site source, struct site destination, unsigned char mas
|
|||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
// Longley Rice
|
// Longley Rice
|
||||||
point_to_point(elev,source.alt*METERS_PER_FOOT,
|
point_to_point_ITM(elev,source.alt*METERS_PER_FOOT,
|
||||||
destination.alt*METERS_PER_FOOT, LR.eps_dielect,
|
destination.alt*METERS_PER_FOOT, LR.eps_dielect,
|
||||||
LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
|
LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
|
||||||
LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
|
LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
|
||||||
@@ -1814,9 +1815,17 @@ void PlotPropPath(struct site source, struct site destination, unsigned char mas
|
|||||||
loss=FsplLinkdB(LR.frq_mhz,dkm);
|
loss=FsplLinkdB(LR.frq_mhz,dkm);
|
||||||
//fprintf(stdout,"MHz: %1f KM: %1f = %1fdB",LR.frq_mhz,dkm,loss);
|
//fprintf(stdout,"MHz: %1f KM: %1f = %1fdB",LR.frq_mhz,dkm,loss);
|
||||||
break;
|
break;
|
||||||
|
case 8:
|
||||||
|
// ITWOM 3.0
|
||||||
|
point_to_point(elev,source.alt*METERS_PER_FOOT,
|
||||||
|
destination.alt*METERS_PER_FOOT, LR.eps_dielect,
|
||||||
|
LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
|
||||||
|
LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
|
||||||
|
strmode, errnum);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
point_to_point(elev,source.alt*METERS_PER_FOOT,
|
point_to_point_ITM(elev,source.alt*METERS_PER_FOOT,
|
||||||
destination.alt*METERS_PER_FOOT, LR.eps_dielect,
|
destination.alt*METERS_PER_FOOT, LR.eps_dielect,
|
||||||
LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
|
LR.sgm_conductivity, LR.eno_ns_surfref, LR.frq_mhz,
|
||||||
LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
|
LR.radio_climate, LR.pol, LR.conf, LR.rel, loss,
|
||||||
@@ -4982,11 +4991,10 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stdout," -R Radius (miles/kilometers)\n");
|
fprintf(stdout," -R Radius (miles/kilometers)\n");
|
||||||
fprintf(stdout," -res Pixels per degree. 300/600/1200(default)/3600 (optional)\n");
|
fprintf(stdout," -res Pixels per degree. 300/600/1200(default)/3600 (optional)\n");
|
||||||
fprintf(stdout," -t Terrain background\n");
|
fprintf(stdout," -t Terrain background\n");
|
||||||
fprintf(stdout," -pm Prop model. 1: ITM, 2: LOS, 3-5: Hata, 6: COST231, 7: ITU525\n");
|
fprintf(stdout," -pm Prop model. 1: ITM, 2: LOS, 3-5: Hata, 6: COST231, 7: ITU525, 8: ITWOM3.0\n");
|
||||||
fprintf(stdout," -ked Knife edge diffraction (Default for ITM)\n");
|
fprintf(stdout," -ked Knife edge diffraction (Default for ITM)\n");
|
||||||
fprintf(stdout," -ng Normalise Path Profile graph\n");
|
fprintf(stdout," -ng Normalise Path Profile graph\n");
|
||||||
fprintf(stdout," -haf Halve 1 or 2 (optional)\n");
|
fprintf(stdout," -haf Halve 1 or 2 (optional)\n");
|
||||||
fprintf(stdout," -csv Write CSV file with lat,lon,dbm\n");
|
|
||||||
|
|
||||||
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
@@ -5429,12 +5437,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//CSV output
|
|
||||||
if (strcmp(argv[x],"-csv")==0)
|
|
||||||
{
|
|
||||||
z=x+1;
|
|
||||||
csv=1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5498,7 +5501,7 @@ int main(int argc, char *argv[])
|
|||||||
fprintf(stdout,"ERROR: Receiver threshold out of range (-200 / +200)");
|
fprintf(stdout,"ERROR: Receiver threshold out of range (-200 / +200)");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
if(propmodel>2 && propmodel<7 && LR.frq_mhz < 150){
|
if(propmodel>2 && propmodel<8 && LR.frq_mhz < 150){
|
||||||
fprintf(stdout,"ERROR: Frequency too low for Propagation model");
|
fprintf(stdout,"ERROR: Frequency too low for Propagation model");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
5719
mainHD.cpp
Normal file
5719
mainHD.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user