forked from ExternalVendorCode/Signal-Server
2.75, Hata model enhancement for < 200MHz
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
SIGNAL SERVER CHANGELOG
|
SIGNAL SERVER CHANGELOG
|
||||||
|
|
||||||
|
2.75 - 22 Apr 2016
|
||||||
|
Added Hata model logic for f < 200MHz
|
||||||
|
|
||||||
|
|
||||||
2.72 - 07 Feb 2016
|
2.72 - 07 Feb 2016
|
||||||
Expanded LIDAR coverage to read in 4 adjacent ASCII tiles in a 2x2 grid
|
Expanded LIDAR coverage to read in 4 adjacent ASCII tiles in a 2x2 grid
|
||||||
Removed requirement to specify -res in LIDAR mode as it's in the file header
|
Removed requirement to specify -res in LIDAR mode as it's in the file header
|
||||||
|
2
Makefile
2
Makefile
@@ -2,7 +2,7 @@ SHELL = /bin/sh
|
|||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CXX = g++
|
CXX = g++
|
||||||
CFLAGS = -Wall -O3 -s -ffast-amth
|
CFLAGS = -Wall -O3 -s -ffast-math
|
||||||
CXXFLAGS = -Wall -O3 -s -ffast-math
|
CXXFLAGS = -Wall -O3 -s -ffast-math
|
||||||
LIBS = -lm -lpthread
|
LIBS = -lm -lpthread
|
||||||
|
|
||||||
|
41
inputs.cc
41
inputs.cc
@@ -157,12 +157,12 @@ int loadLIDAR(char *filenames)
|
|||||||
fprintf(stdout,"Loading \"%s\" into page %d...\n",files[indx], indx);
|
fprintf(stdout,"Loading \"%s\" into page %d...\n",files[indx], indx);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
if (fgets(line, 18, fd) != NULL) {
|
if (fgets(line, 19, fd) != NULL) {
|
||||||
pch = strtok (line," ");
|
pch = strtok (line," ");
|
||||||
pch = strtok (NULL, " ");
|
pch = strtok (NULL, " ");
|
||||||
width=atoi(pch);
|
width=atoi(pch);
|
||||||
}
|
}
|
||||||
if (fgets(line, 18, fd) != NULL) {
|
if (fgets(line, 19, fd) != NULL) {
|
||||||
height=atoi(pch);
|
height=atoi(pch);
|
||||||
}
|
}
|
||||||
fgets(line, 24, fd); //
|
fgets(line, 24, fd); //
|
||||||
@@ -211,33 +211,36 @@ int loadLIDAR(char *filenames)
|
|||||||
eastoffset=xur;
|
eastoffset=xur;
|
||||||
if(xll>westoffset)
|
if(xll>westoffset)
|
||||||
westoffset=xll;
|
westoffset=xll;
|
||||||
|
|
||||||
|
if(debug){
|
||||||
|
fprintf(stdout,"PRE yll %.7f yur %.7f xur %.7f xll %.7f delta %.6f\n",yll,yur,xur,xll,delta);
|
||||||
|
}
|
||||||
|
|
||||||
// Greenwich straddling hack
|
// Greenwich straddling hack
|
||||||
if(xll < 0 && xur > 0){
|
if(xll < 0 && xur > 0){
|
||||||
delta = (xur - xll);
|
xll = (xur - xll); // full width
|
||||||
xur=0.0;
|
xur=0.0; // budge it along so it's west of greenwich
|
||||||
xll=delta;
|
|
||||||
delta=eastoffset; // add to Tx longitude later
|
delta=eastoffset; // add to Tx longitude later
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
// Transform WGS84 longitudes into 'west' values as society finishes east of Greenwich ;)
|
// Transform WGS84 longitudes into 'west' values as society finishes east of Greenwich ;)
|
||||||
if(xll > 0){
|
if(xll > 0){
|
||||||
xll=360-xll;
|
xll=360-xll;
|
||||||
}
|
}
|
||||||
if(xur > 0){
|
if(xur > 0){
|
||||||
xur=360-xur;
|
xur=360-xur;
|
||||||
}
|
}
|
||||||
if(xll < 0){
|
if(xll < 0){
|
||||||
xll=xll*-1;
|
xll=xll*-1;
|
||||||
}
|
}
|
||||||
if(xur < 0){
|
if(xur < 0){
|
||||||
xur=xur*-1;
|
xur=xur*-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(debug){
|
if(debug){
|
||||||
fprintf(stdout,"yll %.7f yur %.7f xur %.7f xll %.7f delta %.6f\n",yll,yur,xur,xll,delta);
|
fprintf(stdout,"POST yll %.7f yur %.7f xur %.7f xll %.7f delta %.6f\n",yll,yur,xur,xll,delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yll < min_north)
|
if (yll < min_north)
|
||||||
|
11
main.cc
11
main.cc
@@ -1,4 +1,4 @@
|
|||||||
double version = 2.72;
|
double version = 2.75;
|
||||||
/****************************************************************************\
|
/****************************************************************************\
|
||||||
* Signal Server: Server optimised SPLAT! by Alex Farrant, M6ZUJ *
|
* Signal Server: Server optimised SPLAT! by Alex Farrant, M6ZUJ *
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
@@ -1464,7 +1464,7 @@ int main(int argc, char *argv[])
|
|||||||
"ERROR: Either the Frequency was missing or out of range!");
|
"ERROR: Either the Frequency was missing or out of range!");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
if (LR.erp > 5000000) {
|
if (LR.erp > 500000000) {
|
||||||
fprintf(stdout, "ERROR: Power was out of range!");
|
fprintf(stdout, "ERROR: Power was out of range!");
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
||||||
@@ -1693,7 +1693,11 @@ int main(int argc, char *argv[])
|
|||||||
PlotPropagation(tx_site[0], altitudeLR, ano_filename,
|
PlotPropagation(tx_site[0], altitudeLR, ano_filename,
|
||||||
propmodel, knifeedge, haf, pmenv, use_threads);
|
propmodel, knifeedge, haf, pmenv, use_threads);
|
||||||
|
|
||||||
|
|
||||||
if(!lidar){
|
if(!lidar){
|
||||||
|
if (LR.erp == 0.0)
|
||||||
|
hottest=9; // 9dB nearfield
|
||||||
|
|
||||||
// nearfield bugfix
|
// nearfield bugfix
|
||||||
for (lat = tx_site[0].lat - 0.001;
|
for (lat = tx_site[0].lat - 0.001;
|
||||||
lat <= tx_site[0].lat + 0.001;
|
lat <= tx_site[0].lat + 0.001;
|
||||||
@@ -1723,6 +1727,7 @@ int main(int argc, char *argv[])
|
|||||||
east=eastoffset;
|
east=eastoffset;
|
||||||
west=westoffset;
|
west=westoffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print WGS84 bounds
|
// Print WGS84 bounds
|
||||||
fprintf(stdout, "|%.6f", north);
|
fprintf(stdout, "|%.6f", north);
|
||||||
fprintf(stdout, "|%.6f", east);
|
fprintf(stdout, "|%.6f", east);
|
||||||
@@ -1735,7 +1740,7 @@ int main(int argc, char *argv[])
|
|||||||
PlotPath(tx_site[0], tx_site[1], 1);
|
PlotPath(tx_site[0], tx_site[1], 1);
|
||||||
PathReport(tx_site[0], tx_site[1], tx_site[0].filename, 0,
|
PathReport(tx_site[0], tx_site[1], tx_site[0].filename, 0,
|
||||||
propmodel, pmenv);
|
propmodel, pmenv);
|
||||||
SeriesData(tx_site[0], tx_site[1], tx_site[0].filename, 1,
|
SeriesData(tx_site[1], tx_site[0], tx_site[0].filename, 1,
|
||||||
normalise);
|
normalise);
|
||||||
}
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@@ -27,17 +27,19 @@ mode 1 = URBAN
|
|||||||
mode 2 = SUBURBAN
|
mode 2 = SUBURBAN
|
||||||
mode 3 = OPEN
|
mode 3 = OPEN
|
||||||
*/
|
*/
|
||||||
|
float lh_M;
|
||||||
|
float C_H;
|
||||||
|
float logf = log10(f);
|
||||||
|
|
||||||
float lh_M = log10(11.75 * h_M);
|
if(f<200){
|
||||||
float C_H = 3.2 * lh_M * lh_M - 4.97;
|
lh_M = log10(1.54 * h_M);
|
||||||
|
C_H = 8.29 * (lh_M * lh_M) - 1.1;
|
||||||
|
}else{
|
||||||
|
lh_M = log10(11.75 * h_M);
|
||||||
|
C_H = 3.2 * (lh_M * lh_M) - 4.97;
|
||||||
|
}
|
||||||
|
|
||||||
float logf = log10(f);
|
float L_u = 69.55 + 26.16 * logf - 13.82 * log10(h_B) - C_H + (44.9 - 6.55 * log10(h_B)) * log10(d);
|
||||||
|
|
||||||
float L_u =
|
|
||||||
69.55 + 26.16 * logf - 13.82 * log10(h_B) - C_H + (44.9 -
|
|
||||||
6.55 *
|
|
||||||
log10(h_B)) *
|
|
||||||
log10(d);
|
|
||||||
|
|
||||||
if (!mode || mode == 1) {
|
if (!mode || mode == 1) {
|
||||||
return L_u; //URBAN
|
return L_u; //URBAN
|
||||||
|
43
outputs.cc
43
outputs.cc
@@ -103,8 +103,8 @@ void DoPathLoss(char *filename, unsigned char geo, unsigned char kml,
|
|||||||
lon)));
|
lon)));
|
||||||
// fix for multi-tile lidar
|
// fix for multi-tile lidar
|
||||||
if(width==10000 && (indx==1 || indx==3)){
|
if(width==10000 && (indx==1 || indx==3)){
|
||||||
if(y0 >= 3510){ //3535
|
if(y0 >= 3432){ //3535
|
||||||
y0=y0-3510;
|
y0=y0-3432;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,8 +331,8 @@ void DoSigStr(char *filename, unsigned char geo, unsigned char kml,
|
|||||||
|
|
||||||
// fix for multi-tile lidar
|
// fix for multi-tile lidar
|
||||||
if(width==10000 && (indx==1 || indx==3)){
|
if(width==10000 && (indx==1 || indx==3)){
|
||||||
if(y0 >= 3510){ //3535
|
if(y0 >= 3432){ //3535
|
||||||
y0=y0-3510;
|
y0=y0-3432;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -575,8 +575,8 @@ void DoRxdPwr(char *filename, unsigned char geo, unsigned char kml,
|
|||||||
|
|
||||||
// fix for multi-tile lidar
|
// fix for multi-tile lidar
|
||||||
if(width==10000 && (indx==1 || indx==3)){
|
if(width==10000 && (indx==1 || indx==3)){
|
||||||
if(y0 >= 3510){ //3535
|
if(y0 >= 3432){ //3510,3535
|
||||||
y0=y0-3510;
|
y0=y0-3432;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -997,14 +997,21 @@ void PathReport(struct site source, struct site destination, char *name,
|
|||||||
fprintf(fd2, "Transmitter site: %s\n", source.name);
|
fprintf(fd2, "Transmitter site: %s\n", source.name);
|
||||||
|
|
||||||
if (source.lat >= 0.0) {
|
if (source.lat >= 0.0) {
|
||||||
fprintf(fd2, "Site location: %.4f North / %.4f West\n",
|
|
||||||
source.lat, source.lon);
|
if (source.lon <= 180){
|
||||||
|
fprintf(fd2, "Site location: %.4f, -%.4f\n",source.lat, source.lon);
|
||||||
|
}else{
|
||||||
|
fprintf(fd2, "Site location: %.4f, %.4f\n",source.lat, 360 - source.lon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
||||||
fprintf(fd2, "Site location: %.4f South / %.4f West\n",
|
if (source.lon <= 180){
|
||||||
-source.lat, source.lon);
|
fprintf(fd2, "Site location: %.4f, -%.4f\n",source.lat, source.lon);
|
||||||
|
}else{
|
||||||
|
fprintf(fd2, "Site location: %.4f, %.4f\n",source.lat, 360 - source.lon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metric) {
|
if (metric) {
|
||||||
@@ -1069,13 +1076,21 @@ void PathReport(struct site source, struct site destination, char *name,
|
|||||||
fprintf(fd2, "\nReceiver site: %s\n", destination.name);
|
fprintf(fd2, "\nReceiver site: %s\n", destination.name);
|
||||||
|
|
||||||
if (destination.lat >= 0.0) {
|
if (destination.lat >= 0.0) {
|
||||||
fprintf(fd2, "Site location: %.4f North / %.4f West\n",
|
|
||||||
destination.lat, destination.lon);
|
if (destination.lon <= 180){
|
||||||
|
fprintf(fd2, "Site location: %.4f, -%.4f\n",destination.lat, destination.lon);
|
||||||
|
}else{
|
||||||
|
fprintf(fd2, "Site location: %.4f, %.4f\n",destination.lat, 360 - destination.lon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
fprintf(fd2, "Site location: %.4f South / %.4f West\n",
|
|
||||||
-destination.lat, destination.lon);
|
if (destination.lon <= 180){
|
||||||
|
fprintf(fd2, "Site location: %.4f, -%.4f\n",destination.lat, destination.lon);
|
||||||
|
}else{
|
||||||
|
fprintf(fd2, "Site location: %.4f, %.4f\n",destination.lat, 360 - destination.lon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metric) {
|
if (metric) {
|
||||||
|
BIN
signalserver
Executable file
BIN
signalserver
Executable file
Binary file not shown.
1
signalserverHD
Symbolic link
1
signalserverHD
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
signalserver
|
1
signalserverLIDAR
Symbolic link
1
signalserverLIDAR
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
signalserver
|
Reference in New Issue
Block a user