From 866d49fe6fd5051b29c0fcfc5d8e4f338fdfbe47 Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 5 Jun 2008 17:33:49 -0600 Subject: [PATCH] Imported Upstream version 1.2.0 --- CHANGES | 71 + README | 15 +- clean | 4 +- docs/man/splat.1 | 1002 ++++++--- docs/man/splat.man | 629 ++++-- docs/pdf/splat.pdf | Bin 35273 -> 49565 bytes docs/postscript/splat.ps | 1828 +++++++++------- docs/text/splat.txt | 1002 ++++++--- splat-1.1.1.lsm => splat-1.2.0.lsm | 17 +- splat.cpp | 3108 +++++++++++++++++++++------- 10 files changed, 5403 insertions(+), 2273 deletions(-) rename splat-1.1.1.lsm => splat-1.2.0.lsm (78%) diff --git a/CHANGES b/CHANGES index 59e41c6..ff13656 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,74 @@ +Release 1.2.0: +By John A. Magliacane, (22-Dec-2006): + +* All graph plotting has been enhanced to include distances, azimuths, + and in some cases, elevation angles, in numeric form. Height + plots (-h option) now include a contour of the Earth's curvature. + A new -H option was added that behaves the same as -h, except its + display of heights is normalized to the heights of the endpoints + along the plotted path. Graphs now default to PNG rather than GIF + format to reflect gnuplot's current trend away from .gif output. + (.gif is still available if your version of gnuplot supports it.) + Postscript output is now generated in enhanced color. + +* SPLAT! can now determine and plot Fresnel Zone clearances. A new + -f command-line option permits the Fresnel Zone frequency (in MHz) + to be specified, otherwise it can be determined from .lrp files when + path-loss calculations are performed. Antenna height requirements + for 60% clearance (0.6 F1) and 100% clearance (F1) of the First + Fresnel Zone now appear in Obstruction Reports. These zones are + also displayed graphically in height plots (-h or -H options). + +* Support for antenna radiation patterns has been added. SPLAT! now + reads normalized azimuth and elevation antenna field pattern data + from separate .az and .el files when Longley-Rice studies are performed. + One degree azimuth and one tenth degree elevation pattern resolution + is supported along with azimuthal pattern rotation and mechanical + vertical beam tilt. + +* A bug in the interpretation of the -n and -N command-line options + was fixed. + +* Negative geographical coordinates in DMS format are now (hopefully) + interpreted and displayed better than before. + +* SPLAT! data handling can be changed from imperial units (feet/miles) + to metric (meters/kilometers) units using the new -metric switch. + +* SPLAT! can now generate topographic maps without plotting + line-of-sight or path loss coverage. These maps are centered + approximately on the given tx_site, extend out to a radius + provided by the -R switch, and can be populated with county + boundaries and city names, just like SPLAT!'s traditional + line-of-sight and path loss maps. + +* Support for user-defined terrain files (ground clutter) has been + added. + +* SPLAT! can now generate .geo Georeference Information Files + when .ppm topography and coverage maps are created, permitting + the integration of SPLAT! generated maps with X Amateur Station + Tracking and Information Reporting (www.xastir.org) software. + +* SPLAT! can now generate .kml Keyhole Markup Language files that + when imported into "Google Map", dramatically illustrate the RF + path between transmitter and receiver locations when performing + point-to-point analyses. + +* Support for exporting Longley-Rice path loss contour studies to + external data files has been included. SPLAT! path loss files can + be used for performing coverage or interference studies outside of + SPLAT!. They can also be modified externally (with antenna pattern + data, for example) through scripts or small utilities, and imported + back into SPLAT! to generate coverage maps based on the revised + data without having to re-run any time intensive Longley-Rice path + loss calculations. + +* The documentation was updated to reflect the new features and + functionality of the software. + +---------------------------------------------------------------------------- + Release 1.1.1: By John A. Magliacane, (01-Apr-2006): diff --git a/README b/README index 09f6e00..cb612ac 100644 --- a/README +++ b/README @@ -14,7 +14,7 @@ Any recent version included with your Linux distribution should work fine. Note, however, that zlib version 1.1.3 contains a security vulnerability that has been fixed in version 1.1.4. The latest version of zlib may be found at: http://www.gzip.org/zlib/ -If you should decide to build zlib, don't forget to invoke: +If you should decide to build zlib, it is important to invoke: ./configure -s @@ -39,13 +39,13 @@ Unpack the tar.gz file in a source code directory (such as /usr/src under Slackware) as 'root': cd /usr/src - tar xvfz splat-1.1.1.tar.gz + tar xvfz splat-1.2.0.tar.gz -This action will generate a subdirectory named splat-1.1.1. +This action will generate a subdirectory named splat-1.2.0. Next, cd into the directory: - cd splat-1.1.1 + cd splat-1.2.0 Invoke the configure script to build SPLAT! and related utilities: @@ -61,7 +61,7 @@ will be prompted to su to 'root' and invoke the install script manually: exit Before running SPLAT!, carefully read the documentation located under -the splat-1.1.1/docs directory for information on the use of the program. +the splat-1.2.0/docs directory for information on the use of the program. REMEMBER: Topography data must be downloaded and SPLAT Data Files must be generated using the included srtm2sdf, postdownload, or usgs2sdf @@ -91,7 +91,7 @@ $HOME/.splat_path file so SPLAT! can easily find them. Please read the README file under the utils directory for information on the utilities included with SPLAT!. -Please read the documentation under the splat-1.1.1/docs directory, +Please read the documentation under the splat-1.2.0/docs directory, or consult the program's man page for more information and examples of SPLAT! use. @@ -102,5 +102,4 @@ can be found on the SPLAT! Web Site: -- John A. Magliacane, KD2BD -March 15, 2006 - +December 20, 2006 diff --git a/clean b/clean index e600f20..3db40c7 100755 --- a/clean +++ b/clean @@ -2,5 +2,7 @@ # Simple script to create a clean distribution # rm -f splat utils/fontdata utils/citydecoder utils/usgs2sdf utils/srtm2sdf -echo "Done!" +cd docs/man +./docmaker +cd ../../ diff --git a/docs/man/splat.1 b/docs/man/splat.1 index 0c1c962..546907f 100644 --- a/docs/man/splat.1 +++ b/docs/man/splat.1 @@ -7,77 +7,125 @@ NNAAMMEE sis tool SSYYNNOOPPSSIISS - splat [-t _t_r_a_n_s_m_i_t_t_e_r___s_i_t_e_._q_t_h] [-r _r_e_c_e_i_v_e_r___s_i_t_e_._q_t_h] - [-c _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___l_o_s___c_o_v_e_r_a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) - _(_f_l_o_a_t_)] [-L _r_x___a_n_t_e_n_n_a___h_e_i_g_h_t___f_o_r___L_o_n_g_l_e_y_-_R_i_c_e___c_o_v_e_r_- - _a_g_e___a_n_a_l_y_s_i_s _(_f_e_e_t_) _(_f_l_o_a_t_)] [-p _t_e_r_r_a_i_n___p_r_o_f_i_l_e_._e_x_t] [-e - _e_l_e_v_a_t_i_o_n___p_r_o_f_i_l_e_._e_x_t] [-h _h_e_i_g_h_t___p_r_o_f_i_l_e_._e_x_t] [-l _L_o_n_g_- - _l_e_y_-_R_i_c_e___p_r_o_f_i_l_e_._e_x_t] [-o _t_o_p_o_g_r_a_p_h_i_c___m_a_p___f_i_l_e_n_a_m_e_._p_p_m] - [-b _c_a_r_t_o_g_r_a_p_h_i_c___b_o_u_n_d_a_r_y___f_i_l_e_n_a_m_e_._d_a_t] [-s - _s_i_t_e_/_c_i_t_y___d_a_t_a_b_a_s_e_._d_a_t] [-d _s_d_f___d_i_r_e_c_t_o_r_y___p_a_t_h] [-m - _e_a_r_t_h___r_a_d_i_u_s___m_u_l_t_i_p_l_i_e_r _(_f_l_o_a_t_)] [-R _m_a_x_i_m_u_m___c_o_v_e_r_- - _a_g_e___r_a_n_g_e _(_f_o_r _-_c _o_r _-_L_) _(_m_i_l_e_s_) _(_f_l_o_a_t_)] [-dB _m_a_x_i_m_u_m - _a_t_t_e_n_u_a_t_i_o_n _c_o_n_t_o_u_r _t_o _d_i_s_p_l_a_y _o_n _p_a_t_h _l_o_s_s _m_a_p_s _(_8_0_-_2_3_0 - _d_B_)] [-n] [-N] + splat [-t _t_r_a_n_s_m_i_t_t_e_r___s_i_t_e_._q_t_h] [-r _r_e_c_e_i_v_e_r___s_i_t_e_._q_t_h] + [-c _r_x _a_n_t_e_n_n_a _h_e_i_g_h_t _f_o_r _L_O_S _c_o_v_e_r_a_g_e _a_n_a_l_y_s_i_s + _(_f_e_e_t_/_m_e_t_e_r_s_) _(_f_l_o_a_t_)] [-L _r_x _a_n_t_e_n_n_a _h_e_i_g_h_t _f_o_r _L_o_n_g_l_e_y_- + _R_i_c_e _c_o_v_e_r_a_g_e _a_n_a_l_y_s_i_s _(_f_e_e_t_/_m_e_t_e_r_s_) _(_f_l_o_a_t_)] [-p _t_e_r_- + _r_a_i_n___p_r_o_f_i_l_e_._e_x_t] [-e _e_l_e_v_a_t_i_o_n___p_r_o_f_i_l_e_._e_x_t] [-h + _h_e_i_g_h_t___p_r_o_f_i_l_e_._e_x_t] [-H _n_o_r_m_a_l_i_z_e_d___h_e_i_g_h_t___p_r_o_f_i_l_e_._e_x_t] [-l + _L_o_n_g_l_e_y_-_R_i_c_e___p_r_o_f_i_l_e_._e_x_t] [-o _t_o_p_o_g_r_a_p_h_i_c___m_a_p___f_i_l_e_- + _n_a_m_e_._p_p_m] [-b _c_a_r_t_o_g_r_a_p_h_i_c___b_o_u_n_d_a_r_y___f_i_l_e_n_a_m_e_._d_a_t] [-s + _s_i_t_e_/_c_i_t_y___d_a_t_a_b_a_s_e_._d_a_t] [-d _s_d_f___d_i_r_e_c_t_o_r_y___p_a_t_h] [-m _e_a_r_t_h + _r_a_d_i_u_s _m_u_l_t_i_p_l_i_e_r _(_f_l_o_a_t_)] [-f _f_r_e_q_u_e_n_c_y _(_M_H_z_) _f_o_r _F_r_e_s_n_e_l + _z_o_n_e _c_a_l_c_u_l_a_t_i_o_n_s _(_f_l_o_a_t_)] [-R _m_a_x_i_m_u_m _c_o_v_e_r_a_g_e _r_a_d_i_u_s + _(_m_i_l_e_s_/_k_i_l_o_m_e_t_e_r_s_) _(_f_l_o_a_t_)] [-dB _m_a_x_i_m_u_m _a_t_t_e_n_u_a_t_i_o_n _c_o_n_- + _t_o_u_r _t_o _d_i_s_p_l_a_y _o_n _p_a_t_h _l_o_s_s _m_a_p_s _(_8_0_-_2_3_0 _d_B_)] [-nf _d_o _n_o_t + _p_l_o_t _F_r_e_s_n_e_l _z_o_n_e_s _i_n _h_e_i_g_h_t _p_l_o_t_s] [-plo _p_a_t_h___l_o_s_s___o_u_t_- + _p_u_t___f_i_l_e_._t_x_t] [-pli _p_a_t_h___l_o_s_s___i_n_p_u_t___f_i_l_e_._t_x_t] [-udt + _u_s_e_r___d_e_f_i_n_e_d___t_e_r_r_a_i_n___f_i_l_e_._d_a_t] [-n] [-N] [-geo] [-kml] + [-metric] DDEESSCCRRIIPPTTIIOONN - SSPPLLAATT!! is a powerful terrestrial RF propagation and ter- - rain analysis tool covering the spectrum between 20 MHz - and 20 GHz. It is designed for operation on Unix and - Linux-based workstations. SSPPLLAATT!! is free software. - Redistribution and/or modification is permitted under the - terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the - License or any later version. Adoption of SSPPLLAATT!! source - code in proprietary or closed-source applications is a - violation of this license, and is ssttrriiccttllyy forbidden. - - SSPPLLAATT!! is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY, without even the implied war- - ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR- + SSPPLLAATT!! is a powerful terrestrial RF propagation and ter- + rain analysis tool covering the spectrum between 20 MHz + and 20 GHz. SSPPLLAATT!! is free software, and is designed for + operation on Unix and Linux-based workstations. Redistri- + bution and/or modification is permitted under the terms of + the GNU General Public License as published by the Free + Software Foundation, either version 2 of the License or + any later version. Adoption of SSPPLLAATT!! source code in pro- + prietary or closed-source applications is a violation of + this license, and is ssttrriiccttllyy forbidden. + + SSPPLLAATT!! is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY, without even the implied war- + ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR- POSE. See the GNU General Public License for more details. IINNTTRROODDUUCCTTIIOONN - Applications of SSPPLLAATT!! include the visualization, design, - and link budget analysis of wireless Wide Area Networks + Applications of SSPPLLAATT!! include the visualization, design, + and link budget analysis of wireless Wide Area Networks (WANs), commercial and amateur radio communication systems - above 20 MHz, microwave links, frequency coordination, and - the determination of analog and digital terrestrial radio - and television contour regions. + above 20 MHz, microwave links, frequency coordination and + interference studies, and the determination of analog and + digital terrestrial radio and television contour regions. SSPPLLAATT!! provides RF site engineering data such as great circle distances and bearings between sites, antenna ele- vation angles (uptilt), depression angles (downtilt), antenna height above mean sea level, antenna height above average terrain, bearings and distances to known obstruc- - tions, Longley-Rice path attenuation, and minimum antenna - height requirements needed to establish line-of-sight com- - munication paths absent of obstructions due to terrain. - SSPPLLAATT!! produces reports, graphs, and highly detailed and - carefully annotated topographic maps depicting line-of- - sight paths, path loss, and expected coverage areas of - transmitters and repeater systems. When performing line- - of-sight analysis in situations where multiple transmitter - or repeater sites are employed, SSPPLLAATT!! determines individ- - ual and mutual areas of coverage within the network speci- - fied. + tions, and Longley-Rice path attenuation. In addition, + the minimum antenna height requirements needed to clear + terrain, the first Fresnel zone, and 60% of the first + Fresnel zone are also provided. + + SSPPLLAATT!! produces reports, graphs, and high resolution topo- + graphic maps that depict line-of-sight paths, and regional + path loss contours through which expected coverage areas + of transmitters and repeater systems can be obtained. + When performing line-of-sight analysis in situations where + multiple transmitter or repeater sites are employed, + SSPPLLAATT!! determines individual and mutual areas of coverage + within the network specified. + + Simply typing splat on the command line will return a sum- + mary of SSPPLLAATT!!'s command line options: + + --==[ SPLAT! v1.2.0 Available Options... + ]==-- + + -t txsite(s).qth (max of 4) + -r rxsite.qth + -c plot coverage of TX(s) with an RX antenna at X + feet/meters AGL + -L plot path loss map of TX based on an RX at X + feet/meters AGL + -s filename(s) of city/site file(s) to import (max + of 5) + -b filename(s) of cartographic boundary file(s) to + import (5 max) + -p filename of terrain profile graph to plot + -e filename of terrain elevation graph to plot + -h filename of terrain height graph to plot + -H filename of normalized terrain height graph to + plot + -l filename of Longley-Rice graph to plot + -o filename of topographic map to generate (.ppm) + -u filename of user-defined terrain file to import + -d sdf file directory path (overrides path in + ~/.splat_path file) + -n no analysis, brief report + -N no analysis, no report + -m earth radius multiplier + -f frequency for Fresnel zone calculation (MHz) + -R modify default range for -c or -L (miles/kilome- + ters) + -db maximum loss contour to display on path loss maps + (80-230 dB) + -nf do not plot Fresnel zones in height plots + -plo filename of path-loss output file + -pli filename of path-loss input file + -udt filename of user defined terrain input file + -geo generate a .geo georeference file (with .ppm out- + put) + -kml generate a Google Earth .kml file (for point-to- + point links) + -metric employ metric rather than imperial units for all + user I/O - SSPPLLAATT!! operates in two distinct modes: _p_o_i_n_t_-_t_o_-_p_o_i_n_t - _m_o_d_e, and _a_r_e_a _p_r_e_d_i_c_t_i_o_n _m_o_d_e, and may be invoked using - either line-of-sight (LOS) or Irregular Terrain (ITM) - propagation models. True Earth, four-thirds Earth, or any - other Earth radius may be specified by the user when per- - forming line-of-sight analysis. IINNPPUUTT FFIILLEESS SSPPLLAATT!! is a command-line driven application, and reads input data through a number of data files. Some files are mandatory for successful execution of the program, while - others are optional. Mandatory files include SPLAT Data - Files (SDF files), site location files (QTH files), and - Longley-Rice model parameter files (LRP files). Optional - files include city/site location files, and cartographic - boundary files. + others are optional. Mandatory files include 3-arc second + topography models in the form of SPLAT Data Files (SDF + files), site location files (QTH files), and Longley-Rice + model parameter files (LRP files). Optional files include + city location files, cartographic boundary files, user- + defined terrain files, path-loss input files, and antenna + radiation pattern files. SSPPLLAATT DDAATTAA FFIILLEESS SSPPLLAATT!! imports topographic data in the form of SPLAT Data @@ -89,63 +137,64 @@ SSPPLLAATT DDAATTAA FFIILLEESS patible with this utility may be downloaded from: _h_t_t_p_:_/_/_e_d_c_f_t_p_._c_r_._u_s_g_s_._g_o_v_/_p_u_b_/_d_a_t_a_/_D_E_M_/_2_5_0_/. - Significantly better resolution can be obtained through - the use of SRTM-3 Version 2 digital elevation models. - These models are the result of the STS-99 Space Shuttle - Radar Topography Mission, and are available for most popu- - lated regions of the Earth. SPLAT Data Files may be gen- - erated from SRTM data using the included ssrrttmm22ssddff utility. - SRTM-3 Version 2 data may be obtained through anonymous - FTP from: _f_t_p_:_/_/_e_0_s_r_p_0_1_u_._e_c_s_._n_a_s_a_._g_o_v_:_2_1_/_s_r_t_m_/_v_e_r_s_i_o_n_2_/ - - Despite the higher accuracy that SRTM data has to offer, - some voids in the data sets exist. When voids are - detected, the ssrrttmm22ssddff utility replaces them with corre- - sponding data found in existing SDF files (that were pre- - sumably created from earlier USGS data through the + Significantly better resolution and accuracy can be + obtained through the use of SRTM-3 Version 2 digital ele- + vation models. These models are the product of the STS-99 + Space Shuttle Radar Topography Mission, and are available + for most populated regions of the Earth. SPLAT Data Files + may be generated from SRTM data using the included + ssrrttmm22ssddff utility. SRTM-3 Version 2 data may be obtained + through anonymous FTP from: + _f_t_p_:_/_/_e_0_s_r_p_0_1_u_._e_c_s_._n_a_s_a_._g_o_v_:_2_1_/_s_r_t_m_/_v_e_r_s_i_o_n_2_/ + + Despite the higher accuracy that SRTM data has to offer, + some voids in the data sets exist. When voids are + detected, the ssrrttmm22ssddff utility replaces them with corre- + sponding data found in existing SDF files (that were pre- + sumably created from earlier USGS data through the uussggss22ssddff utility). If USGS-derived SDF data is not avail- - able, voids are handled through adjacent pixel averaging, + able, voids are handled through adjacent pixel averaging, or direct replacement. - SPLAT Data Files contain integer value topographic eleva- + SPLAT Data Files contain integer value topographic eleva- tions (in meters) referenced to mean sea level for - 1-degree by 1-degree regions of the earth with a resolu- - tion of 3-arc seconds. SDF files can be read in either - standard format (_._s_d_f) as generated by the uussggss22ssddff and - ssrrttmm22ssddff utilities, or in bzip2 compressed format - (_._s_d_f_._b_z_2). Since uncompressed files can be processed - slightly faster than files that have been compressed, - SSPPLLAATT!! searches for the needed SDF data in uncompressed - format first. If uncompressed data cannot located, SSPPLLAATT!! - then searches for data in bzip2 compressed format. If no - compressed SDF files can be found for the region - requested, SSPPLLAATT!! assumes the region is over water, and + 1-degree by 1-degree regions of the earth with a resolu- + tion of 3-arc seconds. SDF files can be read in either + standard format (_._s_d_f) as generated by the uussggss22ssddff and + ssrrttmm22ssddff utilities, or in bzip2 compressed format + (_._s_d_f_._b_z_2). Since uncompressed files can be processed + slightly faster than files that have been compressed, + SSPPLLAATT!! searches for needed SDF data in uncompressed format + first. If uncompressed data cannot be located, SSPPLLAATT!! + then searches for data in bzip2 compressed format. If no + compressed SDF files can be found for the region + requested, SSPPLLAATT!! assumes the region is over water, and will assign an elevation of sea-level to these areas. - This feature of SSPPLLAATT!! makes it possible to perform path - analysis not only over land, but also between coastal - areas not represented by Digital Elevation Model data. - This behavior of SSPPLLAATT!! underscores the importance of hav- - ing all the SDF files required for the region being ana- - lyzed if meaningful results are to be expected. + This feature of SSPPLLAATT!! makes it possible to perform path + analysis not only over land, but also between coastal + areas not represented by Digital Elevation Model data. + However, this behavior of SSPPLLAATT!! underscores the impor- + tance of having all the SDF files required for the region + being analyzed if meaningful results are to be expected. SSIITTEE LLOOCCAATTIIOONN ((QQTTHH)) FFIILLEESS - SSPPLLAATT!! imports site location information of transmitter - and receiver sites analyzed by the program from ASCII - files having a _._q_t_h extension. QTH files contain the + SSPPLLAATT!! imports site location information of transmitter + and receiver sites analyzed by the program from ASCII + files having a _._q_t_h extension. QTH files contain the site's name, the site's latitude (positive if North of the - equator, negative if South), the site's longitude (in - degrees West, 0 to 360 degrees), and the site's antenna - height above ground level (AGL). A single line-feed char- - acter separates each field. The antenna height is assumed - to be specified in feet unless followed by the letter _m or - the word _m_e_t_e_r_s in either upper or lower case. Latitude + equator, negative if South), the site's longitude (in + degrees West, 0 to 360 degrees), and the site's antenna + height above ground level (AGL), each separated by a sin- + gle line-feed character. The antenna height is assumed to + be specified in feet unless followed by the letter _m or + the word _m_e_t_e_r_s in either upper or lower case. Latitude and longitude information may be expressed in either deci- - mal format (74.6889) or degree, minute, second (DMS) for- + mal format (74.6889) or degree, minute, second (DMS) for- mat (74 41 20.0). - For example, a site location file describing television - station WNJT, Trenton, NJ (_w_n_j_t_._q_t_h) might read as fol- + For example, a site location file describing television + station WNJT, Trenton, NJ (_w_n_j_t_._q_t_h) might read as fol- lows: WNJT @@ -157,12 +206,11 @@ SSIITTEE LLOOCCAATTIIOONN ((QQTTHH)) FFIILLEESS be represented by its own site location (QTH) file. LLOONNGGLLEEYY--RRIICCEE PPAARRAAMMEETTEERR ((LLRRPP)) FFIILLEESS - SSPPLLAATT!! imports Longley-Rice model parameter data from - files having the same base name as the transmitter site - QTH file, but with a _._l_r_p extension, thus providing simple - and accurate correlation between these associated data - sets. The format for the Longley-Rice model parameter - files is as follows (_w_n_j_t_._l_r_p): + Longley-Rice parameter data files are required for SSPPLLAATT!! + to determine RF path loss in either point-to-point or area + prediction mode. Longley-Rice model parameter data is + read from files having the same base name as the transmit- + ter site QTH file, but with a format (_w_n_j_t_._l_r_p): 15.000 ; Earth Dielectric Constant (Relative per- mittivity) @@ -221,10 +269,10 @@ LLOONNGGLLEEYY--RRIICCEE PPAARRAAMMEETTEERR ((LLRRPP)) the statistical analysis provided by the Longley-Rice model. In this example, SSPPLLAATT!! will return the maximum path loss occurring 50% of the time (fraction of time) in - 50% of situations (fraction of situations). Use a frac- - tion of time parameter of 0.97 for digital television, - 0.50 for analog in the United States. Isotropic antennas - are assumed. + 50% of situations (fraction of situations). In the United + States, use a fraction of time parameter of 0.97 for digi- + tal television (8VSB modulation), or 0.50 for analog (VSB- + AM+NTSC) transmissions. For further information on these parameters, see: _h_t_t_p_:_/_/_f_l_a_t_t_o_p_._i_t_s_._b_l_d_r_d_o_c_._g_o_v_/_i_t_m_._h_t_m_l and @@ -236,12 +284,12 @@ CCIITTYY LLOOCCAATTIIOONN FFIILLEESS points of interest may be imported and plotted on topo- graphic maps generated by SSPPLLAATT!!. SSPPLLAATT!! imports the names of cities and locations from ASCII files containing - the location's name, the location's latitude, and the - location's longitude. Each field is separated by a comma. - Each record is separated by a single line feed character. - As was the case with the _._q_t_h files, latitude and longi- - tude information may be entered in either decimal or - degree, minute, second (DMS) format. + the location of interest's name, latitude, and longitude. + Each field is separated by a comma. Each record is sepa- + rated by a single line feed character. As was the case + with the _._q_t_h files, latitude and longitude information + may be entered in either decimal or degree, minute, second + (DMS) format. For example (_c_i_t_i_e_s_._d_a_t): @@ -257,13 +305,13 @@ CCIITTYY LLOOCCAATTIIOONN FFIILLEESS at a time, and there is no limit to the size of these files. SSPPLLAATT!! reads city data on a "first come/first served" basis, and plots only those locations whose anno- - tations do not conflict with annotations of locations - plotted earlier during SSPPLLAATT's execution. This behavior - minimizes clutter in SSPPLLAATT!! generated topographic maps, - but also mandates that important locations be placed - toward the beginning of the first city data file, and - disposable locations be positioned further down the list - or in subsequent data files. + tations do not conflict with annotations of locations read + earlier in the current city data file, or in previous + files. This behavior minimizes clutter in SSPPLLAATT!! gener- + ated topographic maps, but also mandates that important + locations be placed toward the beginning of the first city + data file, and locations less important be positioned fur- + ther down the list or in subsequent data files. City data files may be generated manually using any text editor, imported from other sources, or derived from data @@ -279,141 +327,175 @@ CCAARRTTOOGGRRAAPPHHIICC BBOOUUNNDDAARRYY DDAATTAA FFI graphic maps generated by SSPPLLAATT!!. Such data must be of the form of ARC/INFO Ungenerate (ASCII Format) Metadata Cartographic Boundary Files, and are available from the - U.S. Census Bureau via the Internet at: _h_t_t_p_:_/_/_w_w_w_._c_e_n_- - _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_c_o_2_0_0_0_._h_t_m_l_#_a_s_c_i_i and _h_t_t_p_:_/_/_w_w_w_._c_e_n_- - _s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_p_l_2_0_0_0_._h_t_m_l_#_a_s_c_i_i. A total of five - separate cartographic boundary files may be imported at a - time. It is not necessary to import state boundaries if - county boundaries have already been imported. + U.S. Census Bureau via the Internet at: + _h_t_t_p_:_/_/_w_w_w_._c_e_n_s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_c_o_2_0_0_0_._h_t_m_l_#_a_s_c_i_i and + _h_t_t_p_:_/_/_w_w_w_._c_e_n_s_u_s_._g_o_v_/_g_e_o_/_w_w_w_/_c_o_b_/_p_l_2_0_0_0_._h_t_m_l_#_a_s_c_i_i. A + total of five separate cartographic boundary files may be + imported at a time. It is not necessary to import state + boundaries if county boundaries have already been + imported. PPRROOGGRRAAMM OOPPEERRAATTIIOONN - SSPPLLAATT!! is invoked via the command-line using a series of - switches and arguments. Since SSPPLLAATT!! is a CPU and memory - intensive application, this type of interface minimizes - overhead and lends itself well to scripted (batch) opera- + SSPPLLAATT!! is invoked via the command-line using a series of + switches and arguments. Since SSPPLLAATT!! is a CPU and memory + intensive application, this type of interface minimizes + overhead and lends itself well to scripted (batch) opera- tions. SSPPLLAATT!!'s CPU and memory scheduling priority may be modified through the use of the Unix nniiccee command. The number and type of switches passed to SSPPLLAATT!! determine - its mode of operation and method of output data genera- - tion. Nearly all of SSPPLLAATT!!'s switches may be cascaded in + its mode of operation and method of output data genera- + tion. Nearly all of SSPPLLAATT!!'s switches may be cascaded in any order on the command line when invoking the program. + SSPPLLAATT!! operates in two distinct modes: _p_o_i_n_t_-_t_o_-_p_o_i_n_t + _m_o_d_e, and _a_r_e_a _p_r_e_d_i_c_t_i_o_n _m_o_d_e. Either a line-of-sight + (LOS) or Longley-Rice Irregular Terrain (ITM) propagation + model may be invoked by the user. True Earth, four-thirds + Earth, or any other user-defined Earth radius may be spec- + ified when performing line-of-sight analysis. + PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS SSPPLLAATT!! may be used to perform line-of-sight terrain analy- sis between two specified site locations. For example: splat -t tx_site.qth -r rx_site.qth - invokes a terrain analysis between the transmitter speci- - fied in _t_x___s_i_t_e_._q_t_h and receiver specified in _r_x___s_i_t_e_._q_t_h, - and writes a SSPPLLAATT!! Obstruction Report to the current - working directory. The report contains details of the - transmitter and receiver sites, and identifies the loca- - tion of any obstructions detected during the analysis. If - an obstruction can be cleared by raising the receive - antenna to a greater altitude, SSPPLLAATT!! will indicate the - minimum antenna height required for a line-of-sight path - to exist between the transmitter and receiver locations - specified. If the antenna must be raised a significant - amount, this determination may take some time. Note that - the results provided are the _m_i_n_i_m_u_m necessary for a line- - of-sight path to exist, and do not take Fresnel zone - clearance requirements into consideration. + invokes a line-of-sight terrain analysis between the + transmitter specified in _t_x___s_i_t_e_._q_t_h and receiver speci- + fied in _r_x___s_i_t_e_._q_t_h using a True Earth radius model, and + writes a SSPPLLAATT!! Obstruction Report to the current working + directory. The report contains details of the transmitter + and receiver sites, and identifies the location of any + obstructions detected along the line-of-sight path. If an + obstruction can be cleared by raising the receive antenna + to a greater altitude, SSPPLLAATT!! will indicate the minimum + antenna height required for a line-of-sight path to exist + between the transmitter and receiver locations specified. + Note that imperial units (miles, feet) are specified + unless the _-_m_e_t_r_i_c switch is added to SSPPLLAATT!!'s command + line options: + + splat -t tx_site.qth -r rx_site.qth -metric + + If the antenna must be raised a significant amount, this + determination may take a few moments. Note that the + results provided are the _m_i_n_i_m_u_m necessary for a line-of- + sight path to exist, and in the case of this simple exam- + ple, do not take Fresnel zone clearance requirements into + consideration. _q_t_h extensions are assumed by SSPPLLAATT!! for QTH files, and - are optional when invoking the program. SSPPLLAATT!! automati- - cally reads all SPLAT Data Files necessary to conduct the - terrain analysis between the sites specified. SSPPLLAATT!! - searches for the needed SDF files in the current working - directory first. If the needed files are not found, - SSPPLLAATT!! then searches in the path specified by the _-_d - command-line switch: + are optional when specifying -t and -r arguments on the + command-line. SSPPLLAATT!! automatically reads all SPLAT Data + Files necessary to conduct the terrain analysis between + the sites specified. SSPPLLAATT!! searches for the required + SDF files in the current working directory first. If the + needed files are not found, SSPPLLAATT!! then searches in the + path specified by the _-_d command-line switch: splat -t tx_site -r rx_site -d /cdrom/sdf/ An external directory path may be specified by placing a ".splat_path" file under the user's home directory. This - file must contain the full directory path to the last - resort location of all the SDF files. The path in the - _$_H_O_M_E_/_._s_p_l_a_t___p_a_t_h file must be of the form of a single - line of ASCII text: + file must contain the full directory path of last resort + to all the SDF files. The path in the _$_H_O_M_E_/_._s_p_l_a_t___p_a_t_h + file must be of the form of a single line of ASCII text: /opt/splat/sdf/ and can be generated using any text editor. - A graph of the terrain profile between the receiver and - transmitter locations as a function of distance from the + A graph of the terrain profile between the receiver and + transmitter locations as a function of distance from the receiver can be generated by adding the _-_p switch: - splat -t tx_site -r rx_site -p terrain_profile.gif + splat -t tx_site -r rx_site -p terrain_profile.png - SSPPLLAATT!! invokes ggnnuupplloott when generating graphs. The file- - name extension specified to SSPPLLAATT!! determines the format - of the graph produced. _._g_i_f will produce a 640x480 color - GIF graphic file, while _._p_s or _._p_o_s_t_s_c_r_i_p_t will produce - postscript output. Output in formats such as PNG, Adobe - Illustrator, AutoCAD dxf, LaTeX, and many others are + SSPPLLAATT!! invokes ggnnuupplloott when generating graphs. The file- + name extension specified to SSPPLLAATT!! determines the format + of the graph produced. _._p_n_g will produce a 640x480 color + PNG graphic file, while _._p_s or _._p_o_s_t_s_c_r_i_p_t will produce + postscript output. Output in formats such as GIF, Adobe + Illustrator, AutoCAD dxf, LaTeX, and many others are available. Please consult ggnnuupplloott, and ggnnuupplloott's documen- tation for details on all the supported output formats. A graph of elevations subtended by the terrain between the - receiver and transmitter as a function of distance from + receiver and transmitter as a function of distance from the receiver can be generated by using the _-_e switch: - splat -t tx_site -r rx_site -e elevation_profile.gif + splat -t tx_site -r rx_site -e elevation_profile.png - The graph produced using this switch illustrates the ele- - vation and depression angles resulting from the terrain - between the receiver's location and the transmitter site + The graph produced using this switch illustrates the ele- + vation and depression angles resulting from the terrain + between the receiver's location and the transmitter site from the perspective of the receiver's location. A second - trace is plotted between the left side of the graph + trace is plotted between the left side of the graph (receiver's location) and the location of the transmitting - antenna on the right. This trace illustrates the eleva- - tion angle required for a line-of-sight path to exist - between the receiver and transmitter locations. If the + antenna on the right. This trace illustrates the eleva- + tion angle required for a line-of-sight path to exist + between the receiver and transmitter locations. If the trace intersects the elevation profile at any point on the - graph, then this is an indication that a line-of-sight - path does not exist under the conditions given, and the + graph, then this is an indication that a line-of-sight + path does not exist under the conditions given, and the obstructions can be clearly identified on the graph at the point(s) of intersection. - A graph illustrating terrain height referenced to a line- - of-sight path between the transmitter and receiver may be + A graph illustrating terrain height referenced to a line- + of-sight path between the transmitter and receiver may be generated using the _-_h switch: - splat -t tx_site -r rx_site -h height_profile.gif + splat -t tx_site -r rx_site -h height_profile.png + + A terrain height plot normalized to the transmitter and + receiver antenna heights can be obtained using the _-_H + switch: + + splat -t tx_site -r rx_site -H normalized_height_pro- + file.png + + A contour of the Earth's curvature is also plotted in this + mode. - The Earth's curvature is clearly evident when plotting - height profiles. + The first Fresnel Zone, and 60% of the first Fresnel Zone + can be added to height profile graphs by adding the _-_f + switch, and specifying a frequency (in MHz) at which the + Fresnel Zone should be modeled: + + splat -t tx_site -r rx_site -f 439.250 -H normal- + ized_height_profile.png A graph showing Longley-Rice path loss may be plotted using the _-_l switch: - splat -t tx_site -r rx_site -l path_loss_profile.gif + splat -t tx_site -r rx_site -l path_loss_profile.png + + As before, adding the _-_m_e_t_r_i_c switch forces the graphs to + be plotted using metric units of measure. - When performing path loss profiles, a Longley-Rice Model - Path Loss Report is generated by SSPPLLAATT!! in the form of a + When performing path loss profiles, a Longley-Rice Model + Path Loss Report is generated by SSPPLLAATT!! in the form of a text file with a _._l_r_o filename extension. The report con- - tains bearings and distances between the transmitter and - receiver, as well as the Longley-Rice path loss for vari- - ous distances between the transmitter and receiver loca- - tions. The mode of propagation for points along the path - are given as _L_i_n_e_-_o_f_-_S_i_g_h_t, _S_i_n_g_l_e _H_o_r_i_z_o_n, _D_o_u_b_l_e _H_o_r_i_- + tains bearings and distances between the transmitter and + receiver, as well as the Longley-Rice path loss for vari- + ous distances between the transmitter and receiver loca- + tions. The mode of propagation for points along the path + are given as _L_i_n_e_-_o_f_-_S_i_g_h_t, _S_i_n_g_l_e _H_o_r_i_z_o_n, _D_o_u_b_l_e _H_o_r_i_- _z_o_n, _D_i_f_f_r_a_c_t_i_o_n _D_o_m_i_n_a_n_t, and _T_r_o_p_o_s_c_a_t_t_e_r _D_o_m_i_n_a_n_t. - To determine the signal-to-noise (SNR) ratio at remote - location where random Johnson (thermal) noise is the pri- + To determine the signal-to-noise (SNR) ratio at remote + location where random Johnson (thermal) noise is the pri- mary limiting factor in reception: _S_N_R=_T-_N_J-_L+_G-_N_F - where TT is the ERP of the transmitter in dBW, NNJJ is John- - son Noise in dBW (-136 dBW for a 6 MHz TV channel), LL is - the path loss provided by SSPPLLAATT!! in dB (as a _p_o_s_i_t_i_v_e num- - ber), GG is the receive antenna gain in dB over isotropic, - and NNFF is the receiver noise figure in dB. + where TT is the ERP of the transmitter in dBW in the direc- + tion of the receiver, NNJJ is Johnson Noise in dBW (-136 dBW + for a 6 MHz television channel), LL is the path loss pro- + vided by SSPPLLAATT!! in dB (as a _p_o_s_i_t_i_v_e number), GG is the + receive antenna gain in dB over isotropic, and NNFF is the + receiver noise figure in dB. TT may be computed as follows: @@ -431,8 +513,8 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS _S_i_g_n_a_l__M_a_r_g_i_n=_S_N_R-_S - where SS is the minimum desired SNR ratio (15.5 dB for ATSC - DTV, 42 dB for analog NTSC television). + where SS is the minimum required SNR ratio (15.5 dB for + ATSC (8-VSB) DTV, 42 dB for analog NTSC television). A topographic map may be generated by SSPPLLAATT!! to visualize the path between the transmitter and receiver sites from @@ -444,19 +526,7 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS only exception to this is sea-level, which is represented using the color blue. - SSPPLLAATT!! generated topographic maps are 24-bit TrueColor - Portable PixMap (PPM) images. They may be viewed, edited, - or converted to other graphic formats by popular image - viewing applications such as xxvv, TThhee GGIIMMPP, IImmaaggeeMMaaggiicckk, - and XXPPaaiinntt. PNG format is highly recommended for lossless - compressed storage of SSPPLLAATT!! generated topographic output - files. An excellent command-line utility capable of con- - verting SSPPLLAATT!! PPM graphic files to PNG files is wwppnngg, and - is available at: - _h_t_t_p_:_/_/_w_w_w_._l_i_b_p_n_g_._o_r_g_/_p_u_b_/_p_n_g_/_b_o_o_k_/_s_o_u_r_c_e_s_._h_t_m_l. As a - last resort, PPM files may be compressed using the bzip2 - utility, and read directly by TThhee GGIIMMPP in this format. - Topographic output is specified using the _-_o switch: + Topographic output is invoked using the _-_o switch: splat -t tx_site -r rx_site -o topo_map.ppm @@ -492,7 +562,7 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS a time for analysis: splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p - profile.gif + profile.png In this example, four separate terrain profiles and obstruction reports will be generated by SSPPLLAATT!!. A single @@ -506,92 +576,81 @@ PPOOIINNTT--TTOO--PPOOIINNTT AANNAALLYYSSIISS receiver will be in violet, and the path between the fourth transmitter and the receiver will be in sienna. -DDEETTEERRMMIINNIINNGG RREEGGIIOONNAALL CCOOVVEERRAAGGEE + SSPPLLAATT!! generated topographic maps are 24-bit TrueColor + Portable PixMap (PPM) images. They may be viewed, edited, + or converted to other graphic formats by popular image + viewing applications such as xxvv, TThhee GGIIMMPP, IImmaaggeeMMaaggiicckk, + and XXPPaaiinntt. PNG format is highly recommended for lossless + compressed storage of SSPPLLAATT!! generated topographic output + files. IImmaaggeeMMaaggiicckk's command-line utility easily converts + SSPPLLAATT!!'s PPM files to PNG format: + + convert splat_map.ppm splat_map.png + + Another excellent PPM to PNG command-line utility is + available at: + _h_t_t_p_:_/_/_w_w_w_._l_i_b_p_n_g_._o_r_g_/_p_u_b_/_p_n_g_/_b_o_o_k_/_s_o_u_r_c_e_s_._h_t_m_l. As a + last resort, PPM files may be compressed using the bzip2 + utility, and read directly by TThhee GGIIMMPP in this format. + +RREEGGIIOONNAALL CCOOVVEERRAAGGEE AANNAALLYYSSIISS SSPPLLAATT!! can analyze a transmitter or repeater site, or net- - work of sites, and predict the regional coverage for each + work of sites, and predict the regional coverage for each site specified. In this mode, SSPPLLAATT!! can generate a topo- - graphic map displaying the geometric line-of-sight cover- - age area of the sites based on the location of each site - and the height of receive antenna wishing to communicate + graphic map displaying the geometric line-of-sight cover- + age area of the sites based on the location of each site + and the height of receive antenna wishing to communicate with the site in question. SSPPLLAATT!! switches from point-to- - point analysis mode to area prediction mode when the _-_c + point analysis mode to area prediction mode when the _-_c switch is invoked as follows: - splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o + splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o tx_coverage In this example, SSPPLLAATT!! generates a topographic map called - _t_x___c_o_v_e_r_a_g_e_._p_p_m that illustrates the predicted line-of- - sight regional coverage of _t_x___s_i_t_e to receiving locations - having antennas 30.0 feet above ground level (AGL). The - contents of _c_i_t_i_e_s_._d_a_t are plotted on the map, as are the - cartographic boundaries contained in the file + _t_x___c_o_v_e_r_a_g_e_._p_p_m that illustrates the predicted line-of- + sight regional coverage of _t_x___s_i_t_e to receiving locations + having antennas 30.0 feet above ground level (AGL). If + the _-_m_e_t_r_i_c switch is used, the argument following the _-_c + switch is interpreted as being in meters, rather than in + feet. The contents of _c_i_t_i_e_s_._d_a_t are plotted on the map, + as are the cartographic boundaries contained in the file _c_o_3_4___d_0_0_._d_a_t. - When plotting line-of-sight paths and areas of regional - coverage, SSPPLLAATT!! by default does not account for the - effects of atmospheric bending. However, this behavior - may be modified by using the Earth radius multiplier (_-_m) + When plotting line-of-sight paths and areas of regional + coverage, SSPPLLAATT!! by default does not account for the + effects of atmospheric bending. However, this behavior + may be modified by using the Earth radius multiplier (_-_m) switch: - splat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b coun- + splat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b coun- ties.dat -o map.ppm - An earth radius multiplier of 1.333 instructs SSPPLLAATT!! to + An earth radius multiplier of 1.333 instructs SSPPLLAATT!! to use the "four-thirds earth" model for line-of-sight propa- - gation analysis. Any appropriate earth radius multiplier + gation analysis. Any appropriate earth radius multiplier may be selected by the user. - When invoked in area prediction mode, SSPPLLAATT!! generates a + When invoked in area prediction mode, SSPPLLAATT!! generates a site report for each station analyzed. SSPPLLAATT!! site reports contain details of the site's geographic location, - its height above mean sea level, the antenna's height - above mean sea level, the antenna's height above average - terrain, and the height of the average terrain calculated - in the directions of 0, 45, 90, 135, 180, 225, 270, and + its height above mean sea level, the antenna's height + above mean sea level, the antenna's height above average + terrain, and the height of the average terrain calculated + in the directions of 0, 45, 90, 135, 180, 225, 270, and 315 degrees azimuth. - If the _-_c switch is replaced by a _-_L switch, a Longley- - Rice path loss map for a transmitter site may be gener- - ated: - - splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o - path_loss_map - - In this mode, SSPPLLAATT!! generates a multi-color map illus- - trating expected signal levels (path loss) in areas sur- - rounding the transmitter site. A legend at the bottom of - the map correlates each color with a specific path loss - level in decibels. Since Longley-Rice area prediction map - generation is very CPU intensive, provision for limiting - the analysis range is provided by the _-_R switch. The - argument must be given in miles. If a range wider than - the generated topographic map is specified, SSPPLLAATT!! will - perform Longley-Rice path loss calculations between all - four corners of the area prediction map. - - The _-_d_b switch allows a constraint to be placed on the - maximum path loss region plotted on the map. A path loss - between 80 and 230 dB may be specified using this switch. - For example, if a path loss beyond -140 dB is irrelevant - to the survey being conducted, SSPPLLAATT!!'s path loss plot can - be constrained to the region bounded by the 140 dB attenu- - ation contour as follows: - - splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db - 140 -o plot.ppm - - -DDEETTEERRMMIINNIINNGG MMUULLTTIIPPLLEE RREEGGIIOONNSS OOFF CCOOVVEERRAAGGEE - SSPPLLAATT!! can also display line-of-sight coverage areas for - as many as four separate transmitter sites on a common +DDEETTEERRMMIINNIINNGG MMUULLTTIIPPLLEE RREEGGIIOONNSS OOFF LLOOSS CCOOVVEERRAAGGEE + SSPPLLAATT!! can also display line-of-sight coverage areas for + as many as four separate transmitter sites on a common topographic map. For example: - splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm + splat -t site1 site2 site3 site4 -c 10.0 -metric -o net- + work.ppm plots the regional line-of-sight coverage of site1, site2, - site3, and site4 based on a receive antenna located 30.0 - feet above ground level. A topographic map is then + site3, and site4 based on a receive antenna located 10.0 + meters above ground level. A topographic map is then written to the file _n_e_t_w_o_r_k_._p_p_m. The line-of-sight cover- age area of the transmitters are plotted as follows in the colors indicated (along with their corresponding RGB val- @@ -622,14 +681,244 @@ DDEETTEERRMMIINNIINNGG MMUULLTTIIPPLLEE RREEGGIIOONNSS from as many as four separate locations on a single tower may be generated by SSPPLLAATT!!. -TTOOPPOOGGRRAAPPHHIICC MMAAPP GGEENNEERRAATTIIOONN - In certain situations, it may be desirable to generate a - topographic map of a region without plotting coverage +LLOONNGGLLEEYY--RRIICCEE PPAATTHH LLOOSSSS AANNAALLYYSSIISS + If the _-_c switch is replaced by a _-_L switch, a Longley- + Rice path loss map for a transmitter site may be gener- + ated: + + splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o + path_loss_map + + In this mode, SSPPLLAATT!! generates a multi-color map illus- + trating expected signal levels (path loss) in areas sur- + rounding the transmitter site. A legend at the bottom of + the map correlates each color with a specific path loss + range in decibels. + + The Longley-Rice analysis range may be modified to a user- + specific value using the _-_R switch. The argument must be + given in miles (or kilometers if the _-_m_e_t_r_i_c switch is + used). If a range wider than the generated topographic + map is specified, SSPPLLAATT!! will perform Longley-Rice path + loss calculations between all four corners of the area + prediction map. + + The _-_d_b switch allows a constraint to be placed on the + maximum path loss region plotted on the map. A maximum + path loss between 80 and 230 dB may be specified using + this switch. For example, if a path loss beyond -140 dB + is irrelevant to the survey being conducted, SSPPLLAATT!!'s path + loss plot can be constrained to the region bounded by the + 140 dB attenuation contour as follows: + + splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db + 140 -o plot.ppm + + +AANNTTEENNNNAA RRAADDIIAATTIIOONN PPAATTTTEERRNN PPAARRAAMMEETTEERRSS + Normalized field voltage patterns for a transmitting + antenna's horizontal and vertical planes are imported + automatically into SSPPLLAATT!! when a Longley-Rice coverage + analysis is performed. Antenna pattern data is read from + a pair of files having the same base name as the transmit- + ter and LRP files, but with _._a_z and _._e_l extensions for + azimuth and elevation pattern files, respectively. Speci- + fications regarding pattern rotation (if any) and + mechanical beam tilt and tilt direction (if any) are also + contained within SSPPLLAATT!! antenna pattern files. + + For example, the first few lines of a SSPPLLAATT!! azimuth pat- + tern file might appear as follows (_k_v_e_a_._a_z): + + 183.0 + 0 0.8950590 + 1 0.8966406 + 2 0.8981447 + 3 0.8995795 + 4 0.9009535 + 5 0.9022749 + 6 0.9035517 + 7 0.9047923 + 8 0.9060051 + + The first line of the _._a_z file specifies the amount of + azimuthal pattern rotation (measured clockwise in degrees + from True North) to be applied by SSPPLLAATT!! to the data con- + tained in the _._a_z file. This is followed by azimuth head- + ings (0 to 360 degrees) and their associated normalized + field patterns (0.000 to 1.000) separated by whitespace. + + The structure of SSPPLLAATT!! elevation pattern files is + slightly different. The first line of the _._e_l file speci- + fies the amount of mechanical beam tilt applied to the + antenna. Note that a _d_o_w_n_w_a_r_d _t_i_l_t (below the horizon) is + expressed as a _p_o_s_i_t_i_v_e _a_n_g_l_e, while an _u_p_w_a_r_d _t_i_l_t (above + the horizon) is expressed as a _n_e_g_a_t_i_v_e _a_n_g_l_e. This data + is followed by the azimuthal direction of the tilt, sepa- + rated by whitespace. + + The remainder of the file consists of elevation angles and + their corresponding normalized voltage radiation pattern + (0.000 to 1.000) values separated by whitespace. Eleva- + tion angles must be specified over a -10.0 to +90.0 degree + range. As was the convention with mechanical beamtilt, + _n_e_g_a_t_i_v_e _e_l_e_v_a_t_i_o_n _a_n_g_l_e_s are used to represent elevations + _a_b_o_v_e _t_h_e _h_o_r_i_z_o_n, while _p_o_s_i_t_i_v_e _a_n_g_l_e_s represents eleva- + tions _b_e_l_o_w _t_h_e _h_o_r_i_z_o_n. + + For example, the first few lines a SSPPLLAATT!! elevation pat- + tern file might appear as follows (_k_v_e_a_._e_l): + + 1.1 130.0 + -10.0 0.172 + -9.5 0.109 + -9.0 0.115 + -8.5 0.155 + -8.0 0.157 + -7.5 0.104 + -7.0 0.029 + -6.5 0.109 + -6.0 0.185 + + In this example, the antenna is mechanically tilted down- + ward 1.1 degrees towards an azimuth of 130.0 degrees. + + For best results, the resolution of azimuth pattern data + should be specified to the nearest degree azimuth, and + elevation pattern data resolution should be specified to + the nearest 0.01 degrees. If the pattern data specified + does not reach this level of resolution, SSPPLLAATT!! will + interpolate the values provided to determine the data at + the required resolution, although this may result in a + loss in accuracy. + + +IIMMPPOORRTTIINNGG AANNDD EEXXPPOORRTTIINNGG RREEGGIIOONNAALL PPAATTHH LLOOSSSS CCOONNTTOOUURR DDAATTAA + Performing a Longley-Rice coverage analysis can be a very + time consuming process, especially if the analysis is + repeated repeatedly to discover what effects changes to + the antenna radiation patterns make to the predicted cov- + erage area. + + This process can be expedited by exporting the Longley- + Rice regional path loss contour data to an output file, + modifying the path loss data externally to incorporate + antenna pattern effects, and then importing the modified + path loss data back into SSPPLLAATT!! to rapidly produce a + revised path loss map. + + For example, a path loss output file can be generated by + SSPPLLAATT!! for a receive site 30 feet above ground level over + a 50 mile radius surrounding a transmitter site to a maxi- + mum path loss of 140 dB using the following syntax: + + splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat + + SSPPLLAATT!! path loss output files often exceed 100 megabytes + in size. They contain information relating to the bound- + aries of region they describe followed by latitudes + (degrees North), longitudes (degrees West), azimuths, ele- + vations (to the first obstruction), and path loss figures + (dB) for a series of specific points that comprise the + region surrounding the transmitter site. The first few + lines of a SSPPLLAATT!! path loss output file take on the fol- + lowing appearance (_p_a_t_h_l_o_s_s_._d_a_t): + + 119, 117 ; max_west, min_west + 35, 33 ; max_north, min_north + 34.2265434, 118.0631104, 48.171, -37.461, 67.70 + 34.2270355, 118.0624390, 48.262, -26.212, 73.72 + 34.2280197, 118.0611038, 48.269, -14.951, 79.74 + 34.2285156, 118.0604401, 48.207, -11.351, 81.68 + 34.2290077, 118.0597687, 48.240, -10.518, 83.26 + 34.2294998, 118.0591049, 48.225, 23.201, 84.60 + 34.2304878, 118.0577698, 48.213, 15.769, 137.84 + 34.2309799, 118.0570984, 48.234, 15.965, 151.54 + 34.2314720, 118.0564346, 48.224, 16.520, 149.45 + 34.2319679, 118.0557632, 48.223, 15.588, 151.61 + 34.2329521, 118.0544281, 48.230, 13.889, 135.45 + 34.2334442, 118.0537643, 48.223, 11.693, 137.37 + 34.2339401, 118.0530930, 48.222, 14.050, 126.32 + 34.2344322, 118.0524292, 48.216, 16.274, 156.28 + 34.2354164, 118.0510941, 48.222, 15.058, 152.65 + 34.2359123, 118.0504227, 48.221, 16.215, 158.57 + 34.2364044, 118.0497589, 48.216, 15.024, 157.30 + 34.2368965, 118.0490875, 48.225, 17.184, 156.36 + + It is not uncommon for SSPPLLAATT!! path loss files to contain + as many as 3 million or more lines of data. Comments can + be placed in the file if they are proceeded by a semicolon + character. The vviimm text editor has proven capable of + editing files of this size. + + Note as was the case in the antenna pattern files, nega- + tive elevation angles refer to upward tilt (above the + horizon), while positive angles refer to downward tilt + (below the horizon). These angles refer to the elevation + to the receiving antenna at the height above ground level + specified using the _-_L switch _i_f the path between trans- + mitter and receiver is unobstructed. If the path between + the transmitter and receiver is obstructed, then the ele- + vation angle to the first obstruction is returned by + SSPPLLAATT!!. This is because the Longley-Rice model considers + the energy reaching a distant point over an obstructed + path as a derivative of the energy scattered from the top + of the first obstruction, only. Since energy cannot reach + the obstructed location directly, the actual elevation + angle to that point is irrelevant. + + When modifying SSPPLLAATT!! path loss files to reflect antenna + pattern data, _o_n_l_y _t_h_e _l_a_s_t _c_o_l_u_m_n _(_p_a_t_h _l_o_s_s_) should be + amended to reflect the antenna's normalized gain at the + azimuth and elevation angles specified in the file. (At + this time, programs and scripts capable of performing this + operation are left as an exercise for the user.) + + Modified path loss maps can be imported back into SSPPLLAATT!! + for generating revised coverage maps: + + splat -t kvea -pli pathloss.dat -s city.dat -b county.dat + -o map.ppm + + SSPPLLAATT!! path loss files can also be used for conducting + coverage or interference studies outside of SSPPLLAATT!!. + +UUSSEERR--DDEEFFIINNEEDD TTEERRRRAAIINN IINNPPUUTT FFIILLEESS + A user-defined terrain file is a user-generated text file + containing latitudes, longitudes, and heights above ground + level of specific terrain features believed to be of + importance to the SSPPLLAATT!! analysis being conducted, but + noticeably absent from the SDF files being used. A user- + defined terrain file is imported into a SSPPLLAATT!! analysis + using the _-_u_d_t switch: + + splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm + + A user-defined terrain file has the following appearance + and structure: + + 40.32180556, 74.1325, 100.0 meters + 40.321805, 74.1315, 300.0 + 40.3218055, 74.1305, 100.0 meters + + Terrain height is interpreted as being described in feet + above ground level unless followed by the word _m_e_t_e_r_s, and + is added _o_n _t_o_p _o_f the terrain specified in the SDF data + for the locations specified. Be aware that each user- + defined terrain feature specified will be interpreted as + being 3-arc seconds in both latitude and longitude. Fea- + tures described in the user-defined terrain file that + overlap previously defined features in the file are + ignored by SSPPLLAATT!!. + +SSIIMMPPLLEE TTOOPPOOGGRRAAPPHHIICC MMAAPP GGEENNEERRAATTIIOONN + In certain situations it may be desirable to generate a + topographic map of a region without plotting coverage areas, line-of-sight paths, or generating obstruction - reports. There are several ways of doing this. If one - wishes to generate a topographic map illustrating the - location of a transmitter and receiver site along with a - brief text report describing the locations and distances + reports. There are several ways of doing this. If one + wishes to generate a topographic map illustrating the + location of a transmitter and receiver site along with a + brief text report describing the locations and distances between the sites, the _-_n switch should be invoked as fol- lows: @@ -639,10 +928,57 @@ TTOOPPOOGGRRAAPPHHIICC MMAAPP GGEENNEERRAATTIIOONN splat -t tx_site -r rx_site -N -o topo_map.ppm - If the _-_o switch and output filename are omitted when - using either the _-_n or _-_N switches, output is written to a - file named _m_a_p_._p_p_m in the current working directory by - default. + If a topographic map centered about a single site out to a + minimum specified radius is desired instead, a command + similar to the following can be used: + + splat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o + topo_map.ppm + + where -R specifies the minimum radius of the map in miles + (or kilometers if the _-_m_e_t_r_i_c switch is used). + + If the _-_o switch and output filename are omitted in these + operations, topographic output is written to a file named + _m_a_p_._p_p_m in the current working directory by default. + +GGEEOORREEFFEERREENNCCEE FFIILLEE GGEENNEERRAATTIIOONN + Topographic, coverage (_-_c), and path loss contour (_-_L) + maps generated by SSPPLLAATT!! may be imported into XXaassttiirr (X + Amateur Station Tracking and Information Reporting) soft- + ware by generating a georeference file using SSPPLLAATT!!'s _-_g_e_o + switch: + + splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o + map.ppm + + The georeference file generated will have the same base + name as the _-_o file specified, but have a _._g_e_o extension, + and permit proper interpretation and display of SSPPLLAATT!!'s + .ppm graphics in XXaassttiirr software. + +GGOOOOGGLLEE MMAAPP KKMMLL FFIILLEE GGEENNEERRAATTIIOONN + Keyhole Markup Language files compatible with GGooooggllee EEaarrtthh + may be generated by SSPPLLAATT!! when performing point-to-point + analyses by invoking the _-_k_m_l switch: + + splat -t wnjt -r kd2bd -kml + + The KML file generated will have the same filename struc- + ture as an Obstruction Report for the transmitter and + receiver site names given, except it will carry a _._k_m_l + extension. + + Once loaded into GGooooggllee EEaarrtthh (File --> Open), the KML + file will annotate the map display with the names of the + transmitter and receiver site locations. The viewpoint of + the image will be from the position of the transmitter + site looking towards the location of the receiver. The + point-to-point path between the sites will be displayed as + a white line while the RF line-of-sight path will be dis- + played in green. GGooooggllee EEaarrtthh's navigation tools allow + the user to "fly" around the path, identify landmarks, + roads, and other featured content. DDEETTEERRMMIINNAATTIIOONN OOFF AANNTTEENNNNAA HHEEIIGGHHTT AABBOOVVEE AAVVEERRAAGGEE TTEERRRRAAIINN SSPPLLAATT!! determines antenna height above average terrain @@ -655,66 +991,59 @@ DDEETTEERRMMIINNAATTIIOONN OOFF AANNTTEENNNNAA HHEEIIG lie entirely over water or over land outside the United States (areas for which no USGS topography data is avail- able), then those radials are omitted from the calculation - of average terrain. If part of a radial extends over a - body of water or over land outside the United States, then - only that part of the radial lying over United States land - is used in the determination of average terrain. - - Note that SRTM elevation data, unlike older 3-arc second - USGS data, extends beyond the borders of the United - States. Therefore, HAAT results may not be in full com- + of average terrain. + + Note that SRTM elevation data, unlike older 3-arc second + USGS data, extends beyond the borders of the United + States. Therefore, HAAT results may not be in full com- pliance with FCC Part 73.313(d) in areas along the borders - of the United States if the SDF files used by SSPPLLAATT!! are + of the United States if the SDF files used by SSPPLLAATT!! are SRTM-derived. - When performing point-to-point terrain analysis, SSPPLLAATT!! - determines the antenna height above average terrain only - if enough topographic data has already been loaded by the - program to perform the point-to-point analysis. In most + When performing point-to-point terrain analysis, SSPPLLAATT!! + determines the antenna height above average terrain only + if enough topographic data has already been loaded by the + program to perform the point-to-point analysis. In most cases, this will be true, unless the site in question does - not lie within 10 miles of the boundary of the topography + not lie within 10 miles of the boundary of the topography data in memory. - When performing area prediction analysis, enough topogra- - phy data is normally loaded by SSPPLLAATT!! to perform average - terrain calculations. Under such conditions, SSPPLLAATT!! will - provide the antenna height above average terrain as well - as the average terrain above mean sea level for azimuths - of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, and - include such information in the site report generated. If + When performing area prediction analysis, enough topogra- + phy data is normally loaded by SSPPLLAATT!! to perform average + terrain calculations. Under such conditions, SSPPLLAATT!! will + provide the antenna height above average terrain as well + as the average terrain above mean sea level for azimuths + of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, and + include such information in the generated site report. If one or more of the eight radials surveyed fall over water, or over regions for which no SDF data is available, SSPPLLAATT!! reports _N_o _T_e_r_r_a_i_n for the radial paths affected. RREESSTTRRIICCTTIINNGG TTHHEE MMAAXXIIMMUUMM SSIIZZEE OOFF AANN AANNAALLYYSSIISS RREEGGIIOONN - SSPPLLAATT!! reads SDF files as needed into a series of memory - "slots" within the structure of the program. Each "slot" - holds one SDF file representing a one degree by one degree - region of terrain. A _#_d_e_f_i_n_e _M_A_X_S_L_O_T_S statement in the - first several lines of _s_p_l_a_t_._c_p_p sets the maximum number - of "slots" available for topography data. It also sets - the maximum size of the topographic maps generated by - SSPPLLAATT!!. MAXSLOTS is set to 9 by default. If SSPPLLAATT!! pro- - duces a segmentation fault on start-up with this default, - it is an indication that not enough RAM and/or virtual - memory (swap space) is available to run SSPPLLAATT!! with this - number of MAXSLOTS. In situations where available memory - is low, MAXSLOTS may be reduced to 4 with the understand- - ing that this will greatly limit the maximum region SSPPLLAATT!! - will be able to analyze. If 118 megabytes or more of - total memory (swap space plus RAM) is available, then - MAXSLOTS may be increased to 16. This will permit opera- - tion over a 4-degree by 4-degree region, which is suffi- - cient for single antenna heights in excess of 10,000 feet - above mean sea level, or point-to-point distances of over - 1000 miles. + SSPPLLAATT!! reads SDF files as needed into a series of memory + pages or "slots" within the structure of the program. + Each "slot" holds one SDF file representing a one degree + by one degree region of terrain. A _#_d_e_f_i_n_e _M_A_X_S_L_O_T_S + statement in the first several lines of _s_p_l_a_t_._c_p_p sets the + maximum number of "slots" available for holding topography + data. It also sets the maximum size of the topographic + maps generated by SSPPLLAATT!!. MAXSLOTS is set to 9 by + default. If SSPPLLAATT!! produces a segmentation fault on + start-up with this default, it is an indication that not + enough RAM and/or virtual memory (swap space) is available + to run SSPPLLAATT!! with the number of MAXSLOTS specified. In + situations where available memory is low, MAXSLOTS may be + reduced to 4 with the understanding that this will greatly + limit the maximum region SSPPLLAATT!! will be able to analyze. + If 118 megabytes or more of total memory (swap space plus + RAM) is available, then MAXSLOTS may be increased to 16. + This will permit operation over a 4-degree by 4-degree + region, which is sufficient for single antenna heights in + excess of 10,000 feet above mean sea level, or point-to- + point distances of over 1000 miles. AADDDDIITTIIOONNAALL IINNFFOORRMMAATTIIOONN - Invoking SSPPLLAATT!! without any arguments will display all the - command-line options available with the program along with - a brief summary of each. - - The latest news and information regarding SSPPLLAATT!! software + The latest news and information regarding SSPPLLAATT!! software is available through the official SSPPLLAATT!! software web page located at: _h_t_t_p_:_/_/_w_w_w_._q_s_l_._n_e_t_/_k_d_2_b_d_/_s_p_l_a_t_._h_t_m_l. @@ -725,5 +1054,10 @@ AAUUTTHHOORRSS Doug McDonald <_m_c_d_o_n_a_l_d_@_s_c_s_._u_i_u_c_._e_d_u> Longley-Rice Model integration + Ron Bentley <_r_o_n_b_e_n_t_l_e_y_@_e_a_r_t_h_l_i_n_k_._n_e_t> + Fresnel Zone plotting and clearance determination + + +KD2BD Software 20 December 2006 SPLAT!(1) diff --git a/docs/man/splat.man b/docs/man/splat.man index 7cd520c..5601956 100644 --- a/docs/man/splat.man +++ b/docs/man/splat.man @@ -1,29 +1,38 @@ -.TH SPLAT! 1 "02 March 2006" "KD2BD Software" "KD2BD Software" +.TH SPLAT! 1 "20 December 2006" "KD2BD Software" "KD2BD Software" .SH NAME splat \- An RF \fBS\fPignal \fBP\fPropagation, \fBL\fPoss, \fBA\fPnd \fBT\fPerrain analysis tool .SH SYNOPSIS splat [-t \fItransmitter_site.qth\fP] -[-r \fIreceiver_site.qth\fP] -[-c \fIrx_antenna_height_for_los_coverage_analysis (feet) (float)\fP] -[-L \fIrx_antenna_height_for_Longley-Rice_coverage_analysis (feet) (float)\fP] -[-p \fIterrain_profile.ext\fP] -[-e \fIelevation_profile.ext\fP] -[-h \fIheight_profile.ext\fP] -[-l \fILongley-Rice_profile.ext\fP] -[-o \fItopographic_map_filename.ppm\fP] -[-b \fIcartographic_boundary_filename.dat\fP] -[-s \fIsite/city_database.dat\fP] -[-d \fIsdf_directory_path\fP] -[-m \fIearth_radius_multiplier (float)\fP] -[-R \fImaximum_coverage_range (for -c or -L) (miles) (float)\fP] +[-r \fIreceiver_site.qth\fP] +[-c \fIrx antenna height for LOS coverage analysis (feet/meters) (float)\fP] +[-L \fIrx antenna height for Longley-Rice coverage analysis (feet/meters) (float)\fP] +[-p \fIterrain_profile.ext\fP] +[-e \fIelevation_profile.ext\fP] +[-h \fIheight_profile.ext\fP] +[-H \fInormalized_height_profile.ext\fP] +[-l \fILongley-Rice_profile.ext\fP] +[-o \fItopographic_map_filename.ppm\fP] +[-b \fIcartographic_boundary_filename.dat\fP] +[-s \fIsite/city_database.dat\fP] +[-d \fIsdf_directory_path\fP] +[-m \fIearth radius multiplier (float)\fP] +[-f \fIfrequency (MHz) for Fresnel zone calculations (float)\fP] +[-R \fImaximum coverage radius (miles/kilometers) (float)\fP] [-dB \fImaximum attenuation contour to display on path loss maps (80-230 dB)\fP] +[-nf \fIdo not plot Fresnel zones in height plots\fP] +[-plo \fIpath_loss_output_file.txt\fP] +[-pli \fIpath_loss_input_file.txt\fP] +[-udt \fIuser_defined_terrain_file.dat\fP] [-n] [-N] +[-geo] +[-kml] +[-metric] .SH DESCRIPTION \fBSPLAT!\fP is a powerful terrestrial RF propagation and terrain -analysis tool covering the spectrum between 20 MHz and 20 GHz. It -is designed for operation on Unix and Linux-based workstations. -\fBSPLAT!\fP is free software. Redistribution and/or modification +analysis tool covering the spectrum between 20 MHz and 20 GHz. +\fBSPLAT!\fP is free software, and is designed for operation on Unix +and Linux-based workstations. Redistribution and/or modification is permitted under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License or any later version. Adoption of \fBSPLAT!\fP source code @@ -38,36 +47,68 @@ for more details. Applications of \fBSPLAT!\fP include the visualization, design, and link budget analysis of wireless Wide Area Networks (WANs), commercial and amateur radio communication systems above 20 MHz, microwave links, -frequency coordination, and the determination of analog and digital -terrestrial radio and television contour regions. +frequency coordination and interference studies, and the determination +of analog and digital terrestrial radio and television contour regions. \fBSPLAT!\fP provides RF site engineering data such as great circle distances and bearings between sites, antenna elevation angles (uptilt), depression angles (downtilt), antenna height above mean sea level, antenna height above average terrain, bearings and distances to known -obstructions, Longley-Rice path attenuation, and minimum antenna height -requirements needed to establish line-of-sight communication paths absent -of obstructions due to terrain. \fBSPLAT!\fP produces reports, graphs, -and highly detailed and carefully annotated topographic maps depicting -line-of-sight paths, path loss, and expected coverage areas of -transmitters and repeater systems. When performing line-of-sight -analysis in situations where multiple transmitter or repeater sites -are employed, \fBSPLAT!\fP determines individual and mutual areas -of coverage within the network specified. - -\fBSPLAT!\fP operates in two distinct modes: \fIpoint-to-point mode\fP, -and \fIarea prediction mode\fP, and may be invoked using either -line-of-sight (LOS) or Irregular Terrain (ITM) propagation models. -True Earth, four-thirds Earth, or any other Earth radius may be -specified by the user when performing line-of-sight analysis. +obstructions, and Longley-Rice path attenuation. In addition, the minimum +antenna height requirements needed to clear terrain, the first Fresnel +zone, and 60% of the first Fresnel zone are also provided. + +\fBSPLAT!\fP produces reports, graphs, and high resolution topographic +maps that depict line-of-sight paths, and regional path loss contours +through which expected coverage areas of transmitters and repeater +systems can be obtained. When performing line-of-sight analysis in +situations where multiple transmitter or repeater sites are employed, +\fBSPLAT!\fP determines individual and mutual areas of coverage within +the network specified. + +Simply typing \fCsplat\fR on the command line will return a summary +of \fBSPLAT!\fP's command line options: +\fC + --==[ SPLAT! v1.2.0 Available Options... ]==-- + + -t txsite(s).qth (max of 4) + -r rxsite.qth + -c plot coverage of TX(s) with an RX antenna at X feet/meters AGL + -L plot path loss map of TX based on an RX at X feet/meters AGL + -s filename(s) of city/site file(s) to import (max of 5) + -b filename(s) of cartographic boundary file(s) to import (5 max) + -p filename of terrain profile graph to plot + -e filename of terrain elevation graph to plot + -h filename of terrain height graph to plot + -H filename of normalized terrain height graph to plot + -l filename of Longley-Rice graph to plot + -o filename of topographic map to generate (.ppm) + -u filename of user-defined terrain file to import + -d sdf file directory path (overrides path in ~/.splat_path file) + -n no analysis, brief report + -N no analysis, no report + -m earth radius multiplier + -f frequency for Fresnel zone calculation (MHz) + -R modify default range for -c or -L (miles/kilometers) + -db maximum loss contour to display on path loss maps (80-230 dB) + -nf do not plot Fresnel zones in height plots + -plo filename of path-loss output file + -pli filename of path-loss input file + -udt filename of user defined terrain input file + -geo generate a .geo georeference file (with .ppm output) + -kml generate a Google Earth .kml file (for point-to-point links) + -metric employ metric rather than imperial units for all user I/O +\fR .SH INPUT FILES \fBSPLAT!\fP is a command-line driven application, and reads input data through a number of data files. Some files are mandatory for successful execution of the program, while others are optional. -Mandatory files include SPLAT Data Files (SDF files), site location -files (QTH files), and Longley-Rice model parameter files (LRP files). -Optional files include city/site location files, and cartographic -boundary files. +Mandatory files include 3-arc second topography models in the +form of SPLAT Data Files (SDF files), site location files (QTH +files), and Longley-Rice model parameter files (LRP files). +Optional files include city location files, cartographic boundary +files, user-defined terrain files, path-loss input files, and +antenna radiation pattern files. .SH SPLAT DATA FILES \fBSPLAT!\fP imports topographic data in the form of SPLAT Data Files (SDFs). These files may be generated from a number of information sources. @@ -77,9 +118,9 @@ utility included with \fBSPLAT!\fP. USGS Digital Elevation Models compatible with this utility may be downloaded from: \fIhttp://edcftp.cr.usgs.gov/pub/data/DEM/250/\fP. -Significantly better resolution can be obtained through the use -of SRTM-3 Version 2 digital elevation models. These models are the -result of the STS-99 Space Shuttle Radar Topography Mission, and are +Significantly better resolution and accuracy can be obtained through +the use of SRTM-3 Version 2 digital elevation models. These models are +the product of the STS-99 Space Shuttle Radar Topography Mission, and are available for most populated regions of the Earth. SPLAT Data Files may be generated from SRTM data using the included \fBsrtm2sdf\fP utility. SRTM-3 Version 2 data may be obtained through anonymous FTP from: @@ -99,24 +140,24 @@ either standard format (\fI.sdf\fP) as generated by the \fBusgs2sdf\fP and \fBsrtm2sdf\fP utilities, or in bzip2 compressed format (\fI.sdf.bz2\fP). Since uncompressed files can be processed slightly faster than files that have been compressed, \fBSPLAT!\fP searches for -the needed SDF data in uncompressed format first. If uncompressed data -cannot located, \fBSPLAT!\fP then searches for data in bzip2 compressed +needed SDF data in uncompressed format first. If uncompressed data +cannot be located, \fBSPLAT!\fP then searches for data in bzip2 compressed format. If no compressed SDF files can be found for the region requested, \fBSPLAT!\fP assumes the region is over water, and will assign an elevation of sea-level to these areas. This feature of \fBSPLAT!\fP makes it possible to perform path analysis not only over land, but also between coastal areas not represented by -Digital Elevation Model data. This behavior of \fBSPLAT!\fP underscores -the importance of having all the SDF files required for the region being -analyzed if meaningful results are to be expected. +Digital Elevation Model data. However, this behavior of \fBSPLAT!\fP +underscores the importance of having all the SDF files required for +the region being analyzed if meaningful results are to be expected. .SH SITE LOCATION (QTH) FILES \fBSPLAT!\fP imports site location information of transmitter and receiver sites analyzed by the program from ASCII files having a \fI.qth\fP extension. QTH files contain the site's name, the site's latitude (positive if North of the equator, negative if South), the site's longitude (in degrees West, -0 to 360 degrees), and the site's antenna height above ground level (AGL). -A single line-feed character separates each field. The antenna height is +0 to 360 degrees), and the site's antenna height above ground level (AGL), +each separated by a single line-feed character. The antenna height is assumed to be specified in feet unless followed by the letter \fIm\fP or the word \fImeters\fP in either upper or lower case. Latitude and longitude information may be expressed in either decimal format (74.6889) @@ -133,11 +174,12 @@ Trenton, NJ (\fIwnjt.qth\fP) might read as follows: Each transmitter and receiver site analyzed by \fBSPLAT!\fP must be represented by its own site location (QTH) file. .SH LONGLEY-RICE PARAMETER (LRP) FILES -\fBSPLAT!\fP imports Longley-Rice model parameter data from files having -the same base name as the transmitter site QTH file, but with a \fI.lrp\fP -extension, thus providing simple and accurate correlation between these -associated data sets. The format for the Longley-Rice model parameter -files is as follows (\fIwnjt.lrp\fP): +Longley-Rice parameter data files are required for \fBSPLAT!\fP to +determine RF path loss in either point-to-point or area prediction +mode. Longley-Rice model parameter data is read from files having +the same base name as the transmitter site QTH file, but with a +\fI.lrp\fP extension. \fBSPLAT!\fP LRP files share the following +format (\fIwnjt.lrp\fP): \fC 15.000 ; Earth Dielectric Constant (Relative permittivity) 0.005 ; Earth Conductivity (Siemens per meter) @@ -188,9 +230,9 @@ Temperate climates. The final two parameters in the \fI.lrp\fP file correspond to the statistical analysis provided by the Longley-Rice model. In this example, \fBSPLAT!\fP will return the maximum path loss occurring 50% of the time (fraction -of time) in 50% of situations (fraction of situations). Use a fraction -of time parameter of 0.97 for digital television, 0.50 for analog in the -United States. Isotropic antennas are assumed. +of time) in 50% of situations (fraction of situations). In the United +States, use a fraction of time parameter of 0.97 for digital television +(8VSB modulation), or 0.50 for analog (VSB-AM+NTSC) transmissions. For further information on these parameters, see: \fIhttp://flattop.its.bldrdoc.gov/itm.html\fP and @@ -199,9 +241,9 @@ For further information on these parameters, see: The names and locations of cities, tower sites, or other points of interest may be imported and plotted on topographic maps generated by \fBSPLAT!\fP. \fBSPLAT!\fP imports the names of cities and locations from ASCII files -containing the location's name, the location's latitude, and the location's -longitude. Each field is separated by a comma. Each record is separated -by a single line feed character. As was the case with the \fI.qth\fP +containing the location of interest's name, latitude, and longitude. +Each field is separated by a comma. Each record is separated by a +single line feed character. As was the case with the \fI.qth\fP files, latitude and longitude information may be entered in either decimal or degree, minute, second (DMS) format. @@ -219,11 +261,12 @@ A total of five separate city data files may be imported at a time, and there is no limit to the size of these files. \fBSPLAT!\fP reads city data on a "first come/first served" basis, and plots only those locations whose annotations do not conflict with annotations of -locations plotted earlier during \fBSPLAT\fP's execution. This behavior -minimizes clutter in \fBSPLAT!\fP generated topographic maps, but also -mandates that important locations be placed toward the beginning of -the first city data file, and disposable locations be positioned -further down the list or in subsequent data files. +locations read earlier in the current city data file, or in previous +files. This behavior minimizes clutter in \fBSPLAT!\fP generated +topographic maps, but also mandates that important locations be placed +toward the beginning of the first city data file, and locations less +important be positioned further down the list or in subsequent data +files. City data files may be generated manually using any text editor, imported from other sources, or derived from data available from the @@ -253,41 +296,53 @@ The number and type of switches passed to \fBSPLAT!\fP determine its mode of operation and method of output data generation. Nearly all of \fBSPLAT!\fP's switches may be cascaded in any order on the command line when invoking the program. + +\fBSPLAT!\fP operates in two distinct modes: \fIpoint-to-point mode\fP, +and \fIarea prediction mode\fP. Either a line-of-sight (LOS) or Longley-Rice +Irregular Terrain (ITM) propagation model may be invoked by the user. True +Earth, four-thirds Earth, or any other user-defined Earth radius may be +specified when performing line-of-sight analysis. .SH POINT-TO-POINT ANALYSIS \fBSPLAT!\fP may be used to perform line-of-sight terrain analysis between two specified site locations. For example: \fCsplat -t tx_site.qth -r rx_site.qth\fR -invokes a terrain analysis between the transmitter specified -in \fItx_site.qth\fP and receiver specified in \fIrx_site.qth\fP, -and writes a \fBSPLAT!\fP Obstruction Report to the current working -directory. The report contains details of the transmitter and -receiver sites, and identifies the location of any obstructions -detected during the analysis. If an obstruction can be cleared -by raising the receive antenna to a greater altitude, \fBSPLAT!\fP -will indicate the minimum antenna height required for a line-of-sight -path to exist between the transmitter and receiver locations specified. +invokes a line-of-sight terrain analysis between the transmitter +specified in \fItx_site.qth\fP and receiver specified in \fIrx_site.qth\fP +using a True Earth radius model, and writes a \fBSPLAT!\fP Obstruction +Report to the current working directory. The report contains details of +the transmitter and receiver sites, and identifies the location of any +obstructions detected along the line-of-sight path. If an obstruction +can be cleared by raising the receive antenna to a greater altitude, +\fBSPLAT!\fP will indicate the minimum antenna height required for a +line-of-sight path to exist between the transmitter and receiver locations +specified. Note that imperial units (miles, feet) are specified unless +the \fI-metric\fP switch is added to \fBSPLAT!\fP's command line options: + +\fCsplat -t tx_site.qth -r rx_site.qth -metric\fR + If the antenna must be raised a significant amount, this determination -may take some time. Note that the results provided are the \fIminimum\fP -necessary for a line-of-sight path to exist, and do not take Fresnel -zone clearance requirements into consideration. +may take a few moments. Note that the results provided are the \fIminimum\fP +necessary for a line-of-sight path to exist, and in the case of this +simple example, do not take Fresnel zone clearance requirements into +consideration. \fIqth\fP extensions are assumed by \fBSPLAT!\fP for QTH files, and -are optional when invoking the program. \fBSPLAT!\fP automatically -reads all SPLAT Data Files necessary to conduct the terrain analysis -between the sites specified. \fBSPLAT!\fP searches for the needed -SDF files in the current working directory first. If the needed -files are not found, \fBSPLAT!\fP then searches in the path specified -by the \fI-d\fP command-line switch: +are optional when specifying -t and -r arguments on the command-line. +\fBSPLAT!\fP automatically reads all SPLAT Data Files necessary to +conduct the terrain analysis between the sites specified. \fBSPLAT!\fP +searches for the required SDF files in the current working directory +first. If the needed files are not found, \fBSPLAT!\fP then searches +in the path specified by the \fI-d\fP command-line switch: \fCsplat -t tx_site -r rx_site -d /cdrom/sdf/\fR An external directory path may be specified by placing a ".splat_path" file under the user's home directory. This file must contain the full -directory path to the last resort location of all the SDF files. The -path in the \fI$HOME/.splat_path\fP file must be of the form of a -single line of ASCII text: +directory path of last resort to all the SDF files. The path in the +\fI$HOME/.splat_path\fP file must be of the form of a single line of +ASCII text: \fC/opt/splat/sdf/\fR @@ -297,22 +352,22 @@ A graph of the terrain profile between the receiver and transmitter locations as a function of distance from the receiver can be generated by adding the \fI-p\fP switch: -\fCsplat -t tx_site -r rx_site -p terrain_profile.gif\fR +\fCsplat -t tx_site -r rx_site -p terrain_profile.png\fR \fBSPLAT!\fP invokes \fBgnuplot\fP when generating graphs. The filename extension specified to \fBSPLAT!\fP determines the format of the graph -produced. \fI.gif\fP will produce a 640x480 color GIF graphic file, +produced. \fI.png\fP will produce a 640x480 color PNG graphic file, while \fI.ps\fP or \fI.postscript\fP will produce postscript output. -Output in formats such as PNG, Adobe Illustrator, AutoCAD dxf, LaTeX, -and many others are available. Please consult \fBgnuplot\fP, and -\fBgnuplot\fP's documentation for details on all the supported +Output in formats such as GIF, Adobe Illustrator, AutoCAD dxf, +LaTeX, and many others are available. Please consult \fBgnuplot\fP, +and \fBgnuplot\fP's documentation for details on all the supported output formats. A graph of elevations subtended by the terrain between the receiver and transmitter as a function of distance from the receiver can be generated by using the \fI-e\fP switch: -\fCsplat -t tx_site -r rx_site -e elevation_profile.gif\fR +\fCsplat -t tx_site -r rx_site -e elevation_profile.png\fR The graph produced using this switch illustrates the elevation and depression angles resulting from the terrain between the receiver's @@ -330,14 +385,29 @@ A graph illustrating terrain height referenced to a line-of-sight path between the transmitter and receiver may be generated using the \fI-h\fP switch: -\fCsplat -t tx_site -r rx_site -h height_profile.gif\fR +\fCsplat -t tx_site -r rx_site -h height_profile.png\fR + +A terrain height plot normalized to the transmitter and receiver +antenna heights can be obtained using the \fI-H\fP switch: + +\fCsplat -t tx_site -r rx_site -H normalized_height_profile.png\fR -The Earth's curvature is clearly evident when plotting height profiles. +A contour of the Earth's curvature is also plotted in this mode. + +The first Fresnel Zone, and 60% of the first Fresnel Zone can be +added to height profile graphs by adding the \fI-f\fP switch, and +specifying a frequency (in MHz) at which the Fresnel Zone should be +modeled: + +\fCsplat -t tx_site -r rx_site -f 439.250 -H normalized_height_profile.png\fR A graph showing Longley-Rice path loss may be plotted using the \fI-l\fP switch: -\fCsplat -t tx_site -r rx_site -l path_loss_profile.gif\fR +\fCsplat -t tx_site -r rx_site -l path_loss_profile.png\fR + +As before, adding the \fI-metric\fP switch forces the graphs to +be plotted using metric units of measure. When performing path loss profiles, a Longley-Rice Model Path Loss Report is generated by \fBSPLAT!\fP in the form of a text file with @@ -356,11 +426,11 @@ factor in reception: SNR = T - NJ - L + G - NF .EN -where \fBT\fP is the ERP of the transmitter in dBW, \fBNJ\fP is -Johnson Noise in dBW (-136 dBW for a 6 MHz TV channel), \fBL\fP -is the path loss provided by \fBSPLAT!\fP in dB (as a \fIpositive\fP -number), \fBG\fP is the receive antenna gain in dB over isotropic, -and \fBNF\fP is the receiver noise figure in dB. +where \fBT\fP is the ERP of the transmitter in dBW in the direction +of the receiver, \fBNJ\fP is Johnson Noise in dBW (-136 dBW for a 6 MHz +television channel), \fBL\fP is the path loss provided by \fBSPLAT!\fP +in dB (as a \fIpositive\fP number), \fBG\fP is the receive antenna gain +in dB over isotropic, and \fBNF\fP is the receiver noise figure in dB. \fBT\fP may be computed as follows: @@ -380,8 +450,8 @@ necessary to achieve a specific signal-to-noise ratio: Signal_Margin = SNR - S .EN -where \fBS\fP is the minimum desired SNR ratio (15.5 dB for -ATSC DTV, 42 dB for analog NTSC television). +where \fBS\fP is the minimum required SNR ratio (15.5 dB for +ATSC (8-VSB) DTV, 42 dB for analog NTSC television). A topographic map may be generated by \fBSPLAT!\fP to visualize the path between the transmitter and receiver sites from yet another @@ -392,18 +462,7 @@ the image is scaled between the highest and lowest elevations present in the map. The only exception to this is sea-level, which is represented using the color blue. -\fBSPLAT!\fP generated topographic maps are 24-bit TrueColor Portable -PixMap (PPM) images. They may be viewed, edited, or converted to other -graphic formats by popular image viewing applications such as \fBxv\fP, -\fBThe GIMP\fP, \fBImageMagick\fP, and \fBXPaint\fP. PNG format is -highly recommended for lossless compressed storage of \fBSPLAT!\fP -generated topographic output files. An excellent command-line utility -capable of converting \fBSPLAT!\fP PPM graphic files to PNG files is -\fBwpng\fP, and is available -at: \fIhttp://www.libpng.org/pub/png/book/sources.html\fP. As a last -resort, PPM files may be compressed using the bzip2 utility, and read -directly by \fBThe GIMP\fP in this format. Topographic output -is specified using the \fI-o\fP switch: +Topographic output is invoked using the \fI-o\fP switch: \fCsplat -t tx_site -r rx_site -o topo_map.ppm\fR @@ -434,7 +493,7 @@ switch: In situations where multiple transmitter sites are in use, as many as four site locations may be passed to \fBSPLAT!\fP at a time for analysis: -\fCsplat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.gif\fR +\fCsplat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.png\fR In this example, four separate terrain profiles and obstruction reports will be generated by \fBSPLAT!\fP. A single topographic map can be @@ -444,8 +503,23 @@ the map, each in its own color. The path between the first transmitter specified to the receiver will be in green, the path between the second transmitter and the receiver will be in cyan, the path between the third transmitter and the receiver will be in violet, and the -path between the fourth transmitter and the receiver will be in sienna. -.SH DETERMINING REGIONAL COVERAGE +path between the fourth transmitter and the receiver will be in sienna. + +\fBSPLAT!\fP generated topographic maps are 24-bit TrueColor Portable +PixMap (PPM) images. They may be viewed, edited, or converted to other +graphic formats by popular image viewing applications such as \fBxv\fP, +\fBThe GIMP\fP, \fBImageMagick\fP, and \fBXPaint\fP. PNG format is +highly recommended for lossless compressed storage of \fBSPLAT!\fP +generated topographic output files. \fBImageMagick\fP's command-line +utility easily converts \fBSPLAT!\fP's PPM files to PNG format: + +\fCconvert splat_map.ppm splat_map.png\fR + +Another excellent PPM to PNG command-line utility is available +at: \fIhttp://www.libpng.org/pub/png/book/sources.html\fP. As a last +resort, PPM files may be compressed using the bzip2 utility, and read +directly by \fBThe GIMP\fP in this format. +.SH REGIONAL COVERAGE ANALYSIS \fBSPLAT!\fP can analyze a transmitter or repeater site, or network of sites, and predict the regional coverage for each site specified. In this mode, \fBSPLAT!\fP can generate a topographic map displaying @@ -460,8 +534,10 @@ switch is invoked as follows: In this example, \fBSPLAT!\fP generates a topographic map called \fItx_coverage.ppm\fP that illustrates the predicted line-of-sight regional coverage of \fItx_site\fP to receiving locations having -antennas 30.0 feet above ground level (AGL). The contents of -\fIcities.dat\fP are plotted on the map, as are the cartographic +antennas 30.0 feet above ground level (AGL). If the \fI-metric\fP +switch is used, the argument following the \fI-c\fP switch is +interpreted as being in meters, rather than in feet. The contents +of \fIcities.dat\fP are plotted on the map, as are the cartographic boundaries contained in the file \fIco34_d00.dat\fP. When plotting line-of-sight paths and areas of regional coverage, @@ -482,41 +558,15 @@ mean sea level, the antenna's height above mean sea level, the antenna's height above average terrain, and the height of the average terrain calculated in the directions of 0, 45, 90, 135, 180, 225, 270, and 315 degrees azimuth. - -If the \fI-c\fP switch is replaced by a \fI-L\fP switch, a -Longley-Rice path loss map for a transmitter site may be generated: - -\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR - -In this mode, \fBSPLAT!\fP generates a multi-color map illustrating -expected signal levels (path loss) in areas surrounding the transmitter -site. A legend at the bottom of the map correlates each color with a -specific path loss level in decibels. Since Longley-Rice area -prediction map generation is very CPU intensive, provision for -limiting the analysis range is provided by the \fI-R\fP switch. -The argument must be given in miles. If a range wider than the -generated topographic map is specified, \fBSPLAT!\fP will perform -Longley-Rice path loss calculations between all four corners of -the area prediction map. - -The \fI-db\fP switch allows a constraint to be placed on the maximum -path loss region plotted on the map. A path loss between 80 and -230 dB may be specified using this switch. For example, if a path -loss beyond -140 dB is irrelevant to the survey being conducted, -\fBSPLAT!\fP's path loss plot can be constrained to the region -bounded by the 140 dB attenuation contour as follows: - -\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plot.ppm\fR - -.SH DETERMINING MULTIPLE REGIONS OF COVERAGE +.SH DETERMINING MULTIPLE REGIONS OF LOS COVERAGE \fBSPLAT!\fP can also display line-of-sight coverage areas for as many as four separate transmitter sites on a common topographic map. For example: -\fCsplat -t site1 site2 site3 site4 -c 30.0 -o network.ppm\fR +\fCsplat -t site1 site2 site3 site4 -c 10.0 -metric -o network.ppm\fR plots the regional line-of-sight coverage of site1, site2, site3, -and site4 based on a receive antenna located 30.0 feet above ground +and site4 based on a receive antenna located 10.0 meters above ground level. A topographic map is then written to the file \fInetwork.ppm\fP. The line-of-sight coverage area of the transmitters are plotted as follows in the colors indicated (along with their corresponding RGB @@ -544,9 +594,210 @@ values in decimal): If separate \fI.qth\fP files are generated, each representing a common site location but a different antenna height, a single topographic map illustrating the regional coverage from as many as four separate locations -on a single tower may be generated by \fBSPLAT!\fP. -.SH TOPOGRAPHIC MAP GENERATION -In certain situations, it may be desirable to generate a topographic map +on a single tower may be generated by \fBSPLAT!\fP. +.SH LONGLEY-RICE PATH LOSS ANALYSIS +If the \fI-c\fP switch is replaced by a \fI-L\fP switch, a +Longley-Rice path loss map for a transmitter site may be generated: + +\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map\fR + +In this mode, \fBSPLAT!\fP generates a multi-color map illustrating +expected signal levels (path loss) in areas surrounding the transmitter +site. A legend at the bottom of the map correlates each color with a +specific path loss range in decibels. + +The Longley-Rice analysis range may be modified to a user-specific +value using the \fI-R\fP switch. The argument must be given in miles +(or kilometers if the \fI-metric\fP switch is used). If a range wider +than the generated topographic map is specified, \fBSPLAT!\fP will +perform Longley-Rice path loss calculations between all four corners +of the area prediction map. + +The \fI-db\fP switch allows a constraint to be placed on the maximum +path loss region plotted on the map. A maximum path loss between 80 +and 230 dB may be specified using this switch. For example, if a path +loss beyond -140 dB is irrelevant to the survey being conducted, +\fBSPLAT!\fP's path loss plot can be constrained to the region +bounded by the 140 dB attenuation contour as follows: + +\fCsplat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plot.ppm\fR + +.SH ANTENNA RADIATION PATTERN PARAMETERS +Normalized field voltage patterns for a transmitting antenna's horizontal +and vertical planes are imported automatically into \fBSPLAT!\fP when a +Longley-Rice coverage analysis is performed. Antenna pattern data is +read from a pair of files having the same base name as the transmitter +and LRP files, but with \fI.az\fP and \fI.el\fP extensions for azimuth +and elevation pattern files, respectively. Specifications regarding +pattern rotation (if any) and mechanical beam tilt and tilt direction +(if any) are also contained within \fBSPLAT!\fP antenna pattern files. + +For example, the first few lines of a \fBSPLAT!\fP azimuth pattern file +might appear as follows (\fIkvea.az\fP): +\fC + 183.0 + 0 0.8950590 + 1 0.8966406 + 2 0.8981447 + 3 0.8995795 + 4 0.9009535 + 5 0.9022749 + 6 0.9035517 + 7 0.9047923 + 8 0.9060051 +\fR +The first line of the \fI.az\fP file specifies the amount of azimuthal +pattern rotation (measured clockwise in degrees from True North) to be +applied by \fBSPLAT!\fP to the data contained in the \fI.az\fP file. +This is followed by azimuth headings (0 to 360 degrees) and their associated +normalized field patterns (0.000 to 1.000) separated by whitespace. + +The structure of \fBSPLAT!\fP elevation pattern files is slightly different. +The first line of the \fI.el\fP file specifies the amount of mechanical +beam tilt applied to the antenna. Note that a \fIdownward tilt\fP +(below the horizon) is expressed as a \fIpositive angle\fP, while an +\fIupward tilt\fP (above the horizon) is expressed as a \fInegative angle\fP. +This data is followed by the azimuthal direction of the tilt, separated by +whitespace. + +The remainder of the file consists of elevation angles and their +corresponding normalized voltage radiation pattern (0.000 to 1.000) +values separated by whitespace. Elevation angles must be specified +over a -10.0 to +90.0 degree range. As was the convention with mechanical +beamtilt, \fInegative elevation angles\fP are used to represent elevations +\fIabove the horizon\fP, while \fIpositive angles\fP represents elevations +\fIbelow the horizon\fP. + +For example, the first few lines a \fBSPLAT!\fP elevation pattern file +might appear as follows (\fIkvea.el\fP): +\fC + 1.1 130.0 + -10.0 0.172 + -9.5 0.109 + -9.0 0.115 + -8.5 0.155 + -8.0 0.157 + -7.5 0.104 + -7.0 0.029 + -6.5 0.109 + -6.0 0.185 +\fR +In this example, the antenna is mechanically tilted downward 1.1 degrees +towards an azimuth of 130.0 degrees. + +For best results, the resolution of azimuth pattern data should be +specified to the nearest degree azimuth, and elevation pattern data +resolution should be specified to the nearest 0.01 degrees. If the +pattern data specified does not reach this level of resolution, +\fBSPLAT!\fP will interpolate the values provided to determine the +data at the required resolution, although this may result in a loss +in accuracy. + +.SH IMPORTING AND EXPORTING REGIONAL PATH LOSS CONTOUR DATA +Performing a Longley-Rice coverage analysis can be a very time +consuming process, especially if the analysis is repeated repeatedly +to discover what effects changes to the antenna radiation patterns +make to the predicted coverage area. + +This process can be expedited by exporting the Longley-Rice +regional path loss contour data to an output file, modifying the +path loss data externally to incorporate antenna pattern effects, +and then importing the modified path loss data back into \fBSPLAT!\fP +to rapidly produce a revised path loss map. + +For example, a path loss output file can be generated by \fBSPLAT!\fP +for a receive site 30 feet above ground level over a 50 mile radius +surrounding a transmitter site to a maximum path loss of 140 dB using +the following syntax: + +\fCsplat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat\fR + +\fBSPLAT!\fP path loss output files often exceed 100 megabytes in size. +They contain information relating to the boundaries of region they describe +followed by latitudes (degrees North), longitudes (degrees West), azimuths, +elevations (to the first obstruction), and path loss figures (dB) for a +series of specific points that comprise the region surrounding the +transmitter site. The first few lines of a \fBSPLAT!\fP path loss +output file take on the following appearance (\fIpathloss.dat\fP): +\fC + 119, 117 ; max_west, min_west + 35, 33 ; max_north, min_north + 34.2265434, 118.0631104, 48.171, -37.461, 67.70 + 34.2270355, 118.0624390, 48.262, -26.212, 73.72 + 34.2280197, 118.0611038, 48.269, -14.951, 79.74 + 34.2285156, 118.0604401, 48.207, -11.351, 81.68 + 34.2290077, 118.0597687, 48.240, -10.518, 83.26 + 34.2294998, 118.0591049, 48.225, 23.201, 84.60 + 34.2304878, 118.0577698, 48.213, 15.769, 137.84 + 34.2309799, 118.0570984, 48.234, 15.965, 151.54 + 34.2314720, 118.0564346, 48.224, 16.520, 149.45 + 34.2319679, 118.0557632, 48.223, 15.588, 151.61 + 34.2329521, 118.0544281, 48.230, 13.889, 135.45 + 34.2334442, 118.0537643, 48.223, 11.693, 137.37 + 34.2339401, 118.0530930, 48.222, 14.050, 126.32 + 34.2344322, 118.0524292, 48.216, 16.274, 156.28 + 34.2354164, 118.0510941, 48.222, 15.058, 152.65 + 34.2359123, 118.0504227, 48.221, 16.215, 158.57 + 34.2364044, 118.0497589, 48.216, 15.024, 157.30 + 34.2368965, 118.0490875, 48.225, 17.184, 156.36 +\fR +It is not uncommon for \fBSPLAT!\fP path loss files to contain as +many as 3 million or more lines of data. Comments can be placed in +the file if they are proceeded by a semicolon character. The \fBvim\fP +text editor has proven capable of editing files of this size. + +Note as was the case in the antenna pattern files, negative elevation +angles refer to upward tilt (above the horizon), while positive angles +refer to downward tilt (below the horizon). These angles refer to the +elevation to the receiving antenna at the height above ground level +specified using the \fI-L\fP switch \fIif\fP the path between transmitter +and receiver is unobstructed. If the path between the transmitter +and receiver is obstructed, then the elevation angle to the first +obstruction is returned by \fBSPLAT!\fP. This is because +the Longley-Rice model considers the energy reaching a distant point +over an obstructed path as a derivative of the energy scattered from +the top of the first obstruction, only. Since energy cannot reach +the obstructed location directly, the actual elevation angle to that +point is irrelevant. + +When modifying \fBSPLAT!\fP path loss files to reflect antenna +pattern data, \fIonly the last column (path loss)\fP should be amended +to reflect the antenna's normalized gain at the azimuth and elevation +angles specified in the file. (At this time, programs and scripts +capable of performing this operation are left as an exercise for +the user.) + +Modified path loss maps can be imported back into \fBSPLAT!\fP for +generating revised coverage maps: + +\fCsplat -t kvea -pli pathloss.dat -s city.dat -b county.dat -o map.ppm\fR + +\fBSPLAT!\fP path loss files can also be used for conducting coverage or +interference studies outside of \fBSPLAT!\fP. +.SH USER-DEFINED TERRAIN INPUT FILES +A user-defined terrain file is a user-generated text file containing latitudes, +longitudes, and heights above ground level of specific terrain features believed +to be of importance to the \fBSPLAT!\fP analysis being conducted, but noticeably +absent from the SDF files being used. A user-defined terrain file is imported +into a \fBSPLAT!\fP analysis using the \fI-udt\fP switch: + +\fC splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm\fR + +A user-defined terrain file has the following appearance and structure: +\fC + 40.32180556, 74.1325, 100.0 meters + 40.321805, 74.1315, 300.0 + 40.3218055, 74.1305, 100.0 meters +\fR +Terrain height is interpreted as being described in feet above ground +level unless followed by the word \fImeters\fP, and is added \fIon top of\fP +the terrain specified in the SDF data for the locations specified. Be +aware that each user-defined terrain feature specified will be interpreted +as being 3-arc seconds in both latitude and longitude. Features described +in the user-defined terrain file that overlap previously defined features +in the file are ignored by \fBSPLAT!\fP. +.SH SIMPLE TOPOGRAPHIC MAP GENERATION +In certain situations it may be desirable to generate a topographic map of a region without plotting coverage areas, line-of-sight paths, or generating obstruction reports. There are several ways of doing this. If one wishes to generate a topographic map illustrating the location @@ -560,9 +811,50 @@ If no text report is desired, then the \fI-N\fP switch is used: \fCsplat -t tx_site -r rx_site -N -o topo_map.ppm\fR -If the \fI-o\fP switch and output filename are omitted when using -either the \fI-n\fP or \fI-N\fP switches, output is written to a -file named \fImap.ppm\fP in the current working directory by default. +If a topographic map centered about a single site out to a minimum +specified radius is desired instead, a command similar to the following +can be used: + +\fCsplat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o topo_map.ppm\fR + +where -R specifies the minimum radius of the map in miles (or kilometers +if the \fI-metric\fP switch is used). + +If the \fI-o\fP switch and output filename are omitted in these +operations, topographic output is written to a file named \fImap.ppm\fP +in the current working directory by default. +.SH GEOREFERENCE FILE GENERATION +Topographic, coverage (\fI-c\fP), and path loss contour (\fI-L\fP) maps +generated by \fBSPLAT!\fP may be imported into \fBXastir\fP (X Amateur +Station Tracking and Information Reporting) software by generating a +georeference file using \fBSPLAT!\fP's \fI-geo\fP switch: + +\fCsplat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o map.ppm\fR + +The georeference file generated will have the same base name as the +\fI-o\fP file specified, but have a \fI .geo\fP extension, and permit +proper interpretation and display of \fBSPLAT!\fP's .ppm graphics in +\fBXastir\fP software. +.SH GOOGLE MAP KML FILE GENERATION +Keyhole Markup Language files compatible with \fBGoogle Earth\fP may +be generated by \fBSPLAT!\fP when performing point-to-point analyses +by invoking the \fI-kml\fP switch: + +\fCsplat -t wnjt -r kd2bd -kml\fR + +The KML file generated will have the same filename structure as an +Obstruction Report for the transmitter and receiver site names given, +except it will carry a \fI .kml\fP extension. + +Once loaded into \fBGoogle Earth\fP (File --> Open), the KML file +will annotate the map display with the names of the transmitter and +receiver site locations. The viewpoint of the image will be from the +position of the transmitter site looking towards the location of the +receiver. The point-to-point path between the sites will be displayed +as a white line while the RF line-of-sight path will be displayed in +green. \fBGoogle Earth\fP's navigation tools allow the user to +"fly" around the path, identify landmarks, roads, and other +featured content. .SH DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN \fBSPLAT!\fP determines antenna height above average terrain (HAAT) according to the procedure defined by Federal Communications Commission @@ -572,10 +864,7 @@ being analyzed are sampled and averaged for each 45 degrees of azimuth starting with True North. If one or more radials lie entirely over water or over land outside the United States (areas for which no USGS topography data is available), then those radials are omitted from the calculation -of average terrain. If part of a radial extends over a body of water or -over land outside the United States, then only that part of the radial -lying over United States land is used in the determination of average -terrain. +of average terrain. Note that SRTM elevation data, unlike older 3-arc second USGS data, extends beyond the borders of the United States. Therefore, HAAT @@ -595,21 +884,21 @@ normally loaded by \fBSPLAT!\fP to perform average terrain calculations. Under such conditions, \fBSPLAT!\fP will provide the antenna height above average terrain as well as the average terrain above mean sea level for azimuths of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, -and include such information in the site report generated. If one or +and include such information in the generated site report. If one or more of the eight radials surveyed fall over water, or over regions for which no SDF data is available, \fBSPLAT!\fP reports \fINo Terrain\fP for the radial paths affected. .SH RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION -\fBSPLAT!\fP reads SDF files as needed into a series of memory "slots" -within the structure of the program. Each "slot" holds one SDF file -representing a one degree by one degree region of terrain. +\fBSPLAT!\fP reads SDF files as needed into a series of memory pages +or "slots" within the structure of the program. Each "slot" holds one +SDF file representing a one degree by one degree region of terrain. A \fI#define MAXSLOTS\fP statement in the first several lines of -\fIsplat.cpp\fP sets the maximum number of "slots" available for topography -data. It also sets the maximum size of the topographic maps generated by -\fBSPLAT!\fP. MAXSLOTS is set to 9 by default. If \fBSPLAT!\fP produces -a segmentation fault on start-up with this default, it is an indication +\fIsplat.cpp\fP sets the maximum number of "slots" available for holding +topography data. It also sets the maximum size of the topographic maps +generated by \fBSPLAT!\fP. MAXSLOTS is set to 9 by default. If \fBSPLAT!\fP +produces a segmentation fault on start-up with this default, it is an indication that not enough RAM and/or virtual memory (swap space) is available to -run \fBSPLAT!\fP with this number of MAXSLOTS. In situations where +run \fBSPLAT!\fP with the number of MAXSLOTS specified. In situations where available memory is low, MAXSLOTS may be reduced to 4 with the understanding that this will greatly limit the maximum region \fBSPLAT!\fP will be able to analyze. If 118 megabytes or more of total memory (swap space plus @@ -618,10 +907,6 @@ permit operation over a 4-degree by 4-degree region, which is sufficient for single antenna heights in excess of 10,000 feet above mean sea level, or point-to-point distances of over 1000 miles. .SH ADDITIONAL INFORMATION -Invoking \fBSPLAT!\fP without any arguments will display all the -command-line options available with the program along with a brief -summary of each. - The latest news and information regarding \fBSPLAT!\fP software is available through the official \fBSPLAT!\fP software web page located at: \fIhttp://www.qsl.net/kd2bd/splat.html\fP. @@ -632,3 +917,7 @@ Creator, Lead Developer .TP Doug McDonald <\fImcdonald@scs.uiuc.edu\fP> Longley-Rice Model integration +.TP +Ron Bentley <\fIronbentley@earthlink.net\fP> +Fresnel Zone plotting and clearance determination + diff --git a/docs/pdf/splat.pdf b/docs/pdf/splat.pdf index 0ad143cd9ab20f6ba9d5b8494b5a565749b97e58..b12fbbf726612f4504b8ac4d21e59b4b36ceba24 100644 GIT binary patch literal 49565 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

@hM5(h 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 Qvok?hP#!)MmK8zye~?^y4gdfE literal 35273 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 HNyPsLvJJ+5 diff --git a/docs/postscript/splat.ps b/docs/postscript/splat.ps index 291e7ff..aa19249 100644 --- a/docs/postscript/splat.ps +++ b/docs/postscript/splat.ps @@ -1,13 +1,13 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.17.2 -%%CreationDate: Thu Mar 16 14:29:40 2006 +%%CreationDate: Fri Dec 22 13:04:16 2006 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%+ font Symbol %%DocumentSuppliedResources: procset grops 1.17 2 -%%Pages: 9 +%%Pages: 14 %%PageOrder: Ascend %%Orientation: Portrait %%EndComments @@ -213,508 +213,585 @@ BP /Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0(splat \255 An RF)108 96 Q /F2 10/Times-Bold@0 SF(S)2.5 E F0(ignal)A F2(P)2.5 E F0(ropag)A(ation,) -.05 E F2(L)2.5 E F0(oss,)A F2(A)2.5 E F0(nd)A F2(T)2.5 E F0 -(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 3.47(splat [-t)108 -124.8 R/F3 10/Times-Italic@0 SF(tr)8.47 E(ansmitter_site)-.15 E(.qth) --.15 E F0 5.97(][)C(-r)-5.97 E F3 -.37(re)8.47 G(ceiver_site).37 E(.qth) --.15 E F0 5.97(][)C(-c)-5.97 E F3(rx_antenna_height_for_los_co)8.47 E -(ver)-.1 E -.1(age)-.15 G(_analysis).1 E 1.244(\(feet\) \(\215oat\))108 -136.8 R F0 3.744(][)C(-L)-3.744 E F3(rx_antenna_height_for_Longle)6.244 -E(y-Rice_co)-.3 E(ver)-.1 E -.1(age)-.15 G 1.244 -(_analysis \(feet\) \(\215oat\)).1 F F0 3.745(][)C(-p)-3.745 E F3(terr) -6.245 E(ain_pr)-.15 E(o-)-.45 E(\214le)108 148.8 Q(.e)-.15 E(xt)-.2 E F0 -8.718(][)C(-e)-8.718 E F3(ele)11.218 E(vation_pr)-.15 E(o\214le)-.45 E -(.e)-.15 E(xt)-.2 E F0 8.718(][)C(-h)-8.718 E F3(height_pr)11.218 E -(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C(-l)-8.717 E F3(Longle) -11.217 E(y-Rice_pr)-.3 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 8.717(][)C -(-o)-8.717 E F3(topo-)11.217 E(gr)108 160.8 Q(aphic_map_\214lename)-.15 -E(.ppm)-.15 E F0 6.97(][)C(-b)-6.97 E F3(carto)9.47 E(gr)-.1 E -(aphic_boundary_\214lename)-.15 E(.dat)-.15 E F0 6.97(][)C(-s)-6.97 E F3 -(site/city_database)9.47 E(.dat)-.15 E F0 6.97(][)C(-d)-6.97 E F3 -(sdf_dir)108 172.8 Q(ectory_path)-.37 E F0 4.932(][)C(-m)-4.932 E F3 -(earth_r)7.431 E 2.431(adius_multiplier \(\215oat\))-.15 F F0 4.931(][)C -(-R)-4.931 E F3(maximum_co)7.431 E(ver)-.1 E -.1(age)-.15 G(_r).1 E(ang) --.15 E 4.931(e\()-.1 G 2.431(for -c or -L\))-4.931 F -(\(miles\) \(\215oat\))108 184.8 Q F0 2.5(][)C(-dB)-2.5 E F3 -(maximum attenuation contour to display on path loss maps \(80-230 dB\)) -2.5 E F0 2.5(][)C(-n] [-N])-2.5 E F1(DESCRIPTION)72 201.6 Q F2(SPLA)108 -213.6 Q(T!)-.95 E F0 .853(is a po)3.353 F .853 -(werful terrestrial RF propag)-.25 F .854 -(ation and terrain analysis tool co)-.05 F -.15(ve)-.15 G .854 -(ring the spectrum between).15 F .33(20 MHz and 20 GHz.)108 225.6 R .33 -(It is designed for operation on Unix and Linux-based w)5.33 F -(orkstations.)-.1 E F2(SPLA)5.33 E(T!)-.95 E F0 .33(is free)2.83 F -(softw)108 237.6 Q 4.453(are. Redistrib)-.1 F 1.954(ution and/or modi\ +(errain analysis tool)A F1(SYNOPSIS)72 112.8 Q F0 2.893(splat [-t)108 +124.8 R/F3 10/Times-Italic@0 SF(tr)7.893 E(ansmitter_site)-.15 E(.qth) +-.15 E F0 5.393(][)C(-r)-5.393 E F3 -.37(re)5.393 G(ceiver_site).37 E +(.qth)-.15 E F0 5.393(][)C(-c)-5.393 E F3 2.892 +(rx antenna height for LOS co)5.393 F(ver)-.1 E 3.092 -.1(age a)-.15 H +(nalysis).1 E(\(feet/meter)108 136.8 Q .399(s\) \(\215oat\))-.1 F F0 +2.899(][)C(-L)-2.899 E F3 .399(rx antenna height for Longle)2.899 F .399 +(y-Rice co)-.3 F(ver)-.1 E .599 -.1(age a)-.15 H .399 +(nalysis \(feet/meter).1 F .4(s\) \(\215oat\))-.1 F F0 2.9(][)C(-p)-2.9 +E F3(ter)2.9 E(-)-.2 E -.15(ra)108 148.8 S(in_pr).15 E(o\214le)-.45 E +(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-e)-2.85 E F3(ele)2.85 E(vation_pr)-.15 +E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-h)-2.85 E F3 +(height_pr)2.85 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 2.85(][)C(-H) +-2.85 E F3(normalized_height_pr)2.85 E(o\214le)-.45 E(.e)-.15 E(xt)-.2 E +F0 2.85(][)C(-l)-2.85 E F3(Lon-)2.85 E(gle)108 160.8 Q(y-Rice_pr)-.3 E +(o\214le)-.45 E(.e)-.15 E(xt)-.2 E F0 5.518(][)C(-o)-5.518 E F3(topo) +5.518 E(gr)-.1 E(aphic_map_\214lename)-.15 E(.ppm)-.15 E F0 5.518(][)C +(-b)-5.518 E F3(carto)5.518 E(gr)-.1 E(aphic_boundary_\214lename)-.15 E +(.dat)-.15 E F0 5.518(][)C(-s)-5.518 E F3(site/city_database)108 172.8 Q +(.dat)-.15 E F0 3.236(][)C(-d)-3.236 E F3(sdf_dir)3.236 E(ectory_path) +-.37 E F0 3.236(][)C(-m)-3.236 E F3 .736(earth r)3.236 F .735 +(adius multiplier \(\215oat\))-.15 F F0 3.235(][)C(-f)-3.235 E F3(fr) +3.235 E .735(equency \(MHz\) for)-.37 F -1.77 -.55(Fr e)108 184.8 T .815 +(snel zone calculations \(\215oat\)).55 F F0 3.315(][)C(-R)-3.315 E F3 +.815(maximum co)3.315 F(ver)-.1 E 1.016 -.1(age r)-.15 H .816 +(adius \(miles/kilometer)-.05 F .816(s\) \(\215oat\))-.1 F F0 3.316(][)C +(-dB)-3.316 E F3(maximum)3.316 E 1.431 +(attenuation contour to display on path loss maps \(80-230 dB\))108 +196.8 R F0 3.931(][)C(-nf)-3.931 E F3 1.43(do not plot F)3.93 F -.37(re) +-.55 G 1.43(snel zones in height).37 F(plots)108 208.8 Q F0 2.874(][)C +(-plo)-2.874 E F3(path_loss_output_\214le)2.874 E(.txt)-.15 E F0 2.874 +(][)C(-pli)-2.874 E F3(path_loss_input_\214le)2.874 E(.txt)-.15 E F0 +2.874(][)C(-udt)-2.874 E F3(user_de\214ned_terr)2.875 E(ain_\214le)-.15 +E(.dat)-.15 E F0 2.875(][)C(-n])-2.875 E([-N] [-geo] [-kml] [-metric]) +108 220.8 Q F1(DESCRIPTION)72 237.6 Q F2(SPLA)108 249.6 Q(T!)-.95 E F0 +.854(is a po)3.354 F .854(werful terrestrial RF propag)-.25 F .853 +(ation and terrain analysis tool co)-.05 F -.15(ve)-.15 G .853 +(ring the spectrum between).15 F .968(20 MHz and 20 GHz.)108 261.6 R F2 +(SPLA)5.968 E(T!)-.95 E F0 .968(is free softw)3.468 F .968 +(are, and is designed for operation on Unix and Linux-based)-.1 F -.1 +(wo)108 273.6 S 3.171(rkstations. Redistrib).1 F .671(ution and/or modi\ \214cation is permitted under the terms of the GNU General Public)-.2 F -.376(License as published by the Free Softw)108 249.6 R .376(are F)-.1 F +.376(License as published by the Free Softw)108 285.6 R .376(are F)-.1 F .376(oundation, either v)-.15 F .376(ersion 2 of the License or an)-.15 -F 2.875(yl)-.15 G .375(ater v)-2.875 F(ersion.)-.15 E .348(Adoption of) -108 261.6 R F2(SPLA)2.848 E(T!)-.95 E F0 .349(source code in proprietar\ -y or closed-source applications is a violation of this license,)2.848 F -(and is)108 273.6 Q F2(strictly)2.5 E F0(forbidden.)2.5 E F2(SPLA)108 -297.6 Q(T!)-.95 E F0 .531(is distrib)3.031 F .531 -(uted in the hope that it will be useful, b)-.2 F .53(ut WITHOUT ANY W) --.2 F(ARRANTY)-1.2 E 3.03(,w)-1.29 G .53(ithout e)-3.03 F -.15(ve)-.25 G -(n).15 E .959(the implied w)108 309.6 R .959(arranty of MERCHANT)-.1 F -.959(ABILITY or FITNESS FOR A P)-.93 F(AR)-.92 E .96 +F 2.876(yl)-.15 G .376(ater v)-2.876 F(ersion.)-.15 E .349(Adoption of) +108 297.6 R F2(SPLA)2.849 E(T!)-.95 E F0 .349(source code in proprietar\ +y or closed-source applications is a violation of this license,)2.849 F +(and is)108 309.6 Q F2(strictly)2.5 E F0(forbidden.)2.5 E F2(SPLA)108 +333.6 Q(T!)-.95 E F0 .53(is distrib)3.03 F .531 +(uted in the hope that it will be useful, b)-.2 F .531(ut WITHOUT ANY W) +-.2 F(ARRANTY)-1.2 E 3.031(,w)-1.29 G .531(ithout e)-3.031 F -.15(ve) +-.25 G(n).15 E .96(the implied w)108 345.6 R .959(arranty of MERCHANT) +-.1 F .959(ABILITY or FITNESS FOR A P)-.93 F(AR)-.92 E .959 (TICULAR PURPOSE. See the)-.6 F -(GNU General Public License for more details.)108 321.6 Q F1(INTR)72 -338.4 Q(ODUCTION)-.329 E F0 .575(Applications of)108 350.4 R F2(SPLA) -3.075 E(T!)-.95 E F0 .574(include the visualization, design, and link b) -3.075 F .574(udget analysis of wireless W)-.2 F .574(ide Area)-.4 F -(Netw)108 362.4 Q 1.939(orks \(W)-.1 F 1.939 +(GNU General Public License for more details.)108 357.6 Q F1(INTR)72 +374.4 Q(ODUCTION)-.329 E F0 .574(Applications of)108 386.4 R F2(SPLA) +3.074 E(T!)-.95 E F0 .574(include the visualization, design, and link b) +3.074 F .575(udget analysis of wireless W)-.2 F .575(ide Area)-.4 F +(Netw)108 398.4 Q 1.94(orks \(W)-.1 F 1.939 (ANs\), commercial and amateur radio communication systems abo)-1.2 F -2.239 -.15(ve 2)-.15 H 4.439(0M).15 G 1.94(Hz, micro)-4.439 F -.1(wa) --.25 G -.15(ve)-.1 G 1.194(links, frequenc)108 374.4 R 3.694(yc)-.15 G -1.194(oordination, and the determination of analog and digital terrestr\ -ial radio and tele)-3.694 F(vision)-.25 E(contour re)108 386.4 Q(gions.) --.15 E F2(SPLA)108 410.4 Q(T!)-.95 E F0(pro)4.69 E 2.191(vides RF site \ -engineering data such as great circle distances and bearings between si\ -tes,)-.15 F 2.725(antenna ele)108 422.4 R -.25(va)-.25 G 2.724 -(tion angles \(uptilt\), depression angles \(do).25 F 2.724 -(wntilt\), antenna height abo)-.25 F 3.024 -.15(ve m)-.15 H 2.724 -(ean sea le).15 F -.15(ve)-.25 G(l,).15 E 1.65(antenna height abo)108 -434.4 R 1.95 -.15(ve a)-.15 H -.15(ve)-.05 G 1.65 -(rage terrain, bearings and distances to kno).15 F 1.65 -(wn obstructions, Longle)-.25 F 1.65(y-Rice path)-.15 F 1.565(attenuati\ -on, and minimum antenna height requirements needed to establish line-of\ --sight communication)108 446.4 R .072 -(paths absent of obstructions due to terrain.)108 458.4 R F2(SPLA)5.072 -E(T!)-.95 E F0 .072 -(produces reports, graphs, and highly detailed and care-)2.572 F .986(f\ -ully annotated topographic maps depicting line-of-sight paths, path los\ -s, and e)108 470.4 R .985(xpected co)-.15 F -.15(ve)-.15 G .985 -(rage areas of).15 F 1.777(transmitters and repeater systems.)108 482.4 -R 1.777 -(When performing line-of-sight analysis in situations where multiple) -6.777 F 1.395(transmitter or repeater sites are emplo)108 494.4 R(yed,) --.1 E F2(SPLA)3.895 E(T!)-.95 E F0 1.395(determines indi)3.895 F 1.394 -(vidual and mutual areas of co)-.25 F -.15(ve)-.15 G(rage).15 E -(within the netw)108 506.4 Q(ork speci\214ed.)-.1 E F2(SPLA)108 530.4 Q -(T!)-.95 E F0 2.137(operates in tw)4.637 F 4.638(od)-.1 G 2.138 -(istinct modes:)-4.638 F F3 2.138(point-to-point mode)4.638 F F0 4.638 -(,a)C(nd)-4.638 E F3(ar)4.638 E 2.138(ea pr)-.37 F 2.138(ediction mode) --.37 F F0 4.638(,a)C 2.138(nd may be)-4.638 F(in)108 542.4 Q -.2(vo)-.4 -G -.1(ke).2 G 3.084(du).1 G .583 -(sing either line-of-sight \(LOS\) or Irre)-3.084 F .583(gular T)-.15 F -.583(errain \(ITM\) propag)-.7 F .583(ation models.)-.05 F -.35(Tr)5.583 -G .583(ue Earth, four).35 F(-)-.2 E .243(thirds Earth, or an)108 554.4 R -2.743(yo)-.15 G .243(ther Earth radius may be speci\214ed by the user w\ -hen performing line-of-sight analysis.)-2.743 F F1(INPUT FILES)72 571.2 -Q F2(SPLA)108 583.2 Q(T!)-.95 E F0 .508(is a command-line dri)3.008 F --.15(ve)-.25 G 3.008(na).15 G .507 +2.239 -.15(ve 2)-.15 H 4.439(0M).15 G 1.939(Hz, micro)-4.439 F -.1(wa) +-.25 G -.15(ve)-.1 G .92(links, frequenc)108 410.4 R 3.42(yc)-.15 G .92 +(oordination and interference studies, and the determination of analog \ +and digital terres-)-3.42 F(trial radio and tele)108 422.4 Q +(vision contour re)-.25 E(gions.)-.15 E F2(SPLA)108 446.4 Q(T!)-.95 E F0 +(pro)4.691 E 2.191(vides RF site engineering data such as great circle \ +distances and bearings between sites,)-.15 F 2.724(antenna ele)108 458.4 +R -.25(va)-.25 G 2.724(tion angles \(uptilt\), depression angles \(do) +.25 F 2.724(wntilt\), antenna height abo)-.25 F 3.024 -.15(ve m)-.15 H +2.725(ean sea le).15 F -.15(ve)-.25 G(l,).15 E .22(antenna height abo) +108 470.4 R .52 -.15(ve a)-.15 H -.15(ve)-.05 G .22 +(rage terrain, bearings and distances to kno).15 F .22 +(wn obstructions, and Longle)-.25 F .22(y-Rice path)-.15 F 2.726 +(attenuation. In)108 482.4 R .226(addition, the minimum antenna height \ +requirements needed to clear terrain, the \214rst Fresnel)2.726 F +(zone, and 60% of the \214rst Fresnel zone are also pro)108 494.4 Q +(vided.)-.15 E F2(SPLA)108 518.4 Q(T!)-.95 E F0 .102(produces reports, \ +graphs, and high resolution topographic maps that depict line-of-sight \ +paths, and)2.603 F(re)108 530.4 Q .153 +(gional path loss contours through which e)-.15 F .154(xpected co)-.15 F +-.15(ve)-.15 G .154(rage areas of transmitters and repeater systems can) +.15 F 1.237(be obtained.)108 542.4 R 1.237(When performing line-of-sigh\ +t analysis in situations where multiple transmitter or repeater)6.237 F +.368(sites are emplo)108 554.4 R(yed,)-.1 E F2(SPLA)2.868 E(T!)-.95 E F0 +.368(determines indi)2.868 F .369(vidual and mutual areas of co)-.25 F +-.15(ve)-.15 G .369(rage within the netw).15 F .369(ork speci-)-.1 F +(\214ed.)108 566.4 Q(Simply typing)108 590.4 Q/F4 10/Courier@0 SF(splat) +2.5 E F0(on the command line will return a summary of)2.5 E F2(SPLA)2.5 +E(T!)-.95 E F0 1.1 -.55('s c)D(ommand line options:).55 E F4 +(--==[ SPLAT! v1.2.0 Available Options... ]==--)198 614.4 Q +(-t txsite\(s\).qth \(max of 4\))144 638.4 Q(-r rxsite.qth)144 650.4 Q +(-c plot coverage of TX\(s\) with an RX antenna at X feet/meters AGL)144 +662.4 Q(-L plot path loss map of TX based on an RX at X feet/meters AGL) +144 674.4 Q +(-s filename\(s\) of city/site file\(s\) to import \(max of 5\))144 +686.4 Q(-b filename\(s\) of cartographic boundary file\(s\) to import \ +\(5 max\))144 698.4 Q(-p filename of terrain profile graph to plot)144 +710.4 Q(-e filename of terrain elevation graph to plot)144 722.4 Q F0 +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(1)190.955 +E EP +%%Page: 2 2 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF +(-h filename of terrain height graph to plot)144 84 Q +(-H filename of normalized terrain height graph to plot)144 96 Q +(-l filename of Longley-Rice graph to plot)144 108 Q +(-o filename of topographic map to generate \(.ppm\))144 120 Q +(-u filename of user-defined terrain file to import)144 132 Q +(-d sdf file directory path \(overrides path in ~/.splat_path file\))144 +144 Q(-n no analysis, brief report)144 156 Q(-N no analysis, no report) +144 168 Q(-m earth radius multiplier)144 180 Q +(-f frequency for Fresnel zone calculation \(MHz\))144 192 Q +(-R modify default range for -c or -L \(miles/kilometers\))144 204 Q +(-db maximum loss contour to display on path loss maps \(80-230 dB\))138 +216 Q(-nf do not plot Fresnel zones in height plots)138 228 Q +(-plo filename of path-loss output file)132 240 Q +(-pli filename of path-loss input file)132 252 Q +(-udt filename of user defined terrain input file)132 264 Q +(-geo generate a .geo georeference file \(with .ppm output\))132 276 Q +(-kml generate a Google Earth .kml file \(for point-to-point links\))132 +288 Q(-metric employ metric rather than imperial units for all user I/O) +114 300 Q/F2 10.95/Times-Bold@0 SF(INPUT FILES)72 328.8 Q/F3 10 +/Times-Bold@0 SF(SPLA)108 340.8 Q(T!)-.95 E F0 .508 +(is a command-line dri)3.008 F -.15(ve)-.25 G 3.008(na).15 G .507 (pplication, and reads input data through a number of data \214les.) -3.008 F(Some)5.507 E 1.42(\214les are mandatory for successful e)108 -595.2 R -.15(xe)-.15 G 1.42 +352.8 R -.15(xe)-.15 G 1.42 (cution of the program, while others are optional.).15 F 1.42 -(Mandatory \214les)6.42 F .871(include SPLA)108 607.2 R 3.371(TD)-1.11 G -.871(ata Files \(SDF \214les\), site location \214les \(QTH \214les\), \ -and Longle)-3.371 F .87(y-Rice model parameter)-.15 F -(\214les \(LRP \214les\).)108 619.2 Q(Optional \214les include city/sit\ -e location \214les, and cartographic boundary \214les.)5 E F1(SPLA)72 -636 Q 2.738(TD)-1.04 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F2(SPLA) -108 648 Q(T!)-.95 E F0 .43(imports topographic data in the form of SPLA) -2.93 F 2.93(TD)-1.11 G .43(ata Files \(SDFs\).)-2.93 F .43 -(These \214les may be generated)5.43 F .737 -(from a number of information sources.)108 660 R .737 +(Mandatory \214les)6.42 F 1.085(include 3-arc second topograph)108 364.8 +R 3.585(ym)-.05 G 1.085(odels in the form of SPLA)-3.585 F 3.585(TD) +-1.11 G 1.085(ata Files \(SDF \214les\), site location \214les)-3.585 F +.394(\(QTH \214les\), and Longle)108 376.8 R .394 +(y-Rice model parameter \214les \(LRP \214les\).)-.15 F .395 +(Optional \214les include city location \214les,)5.394 F 1.324 +(cartographic boundary \214les, user)108 388.8 R 1.323(-de\214ned terra\ +in \214les, path-loss input \214les, and antenna radiation pattern)-.2 F +(\214les.)108 400.8 Q F2(SPLA)72 417.6 Q 2.738(TD)-1.04 G -1.644 -1.04 +(AT A)-3.121 H(FILES)3.778 E F3(SPLA)108 429.6 Q(T!)-.95 E F0 .43 +(imports topographic data in the form of SPLA)2.93 F 2.93(TD)-1.11 G .43 +(ata Files \(SDFs\).)-2.93 F .43(These \214les may be generated)5.43 F +.737(from a number of information sources.)108 441.6 R .737 (In the United States, SPLA)5.737 F 3.237(TD)-1.11 G .737 (ata Files can be generated through)-3.237 F 5.441(U.S. Geological)108 -672 R(Surv)5.441 E 3.241 -.15(ey D)-.15 H 2.941(igital Ele).15 F -.25 -(va)-.25 G 2.942(tion Models \(DEMs\) using the).25 F F2(usgs2sdf)5.442 -E F0 2.942(utility included with)5.442 F F2(SPLA)108 684 Q(T!)-.95 E F0 -8.595(.U)C 3.595(SGS Digital Ele)-8.595 F -.25(va)-.25 G 3.595 +453.6 R(Surv)5.441 E 3.241 -.15(ey D)-.15 H 2.941(igital Ele).15 F -.25 +(va)-.25 G 2.942(tion Models \(DEMs\) using the).25 F F3(usgs2sdf)5.442 +E F0 2.942(utility included with)5.442 F F3(SPLA)108 465.6 Q(T!)-.95 E +F0 8.595(.U)C 3.595(SGS Digital Ele)-8.595 F -.25(va)-.25 G 3.595 (tion Models compatible with this utility may be do).25 F 3.595 -(wnloaded from:)-.25 F F3(http://edcftp.cr)108 696 Q(.usgs.go)-1.11 E -(v/pub/data/DEM/250/)-.1 E F0(.)A 2.009(Signi\214cantly better resoluti\ -on can be obtained through the use of SR)108 720 R 2.01(TM-3 V)-.6 F -2.01(ersion 2 digital ele)-1.11 F -.25(va)-.25 G(tion).25 E(KD2BD Softw) -72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(1)198.45 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F -(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 4.138(models. These) -108 84 R 1.638 -(models are the result of the STS-99 Space Shuttle Radar T)4.138 F -(opograph)-.8 E 4.138(yM)-.05 G 1.638(ission, and are)-4.138 F -.2(av) -108 96 S .828(ailable for most populated re)-.05 F .829 -(gions of the Earth.)-.15 F(SPLA)5.829 E 3.329(TD)-1.11 G .829 -(ata Files may be generated from SR)-3.329 F .829(TM data)-.6 F 1.435 -(using the included)108 108 R/F1 10/Times-Bold@0 SF(srtm2sdf)3.935 E F0 -(utility)3.935 E 6.434(.S)-.65 G -.6(RT)-6.434 G 1.434(M-3 V).6 F 1.434 -(ersion 2 data may be obtained through anon)-1.11 F 1.434(ymous FTP)-.15 -F(from:)108 120 Q/F2 10/Times-Italic@0 SF(ftp://e0srp01u.ecs.nasa.go)2.5 -E(v:21/srtm/ver)-.1 E(sion2/)-.1 E F0 .241(Despite the higher accurac) -108 144 R 2.741(yt)-.15 G .241(hat SR)-2.741 F .241(TM data has to of) --.6 F(fer)-.25 E 2.741(,s)-.4 G .241(ome v)-2.741 F .241 -(oids in the data sets e)-.2 F 2.741(xist. When)-.15 F -.2(vo)2.741 G -.242(ids are).2 F .332(detected, the)108 156 R F1(srtm2sdf)2.832 E F0 -.332(utility replaces them with corresponding data found in e)2.832 F -.332(xisting SDF \214les \(that were)-.15 F .033 -(presumably created from earlier USGS data through the)108 168 R F1 +(wnloaded from:)-.25 F/F4 10/Times-Italic@0 SF(http://edcftp.cr)108 +477.6 Q(.usgs.go)-1.11 E(v/pub/data/DEM/250/)-.1 E F0(.)A .798 +(Signi\214cantly better resolution and accurac)108 501.6 R 3.298(yc)-.15 +G .798(an be obtained through the use of SR)-3.298 F .798(TM-3 V)-.6 F +.798(ersion 2 digital)-1.11 F(ele)108 513.6 Q -.25(va)-.25 G .66 +(tion models.).25 F .659 +(These models are the product of the STS-99 Space Shuttle Radar T)5.66 F +(opograph)-.8 E 3.159(yM)-.05 G(ission,)-3.159 E .045(and are a)108 +525.6 R -.25(va)-.2 G .045(ilable for most populated re).25 F .045 +(gions of the Earth.)-.15 F(SPLA)5.045 E 2.545(TD)-1.11 G .046 +(ata Files may be generated from SR)-2.545 F(TM)-.6 E .062 +(data using the included)108 537.6 R F3(srtm2sdf)2.562 E F0(utility) +2.562 E 5.061(.S)-.65 G -.6(RT)-5.061 G .061(M-3 V).6 F .061 +(ersion 2 data may be obtained through anon)-1.11 F .061(ymous FTP)-.15 +F(from:)108 549.6 Q F4(ftp://e0srp01u.ecs.nasa.go)2.5 E(v:21/srtm/ver) +-.1 E(sion2/)-.1 E F0 .241(Despite the higher accurac)108 573.6 R 2.741 +(yt)-.15 G .241(hat SR)-2.741 F .241(TM data has to of)-.6 F(fer)-.25 E +2.741(,s)-.4 G .241(ome v)-2.741 F .241(oids in the data sets e)-.2 F +2.741(xist. When)-.15 F -.2(vo)2.741 G .242(ids are).2 F .332 +(detected, the)108 585.6 R F3(srtm2sdf)2.832 E F0 .332 +(utility replaces them with corresponding data found in e)2.832 F .332 +(xisting SDF \214les \(that were)-.15 F .033 +(presumably created from earlier USGS data through the)108 597.6 R F3 (usgs2sdf)2.533 E F0 2.533(utility\). If)2.533 F(USGS-deri)2.534 E -.15 -(ve)-.25 G 2.534(dS).15 G .034(DF data is not)-2.534 F -.2(av)108 180 S -(ailable, v)-.05 E(oids are handled through adjacent pix)-.2 E(el a)-.15 -E -.15(ve)-.2 G(raging, or direct replacement.).15 E(SPLA)108 204 Q -2.782(TD)-1.11 G .282(ata Files contain inte)-2.782 F .282(ger v)-.15 F -.282(alue topographic ele)-.25 F -.25(va)-.25 G .282 +(ve)-.25 G 2.534(dS).15 G .034(DF data is not)-2.534 F -.2(av)108 609.6 +S(ailable, v)-.05 E(oids are handled through adjacent pix)-.2 E(el a) +-.15 E -.15(ve)-.2 G(raging, or direct replacement.).15 E(SPLA)108 633.6 +Q 2.782(TD)-1.11 G .282(ata Files contain inte)-2.782 F .282(ger v)-.15 +F .282(alue topographic ele)-.25 F -.25(va)-.25 G .282 (tions \(in meters\) referenced to mean sea le).25 F -.15(ve)-.25 G -2.782(lf).15 G(or)-2.782 E(1-de)108 216 Q .061(gree by 1-de)-.15 F .061 -(gree re)-.15 F .061 +2.782(lf).15 G(or)-2.782 E(1-de)108 645.6 Q .061(gree by 1-de)-.15 F +.061(gree re)-.15 F .061 (gions of the earth with a resolution of 3-arc seconds.)-.15 F .062 (SDF \214les can be read in either)5.062 F .712(standard format \()108 -228 R F2(.sdf)A F0 3.212(\)a)C 3.212(sg)-3.212 G .712(enerated by the) --3.212 F F1(usgs2sdf)3.211 E F0(and)3.211 E F1(srtm2sdf)3.211 E F0 .711 -(utilities, or in bzip2 compressed format)3.211 F(\()108 240 Q F2(.sdf)A -(.bz2)-.15 E F0 3.067(\). Since)B .568 +657.6 R F4(.sdf)A F0 3.212(\)a)C 3.212(sg)-3.212 G .712(enerated by the) +-3.212 F F3(usgs2sdf)3.211 E F0(and)3.211 E F3(srtm2sdf)3.211 E F0 .711 +(utilities, or in bzip2 compressed format)3.211 F(\()108 669.6 Q F4 +(.sdf)A(.bz2)-.15 E F0 3.067(\). Since)B .568 (uncompressed \214les can be processed slightly f)3.067 F .568 (aster than \214les that ha)-.1 F .868 -.15(ve b)-.2 H .568 -(een compressed,).15 F F1(SPLA)108 252 Q(T!)-.95 E F0 1.566 -(searches for the needed SDF data in uncompressed format \214rst.)4.066 -F 1.565(If uncompressed data cannot)6.565 F(located,)108 264 Q F1(SPLA) -3.47 E(T!)-.95 E F0 .97 +(een compressed,).15 F F3(SPLA)108 681.6 Q(T!)-.95 E F0 1.764 +(searches for needed SDF data in uncompressed format \214rst.)4.265 F +1.764(If uncompressed data cannot be)6.764 F(located,)108 693.6 Q F3 +(SPLA)3.47 E(T!)-.95 E F0 .97 (then searches for data in bzip2 compressed format.)3.47 F .971 (If no compressed SDF \214les can be)5.971 F .779(found for the re)108 -276 R .779(gion requested,)-.15 F F1(SPLA)3.278 E(T!)-.95 E F0 .778 +705.6 R .779(gion requested,)-.15 F F3(SPLA)3.278 E(T!)-.95 E F0 .778 (assumes the re)3.278 F .778(gion is o)-.15 F -.15(ve)-.15 G 3.278(rw) .15 G(ater)-3.378 E 3.278(,a)-.4 G .778(nd will assign an ele)-3.278 F --.25(va)-.25 G .778(tion of).25 F(sea-le)108 288 Q -.15(ve)-.25 G 2.5 -(lt).15 G 2.5(ot)-2.5 G(hese areas.)-2.5 E 1.061(This feature of)108 312 -R F1(SPLA)3.561 E(T!)-.95 E F0(mak)3.561 E 1.061 -(es it possible to perform path analysis not only o)-.1 F -.15(ve)-.15 G -3.561(rl).15 G 1.062(and, b)-3.561 F 1.062(ut also between)-.2 F .782 -(coastal areas not represented by Digital Ele)108 324 R -.25(va)-.25 G -.782(tion Model data.).25 F .782(This beha)5.782 F .782(vior of)-.2 F F1 -(SPLA)3.282 E(T!)-.95 E F0 .782(underscores the)3.282 F .103 -(importance of ha)108 336 R .104 -(ving all the SDF \214les required for the re)-.2 F .104 -(gion being analyzed if meaningful results are to be)-.15 F -.15(ex)108 -348 S(pected.).15 E/F3 10.95/Times-Bold@0 SF(SITE LOCA)72 364.8 Q -(TION \(QTH\) FILES)-1.04 E F1(SPLA)108 376.8 Q(T!)-.95 E F0 .839 +-.25(va)-.25 G .778(tion of).25 F(sea-le)108 717.6 Q -.15(ve)-.25 G 2.5 +(lt).15 G 2.5(ot)-2.5 G(hese areas.)-2.5 E(KD2BD Softw)72 768 Q 121.625 +(are 20)-.1 F(December 2006)2.5 E(2)190.955 E EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.061 +(This feature of)108 84 R/F1 10/Times-Bold@0 SF(SPLA)3.561 E(T!)-.95 E +F0(mak)3.561 E 1.061(es it possible to perform path analysis not only o) +-.1 F -.15(ve)-.15 G 3.561(rl).15 G 1.062(and, b)-3.561 F 1.062 +(ut also between)-.2 F .555 +(coastal areas not represented by Digital Ele)108 96 R -.25(va)-.25 G +.554(tion Model data.).25 F(Ho)5.554 E(we)-.25 E -.15(ve)-.25 G 1.354 +-.4(r, t).15 H .554(his beha).4 F .554(vior of)-.2 F F1(SPLA)3.054 E(T!) +-.95 E F0(under)5.554 E(-)-.2 E 1.575(scores the importance of ha)108 +108 R 1.575(ving all the SDF \214les required for the re)-.2 F 1.575 +(gion being analyzed if meaningful)-.15 F(results are to be e)108 120 Q +(xpected.)-.15 E/F2 10.95/Times-Bold@0 SF(SITE LOCA)72 136.8 Q +(TION \(QTH\) FILES)-1.04 E F1(SPLA)108 148.8 Q(T!)-.95 E F0 .839 (imports site location information of transmitter and recei)3.339 F -.15 (ve)-.25 G 3.338(rs).15 G .838(ites analyzed by the program from)-3.338 -F .375(ASCII \214les ha)108 388.8 R .375(ving a)-.2 F F2(.qth)2.875 E F0 --.15(ex)2.875 G 2.875(tension. QTH).15 F .375(\214les contain the site') -2.875 F 2.875(sn)-.55 G .375(ame, the site')-2.875 F 2.876(sl)-.55 G -.376(atitude \(positi)-2.876 F .676 -.15(ve i)-.25 H 2.876(fN).15 G -(orth)-2.876 E 1.127(of the equator)108 400.8 R 3.626(,n)-.4 G -2.25 --.15(eg a)-3.626 H(ti).15 E 1.426 -.15(ve i)-.25 H 3.626(fS).15 G 1.126 -(outh\), the site')-3.626 F 3.626(sl)-.55 G 1.126(ongitude \(in de) --3.626 F 1.126(grees W)-.15 F 1.126(est, 0 to 360 de)-.8 F 1.126 -(grees\), and the site')-.15 F(s)-.55 E .746(antenna height abo)108 -412.8 R 1.046 -.15(ve g)-.15 H .746(round le).15 F -.15(ve)-.25 G 3.246 -(l\().15 G -.4(AG)-3.246 G 3.246(L\). A).4 F .747 -(single line-feed character separates each \214eld.)3.246 F .747 -(The antenna)5.747 F .459 -(height is assumed to be speci\214ed in feet unless follo)108 424.8 R -.459(wed by the letter)-.25 F F2(m)2.959 E F0 .459(or the w)2.959 F(ord) --.1 E F2(meter)2.959 E(s)-.1 E F0 .459(in either upper)2.959 F .424 -(or lo)108 436.8 R .424(wer case.)-.25 F .425 +F .375(ASCII \214les ha)108 160.8 R .375(ving a)-.2 F/F3 10 +/Times-Italic@0 SF(.qth)2.875 E F0 -.15(ex)2.875 G 2.875(tension. QTH) +.15 F .375(\214les contain the site')2.875 F 2.875(sn)-.55 G .375 +(ame, the site')-2.875 F 2.876(sl)-.55 G .376(atitude \(positi)-2.876 F +.676 -.15(ve i)-.25 H 2.876(fN).15 G(orth)-2.876 E 1.127(of the equator) +108 172.8 R 3.626(,n)-.4 G -2.25 -.15(eg a)-3.626 H(ti).15 E 1.426 -.15 +(ve i)-.25 H 3.626(fS).15 G 1.126(outh\), the site')-3.626 F 3.626(sl) +-.55 G 1.126(ongitude \(in de)-3.626 F 1.126(grees W)-.15 F 1.126 +(est, 0 to 360 de)-.8 F 1.126(grees\), and the site')-.15 F(s)-.55 E +1.639(antenna height abo)108 184.8 R 1.939 -.15(ve g)-.15 H 1.639 +(round le).15 F -.15(ve)-.25 G 4.139(l\().15 G -.4(AG)-4.139 G 1.639 +(L\), each separated by a single line-feed character).4 F 6.64(.T)-.55 G +1.64(he antenna)-6.64 F .459 +(height is assumed to be speci\214ed in feet unless follo)108 196.8 R +.459(wed by the letter)-.25 F F3(m)2.959 E F0 .459(or the w)2.959 F(ord) +-.1 E F3(meter)2.959 E(s)-.1 E F0 .459(in either upper)2.959 F .424 +(or lo)108 208.8 R .424(wer case.)-.25 F .425 (Latitude and longitude information may be e)5.424 F .425 -(xpressed in either decimal format \(74.6889\) or)-.15 F(de)108 448.8 Q +(xpressed in either decimal format \(74.6889\) or)-.15 F(de)108 220.8 Q (gree, minute, second \(DMS\) format \(74 41 20.0\).)-.15 E -.15(Fo)108 -472.8 S 3.356(re).15 G .856 +244.8 S 3.356(re).15 G .856 (xample, a site location \214le describing tele)-3.506 F .856 (vision station WNJT)-.25 F 3.356(,T)-.74 G .856(renton, NJ \()-3.706 F -F2(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 484.8 -Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 508.8 Q(40.2833)156 520.8 Q -(74.6889)156 532.8 Q(990.00)156 544.8 Q F0 .23 -(Each transmitter and recei)108 568.8 R -.15(ve)-.25 G 2.73(rs).15 G .23 +F3(wnjt.qth)A F0 3.356(\)m)C .856(ight read as)-3.356 F(follo)108 256.8 +Q(ws:)-.25 E/F4 10/Courier@0 SF(WNJT)156 280.8 Q(40.2833)156 292.8 Q +(74.6889)156 304.8 Q(990.00)156 316.8 Q F0 .23 +(Each transmitter and recei)108 340.8 R -.15(ve)-.25 G 2.73(rs).15 G .23 (ite analyzed by)-2.73 F F1(SPLA)2.73 E(T!)-.95 E F0 .23 (must be represented by its o)2.73 F .23(wn site location \(QTH\))-.25 F -(\214le.)108 580.8 Q F3(LONGLEY)72 597.6 Q(-RICE P)-1.007 E -(ARAMETER \(LRP\) FILES)-.81 E F1(SPLA)108 609.6 Q(T!)-.95 E F0 .058 -(imports Longle)2.558 F .058 -(y-Rice model parameter data from \214les ha)-.15 F .057 -(ving the same base name as the transmit-)-.2 F .941 -(ter site QTH \214le, b)108 621.6 R .941(ut with a)-.2 F F2(.lrp)3.441 E -F0 -.15(ex)3.441 G .941(tension, thus pro).15 F .942 -(viding simple and accurate correlation between these)-.15 F -(associated data sets.)108 633.6 Q(The format for the Longle)5 E -(y-Rice model parameter \214les is as follo)-.15 E(ws \()-.25 E F2 -(wnjt.lrp)A F0(\):)A F4 6(15.000 ;)156 657.6 R -(Earth Dielectric Constant \(Relative permittivity\))6 E 12(0.005 ;)156 -669.6 R(Earth Conductivity \(Siemens per meter\))6 E -(301.000 ; Atmospheric Bending Constant \(N-units\))156 681.6 Q -(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 693.6 Q 42(5;)156 -705.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156 -717.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156 -729.6 R(Fraction of situations \(50% of locations\))6 E F0(KD2BD Softw) -72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(2)198.45 E EP -%%Page: 3 3 +(\214le.)108 352.8 Q F2(LONGLEY)72 369.6 Q(-RICE P)-1.007 E +(ARAMETER \(LRP\) FILES)-.81 E F0(Longle)108 381.6 Q 1.082 +(y-Rice parameter data \214les are required for)-.15 F F1(SPLA)3.581 E +(T!)-.95 E F0 1.081(to determine RF path loss in either point-to-)3.581 +F .291(point or area prediction mode.)108 393.6 R(Longle)5.291 E .291 +(y-Rice model parameter data is read from \214les ha)-.15 F .292 +(ving the same base)-.2 F(name as the transmitter site QTH \214le, b)108 +405.6 Q(ut with a format \()-.2 E F3(wnjt.lrp)A F0(\):)A F4 6(15.000 ;) +156 429.6 R(Earth Dielectric Constant \(Relative permittivity\))6 E 12 +(0.005 ;)156 441.6 R(Earth Conductivity \(Siemens per meter\))6 E +(301.000 ; Atmospheric Bending Constant \(N-units\))156 453.6 Q +(700.000 ; Frequency in MHz \(20 MHz to 20 GHz\))156 465.6 Q 42(5;)156 +477.6 S(Radio Climate \(5 = Continental Temperate\))-36 E 42(0;)156 +489.6 S(Polarization \(0 = Horizontal, 1 = Vertical\))-36 E 24(0.5 ;)156 +501.6 R(Fraction of situations \(50% of locations\))6 E 24(0.5 ;)156 +513.6 R(Fraction of time \(50% of the time\))6 E F0 .771(If an LRP \214\ +le corresponding to the tx_site QTH \214le cannot be found,)108 537.6 R +F1(SPLA)3.27 E(T!)-.95 E F0 .77(scans the current w)3.27 F(orking)-.1 E +.085(directory for the \214le "splat.lrp".)108 549.6 R .085 +(If this \214le cannot be found, then the def)5.085 F .085 +(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15 +F .528(assigned by)108 561.6 R F1(SPLA)3.028 E(T!)-.95 E F0 .527(and a \ +corresponding "splat.lrp" \214le containing this data will be written t\ +o the current)3.028 F -.1(wo)108 573.6 S(rking directory).1 E 5(.")-.65 +G(splat.lrp" can then be edited by the user as needed.)-5 E -.8(Ty)108 +597.6 S(pical Earth dielectric constants and conducti).8 E(vity v)-.25 E +(alues are as follo)-.25 E(ws:)-.25 E F4(Dielectric Constant)270 621.6 Q +(Conductivity)12 E(Salt water)156 633.6 Q 48(:8)42 G 96(05)-48 G(.000) +-96 E(Good ground)156 645.6 Q 48(:2)36 G 96(50)-48 G(.020)-96 E +(Fresh water)156 657.6 Q 48(:8)36 G 96(00)-48 G(.010)-96 E(Marshy land) +156 669.6 Q 48(:1)36 G 96(20)-48 G(.007)-96 E(Farmland, forest :)156 +681.6 Q 90(15 0.005)48 F(Average ground)156 693.6 Q 48(:1)18 G 96(50)-48 +G(.005)-96 E(Mountain, sand)156 705.6 Q 48(:1)18 G 96(30)-48 G(.002)-96 +E 72(City :)156 717.6 R 96(50)54 G(.001)-96 E(Poor ground)156 729.6 Q +-18 54(:4 0)36 H(.001)-54 E F0(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F +(December 2006)2.5 E(3)190.955 E EP +%%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F -(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF -24(0.5 ;)156 84 R(Fraction of time \(50% of the time\))6 E F0 .771(If a\ -n LRP \214le corresponding to the tx_site QTH \214le cannot be found,) -108 108 R/F2 10/Times-Bold@0 SF(SPLA)3.27 E(T!)-.95 E F0 .77 -(scans the current w)3.27 F(orking)-.1 E .085 -(directory for the \214le "splat.lrp".)108 120 R .085 -(If this \214le cannot be found, then the def)5.085 F .085 -(ault parameters listed abo)-.1 F .385 -.15(ve w)-.15 H .085(ill be).15 -F .528(assigned by)108 132 R F2(SPLA)3.028 E(T!)-.95 E F0 .527(and a co\ -rresponding "splat.lrp" \214le containing this data will be written to \ -the current)3.028 F -.1(wo)108 144 S(rking directory).1 E 5(.")-.65 G -(splat.lrp" can then be edited by the user as needed.)-5 E -.8(Ty)108 -168 S(pical Earth dielectric constants and conducti).8 E(vity v)-.25 E -(alues are as follo)-.25 E(ws:)-.25 E F1(Dielectric Constant)270 192 Q -(Conductivity)12 E(Salt water)156 204 Q 48(:8)42 G 96(05)-48 G(.000)-96 -E(Good ground)156 216 Q 48(:2)36 G 96(50)-48 G(.020)-96 E(Fresh water) -156 228 Q 48(:8)36 G 96(00)-48 G(.010)-96 E(Marshy land)156 240 Q 48(:1) -36 G 96(20)-48 G(.007)-96 E(Farmland, forest :)156 252 Q 90(15 0.005)48 -F(Average ground)156 264 Q 48(:1)18 G 96(50)-48 G(.005)-96 E -(Mountain, sand)156 276 Q 48(:1)18 G 96(30)-48 G(.002)-96 E 72(City :) -156 288 R 96(50)54 G(.001)-96 E(Poor ground)156 300 Q -18 54(:4 0)36 H -(.001)-54 E F0(Radio climate codes used by)108 324 Q F2(SPLA)2.5 E(T!) --.95 E F0(are as follo)2.5 E(ws:)-.25 E F1(1: Equatorial \(Congo\))156 -348 Q(2: Continental Subtropical \(Sudan\))156 360 Q -(3: Maritime Subtropical \(West coast of Africa\))156 372 Q -(4: Desert \(Sahara\))156 384 Q(5: Continental Temperate)156 396 Q +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E +(Radio climate codes used by)108 84 Q/F1 10/Times-Bold@0 SF(SPLA)2.5 E +(T!)-.95 E F0(are as follo)2.5 E(ws:)-.25 E/F2 10/Courier@0 SF +(1: Equatorial \(Congo\))156 108 Q(2: Continental Subtropical \(Sudan\)) +156 120 Q(3: Maritime Subtropical \(West coast of Africa\))156 132 Q +(4: Desert \(Sahara\))156 144 Q(5: Continental Temperate)156 156 Q (6: Maritime Temperate, over land \(UK and west coasts of US & EU\))156 -408 Q(7: Maritime Temperate, over sea)156 420 Q F0 1.487 -(The Continental T)108 444 R 1.486(emperate climate is common to lar)-.7 +168 Q(7: Maritime Temperate, over sea)156 180 Q F0 1.487 +(The Continental T)108 204 R 1.486(emperate climate is common to lar)-.7 F 1.486(ge land masses in the temperate zone, such as the)-.18 F .756 -(United States.)108 456 R -.15(Fo)5.756 G 3.256(rp).15 G .756 +(United States.)108 216 R -.15(Fo)5.756 G 3.256(rp).15 G .756 (aths shorter than 100 km, there is little dif)-3.256 F .756 -(ference between Continental and Maritime)-.25 F -.7(Te)108 468 S -(mperate climates.).7 E .379(The \214nal tw)108 492 R 2.879(op)-.1 G +(ference between Continental and Maritime)-.25 F -.7(Te)108 228 S +(mperate climates.).7 E .379(The \214nal tw)108 252 R 2.879(op)-.1 G .379(arameters in the)-2.879 F/F3 10/Times-Italic@0 SF(.lrp)2.879 E F0 .379(\214le correspond to the statistical analysis pro)2.879 F .378 -(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 504 R .037 -(this e)2.537 F(xample,)-.15 E F2(SPLA)2.537 E(T!)-.95 E F0 .038(will r\ +(vided by the Longle)-.15 F(y-Rice)-.15 E 2.537(model. In)108 264 R .037 +(this e)2.537 F(xample,)-.15 E F1(SPLA)2.537 E(T!)-.95 E F0 .038(will r\ eturn the maximum path loss occurring 50% of the time \(fraction of) -5.037 F .316(time\) in 50% of situations \(fraction of situations\).)108 -516 R .315(Use a fraction of time parameter of 0.97 for digital tele-) -5.316 F(vision, 0.50 for analog in the United States.)108 528 Q -(Isotropic antennas are assumed.)5 E -.15(Fo)108 552 S 2.782(rf).15 G -.282(urther information on these parameters, see:)-2.782 F F3 -(http://\215attop.its.bldr)2.782 E(doc.go)-.37 E(v/itm.html)-.1 E F0 +5.037 F .346(time\) in 50% of situations \(fraction of situations\).)108 +276 R .346(In the United States, use a fraction of time parameter of) +5.346 F(0.97 for digital tele)108 288 Q(vision \(8VSB modulation\), or \ +0.50 for analog \(VSB-AM+NTSC\) transmissions.)-.25 E -.15(Fo)108 312 S +2.782(rf).15 G .282(urther information on these parameters, see:)-2.782 +F F3(http://\215attop.its.bldr)2.782 E(doc.go)-.37 E(v/itm.html)-.1 E F0 (and)2.783 E F3(http://www)2.783 E(.soft-)-.74 E -(wright.com/faq/engineering/pr)108 564 Q(op_longle)-.45 E(y_rice)-.3 E -(.html)-.15 E/F4 10.95/Times-Bold@0 SF(CITY LOCA)72 580.8 Q(TION FILES) --1.04 E F0 .807(The names and locations of cities, to)108 592.8 R .807 +(wright.com/faq/engineering/pr)108 324 Q(op_longle)-.45 E(y_rice)-.3 E +(.html)-.15 E/F4 10.95/Times-Bold@0 SF(CITY LOCA)72 340.8 Q(TION FILES) +-1.04 E F0 .807(The names and locations of cities, to)108 352.8 R .807 (wer sites, or other points of interest may be imported and plotted on) --.25 F .797(topographic maps generated by)108 604.8 R F2(SPLA)3.297 E -(T!)-.95 E F0(.)A F2(SPLA)5.797 E(T!)-.95 E F0 .797 -(imports the names of cities and locations from ASCII)3.297 F .191 -(\214les containing the location')108 616.8 R 2.691(sn)-.55 G .191 -(ame, the location')-2.691 F 2.691(sl)-.55 G .191 -(atitude, and the location')-2.691 F 2.69(sl)-.55 G 2.69(ongitude. Each) --2.69 F .19(\214eld is sepa-)2.69 F .513(rated by a comma.)108 628.8 R -.513(Each record is separated by a single line feed character)5.513 F -5.514(.A)-.55 G 3.014(sw)-5.514 G .514(as the case with the)-3.114 F F3 -(.qth)3.014 E F0 .259(\214les, latitude and longitude information may b\ -e entered in either decimal or de)108 640.8 R .258 -(gree, minute, second \(DMS\))-.15 F(format.)108 652.8 Q -.15(Fo)108 -676.8 S 2.5(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F1 -(Teaneck, 40.891973, 74.014506)156 700.8 Q -(Tenafly, 40.919212, 73.955892)156 712.8 Q -(Teterboro, 40.859511, 74.058908)156 724.8 Q F0(KD2BD Softw)72 768 Q -129.12(are 02)-.1 F(March 2006)2.5 E(3)198.45 E EP -%%Page: 4 4 +-.25 F .797(topographic maps generated by)108 364.8 R F1(SPLA)3.297 E +(T!)-.95 E F0(.)A F1(SPLA)5.797 E(T!)-.95 E F0 .797 +(imports the names of cities and locations from ASCII)3.297 F .111 +(\214les containing the location of interest')108 376.8 R 2.611(sn)-.55 +G .111(ame, latitude, and longitude.)-2.611 F .11 +(Each \214eld is separated by a comma.)5.111 F .949 +(Each record is separated by a single line feed character)108 388.8 R +5.949(.A)-.55 G 3.449(sw)-5.949 G .949(as the case with the)-3.549 F F3 +(.qth)3.449 E F0 .949(\214les, latitude and)3.449 F +(longitude information may be entered in either decimal or de)108 400.8 +Q(gree, minute, second \(DMS\) format.)-.15 E -.15(Fo)108 424.8 S 2.5 +(re).15 G(xample \()-2.65 E F3(cities.dat)A F0(\):)A F2 +(Teaneck, 40.891973, 74.014506)156 448.8 Q +(Tenafly, 40.919212, 73.955892)156 460.8 Q +(Teterboro, 40.859511, 74.058908)156 472.8 Q +(Tinton Falls, 40.279966, 74.093924)156 484.8 Q +(Toms River, 39.977777, 74.183580)156 496.8 Q +(Totowa, 40.906160, 74.223310)156 508.8 Q(Trenton, 40.219922, 74.754665) +156 520.8 Q F0 3.2(At)108 544.8 S .7(otal of \214v)-3.2 F 3.2(es)-.15 G +.699(eparate city data \214les may be imported at a time, and there is \ +no limit to the size of these)-3.2 F(\214les.)108 556.8 Q F1(SPLA)6.369 +E(T!)-.95 E F0 1.369(reads city data on a "\214rst come/\214rst serv) +3.869 F 1.37(ed" basis, and plots only those locations whose)-.15 F .113 +(annotations do not con\215ict with annotations of locations read earli\ +er in the current city data \214le, or in pre)108 568.8 R(vi-)-.25 E +.539(ous \214les.)108 580.8 R .539(This beha)5.539 F .539 +(vior minimizes clutter in)-.2 F F1(SPLA)3.039 E(T!)-.95 E F0 .539 +(generated topographic maps, b)3.039 F .54(ut also mandates that)-.2 F +.15(important locations be placed to)108 592.8 R -.1(wa)-.25 G .15 +(rd the be).1 F .149(ginning of the \214rst city data \214le, and locat\ +ions less important be)-.15 F(positioned further do)108 604.8 Q +(wn the list or in subsequent data \214les.)-.25 E .996 +(City data \214les may be generated manually using an)108 628.8 R 3.496 +(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G +.997(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E +1.535(from data a)108 640.8 R -.25(va)-.2 G 1.535 +(ilable from the U.S. Census Bureau using the).25 F F1(citydecoder)4.035 +E F0 1.535(utility included with)4.035 F F1(SPLA)4.035 E(T!)-.95 E F0(.) +A .152(Such data is a)108 652.8 R -.25(va)-.2 G .153 +(ilable free of char).25 F .153(ge via the Internet at:)-.18 F F3 +(http://www)2.653 E(.census.go)-.74 E(v/g)-.1 E +(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.) +108 664.8 Q F4(CAR)72 681.6 Q -.197(TO)-.438 G(GRAPHIC BOUND).197 E(AR) +-.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A)-3.121 H(FILES)3.778 E F0 +1.17(Cartographic boundary data may also be imported to plot the bounda\ +ries of cities, counties, or states on)108 693.6 R .071 +(topographic maps generated by)108 705.6 R F1(SPLA)2.571 E(T!)-.95 E F0 +5.071(.S)C .071 +(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.071 F +-.15(Fo)108 717.6 S 1.262 +(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va) +-.2 G 1.262(ilable from the U.S.).25 F 1.262(Census Bureau via the)6.262 +F 48.573(Internet at:)108 729.6 R F3(http://www)51.073 E(.census.go)-.74 +E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)51.074 E +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(4)190.955 +E EP +%%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F -(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF -(Tinton Falls, 40.279966, 74.093924)156 84 Q -(Toms River, 39.977777, 74.183580)156 96 Q(Totowa, 40.906160, 74.223310) -156 108 Q(Trenton, 40.219922, 74.754665)156 120 Q F0 3.199(At)108 144 S -.699(otal of \214v)-3.199 F 3.199(es)-.15 G .7(eparate city data \214le\ -s may be imported at a time, and there is no limit to the size of these) --3.199 F(\214les.)108 156 Q/F2 10/Times-Bold@0 SF(SPLA)6.37 E(T!)-.95 E -F0 1.37(reads city data on a "\214rst come/\214rst serv)3.87 F 1.369 -(ed" basis, and plots only those locations whose)-.15 F 1.041(annotatio\ -ns do not con\215ict with annotations of locations plotted earlier duri\ -ng)108 168 R F2(SPLA)3.542 E(T)-.95 E F0 2.142 -.55('s e)D -.15(xe).4 G -3.542(cution. This).15 F(beha)108 180 Q .347(vior minimizes clutter in) --.2 F F2(SPLA)2.847 E(T!)-.95 E F0 .347(generated topographic maps, b) -2.847 F .347(ut also mandates that important loca-)-.2 F .051 -(tions be placed to)108 192 R -.1(wa)-.25 G .051(rd the be).1 F .052(gi\ -nning of the \214rst city data \214le, and disposable locations be posi\ -tioned further)-.15 F(do)108 204 Q -(wn the list or in subsequent data \214les.)-.25 E .997 -(City data \214les may be generated manually using an)108 228 R 3.496 -(yt)-.15 G -.15(ex)-3.496 G 3.496(te).15 G(ditor)-3.496 E 3.496(,i)-.4 G -.996(mported from other sources, or deri)-3.496 F -.15(ve)-.25 G(d).15 E -1.535(from data a)108 240 R -.25(va)-.2 G 1.535 -(ilable from the U.S. Census Bureau using the).25 F F2(citydecoder)4.035 -E F0 1.535(utility included with)4.035 F F2(SPLA)4.035 E(T!)-.95 E F0(.) -A .153(Such data is a)108 252 R -.25(va)-.2 G .153(ilable free of char) -.25 F .153(ge via the Internet at:)-.18 F/F3 10/Times-Italic@0 SF -(http://www)2.652 E(.census.go)-.74 E(v/g)-.1 E -(eo/www/cob/bdy_\214les.html)-.1 E F0(,)A(and must be in ASCII format.) -108 264 Q/F4 10.95/Times-Bold@0 SF(CAR)72 280.8 Q -.197(TO)-.438 G -(GRAPHIC BOUND).197 E(AR)-.383 E 2.738(YD)-.383 G -1.644 -1.04(AT A) --3.121 H(FILES)3.778 E F0 1.17(Cartographic boundary data may also be i\ -mported to plot the boundaries of cities, counties, or states on)108 -292.8 R .072(topographic maps generated by)108 304.8 R F2(SPLA)2.572 E -(T!)-.95 E F0 5.072(.S)C .071 -(uch data must be of the form of ARC/INFO Ungenerate \(ASCII)-5.072 F --.15(Fo)108 316.8 S 1.262 -(rmat\) Metadata Cartographic Boundary Files, and are a).15 F -.25(va) --.2 G 1.262(ilable from the U.S.).25 F 1.263(Census Bureau via the)6.262 -F 19.948(Internet at:)108 328.8 R F3(http://www)22.448 E(.census.go)-.74 -E(v/g)-.1 E(eo/www/cob/co2000.html#ascii)-.1 E F0(and)22.447 E F3 -(http://www)22.447 E(.cen-)-.74 E(sus.go)108 340.8 Q(v/g)-.1 E -(eo/www/cob/pl2000.html#ascii)-.1 E F0 7.85(.A)C 2.85(total of \214v) --2.5 F 5.35(es)-.15 G 2.85(eparate cartographic boundary \214les may be) --5.35 F .813(imported at a time.)108 352.8 R .812 +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0 +SF(http://www)108 84 Q(.census.go)-.74 E(v/g)-.1 E +(eo/www/cob/pl2000.html#ascii)-.1 E F0 5.008(.A)C .008(total of \214v) +-2.5 F 2.507(es)-.15 G .007(eparate cartographic boundary \214les)-2.507 +F .196(may be imported at a time.)108 96 R .196 (It is not necessary to import state boundaries if county boundaries ha) -5.813 F 1.112 -.15(ve a)-.2 H .812(lready been).15 F(imported.)108 364.8 -Q F4(PR)72 381.6 Q(OGRAM OPERA)-.329 E(TION)-1.04 E F2(SPLA)108 393.6 Q -(T!)-.95 E F0 1.03(is in)3.53 F -.2(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G -1.03(ia the command-line using a series of switches and ar)-3.53 F 3.53 -(guments. Since)-.18 F F2(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .746 -(CPU and memory intensi)108 405.6 R 1.046 -.15(ve a)-.25 H .745 +5.196 F .497 -.15(ve a)-.2 H(lready).15 E(been imported.)108 108 Q/F2 +10.95/Times-Bold@0 SF(PR)72 124.8 Q(OGRAM OPERA)-.329 E(TION)-1.04 E/F3 +10/Times-Bold@0 SF(SPLA)108 136.8 Q(T!)-.95 E F0 1.03(is in)3.53 F -.2 +(vo)-.4 G -.1(ke).2 G 3.53(dv).1 G 1.03 +(ia the command-line using a series of switches and ar)-3.53 F 3.53 +(guments. Since)-.18 F F3(SPLA)3.53 E(T!)-.95 E F0 1.03(is a)3.53 F .745 +(CPU and memory intensi)108 148.8 R 1.045 -.15(ve a)-.25 H .745 (pplication, this type of interf).15 F .745(ace minimizes o)-.1 F -.15 -(ve)-.15 G .745(rhead and lends itself well to).15 F .421 -(scripted \(batch\) operations.)108 417.6 R F2(SPLA)5.421 E(T!)-.95 E F0 -1.521 -.55('s C)D .422 +(ve)-.15 G .746(rhead and lends itself well to).15 F .422 +(scripted \(batch\) operations.)108 160.8 R F3(SPLA)5.422 E(T!)-.95 E F0 +1.522 -.55('s C)D .421 (PU and memory scheduling priority may be modi\214ed through the).55 F -(use of the Unix)108 429.6 Q F2(nice)2.5 E F0(command.)2.5 E .226 -(The number and type of switches passed to)108 453.6 R F2(SPLA)2.725 E -(T!)-.95 E F0 .225(determine its mode of operation and method of output) -2.725 F .007(data generation.)108 465.6 R .007(Nearly all of)5.007 F F2 -(SPLA)2.507 E(T!)-.95 E F0 1.107 -.55('s s)D .008 -(witches may be cascaded in an).55 F 2.508(yo)-.15 G .008 -(rder on the command line when)-2.508 F(in)108 477.6 Q -.2(vo)-.4 G -(king the program.).2 E F4(POINT)72 494.4 Q(-T)-1.007 E(O-POINT AN)-.197 -E(AL)-.219 E(YSIS)-1.007 E F2(SPLA)108 506.4 Q(T!)-.95 E F0 1.224 +(use of the Unix)108 172.8 Q F3(nice)2.5 E F0(command.)2.5 E .225 +(The number and type of switches passed to)108 196.8 R F3(SPLA)2.725 E +(T!)-.95 E F0 .226(determine its mode of operation and method of output) +2.725 F .008(data generation.)108 208.8 R .008(Nearly all of)5.008 F F3 +(SPLA)2.508 E(T!)-.95 E F0 1.108 -.55('s s)D .008 +(witches may be cascaded in an).55 F 2.507(yo)-.15 G .007 +(rder on the command line when)-2.507 F(in)108 220.8 Q -.2(vo)-.4 G +(king the program.).2 E F3(SPLA)108 244.8 Q(T!)-.95 E F0 .69 +(operates in tw)3.19 F 3.19(od)-.1 G .69(istinct modes:)-3.19 F F1 .69 +(point-to-point mode)3.19 F F0 3.19(,a)C(nd)-3.19 E F1(ar)3.19 E .69 +(ea pr)-.37 F .69(ediction mode)-.37 F F0 5.69(.E)C .69 +(ither a line-of-)-5.69 F .335(sight \(LOS\) or Longle)108 256.8 R .335 +(y-Rice Irre)-.15 F .335(gular T)-.15 F .335(errain \(ITM\) propag)-.7 F +.335(ation model may be in)-.05 F -.2(vo)-.4 G -.1(ke).2 G 2.834(db).1 G +2.834(yt)-2.834 G .334(he user)-2.834 F 5.334(.T)-.55 G(rue)-5.684 E +.625(Earth, four)108 268.8 R .625(-thirds Earth, or an)-.2 F 3.126(yo) +-.15 G .626(ther user)-3.126 F .626 +(-de\214ned Earth radius may be speci\214ed when performing line-of-)-.2 +F(sight analysis.)108 280.8 Q F2(POINT)72 297.6 Q(-T)-1.007 E +(O-POINT AN)-.197 E(AL)-.219 E(YSIS)-1.007 E F3(SPLA)108 309.6 Q(T!)-.95 +E F0 1.224 (may be used to perform line-of-sight terrain analysis between tw)3.725 F 3.724(os)-.1 G 1.224(peci\214ed site locations.)-3.724 F -.15(Fo)6.224 -G(r).15 E -.15(ex)108 518.4 S(ample:).15 E F1 -(splat -t tx_site.qth -r rx_site.qth)108 542.4 Q F0(in)108 566.4 Q -.2 -(vo)-.4 G -.1(ke).2 G 5.832(sat).1 G 3.332 -(errain analysis between the transmitter speci\214ed in)-5.832 F F3 -(tx_site)5.832 E(.qth)-.15 E F0 3.333(and recei)5.833 F -.15(ve)-.25 G -5.833(rs).15 G 3.333(peci\214ed in)-5.833 F F3(rx_site)108 578.4 Q(.qth) --.15 E F0 2.859(,a)C .359(nd writes a)-2.859 F F2(SPLA)2.859 E(T!)-.95 E -F0 .359(Obstruction Report to the current w)2.859 F .358 -(orking directory)-.1 F 5.358(.T)-.65 G .358(he report contains)-5.358 F -.766(details of the transmitter and recei)108 590.4 R -.15(ve)-.25 G -3.267(rs).15 G .767(ites, and identi\214es the location of an)-3.267 F -3.267(yo)-.15 G .767(bstructions detected during)-3.267 F .628 -(the analysis.)108 602.4 R .628 -(If an obstruction can be cleared by raising the recei)5.628 F .927 -.15 -(ve a)-.25 H .627(ntenna to a greater altitude,).15 F F2(SPLA)3.127 E -(T!)-.95 E F0 .573(will indicate the minimum antenna height required fo\ -r a line-of-sight path to e)108 614.4 R .573 -(xist between the transmitter)-.15 F .202(and recei)108 626.4 R -.15(ve) --.25 G 2.702(rl).15 G .202(ocations speci\214ed.)-2.702 F .201(If the a\ -ntenna must be raised a signi\214cant amount, this determination may) -5.202 F(tak)108 638.4 Q 3.004(es)-.1 G .504(ome time.)-3.004 F .504 -(Note that the results pro)5.504 F .505(vided are the)-.15 F F3(minimum) -3.005 E F0 .505(necessary for a line-of-sight path to e)3.005 F(xist,) --.15 E(and do not tak)108 650.4 Q 2.5(eF)-.1 G -(resnel zone clearance requirements into consideration.)-2.5 E F3(qth) -108 674.4 Q F0 -.15(ex)4.658 G 2.158(tensions are assumed by).15 F F2 -(SPLA)4.658 E(T!)-.95 E F0 2.157 -(for QTH \214les, and are optional when in)4.657 F -.2(vo)-.4 G 2.157 -(king the program.).2 F F2(SPLA)108 686.4 Q(T!)-.95 E F0 1.048 -(automatically reads all SPLA)3.548 F 3.548(TD)-1.11 G 1.049 -(ata Files necessary to conduct the terrain analysis between the)-3.548 -F 1.306(sites speci\214ed.)108 698.4 R F2(SPLA)6.306 E(T!)-.95 E F0 -1.306(searches for the needed SDF \214les in the current w)3.806 F 1.305 -(orking directory \214rst.)-.1 F 1.305(If the)6.305 F -(needed \214les are not found,)108 710.4 Q F2(SPLA)2.5 E(T!)-.95 E F0 -(then searches in the path speci\214ed by the)2.5 E F3(-d)2.5 E F0 -(command-line switch:)2.5 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F -(March 2006)2.5 E(4)198.45 E EP -%%Page: 5 5 +G(r).15 E -.15(ex)108 321.6 S(ample:).15 E/F4 10/Courier@0 SF +(splat -t tx_site.qth -r rx_site.qth)108 345.6 Q F0(in)108 369.6 Q -.2 +(vo)-.4 G -.1(ke).2 G 2.627(sal).1 G .128 +(ine-of-sight terrain analysis between the transmitter speci\214ed in) +-2.627 F F1(tx_site)2.628 E(.qth)-.15 E F0 .128(and recei)2.628 F -.15 +(ve)-.25 G 2.628(rs).15 G(peci\214ed)-2.628 E(in)108 381.6 Q F1(rx_site) +3.934 E(.qth)-.15 E F0 1.434(using a T)3.934 F 1.434 +(rue Earth radius model, and writes a)-.35 F F3(SPLA)3.934 E(T!)-.95 E +F0 1.433(Obstruction Report to the current)3.934 F -.1(wo)108 393.6 S +.548(rking directory).1 F 5.548(.T)-.65 G .549 +(he report contains details of the transmitter and recei)-5.548 F -.15 +(ve)-.25 G 3.049(rs).15 G .549(ites, and identi\214es the loca-)-3.049 F +.017(tion of an)108 405.6 R 2.517(yo)-.15 G .017 +(bstructions detected along the line-of-sight path.)-2.517 F .016 +(If an obstruction can be cleared by raising the)5.016 F(recei)108 417.6 +Q .496 -.15(ve a)-.25 H .197(ntenna to a greater altitude,).15 F F3 +(SPLA)2.697 E(T!)-.95 E F0 .197 +(will indicate the minimum antenna height required for a line-)2.697 F +1.655(of-sight path to e)108 429.6 R 1.654 +(xist between the transmitter and recei)-.15 F -.15(ve)-.25 G 4.154(rl) +.15 G 1.654(ocations speci\214ed.)-4.154 F 1.654 +(Note that imperial units)6.654 F +(\(miles, feet\) are speci\214ed unless the)108 441.6 Q F1(-metric)2.5 E +F0(switch is added to)2.5 E F3(SPLA)2.5 E(T!)-.95 E F0 1.1 -.55('s c)D +(ommand line options:).55 E F4 +(splat -t tx_site.qth -r rx_site.qth -metric)108 465.6 Q F0 .533(If the\ + antenna must be raised a signi\214cant amount, this determination may \ +tak)108 489.6 R 3.034(eaf)-.1 G 1.034 -.25(ew m)-3.034 H 3.034 +(oments. Note).25 F(that)3.034 E .33(the results pro)108 501.6 R .33 +(vided are the)-.15 F F1(minimum)2.83 E F0 .33 +(necessary for a line-of-sight path to e)2.83 F .329 +(xist, and in the case of this sim-)-.15 F(ple e)108 513.6 Q +(xample, do not tak)-.15 E 2.5(eF)-.1 G +(resnel zone clearance requirements into consideration.)-2.5 E F1(qth) +108 537.6 Q F0 -.15(ex)2.533 G .033(tensions are assumed by).15 F F3 +(SPLA)2.533 E(T!)-.95 E F0 .034 +(for QTH \214les, and are optional when specifying -t and -r ar)2.533 F +(guments)-.18 E .533(on the command-line.)108 549.6 R F3(SPLA)5.532 E +(T!)-.95 E F0 .532(automatically reads all SPLA)3.032 F 3.032(TD)-1.11 G +.532(ata Files necessary to conduct the terrain)-3.032 F .911 +(analysis between the sites speci\214ed.)108 561.6 R F3(SPLA)5.911 E(T!) +-.95 E F0 .912(searches for the required SDF \214les in the current w) +5.911 F(orking)-.1 E .189(directory \214rst.)108 573.6 R .189 +(If the needed \214les are not found,)5.189 F F3(SPLA)2.688 E(T!)-.95 E +F0 .188(then searches in the path speci\214ed by the)2.688 F F1(-d)2.688 +E F0(com-)2.688 E(mand-line switch:)108 585.6 Q F4 +(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 609.6 Q F0 .329(An e)108 +633.6 R .329(xternal directory path may be speci\214ed by placing a ".s\ +plat_path" \214le under the user')-.15 F 2.83(sh)-.55 G .33 +(ome directory)-2.83 F(.)-.65 E 3.045(This \214le must contain the full\ + directory path of last resort to all the SDF \214les.)108 645.6 R 3.044 +(The path in the)8.044 F F1($HOME/.splat_path)108 657.6 Q F0 +(\214le must be of the form of a single line of ASCII te)2.5 E(xt:)-.15 +E F4(/opt/splat/sdf/)108 681.6 Q F0(and can be generated using an)108 +705.6 Q 2.5(yt)-.15 G -.15(ex)-2.5 G 2.5(te).15 G(ditor)-2.5 E(.)-.55 E +3.022(Ag)108 729.6 S .523 +(raph of the terrain pro\214le between the recei)-3.022 F -.15(ve)-.25 G +3.023(ra).15 G .523 +(nd transmitter locations as a function of distance from)-3.023 F +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(5)190.955 +E EP +%%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F -(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF -(splat -t tx_site -r rx_site -d /cdrom/sdf/)108 84 Q F0 .329(An e)108 -108 R .329(xternal directory path may be speci\214ed by placing a ".spl\ -at_path" \214le under the user')-.15 F 2.83(sh)-.55 G .33(ome directory) --2.83 F(.)-.65 E .401(This \214le must contain the full directory path \ -to the last resort location of all the SDF \214les.)108 120 R .4 -(The path in the)5.4 F/F2 10/Times-Italic@0 SF($HOME/.splat_path)108 132 -Q F0(\214le must be of the form of a single line of ASCII te)2.5 E(xt:) --.15 E F1(/opt/splat/sdf/)108 156 Q F0(and can be generated using an)108 -180 Q 2.5(yt)-.15 G -.15(ex)-2.5 G 2.5(te).15 G(ditor)-2.5 E(.)-.55 E -3.022(Ag)108 204 S .523(raph of the terrain pro\214le between the recei) --3.022 F -.15(ve)-.25 G 3.023(ra).15 G .523 -(nd transmitter locations as a function of distance from)-3.023 F -(the recei)108 216 Q -.15(ve)-.25 G 2.5(rc).15 G -(an be generated by adding the)-2.5 E F2(-p)2.5 E F0(switch:)2.5 E F1 -(splat -t tx_site -r rx_site -p terrain_profile.gif)108 240 Q/F3 10 -/Times-Bold@0 SF(SPLA)108 264 Q(T!)-.95 E F0(in)4.12 E -.2(vo)-.4 G -.1 +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E(the recei)108 84 Q +-.15(ve)-.25 G 2.5(rc).15 G(an be generated by adding the)-2.5 E/F1 10 +/Times-Italic@0 SF(-p)2.5 E F0(switch:)2.5 E/F2 10/Courier@0 SF +(splat -t tx_site -r rx_site -p terrain_profile.png)108 108 Q/F3 10 +/Times-Bold@0 SF(SPLA)108 132 Q(T!)-.95 E F0(in)4.12 E -.2(vo)-.4 G -.1 (ke).2 G(s).1 E F3(gnuplot)4.12 E F0 1.619(when generating graphs.)4.119 F 1.619(The \214lename e)6.619 F 1.619(xtension speci\214ed to)-.15 F F3 -(SPLA)4.119 E(T!)-.95 E F0(deter)4.119 E(-)-.2 E .809 -(mines the format of the graph produced.)108 276 R F2(.gif)5.809 E F0 -.809(will produce a 640x480 color GIF graphic \214le, while)3.309 F F2 -(.ps)3.309 E F0(or)3.309 E F2(.postscript)108 288 Q F0 1.212 -(will produce postscript output.)3.712 F 1.211 -(Output in formats such as PNG, Adobe Illustrator)6.212 F 3.711(,A)-.4 G -(utoCAD)-3.711 E 1.923(dxf, LaT)108 300 R 1.923(eX, and man)-.7 F 4.424 -(yo)-.15 G 1.924(thers are a)-4.424 F -.25(va)-.2 G 4.424 -(ilable. Please).25 F(consult)4.424 E F3(gnuplot)4.424 E F0 4.424(,a)C -(nd)-4.424 E F3(gnuplot)4.424 E F0 3.024 -.55('s d)D 1.924 -(ocumentation for).55 F(details on all the supported output formats.)108 -312 Q 3.543(Ag)108 336 S 1.043(raph of ele)-3.543 F -.25(va)-.25 G 1.042 -(tions subtended by the terrain between the recei).25 F -.15(ve)-.25 G -3.542(ra).15 G 1.042(nd transmitter as a function of dis-)-3.542 F -(tance from the recei)108 348 Q -.15(ve)-.25 G 2.5(rc).15 G -(an be generated by using the)-2.5 E F2(-e)2.5 E F0(switch:)2.5 E F1 -(splat -t tx_site -r rx_site -e elevation_profile.gif)108 372 Q F0 .424 -(The graph produced using this switch illustrates the ele)108 396 R -.25 +(SPLA)4.119 E(T!)-.95 E F0(deter)4.119 E(-)-.2 E .346 +(mines the format of the graph produced.)108 144 R F1(.png)5.346 E F0 +.346(will produce a 640x480 color PNG graphic \214le, while)2.846 F F1 +(.ps)2.847 E F0(or)2.847 E F1(.postscript)108 156 Q F0 .151 +(will produce postscript output.)2.651 F .151 +(Output in formats such as GIF)5.151 F 2.65(,A)-.8 G .15 +(dobe Illustrator)-2.65 F 2.65(,A)-.4 G .15(utoCAD dxf,)-2.65 F(LaT)108 +168 Q .159(eX, and man)-.7 F 2.659(yo)-.15 G .159(thers are a)-2.659 F +-.25(va)-.2 G 2.659(ilable. Please).25 F(consult)2.659 E F3(gnuplot) +2.659 E F0 2.659(,a)C(nd)-2.659 E F3(gnuplot)2.659 E F0 1.26 -.55('s d)D +.16(ocumentation for details on).55 F(all the supported output formats.) +108 180 Q 3.543(Ag)108 204 S 1.043(raph of ele)-3.543 F -.25(va)-.25 G +1.042(tions subtended by the terrain between the recei).25 F -.15(ve) +-.25 G 3.542(ra).15 G 1.042(nd transmitter as a function of dis-)-3.542 +F(tance from the recei)108 216 Q -.15(ve)-.25 G 2.5(rc).15 G +(an be generated by using the)-2.5 E F1(-e)2.5 E F0(switch:)2.5 E F2 +(splat -t tx_site -r rx_site -e elevation_profile.png)108 240 Q F0 .424 +(The graph produced using this switch illustrates the ele)108 264 R -.25 (va)-.25 G .425(tion and depression angles resulting from the ter).25 F -(-)-.2 E .554(rain between the recei)108 408 R -.15(ve)-.25 G(r').15 E +(-)-.2 E .554(rain between the recei)108 276 R -.15(ve)-.25 G(r').15 E 3.054(sl)-.55 G .553 (ocation and the transmitter site from the perspecti)-3.054 F .853 -.15 (ve o)-.25 H 3.053(ft).15 G .553(he recei)-3.053 F -.15(ve)-.25 G(r').15 -E 3.053(sl)-.55 G(ocation.)-3.053 E 3.78(As)108 420 S 1.28 +E 3.053(sl)-.55 G(ocation.)-3.053 E 3.78(As)108 288 S 1.28 (econd trace is plotted between the left side of the graph \(recei)-3.78 F -.15(ve)-.25 G(r').15 E 3.781(sl)-.55 G 1.281 (ocation\) and the location of the)-3.781 F .449 -(transmitting antenna on the right.)108 432 R .449 +(transmitting antenna on the right.)108 300 R .449 (This trace illustrates the ele)5.449 F -.25(va)-.25 G .448 -(tion angle required for a line-of-sight path).25 F 1.073(to e)108 444 R +(tion angle required for a line-of-sight path).25 F 1.073(to e)108 312 R 1.073(xist between the recei)-.15 F -.15(ve)-.25 G 3.574(ra).15 G 1.074 (nd transmitter locations.)-3.574 F 1.074 (If the trace intersects the ele)6.074 F -.25(va)-.25 G 1.074 (tion pro\214le at an).25 F(y)-.15 E 1.031(point on the graph, then thi\ -s is an indication that a line-of-sight path does not e)108 456 R 1.031 -(xist under the conditions)-.15 F(gi)108 468 Q -.15(ve)-.25 G(n, and th\ +s is an indication that a line-of-sight path does not e)108 324 R 1.031 +(xist under the conditions)-.15 F(gi)108 336 Q -.15(ve)-.25 G(n, and th\ e obstructions can be clearly identi\214ed on the graph at the point\(s\ -\) of intersection.).15 E 3.67(Ag)108 492 S 1.171(raph illustrating ter\ +\) of intersection.).15 E 3.67(Ag)108 360 S 1.171(raph illustrating ter\ rain height referenced to a line-of-sight path between the transmitter \ and recei)-3.67 F -.15(ve)-.25 G(r).15 E(may be generated using the)108 -504 Q F2(-h)2.5 E F0(switch:)2.5 E F1 -(splat -t tx_site -r rx_site -h height_profile.gif)108 528 Q F0 -(The Earth')108 552 Q 2.5(sc)-.55 G(urv)-2.5 E(ature is clearly e)-.25 E -(vident when plotting height pro\214les.)-.25 E 2.5(Ag)108 576 S -(raph sho)-2.5 E(wing Longle)-.25 E -(y-Rice path loss may be plotted using the)-.15 E F2(-l)2.5 E F0 -(switch:)2.5 E F1(splat -t tx_site -r rx_site -l path_loss_profile.gif) -108 600 Q F0 .886(When performing path loss pro\214les, a Longle)108 624 -R .886(y-Rice Model P)-.15 F .886(ath Loss Report is generated by)-.15 F -F3(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .754(the form of a te)108 636 R -.754(xt \214le with a)-.15 F F2(.lr)3.254 E(o)-.45 E F0 .754 +372 Q F1(-h)2.5 E F0(switch:)2.5 E F2 +(splat -t tx_site -r rx_site -h height_profile.png)108 396 Q F0 3.245 +(At)108 420 S .745 +(errain height plot normalized to the transmitter and recei)-3.245 F +-.15(ve)-.25 G 3.245(ra).15 G .745 +(ntenna heights can be obtained using the)-3.245 F F1(-H)108 432 Q F0 +(switch:)2.5 E F2 +(splat -t tx_site -r rx_site -H normalized_height_profile.png)108 456 Q +F0 2.5(Ac)108 480 S(ontour of the Earth')-2.5 E 2.5(sc)-.55 G(urv)-2.5 E +(ature is also plotted in this mode.)-.25 E .635(The \214rst Fresnel Zo\ +ne, and 60% of the \214rst Fresnel Zone can be added to height pro\214l\ +e graphs by adding)108 504 R(the)108 516 Q F1(-f)2.5 E F0 +(switch, and specifying a frequenc)2.5 E 2.5(y\()-.15 G +(in MHz\) at which the Fresnel Zone should be modeled:)-2.5 E F2(splat \ +-t tx_site -r rx_site -f 439.250 -H normalized_height_profile.png)108 +540 Q F0 2.5(Ag)108 564 S(raph sho)-2.5 E(wing Longle)-.25 E +(y-Rice path loss may be plotted using the)-.15 E F1(-l)2.5 E F0 +(switch:)2.5 E F2(splat -t tx_site -r rx_site -l path_loss_profile.png) +108 588 Q F0(As before, adding the)108 612 Q F1(-metric)2.5 E F0 +(switch forces the graphs to be plotted using metric units of measure.) +2.5 E .886(When performing path loss pro\214les, a Longle)108 636 R .886 +(y-Rice Model P)-.15 F .886(ath Loss Report is generated by)-.15 F F3 +(SPLA)3.386 E(T!)-.95 E F0(in)3.386 E .754(the form of a te)108 648 R +.754(xt \214le with a)-.15 F F1(.lr)3.254 E(o)-.45 E F0 .754 (\214lename e)3.254 F 3.254(xtension. The)-.15 F .754 (report contains bearings and distances between)3.254 F .536 -(the transmitter and recei)108 648 R -.15(ve)-.25 G 1.336 -.4(r, a).15 H +(the transmitter and recei)108 660 R -.15(ve)-.25 G 1.336 -.4(r, a).15 H 3.036(sw).4 G .536(ell as the Longle)-3.036 F .536 (y-Rice path loss for v)-.15 F .535(arious distances between the trans-) --.25 F .095(mitter and recei)108 660 R -.15(ve)-.25 G 2.595(rl).15 G +-.25 F .095(mitter and recei)108 672 R -.15(ve)-.25 G 2.595(rl).15 G 2.595(ocations. The)-2.595 F .095(mode of propag)2.595 F .096 (ation for points along the path are gi)-.05 F -.15(ve)-.25 G 2.596(na) -.15 G(s)-2.596 E F2(Line-of-Sight)2.596 E F0(,)A F2(Single Horizon)108 -672 Q F0(,)A F2(Double Horizon)2.5 E F0(,)A F2(Dif)2.5 E(fr)-.18 E -(action Dominant)-.15 E F0 2.5(,a)C(nd)-2.5 E F2 -1.85 -.55(Tr o)2.5 H -(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 696 T .76(etermine t\ +.15 G(s)-2.596 E F1(Line-of-Sight)2.596 E F0(,)A F1(Single Horizon)108 +684 Q F0(,)A F1(Double Horizon)2.5 E F0(,)A F1(Dif)2.5 E(fr)-.18 E +(action Dominant)-.15 E F0 2.5(,a)C(nd)-2.5 E F1 -1.85 -.55(Tr o)2.5 H +(poscatter Dominant).55 E F0(.)A 2.36 -.8(To d)108 708 T .76(etermine t\ he signal-to-noise \(SNR\) ratio at remote location where random Johnso\ -n \(thermal\) noise is).8 F(the primary limiting f)108 708 Q -(actor in reception:)-.1 E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F -(March 2006)2.5 E(5)198.45 E EP -%%Page: 6 6 +n \(thermal\) noise is).8 F(the primary limiting f)108 720 Q +(actor in reception:)-.1 E(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F +(December 2006)2.5 E(6)190.955 E EP +%%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup @@ -722,14 +799,15 @@ BP (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Times-Italic@0 SF(SNR)108.33 84 Q/F2 10/Symbol SF(=)3.07 E F1(T)2.71 E F2(-)3.47 E F1 (NJ)2.9 E F2(-)3.17 E F1(L)2.78 E F2(+)2.73 E F1(G)2.18 E F2(-)2.7 E F1 -(NF)2.9 E F0(where)108 108 Q/F3 10/Times-Bold@0 SF(T)3.076 E F0 .576 -(is the ERP of the transmitter in dBW)3.076 F(,)-.92 E F3(NJ)3.076 E F0 -.577(is Johnson Noise in dBW \(-136 dBW for a 6 MHz TV)3.076 F -(channel\),)108 120 Q F3(L)2.514 E F0 .014(is the path loss pro)2.514 F -.014(vided by)-.15 F F3(SPLA)2.514 E(T!)-.95 E F0 .013(in dB \(as a) -2.514 F F1(positive)2.513 E F0(number\),)2.513 E F3(G)2.513 E F0 .013 -(is the recei)2.513 F .313 -.15(ve a)-.25 H .013(ntenna g).15 F(ain)-.05 -E(in dB o)108 132 Q -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3 +(NF)2.9 E F0(where)108 108 Q/F3 10/Times-Bold@0 SF(T)2.714 E F0 .215 +(is the ERP of the transmitter in dBW in the direction of the recei) +2.714 F -.15(ve)-.25 G -.4(r,).15 G F3(NJ)3.115 E F0 .215 +(is Johnson Noise in dBW)2.715 F .725(\(-136 dBW for a 6 MHz tele)108 +120 R .725(vision channel\),)-.25 F F3(L)3.225 E F0 .725 +(is the path loss pro)3.225 F .725(vided by)-.15 F F3(SPLA)3.225 E(T!) +-.95 E F0 .725(in dB \(as a)5.725 F F1(positive)3.225 E F0(number\),)108 +132 Q F3(G)2.5 E F0(is the recei)2.5 E .3 -.15(ve a)-.25 H(ntenna g).15 +E(ain in dB o)-.05 E -.15(ve)-.15 G 2.5(ri).15 G(sotropic, and)-2.5 E F3 (NF)2.5 E F0(is the recei)2.5 E -.15(ve)-.25 G 2.5(rn).15 G (oise \214gure in dB.)-2.5 E F3(T)108 156 Q F0(may be computed as follo) 2.5 E(ws:)-.25 E F1(T)107.91 180 Q F2(=)4.07 E F1(TI)2.71 E F2(+)3.21 E @@ -747,376 +825,674 @@ F 2.701(wm)-.25 G .202(uch more signal is a)-2.701 F -.25(va)-.2 G .202 (he minimum to necessary to achie)-2.702 F .502 -.15(ve a s)-.25 H .202 (peci\214c signal-).15 F(to-noise ratio:)108 264 Q F1(Signal)108.33 288 Q F0(_).51 E F1(Margin).68 E F2(=)3.04 E F1(SNR)3.13 E F2(-)2.47 E F1(S) -2.53 E F0(where)108 312 Q F3(S)2.5 E F0 -(is the minimum desired SNR ratio \(15.5 dB for A)2.5 E(TSC DTV)-1.11 E -2.5(,4)-1.29 G 2.5(2d)-2.5 G 2.5(Bf)-2.5 G(or analog NTSC tele)-2.5 E -(vision\).)-.25 E 2.611(At)108 336 S .111 -(opographic map may be generated by)-2.611 F F3(SPLA)2.611 E(T!)-.95 E -F0 .11(to visualize the path between the transmitter and recei)2.611 F --.15(ve)-.25 G(r).15 E .098(sites from yet another perspecti)108 348 R --.15(ve)-.25 G 5.098(.T).15 G .099(opographic maps generated by)-5.898 F -F3(SPLA)2.599 E(T!)-.95 E F0 .099(display ele)2.599 F -.25(va)-.25 G -.099(tions using a log-).25 F .336(arithmic grayscale, with higher ele) -108 360 R -.25(va)-.25 G .335 -(tions represented through brighter shades of gray).25 F 5.335(.T)-.65 G -.335(he dynamic range)-5.335 F .257 -(of the image is scaled between the highest and lo)108 372 R .257 +2.53 E F0(where)108 312 Q F3(S)3.487 E F0 .987 +(is the minimum required SNR ratio \(15.5 dB for A)3.487 F .987 +(TSC \(8-VSB\) DTV)-1.11 F 3.486(,4)-1.29 G 3.486(2d)-3.486 G 3.486(Bf) +-3.486 G .986(or analog NTSC)-3.486 F(tele)108 324 Q(vision\).)-.25 E +2.61(At)108 348 S .11(opographic map may be generated by)-2.61 F F3 +(SPLA)2.611 E(T!)-.95 E F0 .111 +(to visualize the path between the transmitter and recei)2.611 F -.15 +(ve)-.25 G(r).15 E .099(sites from yet another perspecti)108 360 R -.15 +(ve)-.25 G 5.099(.T).15 G .099(opographic maps generated by)-5.899 F F3 +(SPLA)2.598 E(T!)-.95 E F0 .098(display ele)2.598 F -.25(va)-.25 G .098 +(tions using a log-).25 F .335(arithmic grayscale, with higher ele)108 +372 R -.25(va)-.25 G .335 +(tions represented through brighter shades of gray).25 F 5.336(.T)-.65 G +.336(he dynamic range)-5.336 F .257 +(of the image is scaled between the highest and lo)108 384 R .257 (west ele)-.25 F -.25(va)-.25 G .257(tions present in the map.).25 F -.258(The only e)5.258 F .258(xception to)-.15 F(this is sea-le)108 384 Q --.15(ve)-.25 G(l, which is represented using the color blue.).15 E F3 -(SPLA)108 408 Q(T!)-.95 E F0 .59 -(generated topographic maps are 24-bit T)3.09 F .59 -(rueColor Portable PixMap \(PPM\) images.)-.35 F(The)5.59 E 3.09(ym)-.15 -G .59(ay be)-3.09 F(vie)108 420 Q 1.06(wed, edited, or con)-.25 F -.15 -(ve)-.4 G 1.06(rted to other graphic formats by popular image vie).15 F -1.06(wing applications such as)-.25 F F3(xv)3.56 E F0(,)A F3 1.66 -(The GIMP)108 432 R F0(,)A F3(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E -F3(XP)4.16 E(aint)-.1 E F0 6.66(.P)C 1.66 -(NG format is highly recommended for lossless compressed)-6.66 F .371 -(storage of)108 444 R F3(SPLA)2.871 E(T!)-.95 E F0 .371 -(generated topographic output \214les.)5.371 F .372(An e)5.372 F .372 -(xcellent command-line utility capable of con-)-.15 F -.15(ve)108 456 S -(rting).15 E F3(SPLA)12.217 E(T!)-.95 E F0 9.717 -(PPM graphic \214les to PNG \214les is)12.217 F F3(wpng)12.217 E F0 -12.217(,a)C 9.717(nd is a)-12.217 F -.25(va)-.2 G 9.716(ilable at:).25 F -F1(http://www)108 468 Q(.libpng)-.74 E(.or)-.15 E(g/pub/png/book/sour) --.37 E(ces.html)-.37 E F0 5.152(.A)C 2.652(sal)-5.152 G .153 -(ast resort, PPM \214les may be compressed using the)-2.652 F .662 -(bzip2 utility)108 480 R 3.162(,a)-.65 G .662(nd read directly by)-3.162 -F F3 .662(The GIMP)3.162 F F0 .662(in this format.)3.162 F -.8(To)5.662 -G .661(pographic output is speci\214ed using the).8 F F1(-o)3.161 E F0 -(switch:)108 492 Q/F4 10/Courier@0 SF -(splat -t tx_site -r rx_site -o topo_map.ppm)108 516 Q F0(The)108 540 Q +.257(The only e)5.257 F .257(xception to)-.15 F(this is sea-le)108 396 Q +-.15(ve)-.25 G(l, which is represented using the color blue.).15 E -.8 +(To)108 420 S(pographic output is in).8 E -.2(vo)-.4 G -.1(ke).2 G 2.5 +(du).1 G(sing the)-2.5 E F1(-o)2.5 E F0(switch:)2.5 E/F4 10/Courier@0 SF +(splat -t tx_site -r rx_site -o topo_map.ppm)108 444 Q F0(The)108 468 Q F1(.ppm)2.5 E F0 -.15(ex)2.5 G (tension on the output \214lename is assumed by).15 E F3(SPLA)2.5 E(T!) --.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .006(In this e)108 564 R +-.95 E F0 2.5(,a)C(nd is optional.)-2.5 E .006(In this e)108 492 R (xample,)-.15 E F1(topo_map.ppm)2.506 E F0 .007 (will illustrate the locations of the transmitter and recei)2.506 F -.15 (ve)-.25 G 2.507(rs).15 G .007(ites speci\214ed.)-2.507 F(In)5.007 E .22 -(addition, the great circle path between the tw)108 576 R 2.72(os)-.1 G +(addition, the great circle path between the tw)108 504 R 2.72(os)-.1 G .22(ites will be dra)-2.72 F .22(wn o)-.15 F -.15(ve)-.15 G 2.72(rl).15 -G .22(ocations for which an unobstructed)-2.72 F 1.208(path e)108 588 R +G .22(ocations for which an unobstructed)-2.72 F 1.208(path e)108 516 R 1.209(xists to the transmitter at a recei)-.15 F 1.209 (ving antenna height equal to that of the recei)-.25 F -.15(ve)-.25 G -3.709(rs).15 G 1.209(ite \(speci\214ed in)-3.709 F F1(rx_site)108 600 Q +3.709(rs).15 G 1.209(ite \(speci\214ed in)-3.709 F F1(rx_site)108 528 Q (.qth)-.15 E F0(\).)A .773(It may desirable to populate the topographic\ - map with names and locations of cities, to)108 624 R .773 -(wer sites, or other)-.25 F(important locations.)108 636 Q 2.5(Ac)5 G + map with names and locations of cities, to)108 552 R .773 +(wer sites, or other)-.25 F(important locations.)108 564 Q 2.5(Ac)5 G (ity \214le may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0 (using the)2.5 E F1(-s)2.5 E F0(switch:)2.5 E F4 -(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 660 Q F0 -(Up to \214v)108 684 Q 2.5(es)-.15 G +(splat -t tx_site -r rx_site -s cities.dat -o topo_map)108 588 Q F0 +(Up to \214v)108 612 Q 2.5(es)-.15 G (eparate city \214les may be passed to)-2.5 E F3(SPLA)2.5 E(T!)-.95 E F0 (at a time follo)2.5 E(wing the)-.25 E F1(-s)2.5 E F0(switch.)2.5 E .554 (County and state boundaries may be added to the map by specifying up t\ -o \214v)108 708 R 3.055(eU)-.15 G .555(.S. Census Bureau carto-)-3.055 F -(graphic boundary \214les using the)108 720 Q F1(-b)2.5 E F0(switch:)2.5 -E(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(6)198.45 E -EP -%%Page: 7 7 +o \214v)108 636 R 3.055(eU)-.15 G .555(.S. Census Bureau carto-)-3.055 F +(graphic boundary \214les using the)108 648 Q F1(-b)2.5 E F0(switch:)2.5 +E F4(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 672 Q +F0 1.064 +(In situations where multiple transmitter sites are in use, as man)108 +696 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.063 +(our site locations may be passed to)-3.563 F F3(SPLA)108 708 Q(T!)-.95 +E F0(at a time for analysis:)2.5 E(KD2BD Softw)72 768 Q 121.625(are 20) +-.1 F(December 2006)2.5 E(7)190.955 E EP +%%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10/Courier@0 SF -(splat -t tx_site -r rx_site -b co34_d00.dat -o topo_map)108 84 Q F0 -1.064(In situations where multiple transmitter sites are in use, as man) -108 108 R 3.563(ya)-.15 G 3.563(sf)-3.563 G 1.063 -(our site locations may be passed to)-3.563 F/F2 10/Times-Bold@0 SF -(SPLA)108 120 Q(T!)-.95 E F0(at a time for analysis:)2.5 E F1 -(splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.gif) -108 144 Q F0 .285(In this e)108 168 R .285(xample, four separate terrai\ -n pro\214les and obstruction reports will be generated by)-.15 F F2 -(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .509 -(gle topographic map can be speci\214ed using the)108 180 R/F3 10 +(splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p profile.png) +108 84 Q F0 .285(In this e)108 108 R .285(xample, four separate terrain\ + pro\214les and obstruction reports will be generated by)-.15 F/F2 10 +/Times-Bold@0 SF(SPLA)2.785 E(T!)-.95 E F0 5.285(.A)C(sin-)-2.5 E .509 +(gle topographic map can be speci\214ed using the)108 120 R/F3 10 /Times-Italic@0 SF(-o)3.009 E F0 .508 (switch, and line-of-sight paths between each transmitter)3.009 F .816 -(and the recei)108 192 R -.15(ve)-.25 G 3.316(rs).15 G .816 +(and the recei)108 132 R -.15(ve)-.25 G 3.316(rs).15 G .816 (ite indicated will be produced on the map, each in its o)-3.316 F .817 (wn color)-.25 F 5.817(.T)-.55 G .817(he path between the)-5.817 F .767 -(\214rst transmitter speci\214ed to the recei)108 204 R -.15(ve)-.25 G +(\214rst transmitter speci\214ed to the recei)108 144 R -.15(ve)-.25 G 3.267(rw).15 G .766 (ill be in green, the path between the second transmitter and the)-3.267 -F(recei)108 216 Q -.15(ve)-.25 G 3.463(rw).15 G .963(ill be in c)-3.463 +F(recei)108 156 Q -.15(ve)-.25 G 3.463(rw).15 G .963(ill be in c)-3.463 F .964(yan, the path between the third transmitter and the recei)-.15 F -.15(ve)-.25 G 3.464(rw).15 G .964(ill be in violet, and the)-3.464 F -(path between the fourth transmitter and the recei)108 228 Q -.15(ve) --.25 G 2.5(rw).15 G(ill be in sienna.)-2.5 E/F4 10.95/Times-Bold@0 SF -(DETERMINING REGION)72 244.8 Q(AL CO)-.219 E(VERA)-.548 E(GE)-.602 E F2 -(SPLA)108 256.8 Q(T!)-.95 E F0 .098 +(path between the fourth transmitter and the recei)108 168 Q -.15(ve) +-.25 G 2.5(rw).15 G(ill be in sienna.)-2.5 E F2(SPLA)108 192 Q(T!)-.95 E +F0 .59(generated topographic maps are 24-bit T)3.09 F .59 +(rueColor Portable PixMap \(PPM\) images.)-.35 F(The)5.59 E 3.09(ym)-.15 +G .59(ay be)-3.09 F(vie)108 204 Q 1.06(wed, edited, or con)-.25 F -.15 +(ve)-.4 G 1.06(rted to other graphic formats by popular image vie).15 F +1.06(wing applications such as)-.25 F F2(xv)3.56 E F0(,)A F2 1.66 +(The GIMP)108 216 R F0(,)A F2(ImageMagick)4.16 E F0 4.16(,a)C(nd)-4.16 E +F2(XP)4.16 E(aint)-.1 E F0 6.66(.P)C 1.66 +(NG format is highly recommended for lossless compressed)-6.66 F .726 +(storage of)108 228 R F2(SPLA)3.226 E(T!)-.95 E F0 .726 +(generated topographic output \214les.)5.726 F F2(ImageMagick)5.726 E F0 +1.827 -.55('s c)D .727(ommand-line utility easily con-).55 F -.15(ve)108 +240 S(rts).15 E F2(SPLA)2.5 E(T!)-.95 E F0 1.1 -.55('s P)D +(PM \214les to PNG format:).55 E F1(convert splat_map.ppm splat_map.png) +108 264 Q F0 17.667(Another e)108 288 R 17.667 +(xcellent PPM to PNG command-line utility is a)-.15 F -.25(va)-.2 G +17.666(ilable at:).25 F F3(http://www)108 300 Q(.libpng)-.74 E(.or)-.15 +E(g/pub/png/book/sour)-.37 E(ces.html)-.37 E F0 5.152(.A)C 2.652(sal) +-5.152 G .153(ast resort, PPM \214les may be compressed using the)-2.652 +F(bzip2 utility)108 312 Q 2.5(,a)-.65 G(nd read directly by)-2.5 E F2 +(The GIMP)2.5 E F0(in this format.)2.5 E/F4 10.95/Times-Bold@0 SF +(REGION)72 328.8 Q(AL CO)-.219 E(VERA)-.548 E(GE AN)-.602 E(AL)-.219 E +(YSIS)-1.007 E F2(SPLA)108 340.8 Q(T!)-.95 E F0 .098 (can analyze a transmitter or repeater site, or netw)2.599 F .098 (ork of sites, and predict the re)-.1 F .098(gional co)-.15 F -.15(ve) --.15 G .098(rage for).15 F .682(each site speci\214ed.)108 268.8 R .682 +-.15 G .098(rage for).15 F .682(each site speci\214ed.)108 352.8 R .682 (In this mode,)5.682 F F2(SPLA)3.183 E(T!)-.95 E F0 .683 (can generate a topographic map displaying the geometric line-)3.183 F -.163(of-sight co)108 280.8 R -.15(ve)-.15 G .163(rage area of the sites\ +.163(of-sight co)108 364.8 R -.15(ve)-.15 G .163(rage area of the sites\ based on the location of each site and the height of recei).15 F .462 -.15(ve a)-.25 H .162(ntenna wish-).15 F .438 -(ing to communicate with the site in question.)108 292.8 R F2(SPLA)5.439 +(ing to communicate with the site in question.)108 376.8 R F2(SPLA)5.439 E(T!)-.95 E F0 .439(switches from point-to-point analysis mode to area) -2.939 F(prediction mode when the)108 304.8 Q F3(-c)2.5 E F0 +2.939 F(prediction mode when the)108 388.8 Q F3(-c)2.5 E F0 (switch is in)2.5 E -.2(vo)-.4 G -.1(ke).2 G 2.5(da).1 G 2.5(sf)-2.5 G (ollo)-2.5 E(ws:)-.25 E F1 (splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o tx_coverage) -108 328.8 Q F0 .27(In this e)108 352.8 R(xample,)-.15 E F2(SPLA)2.77 E +108 412.8 Q F0 .27(In this e)108 436.8 R(xample,)-.15 E F2(SPLA)2.77 E (T!)-.95 E F0 .269(generates a topographic map called)2.769 F F3(tx_co) 2.769 E(ver)-.1 E -.1(age)-.15 G(.ppm)-.05 E F0 .269 -(that illustrates the predicted)2.769 F 1.534(line-of-sight re)108 364.8 +(that illustrates the predicted)2.769 F 1.534(line-of-sight re)108 448.8 R 1.534(gional co)-.15 F -.15(ve)-.15 G 1.534(rage of).15 F F3(tx_site) 4.034 E F0 1.535(to recei)4.034 F 1.535(ving locations ha)-.25 F 1.535 (ving antennas 30.0 feet abo)-.2 F 1.835 -.15(ve g)-.15 H(round).15 E -(le)108 376.8 Q -.15(ve)-.25 G 2.508(l\().15 G -.4(AG)-2.508 G 2.508 -(L\). The).4 F .008(contents of)2.508 F F3(cities.dat)2.508 E F0 .007 -(are plotted on the map, as are the cartographic boundaries contained) -2.508 F(in the \214le)108 388.8 Q F3(co34_d00.dat)2.5 E F0(.)A .572 -(When plotting line-of-sight paths and areas of re)108 412.8 R .572 +(le)108 460.8 Q -.15(ve)-.25 G 3.162(l\().15 G -.4(AG)-3.162 G 3.162 +(L\). If).4 F(the)3.162 E F3(-metric)3.162 E F0 .662 +(switch is used, the ar)3.162 F .662(gument follo)-.18 F .662(wing the) +-.25 F F3(-c)3.162 E F0 .661(switch is interpreted as being in)3.161 F +.162(meters, rather than in feet.)108 472.8 R .163(The contents of)5.163 +F F3(cities.dat)2.663 E F0 .163 +(are plotted on the map, as are the cartographic bound-)2.663 F +(aries contained in the \214le)108 484.8 Q F3(co34_d00.dat)2.5 E F0(.)A +.572(When plotting line-of-sight paths and areas of re)108 508.8 R .572 (gional co)-.15 F -.15(ve)-.15 G(rage,).15 E F2(SPLA)3.072 E(T!)-.95 E -F0 .572(by def)3.072 F .572(ault does not account for)-.1 F .032(the ef) -108 424.8 R .032(fects of atmospheric bending.)-.25 F(Ho)5.032 E(we)-.25 +F0 .572(by def)3.072 F .572(ault does not account for)-.1 F .031(the ef) +108 520.8 R .032(fects of atmospheric bending.)-.25 F(Ho)5.032 E(we)-.25 E -.15(ve)-.25 G .832 -.4(r, t).15 H .032(his beha).4 F .032 (vior may be modi\214ed by using the Earth radius mul-)-.2 F(tiplier \() -108 436.8 Q F3(-m)A F0 2.5(\)s)C(witch:)-2.5 E F1(splat -t wnjt -c 30.0\ - -m 1.333 -s cities.dat -b counties.dat -o map.ppm)108 460.8 Q F0 .594 -(An earth radius multiplier of 1.333 instructs)108 484.8 R F2(SPLA)3.095 -E(T!)-.95 E F0 .595(to use the "four)3.095 F .595 -(-thirds earth" model for line-of-sight)-.2 F(propag)108 496.8 Q +108 532.8 Q F3(-m)A F0 2.5(\)s)C(witch:)-2.5 E F1(splat -t wnjt -c 30.0\ + -m 1.333 -s cities.dat -b counties.dat -o map.ppm)108 556.8 Q F0 .595 +(An earth radius multiplier of 1.333 instructs)108 580.8 R F2(SPLA)3.095 +E(T!)-.95 E F0 .595(to use the "four)3.095 F .594 +(-thirds earth" model for line-of-sight)-.2 F(propag)108 592.8 Q (ation analysis.)-.05 E(An)5 E 2.5(ya)-.15 G (ppropriate earth radius multiplier may be selected by the user)-2.5 E -(.)-.55 E .202(When in)108 520.8 R -.2(vo)-.4 G -.1(ke).2 G 2.702(di).1 -G 2.702(na)-2.702 G .202(rea prediction mode,)-2.702 F F2(SPLA)2.701 E -(T!)-.95 E F0 .201(generates a site report for each station analyzed.) -2.701 F F2(SPLA)5.201 E(T!)-.95 E F0 .658 -(site reports contain details of the site')108 532.8 R 3.159(sg)-.55 G +(.)-.55 E .201(When in)108 616.8 R -.2(vo)-.4 G -.1(ke).2 G 2.701(di).1 +G 2.701(na)-2.701 G .201(rea prediction mode,)-2.701 F F2(SPLA)2.701 E +(T!)-.95 E F0 .202(generates a site report for each station analyzed.) +2.701 F F2(SPLA)5.202 E(T!)-.95 E F0 .659 +(site reports contain details of the site')108 628.8 R 3.159(sg)-.55 G .659(eographic location, its height abo)-3.159 F .959 -.15(ve m)-.15 H -.659(ean sea le).15 F -.15(ve)-.25 G .659(l, the antenna').15 F(s)-.55 E -.613(height abo)108 544.8 R .913 -.15(ve m)-.15 H .613(ean sea le).15 F --.15(ve)-.25 G .613(l, the antenna').15 F 3.112(sh)-.55 G .612 -(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .612 -(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .612 +.658(ean sea le).15 F -.15(ve)-.25 G .658(l, the antenna').15 F(s)-.55 E +.612(height abo)108 640.8 R .912 -.15(ve m)-.15 H .612(ean sea le).15 F +-.15(ve)-.25 G .612(l, the antenna').15 F 3.112(sh)-.55 G .612 +(eight abo)-3.112 F .912 -.15(ve a)-.15 H -.15(ve)-.05 G .613 +(rage terrain, and the height of the a).15 F -.15(ve)-.2 G .613 (rage ter).15 F(-)-.2 E(rain calculated in the directions of 0, 45, 90,\ - 135, 180, 225, 270, and 315 de)108 556.8 Q(grees azimuth.)-.15 E .344 -(If the)108 580.8 R F3(-c)2.844 E F0 .344(switch is replaced by a)2.844 -F F3(-L)2.844 E F0 .344(switch, a Longle)2.844 F .345 -(y-Rice path loss map for a transmitter site may be gen-)-.15 F(erated:) -108 592.8 Q F1 -(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map) -108 616.8 Q F0 .978(In this mode,)108 640.8 R F2(SPLA)3.478 E(T!)-.95 E -F0 .977(generates a multi-color map illustrating e)3.478 F .977 -(xpected signal le)-.15 F -.15(ve)-.25 G .977(ls \(path loss\) in areas) -.15 F .996(surrounding the transmitter site.)108 652.8 R 3.496(Al)5.996 -G -.15(eg)-3.496 G .997 -(end at the bottom of the map correlates each color with a speci\214c) -.15 F .322(path loss le)108 664.8 R -.15(ve)-.25 G 2.822(li).15 G 2.822 -(nd)-2.822 G 2.822(ecibels. Since)-2.822 F(Longle)2.822 E .322 -(y-Rice area prediction map generation is v)-.15 F .322(ery CPU intensi) --.15 F -.15(ve)-.25 G 2.822(,p).15 G(ro-)-2.822 E .013 -(vision for limiting the analysis range is pro)108 676.8 R .014 -(vided by the)-.15 F F3(-R)2.514 E F0 2.514(switch. The)2.514 F(ar)2.514 -E .014(gument must be gi)-.18 F -.15(ve)-.25 G 2.514(ni).15 G 2.514(nm) --2.514 G 2.514(iles. If)-2.514 F 3.58(ar)108 688.8 S 1.08 -(ange wider than the generated topographic map is speci\214ed,)-3.58 F -F2(SPLA)3.58 E(T!)-.95 E F0 1.08(will perform Longle)3.58 F 1.08 -(y-Rice path)-.15 F -(loss calculations between all four corners of the area prediction map.) -108 700.8 Q(The)108 724.8 Q F3(-db)3.344 E F0 .844(switch allo)3.344 F -.845(ws a constraint to be placed on the maximum path loss re)-.25 F -.845(gion plotted on the map.)-.15 F(A)5.845 E(KD2BD Softw)72 768 Q -129.12(are 02)-.1 F(March 2006)2.5 E(7)198.45 E EP -%%Page: 8 8 + 135, 180, 225, 270, and 315 de)108 652.8 Q(grees azimuth.)-.15 E F4 +(DETERMINING MUL)72 669.6 Q(TIPLE REGIONS OF LOS CO)-1.007 E(VERA)-.548 +E(GE)-.602 E F2(SPLA)108 681.6 Q(T!)-.95 E F0 1.087 +(can also display line-of-sight co)3.587 F -.15(ve)-.15 G 1.086 +(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586 G 1.086 +(our separate transmitter sites on a)-3.586 F(common topographic map.) +108 693.6 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E F1 +(splat -t site1 site2 site3 site4 -c 10.0 -metric -o network.ppm)108 +717.6 Q F0(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E +(8)190.955 E EP +%%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F -(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .803 -(path loss between 80 and 230 dB may be speci\214ed using this switch.) -108 84 R -.15(Fo)5.803 G 3.303(re).15 G .803(xample, if a path loss be) --3.453 F(yond)-.15 E 1.399(-140 dB is irrele)108 96 R -.25(va)-.25 G -1.399(nt to the surv).25 F 1.699 -.15(ey b)-.15 H 1.399(eing conducted,) -.15 F/F1 10/Times-Bold@0 SF(SPLA)3.899 E(T!)-.95 E F0 2.499 -.55('s p)D -1.4(ath loss plot can be constrained to the).55 F(re)108 108 Q -(gion bounded by the 140 dB attenuation contour as follo)-.15 E(ws:)-.25 -E/F2 10/Courier@0 SF(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.da\ -t -db 140 -o plot.ppm)108 132 Q/F3 10.95/Times-Bold@0 SF -(DETERMINING MUL)72 160.8 Q(TIPLE REGIONS OF CO)-1.007 E(VERA)-.548 E -(GE)-.602 E F1(SPLA)108 172.8 Q(T!)-.95 E F0 1.087 -(can also display line-of-sight co)3.587 F -.15(ve)-.15 G 1.086 -(rage areas for as man).15 F 3.586(ya)-.15 G 3.586(sf)-3.586 G 1.086 -(our separate transmitter sites on a)-3.586 F(common topographic map.) -108 184.8 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E F2 -(splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm)108 208.8 Q F0 -.686(plots the re)108 232.8 R .687(gional line-of-sight co)-.15 F -.15 -(ve)-.15 G .687(rage of site1, site2, site3, and site4 based on a recei) -.15 F .987 -.15(ve a)-.25 H .687(ntenna located).15 F .277 -(30.0 feet abo)108 244.8 R .577 -.15(ve g)-.15 H .277(round le).15 F --.15(ve)-.25 G 2.776(l. A).15 F .276 -(topographic map is then written to the \214le)2.776 F/F4 10 -/Times-Italic@0 SF(network.ppm)2.776 E F0 5.276(.T)C .276 -(he line-of-sight)-5.276 F(co)108 256.8 Q -.15(ve)-.15 G .2 -(rage area of the transmitters are plotted as follo).15 F .2 -(ws in the colors indicated \(along with their correspond-)-.25 F -(ing RGB v)108 268.8 Q(alues in decimal\):)-.25 E F2 -(site1: Green \(0,255,0\))132 292.8 Q(site2: Cyan \(0,255,255\))132 -304.8 Q(site3: Medium Violet \(147,112,219\))132 316.8 Q -(site4: Sienna 1 \(255,130,71\))132 328.8 Q -(site1 + site2: Yellow \(255,255,0\))132 352.8 Q -(site1 + site3: Pink \(255,192,203\))132 364.8 Q -(site1 + site4: Green Yellow \(173,255,47\))132 376.8 Q -(site2 + site3: Orange \(255,165,0\))132 388.8 Q -(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 400.8 Q -(site3 + site4: Dark Turquoise \(0,206,209\))132 412.8 Q -(site1 + site2 + site3: Dark Green \(0,100,0\))132 436.8 Q -(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 448.8 Q -(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 460.8 Q -(site2 + site3 + site4: Tan \(210,180,140\))132 472.8 Q -(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 496.8 Q F0 .247 -(If separate)108 520.8 R F4(.qth)2.747 E F0 .247 +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .686(plots the re) +108 84 R .687(gional line-of-sight co)-.15 F -.15(ve)-.15 G .687 +(rage of site1, site2, site3, and site4 based on a recei).15 F .987 -.15 +(ve a)-.25 H .687(ntenna located).15 F .763(10.0 meters abo)108 96 R +1.063 -.15(ve g)-.15 H .763(round le).15 F -.15(ve)-.25 G 3.263(l. A).15 +F .762(topographic map is then written to the \214le)3.263 F/F1 10 +/Times-Italic@0 SF(network.ppm)3.262 E F0 5.762(.T)C .762(he line-of-) +-5.762 F .302(sight co)108 108 R -.15(ve)-.15 G .302 +(rage area of the transmitters are plotted as follo).15 F .303 +(ws in the colors indicated \(along with their corre-)-.25 F +(sponding RGB v)108 120 Q(alues in decimal\):)-.25 E/F2 10/Courier@0 SF +(site1: Green \(0,255,0\))132 144 Q(site2: Cyan \(0,255,255\))132 156 Q +(site3: Medium Violet \(147,112,219\))132 168 Q +(site4: Sienna 1 \(255,130,71\))132 180 Q +(site1 + site2: Yellow \(255,255,0\))132 204 Q +(site1 + site3: Pink \(255,192,203\))132 216 Q +(site1 + site4: Green Yellow \(173,255,47\))132 228 Q +(site2 + site3: Orange \(255,165,0\))132 240 Q +(site2 + site4: Dark Sea Green 1 \(193,255,193\))132 252 Q +(site3 + site4: Dark Turquoise \(0,206,209\))132 264 Q +(site1 + site2 + site3: Dark Green \(0,100,0\))132 288 Q +(site1 + site2 + site4: Blanched Almond \(255,235,205\))132 300 Q +(site1 + site3 + site4: Medium Spring Green \(0,250,154\))132 312 Q +(site2 + site3 + site4: Tan \(210,180,140\))132 324 Q +(site1 + site2 + site3 + site4: Gold2 \(238,201,0\))132 348 Q F0 .247 +(If separate)108 372 R F1(.qth)2.747 E F0 .247 (\214les are generated, each representing a common site location b)2.747 F .247(ut a dif)-.2 F .246(ferent antenna height,)-.25 F 3.535(as)108 -532.8 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036 +384 S 1.035(ingle topographic map illustrating the re)-3.535 F 1.036 (gional co)-.15 F -.15(ve)-.15 G 1.036(rage from as man).15 F 3.536(ya) -.15 G 3.536(sf)-3.536 G 1.036(our separate locations on a)-3.536 F -(single to)108 544.8 Q(wer may be generated by)-.25 E F1(SPLA)2.5 E(T!) --.95 E F0(.)A F3 -.197(TO)72 561.6 S(POGRAPHIC MAP GENERA).197 E(TION) --1.04 E F0 .52(In certain situations, it may be desirable to generate a\ - topographic map of a re)108 573.6 R .519(gion without plotting co)-.15 -F -.15(ve)-.15 G -.2(r-).15 G 1.006 -(age areas, line-of-sight paths, or generating obstruction reports.)108 -585.6 R 1.007(There are se)6.007 F -.15(ve)-.25 G 1.007(ral w).15 F -1.007(ays of doing this.)-.1 F(If)6.007 E .814(one wishes to generate a\ +(single to)108 396 Q(wer may be generated by)-.25 E/F3 10/Times-Bold@0 +SF(SPLA)2.5 E(T!)-.95 E F0(.)A/F4 10.95/Times-Bold@0 SF(LONGLEY)72 412.8 +Q(-RICE P)-1.007 E -1.04(AT)-.81 G 2.738(HL)1.04 G(OSS AN)-2.738 E(AL) +-.219 E(YSIS)-1.007 E F0 .345(If the)108 424.8 R F1(-c)2.845 E F0 .345 +(switch is replaced by a)2.845 F F1(-L)2.844 E F0 .344(switch, a Longle) +2.844 F .344(y-Rice path loss map for a transmitter site may be gen-) +-.15 F(erated:)108 436.8 Q F2 +(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o path_loss_map) +108 460.8 Q F0 .977(In this mode,)108 484.8 R F3(SPLA)3.477 E(T!)-.95 E +F0 .977(generates a multi-color map illustrating e)3.477 F .977 +(xpected signal le)-.15 F -.15(ve)-.25 G .978(ls \(path loss\) in areas) +.15 F .997(surrounding the transmitter site.)108 496.8 R 3.497(Al)5.997 +G -.15(eg)-3.497 G .996 +(end at the bottom of the map correlates each color with a speci\214c) +.15 F(path loss range in decibels.)108 508.8 Q .63(The Longle)108 532.8 +R .63(y-Rice analysis range may be modi\214ed to a user)-.15 F .63 +(-speci\214c v)-.2 F .63(alue using the)-.25 F F1(-R)3.13 E F0 3.13 +(switch. The)3.13 F(ar)3.13 E(gu-)-.18 E .523(ment must be gi)108 544.8 +R -.15(ve)-.25 G 3.023(ni).15 G 3.023(nm)-3.023 G .523 +(iles \(or kilometers if the)-3.023 F F1(-metric)3.023 E F0 .522 +(switch is used\).)3.022 F .522(If a range wider than the gener)5.522 F +(-)-.2 E .926(ated topographic map is speci\214ed,)108 556.8 R F3(SPLA) +3.426 E(T!)-.95 E F0 .926(will perform Longle)3.426 F .926 +(y-Rice path loss calculations between all)-.15 F +(four corners of the area prediction map.)108 568.8 Q(The)108 592.8 Q F1 +(-db)3.345 E F0 .845(switch allo)3.345 F .845 +(ws a constraint to be placed on the maximum path loss re)-.25 F .844 +(gion plotted on the map.)-.15 F(A)5.844 E .21(maximum path loss betwee\ +n 80 and 230 dB may be speci\214ed using this switch.)108 604.8 R -.15 +(Fo)5.21 G 2.71(re).15 G .21(xample, if a path loss)-2.86 F(be)108 616.8 +Q .396(yond -140 dB is irrele)-.15 F -.25(va)-.25 G .395(nt to the surv) +.25 F .695 -.15(ey b)-.15 H .395(eing conducted,).15 F F3(SPLA)2.895 E +(T!)-.95 E F0 1.495 -.55('s p)D .395 +(ath loss plot can be constrained to).55 F(the re)108 628.8 Q +(gion bounded by the 140 dB attenuation contour as follo)-.15 E(ws:)-.25 +E F2(splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db 140 -o plo\ +t.ppm)108 652.8 Q F4(ANTENN)72 681.6 Q 2.738(AR)-.219 G(ADIA)-2.738 E +(TION P)-1.04 E -1.04(AT)-.81 G(TERN P)1.04 E(ARAMETERS)-.81 E F0 .976 +(Normalized \214eld v)108 693.6 R .977 +(oltage patterns for a transmitting antenna')-.2 F 3.477(sh)-.55 G .977 +(orizontal and v)-3.477 F .977(ertical planes are imported)-.15 F .588 +(automatically into)108 705.6 R F3(SPLA)3.088 E(T!)-.95 E F0 .588 +(when a Longle)3.088 F .588(y-Rice co)-.15 F -.15(ve)-.15 G .588 +(rage analysis is performed.).15 F .587(Antenna pattern data is)5.587 F +.804(read from a pair of \214les ha)108 717.6 R .805 +(ving the same base name as the transmitter and LRP \214les, b)-.2 F +.805(ut with)-.2 F F1(.az)3.305 E F0(and)3.305 E F1(.el)3.305 E F0 -.15 +(ex)108 729.6 S .308(tensions for azimuth and ele).15 F -.25(va)-.25 G +.308(tion pattern \214les, respecti).25 F -.15(ve)-.25 G(ly).15 E 5.307 +(.S)-.65 G .307(peci\214cations re)-5.307 F -.05(ga)-.15 G .307 +(rding pattern rotation \(if).05 F(KD2BD Softw)72 768 Q 121.625(are 20) +-.1 F(December 2006)2.5 E(9)190.955 E EP +%%Page: 10 10 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E(an)108 84 Q .45 +(y\) and mechanical beam tilt and tilt direction \(if an)-.15 F .451 +(y\) are also contained within)-.15 F/F1 10/Times-Bold@0 SF(SPLA)2.951 E +(T!)-.95 E F0 .451(antenna pattern)2.951 F(\214les.)108 96 Q -.15(Fo)108 +120 S 2.5(re).15 G(xample, the \214rst fe)-2.65 E 2.5(wl)-.25 G +(ines of a)-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0 +(azimuth pattern \214le might appear as follo)2.5 E(ws \()-.25 E/F2 10 +/Times-Italic@0 SF(kvea.az)A F0(\):)A/F3 10/Courier@0 SF(183.0)156 144 Q +42(00)156 156 S(.8950590)-42 E 42(10)156 168 S(.8966406)-42 E 42(20)156 +180 S(.8981447)-42 E 42(30)156 192 S(.8995795)-42 E 42(40)156 204 S +(.9009535)-42 E 42(50)156 216 S(.9022749)-42 E 42(60)156 228 S(.9035517) +-42 E 42(70)156 240 S(.9047923)-42 E 42(80)156 252 S(.9060051)-42 E F0 +1.778(The \214rst line of the)108 276 R F2(.az)4.278 E F0 1.777(\214le \ +speci\214es the amount of azimuthal pattern rotation \(measured clockwi\ +se in)4.278 F(de)108 288 Q .062(grees from T)-.15 F .062 +(rue North\) to be applied by)-.35 F F1(SPLA)2.562 E(T!)-.95 E F0 .063 +(to the data contained in the)2.562 F F2(.az)2.563 E F0 2.563 +(\214le. This)2.563 F .063(is follo)2.563 F .063(wed by)-.25 F .871 +(azimuth headings \(0 to 360 de)108 300 R .871(grees\) and their associ\ +ated normalized \214eld patterns \(0.000 to 1.000\) sepa-)-.15 F +(rated by whitespace.)108 312 Q .068(The structure of)108 336 R F1(SPLA) +2.569 E(T!)-.95 E F0(ele)2.569 E -.25(va)-.25 G .069 +(tion pattern \214les is slightly dif).25 F 2.569(ferent. The)-.25 F +.069(\214rst line of the)2.569 F F2(.el)2.569 E F0 .069 +(\214le speci\214es the)2.569 F .892 +(amount of mechanical beam tilt applied to the antenna.)108 348 R .892 +(Note that a)5.892 F F2(downwar)3.392 E 3.392(dt)-.37 G(ilt)-3.392 E F0 +(\(belo)3.391 E 3.391(wt)-.25 G .891(he horizon\) is)-3.391 F -.15(ex) +108 360 S 1.101(pressed as a).15 F F2 1.101(positive angle)3.601 F F0 +3.601(,w)C 1.101(hile an)-3.601 F F2(upwar)3.601 E 3.601(dt)-.37 G(ilt) +-3.601 E F0(\(abo)3.601 E 1.401 -.15(ve t)-.15 H 1.101 +(he horizon\) is e).15 F 1.101(xpressed as a)-.15 F F2(ne)3.602 E 1.102 +(gative angle)-.4 F F0(.)A(This data is follo)108 372 Q +(wed by the azimuthal direction of the tilt, separated by whitespace.) +-.25 E .437(The remainder of the \214le consists of ele)108 396 R -.25 +(va)-.25 G .436(tion angles and their corresponding normalized v).25 F +.436(oltage radiation)-.2 F .247(pattern \(0.000 to 1.000\) v)108 408 R +.247(alues separated by whitespace.)-.25 F(Ele)5.247 E -.25(va)-.25 G +.248(tion angles must be speci\214ed o).25 F -.15(ve)-.15 G 2.748(ra-) +.15 G .248(10.0 to)-2.748 F .131(+90.0 de)108 420 R .131(gree range.) +-.15 F .131(As w)5.131 F .131(as the con)-.1 F -.15(ve)-.4 G .131 +(ntion with mechanical beamtilt,).15 F F2(ne)2.631 E .13(gative ele)-.4 +F .13(vation angles)-.15 F F0 .13(are used to)2.63 F(represent ele)108 +432 Q -.25(va)-.25 G(tions).25 E F2(abo)2.5 E(ve the horizon)-.1 E F0 +2.5(,w)C(hile)-2.5 E F2(positive angles)2.5 E F0(represents ele)2.5 E +-.25(va)-.25 G(tions).25 E F2(below the horizon)2.5 E F0(.)A -.15(Fo)108 +456 S 2.5(re).15 G(xample, the \214rst fe)-2.65 E 2.5(wl)-.25 G(ines a) +-2.5 E F1(SPLA)2.5 E(T!)-.95 E F0(ele)2.5 E -.25(va)-.25 G +(tion pattern \214le might appear as follo).25 E(ws \()-.25 E F2 +(kvea.el)A F0(\):)A F3 18(1.1 130.0)156 480 R 12(-10.0 0.172)150 492 R +18(-9.5 0.109)150 504 R 18(-9.0 0.115)150 516 R 18(-8.5 0.155)150 528 R +18(-8.0 0.157)150 540 R 18(-7.5 0.104)150 552 R 18(-7.0 0.029)150 564 R +18(-6.5 0.109)150 576 R 18(-6.0 0.185)150 588 R F0 1.538(In this e)108 +612 R 1.538(xample, the antenna is mechanically tilted do)-.15 F(wnw) +-.25 E 1.538(ard 1.1 de)-.1 F 1.538(grees to)-.15 F -.1(wa)-.25 G 1.538 +(rds an azimuth of 130.0).1 F(de)108 624 Q(grees.)-.15 E -.15(Fo)108 648 +S 3.447(rb).15 G .946(est results, the resolution of azimuth pattern da\ +ta should be speci\214ed to the nearest de)-3.447 F .946(gree azimuth,) +-.15 F 1.299(and ele)108 660 R -.25(va)-.25 G 1.299(tion pattern data r\ +esolution should be speci\214ed to the nearest 0.01 de).25 F 3.8 +(grees. If)-.15 F 1.3(the pattern data)3.8 F .55 +(speci\214ed does not reach this le)108 672 R -.15(ve)-.25 G 3.049(lo) +.15 G 3.049(fr)-3.049 G(esolution,)-3.049 E F1(SPLA)3.049 E(T!)-.95 E F0 +.549(will interpolate the v)3.049 F .549(alues pro)-.25 F .549 +(vided to determine)-.15 F(the data at the required resolution, althoug\ +h this may result in a loss in accurac)108 684 Q -.65(y.)-.15 G +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(10) +185.955 E EP +%%Page: 11 11 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95 +/Times-Bold@0 SF(IMPOR)72 84 Q(TING AND EXPOR)-.438 E(TING REGION)-.438 +E(AL P)-.219 E -1.04(AT)-.81 G 2.738(HL)1.04 G(OSS CONT)-2.738 E(OUR D) +-.197 E -1.644 -1.04(AT A)-.383 H F0 .254(Performing a Longle)108 96 R +.254(y-Rice co)-.15 F -.15(ve)-.15 G .254(rage analysis can be a v).15 F +.254(ery time consuming process, especially if the anal-)-.15 F .936 +(ysis is repeated repeatedly to disco)108 108 R -.15(ve)-.15 G 3.436(rw) +.15 G .936(hat ef)-3.436 F .935 +(fects changes to the antenna radiation patterns mak)-.25 F 3.435(et)-.1 +G 3.435(ot)-3.435 G(he)-3.435 E(predicted co)108 120 Q -.15(ve)-.15 G +(rage area.).15 E .721(This process can be e)108 144 R .722 +(xpedited by e)-.15 F .722(xporting the Longle)-.15 F .722(y-Rice re) +-.15 F .722(gional path loss contour data to an output)-.15 F .776 +(\214le, modifying the path loss data e)108 156 R .775 +(xternally to incorporate antenna pattern ef)-.15 F .775 +(fects, and then importing the)-.25 F +(modi\214ed path loss data back into)108 168 Q/F2 10/Times-Bold@0 SF +(SPLA)2.5 E(T!)-.95 E F0(to rapidly produce a re)5 E +(vised path loss map.)-.25 E -.15(Fo)108 192 S 3.253(re).15 G .753 +(xample, a path loss output \214le can be generated by)-3.403 F F2(SPLA) +3.253 E(T!)-.95 E F0 .753(for a recei)5.753 F 1.053 -.15(ve s)-.25 H +.754(ite 30 feet abo).15 F 1.054 -.15(ve g)-.15 H(round).15 E(le)108 204 +Q -.15(ve)-.25 G 2.998(lo).15 G -.15(ve)-3.148 G 2.998(ra5).15 G 2.998 +(0m)-2.998 G .497(ile radius surrounding a transmitter site to a maximu\ +m path loss of 140 dB using the fol-)-2.998 F(lo)108 216 Q(wing syntax:) +-.25 E/F3 10/Courier@0 SF +(splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat)108 240 Q F2 +(SPLA)108 264 Q(T!)-.95 E F0 .044(path loss output \214les often e)2.544 +F .044(xceed 100 me)-.15 F -.05(ga)-.15 G .044(bytes in size.).05 F(The) +5.045 E 2.545(yc)-.15 G .045(ontain information relating to the)-2.545 F +2.58(boundaries of re)108 276 R 2.58(gion the)-.15 F 5.08(yd)-.15 G 2.58 +(escribe follo)-5.08 F 2.58(wed by latitudes \(de)-.25 F 2.58 +(grees North\), longitudes \(de)-.15 F 2.58(grees W)-.15 F(est\),)-.8 E +.655(azimuths, ele)108 288 R -.25(va)-.25 G .656(tions \(to the \214rst\ + obstruction\), and path loss \214gures \(dB\) for a series of speci\ +\214c points that).25 F .542(comprise the re)108 300 R .542 +(gion surrounding the transmitter site.)-.15 F .542(The \214rst fe)5.542 +F 3.042(wl)-.25 G .542(ines of a)-3.042 F F2(SPLA)3.042 E(T!)-.95 E F0 +.541(path loss output \214le)3.041 F(tak)108 312 Q 2.5(eo)-.1 G 2.5(nt) +-2.5 G(he follo)-2.5 E(wing appearance \()-.25 E/F4 10/Times-Italic@0 SF +(pathloss.dat)A F0(\):)A F3(119, 117)156 336 Q 6(;m)24 G +(ax_west, min_west)-6 E(35, 33)156 348 Q 6(;m)36 G(ax_north, min_north) +-6 E(34.2265434, 118.0631104, 48.171, -37.461, 67.70)156 360 Q +(34.2270355, 118.0624390, 48.262, -26.212, 73.72)156 372 Q +(34.2280197, 118.0611038, 48.269, -14.951, 79.74)156 384 Q +(34.2285156, 118.0604401, 48.207, -11.351, 81.68)156 396 Q +(34.2290077, 118.0597687, 48.240, -10.518, 83.26)156 408 Q +(34.2294998, 118.0591049, 48.225, 23.201, 84.60)156 420 Q +(34.2304878, 118.0577698, 48.213, 15.769, 137.84)156 432 Q +(34.2309799, 118.0570984, 48.234, 15.965, 151.54)156 444 Q +(34.2314720, 118.0564346, 48.224, 16.520, 149.45)156 456 Q +(34.2319679, 118.0557632, 48.223, 15.588, 151.61)156 468 Q +(34.2329521, 118.0544281, 48.230, 13.889, 135.45)156 480 Q +(34.2334442, 118.0537643, 48.223, 11.693, 137.37)156 492 Q +(34.2339401, 118.0530930, 48.222, 14.050, 126.32)156 504 Q +(34.2344322, 118.0524292, 48.216, 16.274, 156.28)156 516 Q +(34.2354164, 118.0510941, 48.222, 15.058, 152.65)156 528 Q +(34.2359123, 118.0504227, 48.221, 16.215, 158.57)156 540 Q +(34.2364044, 118.0497589, 48.216, 15.024, 157.30)156 552 Q +(34.2368965, 118.0490875, 48.225, 17.184, 156.36)156 564 Q F0 .134 +(It is not uncommon for)108 588 R F2(SPLA)2.634 E(T!)-.95 E F0 .135 +(path loss \214les to contain as man)2.635 F 2.635(ya)-.15 G 2.635(s3m) +-2.635 G .135(illion or more lines of data.)-2.635 F(Com-)5.135 E 1.165 +(ments can be placed in the \214le if the)108 600 R 3.664(ya)-.15 G +1.164(re proceeded by a semicolon character)-3.664 F 6.164(.T)-.55 G(he) +-6.164 E F2(vim)3.664 E F0(te)3.664 E 1.164(xt editor has)-.15 F(pro)108 +612 Q -.15(ve)-.15 G 2.5(nc).15 G +(apable of editing \214les of this size.)-2.5 E .807(Note as w)108 636 R +.807(as the case in the antenna pattern \214les, ne)-.1 F -.05(ga)-.15 G +(ti).05 E 1.107 -.15(ve e)-.25 H(le).15 E -.25(va)-.25 G .807 +(tion angles refer to upw).25 F .808(ard tilt \(abo)-.1 F 1.108 -.15 +(ve t)-.15 H(he).15 E .94(horizon\), while positi)108 648 R 1.24 -.15 +(ve a)-.25 H .94(ngles refer to do).15 F(wnw)-.25 E .94(ard tilt \(belo) +-.1 F 3.44(wt)-.25 G .94(he horizon\).)-3.44 F .94 +(These angles refer to the ele-)5.94 F -.25(va)108 660 S 1.075 +(tion to the recei).25 F 1.075(ving antenna at the height abo)-.25 F +1.376 -.15(ve g)-.15 H 1.076(round le).15 F -.15(ve)-.25 G 3.576(ls).15 +G 1.076(peci\214ed using the)-3.576 F F4(-L)3.576 E F0(switch)3.576 E F4 +(if)3.576 E F0 1.076(the path)3.576 F 2.35 +(between transmitter and recei)108 672 R -.15(ve)-.25 G 4.85(ri).15 G +4.85(su)-4.85 G 4.85(nobstructed. If)-4.85 F 2.35 +(the path between the transmitter and recei)4.85 F -.15(ve)-.25 G 4.85 +(ri).15 G(s)-4.85 E .009(obstructed, then the ele)108 684 R -.25(va)-.25 +G .009(tion angle to the \214rst obstruction is returned by).25 F F2 +(SPLA)2.51 E(T!)-.95 E F0 5.01(.T)C .01(his is because the Lon-)-5.01 F +(gle)108 696 Q .262(y-Rice model considers the ener)-.15 F .262 +(gy reaching a distant point o)-.18 F -.15(ve)-.15 G 2.762(ra).15 G +2.762(no)-2.762 G .262(bstructed path as a deri)-2.762 F -.25(va)-.25 G +(ti).25 E .561 -.15(ve o)-.25 H 2.761(ft).15 G(he)-2.761 E(ener)108 708 +Q .489(gy scattered from the top of the \214rst obstruction, only)-.18 F +5.489(.S)-.65 G .489(ince ener)-5.489 F .489 +(gy cannot reach the obstructed loca-)-.18 F(tion directly)108 720 Q 2.5 +(,t)-.65 G(he actual ele)-2.5 E -.25(va)-.25 G +(tion angle to that point is irrele).25 E -.25(va)-.25 G(nt.).25 E +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(11) +185.955 E EP +%%Page: 12 12 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E 1.142 +(When modifying)108 84 R/F1 10/Times-Bold@0 SF(SPLA)3.642 E(T!)-.95 E F0 +1.141(path loss \214les to re\215ect antenna pattern data,)3.642 F/F2 10 +/Times-Italic@0 SF 1.141(only the last column \(path loss\))3.641 F F0 +.233(should be amended to re\215ect the antenna')108 96 R 2.733(sn)-.55 +G .233(ormalized g)-2.733 F .233(ain at the azimuth and ele)-.05 F -.25 +(va)-.25 G .234(tion angles speci\214ed in).25 F .395(the \214le.)108 +108 R .395(\(At this time, programs and scripts capable of performing t\ +his operation are left as an e)5.395 F -.15(xe)-.15 G .395(rcise for).15 +F(the user)108 120 Q(.\))-.55 E +(Modi\214ed path loss maps can be imported back into)108 144 Q F1(SPLA) +2.5 E(T!)-.95 E F0(for generating re)2.5 E(vised co)-.25 E -.15(ve)-.15 +G(rage maps:).15 E/F3 10/Courier@0 SF +(splat -t kvea -pli pathloss.dat -s city.dat -b county.dat -o map.ppm) +108 168 Q F1(SPLA)108 192 Q(T!)-.95 E F0 .006 +(path loss \214les can also be used for conducting co)2.506 F -.15(ve) +-.15 G .007(rage or interference studies outside of).15 F F1(SPLA)2.507 +E(T!)-.95 E F0(.)A/F4 10.95/Times-Bold@0 SF +(USER-DEFINED TERRAIN INPUT FILES)72 208.8 Q F0 3.542(Au)108 220.8 S +(ser)-3.542 E 1.042(-de\214ned terrain \214le is a user)-.2 F 1.041 +(-generated te)-.2 F 1.041 +(xt \214le containing latitudes, longitudes, and heights abo)-.15 F -.15 +(ve)-.15 G 1.072(ground le)108 232.8 R -.15(ve)-.25 G 3.572(lo).15 G +3.572(fs)-3.572 G 1.072(peci\214c terrain features belie)-3.572 F -.15 +(ve)-.25 G 3.572(dt).15 G 3.572(ob)-3.572 G 3.573(eo)-3.572 G 3.573(fi) +-3.573 G 1.073(mportance to the)-3.573 F F1(SPLA)3.573 E(T!)-.95 E F0 +1.073(analysis being con-)3.573 F .602(ducted, b)108 244.8 R .601 +(ut noticeably absent from the SDF \214les being used.)-.2 F 3.101(Au) +5.601 G(ser)-3.101 E .601(-de\214ned terrain \214le is imported into a) +-.2 F F1(SPLA)108 256.8 Q(T!)-.95 E F0(analysis using the)2.5 E F2(-udt) +2.5 E F0(switch:)2.5 E F3 +(splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm)114 280.8 Q F0 +2.5(Au)108 304.8 S(ser)-2.5 E(-de\214ned terrain \214le has the follo) +-.2 E(wing appearance and structure:)-.25 E F3 +(40.32180556, 74.1325, 100.0 meters)150 328.8 Q +(40.321805, 74.1315, 300.0)150 340.8 Q +(40.3218055, 74.1305, 100.0 meters)150 352.8 Q F0 -.7(Te)108 376.8 S +1.42(rrain height is interpreted as being described in feet abo).7 F +1.72 -.15(ve g)-.15 H 1.42(round le).15 F -.15(ve)-.25 G 3.92(lu).15 G +1.42(nless follo)-3.92 F 1.42(wed by the w)-.25 F(ord)-.1 E F2(meter)108 +388.8 Q(s)-.1 E F0 3.329(,a)C .829(nd is added)-3.329 F F2 .829 +(on top of)3.329 F F0 .829 +(the terrain speci\214ed in the SDF data for the locations speci\214ed.) +3.329 F .828(Be a)5.829 F -.1(wa)-.15 G(re).1 E 1.06(that each user)108 +400.8 R 1.061(-de\214ned terrain feature speci\214ed will be interprete\ +d as being 3-arc seconds in both latitude)-.2 F .282(and longitude.)108 +412.8 R .282(Features described in the user)5.282 F .281 +(-de\214ned terrain \214le that o)-.2 F -.15(ve)-.15 G .281(rlap pre).15 +F .281(viously de\214ned features in)-.25 F(the \214le are ignored by) +108 424.8 Q F1(SPLA)2.5 E(T!)-.95 E F0(.)A F4(SIMPLE T)72 441.6 Q +(OPOGRAPHIC MAP GENERA)-.197 E(TION)-1.04 E F0 .034(In certain situatio\ +ns it may be desirable to generate a topographic map of a re)108 453.6 R +.035(gion without plotting co)-.15 F -.15(ve)-.15 G(rage).15 E .97 +(areas, line-of-sight paths, or generating obstruction reports.)108 +465.6 R .969(There are se)5.969 F -.15(ve)-.25 G .969(ral w).15 F .969 +(ays of doing this.)-.1 F .969(If one)5.969 F .162(wishes to generate a\ topographic map illustrating the location of a transmitter and recei) -108 597.6 R -.15(ve)-.25 G 3.314(rs).15 G .814(ite along)-3.314 F 1.175 -(with a brief te)108 609.6 R 1.176(xt report describing the locations a\ -nd distances between the sites, the)-.15 F F4(-n)3.676 E F0 1.176 -(switch should be)3.676 F(in)108 621.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5 -(da).1 G 2.5(sf)-2.5 G(ollo)-2.5 E(ws:)-.25 E F2 -(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 645.6 Q F0(If no te) -108 669.6 Q(xt report is desired, then the)-.15 E F4(-N)2.5 E F0 -(switch is used:)2.5 E F2 -(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 693.6 Q F0 .061 -(If the)108 717.6 R F4(-o)2.561 E F0 .061 -(switch and output \214lename are omitted when using either the)2.561 F -F4(-n)2.56 E F0(or)2.56 E F4(-N)2.56 E F0 .06 -(switches, output is written to)2.56 F 2.5<618c>108 729.6 S(le named) --2.5 E F4(map.ppm)2.5 E F0(in the current w)2.5 E -(orking directory by def)-.1 E(ault.)-.1 E(KD2BD Softw)72 768 Q 129.12 -(are 02)-.1 F(March 2006)2.5 E(8)198.45 E EP -%%Page: 9 9 +108 477.6 R -.15(ve)-.25 G 2.662(rs).15 G .162(ite along with a)-2.662 F +.139(brief te)108 489.6 R .139(xt report describing the locations and d\ +istances between the sites, the)-.15 F F2(-n)2.639 E F0 .138 +(switch should be in)2.639 F -.2(vo)-.4 G -.1(ke).2 G 2.638(da).1 G(s) +-2.638 E(follo)108 501.6 Q(ws:)-.25 E F3 +(splat -t tx_site -r rx_site -n -o topo_map.ppm)108 525.6 Q F0(If no te) +108 549.6 Q(xt report is desired, then the)-.15 E F2(-N)2.5 E F0 +(switch is used:)2.5 E F3 +(splat -t tx_site -r rx_site -N -o topo_map.ppm)108 573.6 Q F0 .994(If \ +a topographic map centered about a single site out to a minimum speci\ +\214ed radius is desired instead, a)108 597.6 R +(command similar to the follo)108 609.6 Q(wing can be used:)-.25 E F3 +(splat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o topo_map.ppm) +108 633.6 Q F0(where -R speci\214es the minimum radius of the map in mi\ +les \(or kilometers if the)108 657.6 Q F2(-metric)2.5 E F0 +(switch is used\).)2.5 E .592(If the)108 681.6 R F2(-o)3.092 E F0 .592(\ +switch and output \214lename are omitted in these operations, topograph\ +ic output is written to a \214le)3.092 F(named)108 693.6 Q F2(map.ppm) +2.5 E F0(in the current w)2.5 E(orking directory by def)-.1 E(ault.)-.1 +E(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(12) +185.955 E EP +%%Page: 13 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F (Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E/F1 10.95 -/Times-Bold@0 SF(DETERMIN)72 84 Q -1.04(AT)-.219 G(ION OF ANTENN)1.04 E -2.738(AH)-.219 G(EIGHT ABO)-2.738 E(VE A)-.548 E(VERA)-1.588 E -(GE TERRAIN)-.602 E/F2 10/Times-Bold@0 SF(SPLA)108 96 Q(T!)-.95 E F0 -.947(determines antenna height abo)3.447 F 1.248 -.15(ve a)-.15 H -.15 -(ve)-.05 G .948(rage terrain \(HAA).15 F .948 +/Times-Bold@0 SF(GEOREFERENCE FILE GENERA)72 84 Q(TION)-1.04 E F0 -.8 +(To)108 96 S .849(pographic, co).8 F -.15(ve)-.15 G .849(rage \().15 F +/F2 10/Times-Italic@0 SF(-c)A F0 .849(\), and path loss contour \()B F2 +(-L)A F0 3.349(\)m)C .849(aps generated by)-3.349 F/F3 10/Times-Bold@0 +SF(SPLA)3.35 E(T!)-.95 E F0 .85(may be imported into)3.35 F F3(Xastir) +108 108 Q F0 .176(\(X Amateur Station T)2.676 F .175 +(racking and Information Reporting\) softw)-.35 F .175 +(are by generating a georeference \214le)-.1 F(using)108 120 Q F3(SPLA) +2.5 E(T!)-.95 E F0 -.55('s)C F2(-g)3.05 E(eo)-.1 E F0(switch:)2.5 E/F4 +10/Courier@0 SF +(splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o map.ppm)108 +144 Q F0 1.515(The georeference \214le generated will ha)108 168 R 1.815 +-.15(ve t)-.2 H 1.516(he same base name as the).15 F F2(-o)4.016 E F0 +1.516(\214le speci\214ed, b)4.016 F 1.516(ut ha)-.2 F 1.816 -.15(ve a) +-.2 H F2(.g)6.666 E(eo)-.1 E F0 -.15(ex)108 180 S +(tension, and permit proper interpretation and display of).15 E F3(SPLA) +2.5 E(T!)-.95 E F0 1.1 -.55('s .)D(ppm graphics in).55 E F3(Xastir)2.5 E +F0(softw)2.5 E(are.)-.1 E F1(GOOGLE MAP KML FILE GENERA)72 196.8 Q(TION) +-1.04 E F0 -2.15 -.25(Ke y)108 208.8 T .775 +(hole Markup Language \214les compatible with).25 F F3 .774 +(Google Earth)3.274 F F0 .774(may be generated by)3.274 F F3(SPLA)3.274 +E(T!)-.95 E F0 .774(when per)3.274 F(-)-.2 E +(forming point-to-point analyses by in)108 220.8 Q -.2(vo)-.4 G +(king the).2 E F2(-kml)2.5 E F0(switch:)2.5 E F4 +(splat -t wnjt -r kd2bd -kml)108 244.8 Q F0 .429 +(The KML \214le generated will ha)108 268.8 R .729 -.15(ve t)-.2 H .43(\ +he same \214lename structure as an Obstruction Report for the transmitt\ +er).15 F(and recei)108 280.8 Q -.15(ve)-.25 G 2.5(rs).15 G(ite names gi) +-2.5 E -.15(ve)-.25 G(n, e).15 E(xcept it will carry a)-.15 E F2(.kml)5 +E F0 -.15(ex)2.5 G(tension.).15 E 1.619(Once loaded into)108 304.8 R F3 +1.619(Google Earth)4.119 F F0 1.618(\(File --> Open\), the KML \214le w\ +ill annotate the map display with the)4.118 F .567 +(names of the transmitter and recei)108 316.8 R -.15(ve)-.25 G 3.067(rs) +.15 G .568(ite locations.)-3.067 F .568(The vie)5.568 F .568 +(wpoint of the image will be from the position)-.25 F 1.317 +(of the transmitter site looking to)108 328.8 R -.1(wa)-.25 G 1.317 +(rds the location of the recei).1 F -.15(ve)-.25 G 4.916 -.55(r. T).15 H +1.316(he point-to-point path between the).55 F .792(sites will be displ\ +ayed as a white line while the RF line-of-sight path will be displayed \ +in green.)108 340.8 R F3(Google)5.792 E(Earth)108 352.8 Q F0 1.844 -.55 +('s n)D -.2(av).55 G(ig).2 E .744(ation tools allo)-.05 F 3.243(wt)-.25 +G .743(he user to "\215y" around the path, identify landmarks, roads, a\ +nd other fea-)-3.243 F(tured content.)108 364.8 Q F1(DETERMIN)72 381.6 Q +-1.04(AT)-.219 G(ION OF ANTENN)1.04 E 2.738(AH)-.219 G(EIGHT ABO)-2.738 +E(VE A)-.548 E(VERA)-1.588 E(GE TERRAIN)-.602 E F3(SPLA)108 393.6 Q(T!) +-.95 E F0 .947(determines antenna height abo)3.447 F 1.248 -.15(ve a) +-.15 H -.15(ve)-.05 G .948(rage terrain \(HAA).15 F .948 (T\) according to the procedure de\214ned by)-1.11 F .167 -(Federal Communications Commission P)108 108 R .167(art 73.313\(d\).) +(Federal Communications Commission P)108 405.6 R .167(art 73.313\(d\).) -.15 F .166(According to this de\214nition, terrain ele)5.166 F -.25(va) -.25 G .166(tions along).25 F .794(eight radials between 2 and 10 miles\ \(3 and 16 kilometers\) from the site being analyzed are sampled and) -108 120 R -2.25 -.2(av e)108 132 T .614(raged for each 45 de).2 F .613 -(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613 +108 417.6 R -2.25 -.2(av e)108 429.6 T .614(raged for each 45 de).2 F +.613(grees of azimuth starting with T)-.15 F .613(rue North.)-.35 F .613 (If one or more radials lie entirely o)5.613 F -.15(ve)-.15 G(r).15 E --.1(wa)108 144 S .534(ter or o).1 F -.15(ve)-.15 G 3.034(rl).15 G .535 +-.1(wa)108 441.6 S .534(ter or o).1 F -.15(ve)-.15 G 3.034(rl).15 G .535 (and outside the United States \(areas for which no USGS topograph) -3.034 F 3.035(yd)-.05 G .535(ata is a)-3.035 F -.25(va)-.2 G .535 -(ilable\), then).25 F .519 -(those radials are omitted from the calculation of a)108 156 R -.15(ve) --.2 G .519(rage terrain.).15 F .519(If part of a radial e)5.519 F .519 -(xtends o)-.15 F -.15(ve)-.15 G 3.019(rab).15 G .518(ody of)-3.019 F -.1 -(wa)108 168 S .012(ter or o).1 F -.15(ve)-.15 G 2.512(rl).15 G .012(and\ - outside the United States, then only that part of the radial lying o) --2.512 F -.15(ve)-.15 G 2.513(rU).15 G .013(nited States land is)-2.513 -F(used in the determination of a)108 180 Q -.15(ve)-.2 G(rage terrain.) -.15 E .918(Note that SR)108 204 R .918(TM ele)-.6 F -.25(va)-.25 G .918 -(tion data, unlik).25 F 3.418(eo)-.1 G .917 +(ilable\), then).25 F +(those radials are omitted from the calculation of a)108 453.6 Q -.15 +(ve)-.2 G(rage terrain.).15 E .918(Note that SR)108 477.6 R .918(TM ele) +-.6 F -.25(va)-.25 G .918(tion data, unlik).25 F 3.418(eo)-.1 G .917 (lder 3-arc second USGS data, e)-3.418 F .917(xtends be)-.15 F .917 -(yond the borders of the)-.15 F .866(United States.)108 216 R .867 +(yond the borders of the)-.15 F .866(United States.)108 489.6 R .867 (Therefore, HAA)5.866 F 3.367(Tr)-1.11 G .867 (esults may not be in full compliance with FCC P)-3.367 F .867 (art 73.313\(d\) in areas)-.15 F (along the borders of the United States if the SDF \214les used by)108 -228 Q F2(SPLA)2.5 E(T!)-.95 E F0(are SR)2.5 E(TM-deri)-.6 E -.15(ve)-.25 -G(d.).15 E .162(When performing point-to-point terrain analysis,)108 252 -R F2(SPLA)2.662 E(T!)-.95 E F0 .162(determines the antenna height abo) -2.662 F .461 -.15(ve a)-.15 H -.15(ve)-.05 G .161(rage ter).15 F(-)-.2 E -.407(rain only if enough topographic data has already been loaded by th\ -e program to perform the point-to-point)108 264 R 3.712(analysis. In)108 -276 R 1.211(most cases, this will be true, unless the site in question \ -does not lie within 10 miles of the)3.712 F(boundary of the topograph) -108 288 Q 2.5(yd)-.05 G(ata in memory)-2.5 E(.)-.65 E .491 -(When performing area prediction analysis, enough topograph)108 312 R -2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F2(SPLA)2.992 E -(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 324 R -.15(ve) --.2 G .807(rage terrain calculations.).15 F .807(Under such conditions,) -5.807 F F2(SPLA)3.307 E(T!)-.95 E F0 .807(will pro)3.307 F .807 -(vide the antenna height abo)-.15 F -.15(ve)-.15 G -2.25 -.2(av e)108 -336 T .203(rage terrain as well as the a).2 F -.15(ve)-.2 G .203 -(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203(ean sea le).15 F -.15 -(ve)-.25 G 2.704(lf).15 G .204(or azimuths of 0, 45, 90, 135, 180, 225,) --2.704 F .162(270, and 315 de)108 348 R .162 -(grees, and include such information in the site report generated.)-.15 -F .161(If one or more of the eight)5.161 F 1.004(radials surv)108 360 R --.15(ey)-.15 G 1.004(ed f).15 F 1.004(all o)-.1 F -.15(ve)-.15 G 3.504 +501.6 Q F3(SPLA)2.5 E(T!)-.95 E F0(are SR)2.5 E(TM-deri)-.6 E -.15(ve) +-.25 G(d.).15 E .162(When performing point-to-point terrain analysis,) +108 525.6 R F3(SPLA)2.662 E(T!)-.95 E F0 .162 +(determines the antenna height abo)2.662 F .461 -.15(ve a)-.15 H -.15 +(ve)-.05 G .161(rage ter).15 F(-)-.2 E .407(rain only if enough topogra\ +phic data has already been loaded by the program to perform the point-t\ +o-point)108 537.6 R 3.712(analysis. In)108 549.6 R 1.211(most cases, th\ +is will be true, unless the site in question does not lie within 10 mil\ +es of the)3.712 F(boundary of the topograph)108 561.6 Q 2.5(yd)-.05 G +(ata in memory)-2.5 E(.)-.65 E .491 +(When performing area prediction analysis, enough topograph)108 585.6 R +2.991(yd)-.05 G .492(ata is normally loaded by)-2.991 F F3(SPLA)2.992 E +(T!)-.95 E F0 .492(to per)2.992 F(-)-.2 E .807(form a)108 597.6 R -.15 +(ve)-.2 G .807(rage terrain calculations.).15 F .807 +(Under such conditions,)5.807 F F3(SPLA)3.307 E(T!)-.95 E F0 .807 +(will pro)3.307 F .807(vide the antenna height abo)-.15 F -.15(ve)-.15 G +-2.25 -.2(av e)108 609.6 T .203(rage terrain as well as the a).2 F -.15 +(ve)-.2 G .203(rage terrain abo).15 F .503 -.15(ve m)-.15 H .203 +(ean sea le).15 F -.15(ve)-.25 G 2.704(lf).15 G .204 +(or azimuths of 0, 45, 90, 135, 180, 225,)-2.704 F .162(270, and 315 de) +108 621.6 R .162 +(grees, and include such information in the generated site report.)-.15 +F .161(If one or more of the eight)5.161 F 1.004(radials surv)108 633.6 +R -.15(ey)-.15 G 1.004(ed f).15 F 1.004(all o)-.1 F -.15(ve)-.15 G 3.504 (rw).15 G(ater)-3.604 E 3.504(,o)-.4 G 3.504(ro)-3.504 G -.15(ve)-3.654 G 3.504(rr).15 G -.15(eg)-3.504 G 1.004(ions for which no SDF data is a) -.15 F -.25(va)-.2 G(ilable,).25 E F2(SPLA)3.504 E(T!)-.95 E F0(reports) -3.505 E/F3 10/Times-Italic@0 SF(No)3.505 E -.92(Te)108 372 S(rr).92 E -(ain)-.15 E F0(for the radial paths af)2.5 E(fected.)-.25 E F1 -(RESTRICTING THE MAXIMUM SIZE OF AN AN)72 388.8 Q(AL)-.219 E -(YSIS REGION)-1.007 E F2(SPLA)108 400.8 Q(T!)-.95 E F0 1.265(reads SDF \ -\214les as needed into a series of memory "slots" within the structure \ -of the program.)3.765 F .089 -(Each "slot" holds one SDF \214le representing a one de)108 412.8 R .09 -(gree by one de)-.15 F .09(gree re)-.15 F .09(gion of terrain.)-.15 F(A) -5.09 E F3 .09(#de\214ne MAXS-)2.59 F(LO)108 424.8 Q(TS)-.4 E F0 1.448 -(statement in the \214rst se)3.949 F -.15(ve)-.25 G 1.448(ral lines of) -.15 F F3(splat.cpp)3.948 E F0 1.448 -(sets the maximum number of "slots" a)3.948 F -.25(va)-.2 G 1.448 -(ilable for).25 F(topograph)108 436.8 Q 3.277(yd)-.05 G 3.277(ata. It) --3.277 F .777 -(also sets the maximum size of the topographic maps generated by)3.277 F -F2(SPLA)3.278 E(T!)-.95 E F0 5.778(.M)C(AXS-)-5.778 E(LO)108 448.8 Q -.317(TS is set to 9 by def)-.4 F 2.817(ault. If)-.1 F F2(SPLA)2.817 E -(T!)-.95 E F0 .317(produces a se)2.817 F .316(gmentation f)-.15 F .316 -(ault on start-up with this def)-.1 F .316(ault, it is an)-.1 F .463 -(indication that not enough RAM and/or virtual memory \(sw)108 460.8 R -.464(ap space\) is a)-.1 F -.25(va)-.2 G .464(ilable to run).25 F F2 -(SPLA)2.964 E(T!)-.95 E F0 .464(with this)2.964 F .614(number of MAXSLO) -108 472.8 R 3.114(TS. In)-.4 F .614(situations where a)3.114 F -.25(va) --.2 G .613(ilable memory is lo).25 F 1.913 -.65(w, M)-.25 H(AXSLO).65 E -.613(TS may be reduced to 4)-.4 F .396 -(with the understanding that this will greatly limit the maximum re)108 -484.8 R(gion)-.15 E F2(SPLA)2.896 E(T!)-.95 E F0 .396 -(will be able to analyze.)2.896 F(If)5.396 E .947(118 me)108 496.8 R --.05(ga)-.15 G .947(bytes or more of total memory \(sw).05 F .947 -(ap space plus RAM\) is a)-.1 F -.25(va)-.2 G .947(ilable, then MAXSLO) -.25 F .946(TS may be)-.4 F .442(increased to 16.)108 508.8 R .443 -(This will permit operation o)5.443 F -.15(ve)-.15 G 2.943(ra4).15 G -(-de)-2.943 E .443(gree by 4-de)-.15 F .443(gree re)-.15 F .443 -(gion, which is suf)-.15 F .443(\214cient for sin-)-.25 F .403 -(gle antenna heights in e)108 520.8 R .403(xcess of 10,000 feet abo)-.15 -F .702 -.15(ve m)-.15 H .402(ean sea le).15 F -.15(ve)-.25 G .402 -(l, or point-to-point distances of o).15 F -.15(ve)-.15 G 2.902(r1).15 G -(000)-2.902 E(miles.)108 532.8 Q F1(ADDITION)72 549.6 Q(AL INFORMA)-.219 -E(TION)-1.04 E F0(In)108 561.6 Q -.2(vo)-.4 G(king).2 E F2(SPLA)2.81 E -(T!)-.95 E F0 .31(without an)2.81 F 2.81(ya)-.15 G -.18(rg)-2.81 G .311 -(uments will display all the command-line options a).18 F -.25(va)-.2 G -.311(ilable with the pro-).25 F -(gram along with a brief summary of each.)108 573.6 Q .333 -(The latest ne)108 597.6 R .332(ws and information re)-.25 F -.05(ga) --.15 G(rding).05 E F2(SPLA)2.832 E(T!)-.95 E F0(softw)2.832 E .332 +.15 F -.25(va)-.2 G(ilable,).25 E F3(SPLA)3.504 E(T!)-.95 E F0(reports) +3.505 E F2(No)3.505 E -.92(Te)108 645.6 S(rr).92 E(ain)-.15 E F0 +(for the radial paths af)2.5 E(fected.)-.25 E F1 +(RESTRICTING THE MAXIMUM SIZE OF AN AN)72 662.4 Q(AL)-.219 E +(YSIS REGION)-1.007 E F3(SPLA)108 674.4 Q(T!)-.95 E F0 .269(reads SDF \ +\214les as needed into a series of memory pages or "slots" within the s\ +tructure of the pro-)2.77 F 2.774(gram. Each)108 686.4 R .274 +("slot" holds one SDF \214le representing a one de)2.774 F .275 +(gree by one de)-.15 F .275(gree re)-.15 F .275(gion of terrain.)-.15 F +(A)5.275 E F2(#de\214ne)2.775 E(MAXSLO)108 698.4 Q(TS)-.4 E F0 .786 +(statement in the \214rst se)3.286 F -.15(ve)-.25 G .785(ral lines of) +.15 F F2(splat.cpp)3.285 E F0 .785(sets the maximum number of "slots" a) +3.285 F -.25(va)-.2 G(ilable).25 E .103(for holding topograph)108 710.4 +R 2.603(yd)-.05 G 2.603(ata. It)-2.603 F .104 +(also sets the maximum size of the topographic maps generated by)2.604 F +F3(SPLA)2.604 E(T!)-.95 E F0(.)A(MAXSLO)108 722.4 Q .242 +(TS is set to 9 by def)-.4 F 2.742(ault. If)-.1 F F3(SPLA)2.742 E(T!) +-.95 E F0 .242(produces a se)5.242 F .242(gmentation f)-.15 F .241 +(ault on start-up with this def)-.1 F(ault,)-.1 E(KD2BD Softw)72 768 Q +121.625(are 20)-.1 F(December 2006)2.5 E(13)185.955 E EP +%%Page: 14 14 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(SPLA)72 48 Q 151.145(T!\(1\) KD2BD)-1.11 F +(Softw)2.5 E 151.145(are SPLA)-.1 F(T!\(1\))-1.11 E .91 +(it is an indication that not enough RAM and/or virtual memory \(sw)108 +84 R .911(ap space\) is a)-.1 F -.25(va)-.2 G .911(ilable to run).25 F +/F1 10/Times-Bold@0 SF(SPLA)3.411 E(T!)-.95 E F0 .002 +(with the number of MAXSLO)108 96 R .002(TS speci\214ed.)-.4 F .001 +(In situations where a)5.002 F -.25(va)-.2 G .001(ilable memory is lo) +.25 F 1.301 -.65(w, M)-.25 H(AXSLO).65 E .001(TS may)-.4 F .019(be redu\ +ced to 4 with the understanding that this will greatly limit the maximu\ +m re)108 108 R(gion)-.15 E F1(SPLA)2.519 E(T!)-.95 E F0 .019 +(will be able)2.519 F .624(to analyze.)108 120 R .624(If 118 me)5.624 F +-.05(ga)-.15 G .624(bytes or more of total memory \(sw).05 F .623 +(ap space plus RAM\) is a)-.1 F -.25(va)-.2 G .623(ilable, then MAXS-) +.25 F(LO)108 132 Q .102(TS may be increased to 16.)-.4 F .103 +(This will permit operation o)5.103 F -.15(ve)-.15 G 2.603(ra4).15 G +(-de)-2.603 E .103(gree by 4-de)-.15 F .103(gree re)-.15 F .103 +(gion, which is suf-)-.15 F .426 +(\214cient for single antenna heights in e)108 144 R .426 +(xcess of 10,000 feet abo)-.15 F .725 -.15(ve m)-.15 H .425(ean sea le) +.15 F -.15(ve)-.25 G .425(l, or point-to-point distances).15 F(of o)108 +156 Q -.15(ve)-.15 G 2.5(r1).15 G(000 miles.)-2.5 E/F2 10.95 +/Times-Bold@0 SF(ADDITION)72 172.8 Q(AL INFORMA)-.219 E(TION)-1.04 E F0 +.332(The latest ne)108 184.8 R .332(ws and information re)-.25 F -.05 +(ga)-.15 G(rding).05 E F1(SPLA)2.832 E(T!)-.95 E F0(softw)2.832 E .332 (are is a)-.1 F -.25(va)-.2 G .332(ilable through the of).25 F(\214cial) --.25 E F2(SPLA)2.832 E(T!)-.95 E F0(soft-)2.832 E -.1(wa)108 609.6 S -(re web page located at:).1 E F3(http://www)2.5 E -(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F1 -.548(AU)72 626.4 S(THORS) -.548 E F0(John A. Magliacane, KD2BD <)108 638.4 Q F3(kd2bd@amsat.or)A(g) --.37 E F0(>)A(Creator)144 650.4 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve) --.25 G(loper).15 E(Doug McDonald <)108 667.2 Q F3(mcdonald@scs.uiuc.edu) -A F0(>)A(Longle)144 679.2 Q(y-Rice Model inte)-.15 E(gration)-.15 E -(KD2BD Softw)72 768 Q 129.12(are 02)-.1 F(March 2006)2.5 E(9)198.45 E EP +-.25 E F1(SPLA)2.833 E(T!)-.95 E F0(soft-)2.833 E -.1(wa)108 196.8 S +(re web page located at:).1 E/F3 10/Times-Italic@0 SF(http://www)2.5 E +(.qsl.net/kd2bd/splat.html)-.74 E F0(.)A F2 -.548(AU)72 213.6 S(THORS) +.548 E F0(John A. Magliacane, KD2BD <)108 225.6 Q F3(kd2bd@amsat.or)A(g) +-.37 E F0(>)A(Creator)144 237.6 Q 2.5(,L)-.4 G(ead De)-2.5 E -.15(ve) +-.25 G(loper).15 E(Doug McDonald <)108 254.4 Q F3(mcdonald@scs.uiuc.edu) +A F0(>)A(Longle)144 266.4 Q(y-Rice Model inte)-.15 E(gration)-.15 E +(Ron Bentle)108 283.2 Q 2.5(y<)-.15 G F3 -.45(ro)-2.5 G(nbentle).45 E +(y@earthlink.net)-.3 E F0(>)A +(Fresnel Zone plotting and clearance determination)144 295.2 Q +(KD2BD Softw)72 768 Q 121.625(are 20)-.1 F(December 2006)2.5 E(14) +185.955 E EP %%Trailer end %%EOF diff --git a/docs/text/splat.txt b/docs/text/splat.txt index 4a0a3b7..f256e81 100644 --- a/docs/text/splat.txt +++ b/docs/text/splat.txt @@ -7,77 +7,125 @@ NAME sis tool SYNOPSIS - splat [-t transmitter_site.qth] [-r receiver_site.qth] - [-c rx_antenna_height_for_los_coverage_analysis (feet) - (float)] [-L rx_antenna_height_for_Longley-Rice_cover- - age_analysis (feet) (float)] [-p terrain_profile.ext] [-e - elevation_profile.ext] [-h height_profile.ext] [-l Long- - ley-Rice_profile.ext] [-o topographic_map_filename.ppm] - [-b cartographic_boundary_filename.dat] [-s - site/city_database.dat] [-d sdf_directory_path] [-m - earth_radius_multiplier (float)] [-R maximum_cover- - age_range (for -c or -L) (miles) (float)] [-dB maximum - attenuation contour to display on path loss maps (80-230 - dB)] [-n] [-N] + splat [-t transmitter_site.qth] [-r receiver_site.qth] + [-c rx antenna height for LOS coverage analysis + (feet/meters) (float)] [-L rx antenna height for Longley- + Rice coverage analysis (feet/meters) (float)] [-p ter- + rain_profile.ext] [-e elevation_profile.ext] [-h + height_profile.ext] [-H normalized_height_profile.ext] [-l + Longley-Rice_profile.ext] [-o topographic_map_file- + name.ppm] [-b cartographic_boundary_filename.dat] [-s + site/city_database.dat] [-d sdf_directory_path] [-m earth + radius multiplier (float)] [-f frequency (MHz) for Fresnel + zone calculations (float)] [-R maximum coverage radius + (miles/kilometers) (float)] [-dB maximum attenuation con- + tour to display on path loss maps (80-230 dB)] [-nf do not + plot Fresnel zones in height plots] [-plo path_loss_out- + put_file.txt] [-pli path_loss_input_file.txt] [-udt + user_defined_terrain_file.dat] [-n] [-N] [-geo] [-kml] + [-metric] DESCRIPTION - SPLAT! is a powerful terrestrial RF propagation and ter- - rain analysis tool covering the spectrum between 20 MHz - and 20 GHz. It is designed for operation on Unix and - Linux-based workstations. SPLAT! is free software. - Redistribution and/or modification is permitted under the - terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the - License or any later version. Adoption of SPLAT! source - code in proprietary or closed-source applications is a - violation of this license, and is strictly forbidden. - - SPLAT! is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY, without even the implied war- - ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR- + SPLAT! is a powerful terrestrial RF propagation and ter- + rain analysis tool covering the spectrum between 20 MHz + and 20 GHz. SPLAT! is free software, and is designed for + operation on Unix and Linux-based workstations. Redistri- + bution and/or modification is permitted under the terms of + the GNU General Public License as published by the Free + Software Foundation, either version 2 of the License or + any later version. Adoption of SPLAT! source code in pro- + prietary or closed-source applications is a violation of + this license, and is strictly forbidden. + + SPLAT! is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY, without even the implied war- + ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR- POSE. See the GNU General Public License for more details. INTRODUCTION - Applications of SPLAT! include the visualization, design, - and link budget analysis of wireless Wide Area Networks + Applications of SPLAT! include the visualization, design, + and link budget analysis of wireless Wide Area Networks (WANs), commercial and amateur radio communication systems - above 20 MHz, microwave links, frequency coordination, and - the determination of analog and digital terrestrial radio - and television contour regions. + above 20 MHz, microwave links, frequency coordination and + interference studies, and the determination of analog and + digital terrestrial radio and television contour regions. SPLAT! provides RF site engineering data such as great circle distances and bearings between sites, antenna ele- vation angles (uptilt), depression angles (downtilt), antenna height above mean sea level, antenna height above average terrain, bearings and distances to known obstruc- - tions, Longley-Rice path attenuation, and minimum antenna - height requirements needed to establish line-of-sight com- - munication paths absent of obstructions due to terrain. - SPLAT! produces reports, graphs, and highly detailed and - carefully annotated topographic maps depicting line-of- - sight paths, path loss, and expected coverage areas of - transmitters and repeater systems. When performing line- - of-sight analysis in situations where multiple transmitter - or repeater sites are employed, SPLAT! determines individ- - ual and mutual areas of coverage within the network speci- - fied. + tions, and Longley-Rice path attenuation. In addition, + the minimum antenna height requirements needed to clear + terrain, the first Fresnel zone, and 60% of the first + Fresnel zone are also provided. + + SPLAT! produces reports, graphs, and high resolution topo- + graphic maps that depict line-of-sight paths, and regional + path loss contours through which expected coverage areas + of transmitters and repeater systems can be obtained. + When performing line-of-sight analysis in situations where + multiple transmitter or repeater sites are employed, + SPLAT! determines individual and mutual areas of coverage + within the network specified. + + Simply typing splat on the command line will return a sum- + mary of SPLAT!'s command line options: + + --==[ SPLAT! v1.2.0 Available Options... + ]==-- + + -t txsite(s).qth (max of 4) + -r rxsite.qth + -c plot coverage of TX(s) with an RX antenna at X + feet/meters AGL + -L plot path loss map of TX based on an RX at X + feet/meters AGL + -s filename(s) of city/site file(s) to import (max + of 5) + -b filename(s) of cartographic boundary file(s) to + import (5 max) + -p filename of terrain profile graph to plot + -e filename of terrain elevation graph to plot + -h filename of terrain height graph to plot + -H filename of normalized terrain height graph to + plot + -l filename of Longley-Rice graph to plot + -o filename of topographic map to generate (.ppm) + -u filename of user-defined terrain file to import + -d sdf file directory path (overrides path in + ~/.splat_path file) + -n no analysis, brief report + -N no analysis, no report + -m earth radius multiplier + -f frequency for Fresnel zone calculation (MHz) + -R modify default range for -c or -L (miles/kilome- + ters) + -db maximum loss contour to display on path loss maps + (80-230 dB) + -nf do not plot Fresnel zones in height plots + -plo filename of path-loss output file + -pli filename of path-loss input file + -udt filename of user defined terrain input file + -geo generate a .geo georeference file (with .ppm out- + put) + -kml generate a Google Earth .kml file (for point-to- + point links) + -metric employ metric rather than imperial units for all + user I/O - SPLAT! operates in two distinct modes: point-to-point - mode, and area prediction mode, and may be invoked using - either line-of-sight (LOS) or Irregular Terrain (ITM) - propagation models. True Earth, four-thirds Earth, or any - other Earth radius may be specified by the user when per- - forming line-of-sight analysis. INPUT FILES SPLAT! is a command-line driven application, and reads input data through a number of data files. Some files are mandatory for successful execution of the program, while - others are optional. Mandatory files include SPLAT Data - Files (SDF files), site location files (QTH files), and - Longley-Rice model parameter files (LRP files). Optional - files include city/site location files, and cartographic - boundary files. + others are optional. Mandatory files include 3-arc second + topography models in the form of SPLAT Data Files (SDF + files), site location files (QTH files), and Longley-Rice + model parameter files (LRP files). Optional files include + city location files, cartographic boundary files, user- + defined terrain files, path-loss input files, and antenna + radiation pattern files. SPLAT DATA FILES SPLAT! imports topographic data in the form of SPLAT Data @@ -89,63 +137,64 @@ SPLAT DATA FILES patible with this utility may be downloaded from: http://edcftp.cr.usgs.gov/pub/data/DEM/250/. - Significantly better resolution can be obtained through - the use of SRTM-3 Version 2 digital elevation models. - These models are the result of the STS-99 Space Shuttle - Radar Topography Mission, and are available for most popu- - lated regions of the Earth. SPLAT Data Files may be gen- - erated from SRTM data using the included srtm2sdf utility. - SRTM-3 Version 2 data may be obtained through anonymous - FTP from: ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/ - - Despite the higher accuracy that SRTM data has to offer, - some voids in the data sets exist. When voids are - detected, the srtm2sdf utility replaces them with corre- - sponding data found in existing SDF files (that were pre- - sumably created from earlier USGS data through the + Significantly better resolution and accuracy can be + obtained through the use of SRTM-3 Version 2 digital ele- + vation models. These models are the product of the STS-99 + Space Shuttle Radar Topography Mission, and are available + for most populated regions of the Earth. SPLAT Data Files + may be generated from SRTM data using the included + srtm2sdf utility. SRTM-3 Version 2 data may be obtained + through anonymous FTP from: + ftp://e0srp01u.ecs.nasa.gov:21/srtm/version2/ + + Despite the higher accuracy that SRTM data has to offer, + some voids in the data sets exist. When voids are + detected, the srtm2sdf utility replaces them with corre- + sponding data found in existing SDF files (that were pre- + sumably created from earlier USGS data through the usgs2sdf utility). If USGS-derived SDF data is not avail- - able, voids are handled through adjacent pixel averaging, + able, voids are handled through adjacent pixel averaging, or direct replacement. - SPLAT Data Files contain integer value topographic eleva- + SPLAT Data Files contain integer value topographic eleva- tions (in meters) referenced to mean sea level for - 1-degree by 1-degree regions of the earth with a resolu- - tion of 3-arc seconds. SDF files can be read in either - standard format (.sdf) as generated by the usgs2sdf and - srtm2sdf utilities, or in bzip2 compressed format - (.sdf.bz2). Since uncompressed files can be processed - slightly faster than files that have been compressed, - SPLAT! searches for the needed SDF data in uncompressed - format first. If uncompressed data cannot located, SPLAT! - then searches for data in bzip2 compressed format. If no - compressed SDF files can be found for the region - requested, SPLAT! assumes the region is over water, and + 1-degree by 1-degree regions of the earth with a resolu- + tion of 3-arc seconds. SDF files can be read in either + standard format (.sdf) as generated by the usgs2sdf and + srtm2sdf utilities, or in bzip2 compressed format + (.sdf.bz2). Since uncompressed files can be processed + slightly faster than files that have been compressed, + SPLAT! searches for needed SDF data in uncompressed format + first. If uncompressed data cannot be located, SPLAT! + then searches for data in bzip2 compressed format. If no + compressed SDF files can be found for the region + requested, SPLAT! assumes the region is over water, and will assign an elevation of sea-level to these areas. - This feature of SPLAT! makes it possible to perform path - analysis not only over land, but also between coastal - areas not represented by Digital Elevation Model data. - This behavior of SPLAT! underscores the importance of hav- - ing all the SDF files required for the region being ana- - lyzed if meaningful results are to be expected. + This feature of SPLAT! makes it possible to perform path + analysis not only over land, but also between coastal + areas not represented by Digital Elevation Model data. + However, this behavior of SPLAT! underscores the impor- + tance of having all the SDF files required for the region + being analyzed if meaningful results are to be expected. SITE LOCATION (QTH) FILES - SPLAT! imports site location information of transmitter - and receiver sites analyzed by the program from ASCII - files having a .qth extension. QTH files contain the + SPLAT! imports site location information of transmitter + and receiver sites analyzed by the program from ASCII + files having a .qth extension. QTH files contain the site's name, the site's latitude (positive if North of the - equator, negative if South), the site's longitude (in - degrees West, 0 to 360 degrees), and the site's antenna - height above ground level (AGL). A single line-feed char- - acter separates each field. The antenna height is assumed - to be specified in feet unless followed by the letter m or - the word meters in either upper or lower case. Latitude + equator, negative if South), the site's longitude (in + degrees West, 0 to 360 degrees), and the site's antenna + height above ground level (AGL), each separated by a sin- + gle line-feed character. The antenna height is assumed to + be specified in feet unless followed by the letter m or + the word meters in either upper or lower case. Latitude and longitude information may be expressed in either deci- - mal format (74.6889) or degree, minute, second (DMS) for- + mal format (74.6889) or degree, minute, second (DMS) for- mat (74 41 20.0). - For example, a site location file describing television - station WNJT, Trenton, NJ (wnjt.qth) might read as fol- + For example, a site location file describing television + station WNJT, Trenton, NJ (wnjt.qth) might read as fol- lows: WNJT @@ -157,12 +206,11 @@ SITE LOCATION (QTH) FILES be represented by its own site location (QTH) file. LONGLEY-RICE PARAMETER (LRP) FILES - SPLAT! imports Longley-Rice model parameter data from - files having the same base name as the transmitter site - QTH file, but with a .lrp extension, thus providing simple - and accurate correlation between these associated data - sets. The format for the Longley-Rice model parameter - files is as follows (wnjt.lrp): + Longley-Rice parameter data files are required for SPLAT! + to determine RF path loss in either point-to-point or area + prediction mode. Longley-Rice model parameter data is + read from files having the same base name as the transmit- + ter site QTH file, but with a format (wnjt.lrp): 15.000 ; Earth Dielectric Constant (Relative per- mittivity) @@ -221,10 +269,10 @@ LONGLEY-RICE PARAMETER (LRP) FILES the statistical analysis provided by the Longley-Rice model. In this example, SPLAT! will return the maximum path loss occurring 50% of the time (fraction of time) in - 50% of situations (fraction of situations). Use a frac- - tion of time parameter of 0.97 for digital television, - 0.50 for analog in the United States. Isotropic antennas - are assumed. + 50% of situations (fraction of situations). In the United + States, use a fraction of time parameter of 0.97 for digi- + tal television (8VSB modulation), or 0.50 for analog (VSB- + AM+NTSC) transmissions. For further information on these parameters, see: http://flattop.its.bldrdoc.gov/itm.html and @@ -236,12 +284,12 @@ CITY LOCATION FILES points of interest may be imported and plotted on topo- graphic maps generated by SPLAT!. SPLAT! imports the names of cities and locations from ASCII files containing - the location's name, the location's latitude, and the - location's longitude. Each field is separated by a comma. - Each record is separated by a single line feed character. - As was the case with the .qth files, latitude and longi- - tude information may be entered in either decimal or - degree, minute, second (DMS) format. + the location of interest's name, latitude, and longitude. + Each field is separated by a comma. Each record is sepa- + rated by a single line feed character. As was the case + with the .qth files, latitude and longitude information + may be entered in either decimal or degree, minute, second + (DMS) format. For example (cities.dat): @@ -257,13 +305,13 @@ CITY LOCATION FILES at a time, and there is no limit to the size of these files. SPLAT! reads city data on a "first come/first served" basis, and plots only those locations whose anno- - tations do not conflict with annotations of locations - plotted earlier during SPLAT's execution. This behavior - minimizes clutter in SPLAT! generated topographic maps, - but also mandates that important locations be placed - toward the beginning of the first city data file, and - disposable locations be positioned further down the list - or in subsequent data files. + tations do not conflict with annotations of locations read + earlier in the current city data file, or in previous + files. This behavior minimizes clutter in SPLAT! gener- + ated topographic maps, but also mandates that important + locations be placed toward the beginning of the first city + data file, and locations less important be positioned fur- + ther down the list or in subsequent data files. City data files may be generated manually using any text editor, imported from other sources, or derived from data @@ -279,141 +327,175 @@ CARTOGRAPHIC BOUNDARY DATA FILES graphic maps generated by SPLAT!. Such data must be of the form of ARC/INFO Ungenerate (ASCII Format) Metadata Cartographic Boundary Files, and are available from the - U.S. Census Bureau via the Internet at: http://www.cen- - sus.gov/geo/www/cob/co2000.html#ascii and http://www.cen- - sus.gov/geo/www/cob/pl2000.html#ascii. A total of five - separate cartographic boundary files may be imported at a - time. It is not necessary to import state boundaries if - county boundaries have already been imported. + U.S. Census Bureau via the Internet at: + http://www.census.gov/geo/www/cob/co2000.html#ascii and + http://www.census.gov/geo/www/cob/pl2000.html#ascii. A + total of five separate cartographic boundary files may be + imported at a time. It is not necessary to import state + boundaries if county boundaries have already been + imported. PROGRAM OPERATION - SPLAT! is invoked via the command-line using a series of - switches and arguments. Since SPLAT! is a CPU and memory - intensive application, this type of interface minimizes - overhead and lends itself well to scripted (batch) opera- + SPLAT! is invoked via the command-line using a series of + switches and arguments. Since SPLAT! is a CPU and memory + intensive application, this type of interface minimizes + overhead and lends itself well to scripted (batch) opera- tions. SPLAT!'s CPU and memory scheduling priority may be modified through the use of the Unix nice command. The number and type of switches passed to SPLAT! determine - its mode of operation and method of output data genera- - tion. Nearly all of SPLAT!'s switches may be cascaded in + its mode of operation and method of output data genera- + tion. Nearly all of SPLAT!'s switches may be cascaded in any order on the command line when invoking the program. + SPLAT! operates in two distinct modes: point-to-point + mode, and area prediction mode. Either a line-of-sight + (LOS) or Longley-Rice Irregular Terrain (ITM) propagation + model may be invoked by the user. True Earth, four-thirds + Earth, or any other user-defined Earth radius may be spec- + ified when performing line-of-sight analysis. + POINT-TO-POINT ANALYSIS SPLAT! may be used to perform line-of-sight terrain analy- sis between two specified site locations. For example: splat -t tx_site.qth -r rx_site.qth - invokes a terrain analysis between the transmitter speci- - fied in tx_site.qth and receiver specified in rx_site.qth, - and writes a SPLAT! Obstruction Report to the current - working directory. The report contains details of the - transmitter and receiver sites, and identifies the loca- - tion of any obstructions detected during the analysis. If - an obstruction can be cleared by raising the receive - antenna to a greater altitude, SPLAT! will indicate the - minimum antenna height required for a line-of-sight path - to exist between the transmitter and receiver locations - specified. If the antenna must be raised a significant - amount, this determination may take some time. Note that - the results provided are the minimum necessary for a line- - of-sight path to exist, and do not take Fresnel zone - clearance requirements into consideration. + invokes a line-of-sight terrain analysis between the + transmitter specified in tx_site.qth and receiver speci- + fied in rx_site.qth using a True Earth radius model, and + writes a SPLAT! Obstruction Report to the current working + directory. The report contains details of the transmitter + and receiver sites, and identifies the location of any + obstructions detected along the line-of-sight path. If an + obstruction can be cleared by raising the receive antenna + to a greater altitude, SPLAT! will indicate the minimum + antenna height required for a line-of-sight path to exist + between the transmitter and receiver locations specified. + Note that imperial units (miles, feet) are specified + unless the -metric switch is added to SPLAT!'s command + line options: + + splat -t tx_site.qth -r rx_site.qth -metric + + If the antenna must be raised a significant amount, this + determination may take a few moments. Note that the + results provided are the minimum necessary for a line-of- + sight path to exist, and in the case of this simple exam- + ple, do not take Fresnel zone clearance requirements into + consideration. qth extensions are assumed by SPLAT! for QTH files, and - are optional when invoking the program. SPLAT! automati- - cally reads all SPLAT Data Files necessary to conduct the - terrain analysis between the sites specified. SPLAT! - searches for the needed SDF files in the current working - directory first. If the needed files are not found, - SPLAT! then searches in the path specified by the -d - command-line switch: + are optional when specifying -t and -r arguments on the + command-line. SPLAT! automatically reads all SPLAT Data + Files necessary to conduct the terrain analysis between + the sites specified. SPLAT! searches for the required + SDF files in the current working directory first. If the + needed files are not found, SPLAT! then searches in the + path specified by the -d command-line switch: splat -t tx_site -r rx_site -d /cdrom/sdf/ An external directory path may be specified by placing a ".splat_path" file under the user's home directory. This - file must contain the full directory path to the last - resort location of all the SDF files. The path in the - $HOME/.splat_path file must be of the form of a single - line of ASCII text: + file must contain the full directory path of last resort + to all the SDF files. The path in the $HOME/.splat_path + file must be of the form of a single line of ASCII text: /opt/splat/sdf/ and can be generated using any text editor. - A graph of the terrain profile between the receiver and - transmitter locations as a function of distance from the + A graph of the terrain profile between the receiver and + transmitter locations as a function of distance from the receiver can be generated by adding the -p switch: - splat -t tx_site -r rx_site -p terrain_profile.gif + splat -t tx_site -r rx_site -p terrain_profile.png - SPLAT! invokes gnuplot when generating graphs. The file- - name extension specified to SPLAT! determines the format - of the graph produced. .gif will produce a 640x480 color - GIF graphic file, while .ps or .postscript will produce - postscript output. Output in formats such as PNG, Adobe - Illustrator, AutoCAD dxf, LaTeX, and many others are + SPLAT! invokes gnuplot when generating graphs. The file- + name extension specified to SPLAT! determines the format + of the graph produced. .png will produce a 640x480 color + PNG graphic file, while .ps or .postscript will produce + postscript output. Output in formats such as GIF, Adobe + Illustrator, AutoCAD dxf, LaTeX, and many others are available. Please consult gnuplot, and gnuplot's documen- tation for details on all the supported output formats. A graph of elevations subtended by the terrain between the - receiver and transmitter as a function of distance from + receiver and transmitter as a function of distance from the receiver can be generated by using the -e switch: - splat -t tx_site -r rx_site -e elevation_profile.gif + splat -t tx_site -r rx_site -e elevation_profile.png - The graph produced using this switch illustrates the ele- - vation and depression angles resulting from the terrain - between the receiver's location and the transmitter site + The graph produced using this switch illustrates the ele- + vation and depression angles resulting from the terrain + between the receiver's location and the transmitter site from the perspective of the receiver's location. A second - trace is plotted between the left side of the graph + trace is plotted between the left side of the graph (receiver's location) and the location of the transmitting - antenna on the right. This trace illustrates the eleva- - tion angle required for a line-of-sight path to exist - between the receiver and transmitter locations. If the + antenna on the right. This trace illustrates the eleva- + tion angle required for a line-of-sight path to exist + between the receiver and transmitter locations. If the trace intersects the elevation profile at any point on the - graph, then this is an indication that a line-of-sight - path does not exist under the conditions given, and the + graph, then this is an indication that a line-of-sight + path does not exist under the conditions given, and the obstructions can be clearly identified on the graph at the point(s) of intersection. - A graph illustrating terrain height referenced to a line- - of-sight path between the transmitter and receiver may be + A graph illustrating terrain height referenced to a line- + of-sight path between the transmitter and receiver may be generated using the -h switch: - splat -t tx_site -r rx_site -h height_profile.gif + splat -t tx_site -r rx_site -h height_profile.png + + A terrain height plot normalized to the transmitter and + receiver antenna heights can be obtained using the -H + switch: + + splat -t tx_site -r rx_site -H normalized_height_pro- + file.png + + A contour of the Earth's curvature is also plotted in this + mode. - The Earth's curvature is clearly evident when plotting - height profiles. + The first Fresnel Zone, and 60% of the first Fresnel Zone + can be added to height profile graphs by adding the -f + switch, and specifying a frequency (in MHz) at which the + Fresnel Zone should be modeled: + + splat -t tx_site -r rx_site -f 439.250 -H normal- + ized_height_profile.png A graph showing Longley-Rice path loss may be plotted using the -l switch: - splat -t tx_site -r rx_site -l path_loss_profile.gif + splat -t tx_site -r rx_site -l path_loss_profile.png + + As before, adding the -metric switch forces the graphs to + be plotted using metric units of measure. - When performing path loss profiles, a Longley-Rice Model - Path Loss Report is generated by SPLAT! in the form of a + When performing path loss profiles, a Longley-Rice Model + Path Loss Report is generated by SPLAT! in the form of a text file with a .lro filename extension. The report con- - tains bearings and distances between the transmitter and - receiver, as well as the Longley-Rice path loss for vari- - ous distances between the transmitter and receiver loca- - tions. The mode of propagation for points along the path - are given as Line-of-Sight, Single Horizon, Double Hori- + tains bearings and distances between the transmitter and + receiver, as well as the Longley-Rice path loss for vari- + ous distances between the transmitter and receiver loca- + tions. The mode of propagation for points along the path + are given as Line-of-Sight, Single Horizon, Double Hori- zon, Diffraction Dominant, and Troposcatter Dominant. - To determine the signal-to-noise (SNR) ratio at remote - location where random Johnson (thermal) noise is the pri- + To determine the signal-to-noise (SNR) ratio at remote + location where random Johnson (thermal) noise is the pri- mary limiting factor in reception: SNR=T-NJ-L+G-NF - where T is the ERP of the transmitter in dBW, NJ is John- - son Noise in dBW (-136 dBW for a 6 MHz TV channel), L is - the path loss provided by SPLAT! in dB (as a positive num- - ber), G is the receive antenna gain in dB over isotropic, - and NF is the receiver noise figure in dB. + where T is the ERP of the transmitter in dBW in the direc- + tion of the receiver, NJ is Johnson Noise in dBW (-136 dBW + for a 6 MHz television channel), L is the path loss pro- + vided by SPLAT! in dB (as a positive number), G is the + receive antenna gain in dB over isotropic, and NF is the + receiver noise figure in dB. T may be computed as follows: @@ -431,8 +513,8 @@ POINT-TO-POINT ANALYSIS Signal_Margin=SNR-S - where S is the minimum desired SNR ratio (15.5 dB for ATSC - DTV, 42 dB for analog NTSC television). + where S is the minimum required SNR ratio (15.5 dB for + ATSC (8-VSB) DTV, 42 dB for analog NTSC television). A topographic map may be generated by SPLAT! to visualize the path between the transmitter and receiver sites from @@ -444,19 +526,7 @@ POINT-TO-POINT ANALYSIS only exception to this is sea-level, which is represented using the color blue. - SPLAT! generated topographic maps are 24-bit TrueColor - Portable PixMap (PPM) images. They may be viewed, edited, - or converted to other graphic formats by popular image - viewing applications such as xv, The GIMP, ImageMagick, - and XPaint. PNG format is highly recommended for lossless - compressed storage of SPLAT! generated topographic output - files. An excellent command-line utility capable of con- - verting SPLAT! PPM graphic files to PNG files is wpng, and - is available at: - http://www.libpng.org/pub/png/book/sources.html. As a - last resort, PPM files may be compressed using the bzip2 - utility, and read directly by The GIMP in this format. - Topographic output is specified using the -o switch: + Topographic output is invoked using the -o switch: splat -t tx_site -r rx_site -o topo_map.ppm @@ -492,7 +562,7 @@ POINT-TO-POINT ANALYSIS a time for analysis: splat -t tx_site1 tx_site2 tx_site3 tx_site4 -r rx_site -p - profile.gif + profile.png In this example, four separate terrain profiles and obstruction reports will be generated by SPLAT!. A single @@ -506,92 +576,81 @@ POINT-TO-POINT ANALYSIS receiver will be in violet, and the path between the fourth transmitter and the receiver will be in sienna. -DETERMINING REGIONAL COVERAGE + SPLAT! generated topographic maps are 24-bit TrueColor + Portable PixMap (PPM) images. They may be viewed, edited, + or converted to other graphic formats by popular image + viewing applications such as xv, The GIMP, ImageMagick, + and XPaint. PNG format is highly recommended for lossless + compressed storage of SPLAT! generated topographic output + files. ImageMagick's command-line utility easily converts + SPLAT!'s PPM files to PNG format: + + convert splat_map.ppm splat_map.png + + Another excellent PPM to PNG command-line utility is + available at: + http://www.libpng.org/pub/png/book/sources.html. As a + last resort, PPM files may be compressed using the bzip2 + utility, and read directly by The GIMP in this format. + +REGIONAL COVERAGE ANALYSIS SPLAT! can analyze a transmitter or repeater site, or net- - work of sites, and predict the regional coverage for each + work of sites, and predict the regional coverage for each site specified. In this mode, SPLAT! can generate a topo- - graphic map displaying the geometric line-of-sight cover- - age area of the sites based on the location of each site - and the height of receive antenna wishing to communicate + graphic map displaying the geometric line-of-sight cover- + age area of the sites based on the location of each site + and the height of receive antenna wishing to communicate with the site in question. SPLAT! switches from point-to- - point analysis mode to area prediction mode when the -c + point analysis mode to area prediction mode when the -c switch is invoked as follows: - splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o + splat -t tx_site -c 30.0 -s cities.dat -b co34_d00.dat -o tx_coverage In this example, SPLAT! generates a topographic map called - tx_coverage.ppm that illustrates the predicted line-of- - sight regional coverage of tx_site to receiving locations - having antennas 30.0 feet above ground level (AGL). The - contents of cities.dat are plotted on the map, as are the - cartographic boundaries contained in the file + tx_coverage.ppm that illustrates the predicted line-of- + sight regional coverage of tx_site to receiving locations + having antennas 30.0 feet above ground level (AGL). If + the -metric switch is used, the argument following the -c + switch is interpreted as being in meters, rather than in + feet. The contents of cities.dat are plotted on the map, + as are the cartographic boundaries contained in the file co34_d00.dat. - When plotting line-of-sight paths and areas of regional - coverage, SPLAT! by default does not account for the - effects of atmospheric bending. However, this behavior - may be modified by using the Earth radius multiplier (-m) + When plotting line-of-sight paths and areas of regional + coverage, SPLAT! by default does not account for the + effects of atmospheric bending. However, this behavior + may be modified by using the Earth radius multiplier (-m) switch: - splat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b coun- + splat -t wnjt -c 30.0 -m 1.333 -s cities.dat -b coun- ties.dat -o map.ppm - An earth radius multiplier of 1.333 instructs SPLAT! to + An earth radius multiplier of 1.333 instructs SPLAT! to use the "four-thirds earth" model for line-of-sight propa- - gation analysis. Any appropriate earth radius multiplier + gation analysis. Any appropriate earth radius multiplier may be selected by the user. - When invoked in area prediction mode, SPLAT! generates a + When invoked in area prediction mode, SPLAT! generates a site report for each station analyzed. SPLAT! site reports contain details of the site's geographic location, - its height above mean sea level, the antenna's height - above mean sea level, the antenna's height above average - terrain, and the height of the average terrain calculated - in the directions of 0, 45, 90, 135, 180, 225, 270, and + its height above mean sea level, the antenna's height + above mean sea level, the antenna's height above average + terrain, and the height of the average terrain calculated + in the directions of 0, 45, 90, 135, 180, 225, 270, and 315 degrees azimuth. - If the -c switch is replaced by a -L switch, a Longley- - Rice path loss map for a transmitter site may be gener- - ated: - - splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o - path_loss_map - - In this mode, SPLAT! generates a multi-color map illus- - trating expected signal levels (path loss) in areas sur- - rounding the transmitter site. A legend at the bottom of - the map correlates each color with a specific path loss - level in decibels. Since Longley-Rice area prediction map - generation is very CPU intensive, provision for limiting - the analysis range is provided by the -R switch. The - argument must be given in miles. If a range wider than - the generated topographic map is specified, SPLAT! will - perform Longley-Rice path loss calculations between all - four corners of the area prediction map. - - The -db switch allows a constraint to be placed on the - maximum path loss region plotted on the map. A path loss - between 80 and 230 dB may be specified using this switch. - For example, if a path loss beyond -140 dB is irrelevant - to the survey being conducted, SPLAT!'s path loss plot can - be constrained to the region bounded by the 140 dB attenu- - ation contour as follows: - - splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db - 140 -o plot.ppm - - -DETERMINING MULTIPLE REGIONS OF COVERAGE - SPLAT! can also display line-of-sight coverage areas for - as many as four separate transmitter sites on a common +DETERMINING MULTIPLE REGIONS OF LOS COVERAGE + SPLAT! can also display line-of-sight coverage areas for + as many as four separate transmitter sites on a common topographic map. For example: - splat -t site1 site2 site3 site4 -c 30.0 -o network.ppm + splat -t site1 site2 site3 site4 -c 10.0 -metric -o net- + work.ppm plots the regional line-of-sight coverage of site1, site2, - site3, and site4 based on a receive antenna located 30.0 - feet above ground level. A topographic map is then + site3, and site4 based on a receive antenna located 10.0 + meters above ground level. A topographic map is then written to the file network.ppm. The line-of-sight cover- age area of the transmitters are plotted as follows in the colors indicated (along with their corresponding RGB val- @@ -622,14 +681,244 @@ DETERMINING MULTIPLE REGIONS OF COVERAGE from as many as four separate locations on a single tower may be generated by SPLAT!. -TOPOGRAPHIC MAP GENERATION - In certain situations, it may be desirable to generate a - topographic map of a region without plotting coverage +LONGLEY-RICE PATH LOSS ANALYSIS + If the -c switch is replaced by a -L switch, a Longley- + Rice path loss map for a transmitter site may be gener- + ated: + + splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -o + path_loss_map + + In this mode, SPLAT! generates a multi-color map illus- + trating expected signal levels (path loss) in areas sur- + rounding the transmitter site. A legend at the bottom of + the map correlates each color with a specific path loss + range in decibels. + + The Longley-Rice analysis range may be modified to a user- + specific value using the -R switch. The argument must be + given in miles (or kilometers if the -metric switch is + used). If a range wider than the generated topographic + map is specified, SPLAT! will perform Longley-Rice path + loss calculations between all four corners of the area + prediction map. + + The -db switch allows a constraint to be placed on the + maximum path loss region plotted on the map. A maximum + path loss between 80 and 230 dB may be specified using + this switch. For example, if a path loss beyond -140 dB + is irrelevant to the survey being conducted, SPLAT!'s path + loss plot can be constrained to the region bounded by the + 140 dB attenuation contour as follows: + + splat -t wnjt -L 30.0 -s cities.dat -b co34_d00.dat -db + 140 -o plot.ppm + + +ANTENNA RADIATION PATTERN PARAMETERS + Normalized field voltage patterns for a transmitting + antenna's horizontal and vertical planes are imported + automatically into SPLAT! when a Longley-Rice coverage + analysis is performed. Antenna pattern data is read from + a pair of files having the same base name as the transmit- + ter and LRP files, but with .az and .el extensions for + azimuth and elevation pattern files, respectively. Speci- + fications regarding pattern rotation (if any) and + mechanical beam tilt and tilt direction (if any) are also + contained within SPLAT! antenna pattern files. + + For example, the first few lines of a SPLAT! azimuth pat- + tern file might appear as follows (kvea.az): + + 183.0 + 0 0.8950590 + 1 0.8966406 + 2 0.8981447 + 3 0.8995795 + 4 0.9009535 + 5 0.9022749 + 6 0.9035517 + 7 0.9047923 + 8 0.9060051 + + The first line of the .az file specifies the amount of + azimuthal pattern rotation (measured clockwise in degrees + from True North) to be applied by SPLAT! to the data con- + tained in the .az file. This is followed by azimuth head- + ings (0 to 360 degrees) and their associated normalized + field patterns (0.000 to 1.000) separated by whitespace. + + The structure of SPLAT! elevation pattern files is + slightly different. The first line of the .el file speci- + fies the amount of mechanical beam tilt applied to the + antenna. Note that a downward tilt (below the horizon) is + expressed as a positive angle, while an upward tilt (above + the horizon) is expressed as a negative angle. This data + is followed by the azimuthal direction of the tilt, sepa- + rated by whitespace. + + The remainder of the file consists of elevation angles and + their corresponding normalized voltage radiation pattern + (0.000 to 1.000) values separated by whitespace. Eleva- + tion angles must be specified over a -10.0 to +90.0 degree + range. As was the convention with mechanical beamtilt, + negative elevation angles are used to represent elevations + above the horizon, while positive angles represents eleva- + tions below the horizon. + + For example, the first few lines a SPLAT! elevation pat- + tern file might appear as follows (kvea.el): + + 1.1 130.0 + -10.0 0.172 + -9.5 0.109 + -9.0 0.115 + -8.5 0.155 + -8.0 0.157 + -7.5 0.104 + -7.0 0.029 + -6.5 0.109 + -6.0 0.185 + + In this example, the antenna is mechanically tilted down- + ward 1.1 degrees towards an azimuth of 130.0 degrees. + + For best results, the resolution of azimuth pattern data + should be specified to the nearest degree azimuth, and + elevation pattern data resolution should be specified to + the nearest 0.01 degrees. If the pattern data specified + does not reach this level of resolution, SPLAT! will + interpolate the values provided to determine the data at + the required resolution, although this may result in a + loss in accuracy. + + +IMPORTING AND EXPORTING REGIONAL PATH LOSS CONTOUR DATA + Performing a Longley-Rice coverage analysis can be a very + time consuming process, especially if the analysis is + repeated repeatedly to discover what effects changes to + the antenna radiation patterns make to the predicted cov- + erage area. + + This process can be expedited by exporting the Longley- + Rice regional path loss contour data to an output file, + modifying the path loss data externally to incorporate + antenna pattern effects, and then importing the modified + path loss data back into SPLAT! to rapidly produce a + revised path loss map. + + For example, a path loss output file can be generated by + SPLAT! for a receive site 30 feet above ground level over + a 50 mile radius surrounding a transmitter site to a maxi- + mum path loss of 140 dB using the following syntax: + + splat -t kvea -L 30.0 -R 50.0 -db 140 -plo pathloss.dat + + SPLAT! path loss output files often exceed 100 megabytes + in size. They contain information relating to the bound- + aries of region they describe followed by latitudes + (degrees North), longitudes (degrees West), azimuths, ele- + vations (to the first obstruction), and path loss figures + (dB) for a series of specific points that comprise the + region surrounding the transmitter site. The first few + lines of a SPLAT! path loss output file take on the fol- + lowing appearance (pathloss.dat): + + 119, 117 ; max_west, min_west + 35, 33 ; max_north, min_north + 34.2265434, 118.0631104, 48.171, -37.461, 67.70 + 34.2270355, 118.0624390, 48.262, -26.212, 73.72 + 34.2280197, 118.0611038, 48.269, -14.951, 79.74 + 34.2285156, 118.0604401, 48.207, -11.351, 81.68 + 34.2290077, 118.0597687, 48.240, -10.518, 83.26 + 34.2294998, 118.0591049, 48.225, 23.201, 84.60 + 34.2304878, 118.0577698, 48.213, 15.769, 137.84 + 34.2309799, 118.0570984, 48.234, 15.965, 151.54 + 34.2314720, 118.0564346, 48.224, 16.520, 149.45 + 34.2319679, 118.0557632, 48.223, 15.588, 151.61 + 34.2329521, 118.0544281, 48.230, 13.889, 135.45 + 34.2334442, 118.0537643, 48.223, 11.693, 137.37 + 34.2339401, 118.0530930, 48.222, 14.050, 126.32 + 34.2344322, 118.0524292, 48.216, 16.274, 156.28 + 34.2354164, 118.0510941, 48.222, 15.058, 152.65 + 34.2359123, 118.0504227, 48.221, 16.215, 158.57 + 34.2364044, 118.0497589, 48.216, 15.024, 157.30 + 34.2368965, 118.0490875, 48.225, 17.184, 156.36 + + It is not uncommon for SPLAT! path loss files to contain + as many as 3 million or more lines of data. Comments can + be placed in the file if they are proceeded by a semicolon + character. The vim text editor has proven capable of + editing files of this size. + + Note as was the case in the antenna pattern files, nega- + tive elevation angles refer to upward tilt (above the + horizon), while positive angles refer to downward tilt + (below the horizon). These angles refer to the elevation + to the receiving antenna at the height above ground level + specified using the -L switch if the path between trans- + mitter and receiver is unobstructed. If the path between + the transmitter and receiver is obstructed, then the ele- + vation angle to the first obstruction is returned by + SPLAT!. This is because the Longley-Rice model considers + the energy reaching a distant point over an obstructed + path as a derivative of the energy scattered from the top + of the first obstruction, only. Since energy cannot reach + the obstructed location directly, the actual elevation + angle to that point is irrelevant. + + When modifying SPLAT! path loss files to reflect antenna + pattern data, only the last column (path loss) should be + amended to reflect the antenna's normalized gain at the + azimuth and elevation angles specified in the file. (At + this time, programs and scripts capable of performing this + operation are left as an exercise for the user.) + + Modified path loss maps can be imported back into SPLAT! + for generating revised coverage maps: + + splat -t kvea -pli pathloss.dat -s city.dat -b county.dat + -o map.ppm + + SPLAT! path loss files can also be used for conducting + coverage or interference studies outside of SPLAT!. + +USER-DEFINED TERRAIN INPUT FILES + A user-defined terrain file is a user-generated text file + containing latitudes, longitudes, and heights above ground + level of specific terrain features believed to be of + importance to the SPLAT! analysis being conducted, but + noticeably absent from the SDF files being used. A user- + defined terrain file is imported into a SPLAT! analysis + using the -udt switch: + + splat -t tx_site -r rx_site -udt udt_file.txt -o map.ppm + + A user-defined terrain file has the following appearance + and structure: + + 40.32180556, 74.1325, 100.0 meters + 40.321805, 74.1315, 300.0 + 40.3218055, 74.1305, 100.0 meters + + Terrain height is interpreted as being described in feet + above ground level unless followed by the word meters, and + is added on top of the terrain specified in the SDF data + for the locations specified. Be aware that each user- + defined terrain feature specified will be interpreted as + being 3-arc seconds in both latitude and longitude. Fea- + tures described in the user-defined terrain file that + overlap previously defined features in the file are + ignored by SPLAT!. + +SIMPLE TOPOGRAPHIC MAP GENERATION + In certain situations it may be desirable to generate a + topographic map of a region without plotting coverage areas, line-of-sight paths, or generating obstruction - reports. There are several ways of doing this. If one - wishes to generate a topographic map illustrating the - location of a transmitter and receiver site along with a - brief text report describing the locations and distances + reports. There are several ways of doing this. If one + wishes to generate a topographic map illustrating the + location of a transmitter and receiver site along with a + brief text report describing the locations and distances between the sites, the -n switch should be invoked as fol- lows: @@ -639,10 +928,57 @@ TOPOGRAPHIC MAP GENERATION splat -t tx_site -r rx_site -N -o topo_map.ppm - If the -o switch and output filename are omitted when - using either the -n or -N switches, output is written to a - file named map.ppm in the current working directory by - default. + If a topographic map centered about a single site out to a + minimum specified radius is desired instead, a command + similar to the following can be used: + + splat -t tx_site -R 50.0 -s NJ_Cities -b NJ_Counties -o + topo_map.ppm + + where -R specifies the minimum radius of the map in miles + (or kilometers if the -metric switch is used). + + If the -o switch and output filename are omitted in these + operations, topographic output is written to a file named + map.ppm in the current working directory by default. + +GEOREFERENCE FILE GENERATION + Topographic, coverage (-c), and path loss contour (-L) + maps generated by SPLAT! may be imported into Xastir (X + Amateur Station Tracking and Information Reporting) soft- + ware by generating a georeference file using SPLAT!'s -geo + switch: + + splat -t kd2bd -R 50.0 -s NJ_Cities -b NJ_Counties -geo -o + map.ppm + + The georeference file generated will have the same base + name as the -o file specified, but have a .geo extension, + and permit proper interpretation and display of SPLAT!'s + .ppm graphics in Xastir software. + +GOOGLE MAP KML FILE GENERATION + Keyhole Markup Language files compatible with Google Earth + may be generated by SPLAT! when performing point-to-point + analyses by invoking the -kml switch: + + splat -t wnjt -r kd2bd -kml + + The KML file generated will have the same filename struc- + ture as an Obstruction Report for the transmitter and + receiver site names given, except it will carry a .kml + extension. + + Once loaded into Google Earth (File --> Open), the KML + file will annotate the map display with the names of the + transmitter and receiver site locations. The viewpoint of + the image will be from the position of the transmitter + site looking towards the location of the receiver. The + point-to-point path between the sites will be displayed as + a white line while the RF line-of-sight path will be dis- + played in green. Google Earth's navigation tools allow + the user to "fly" around the path, identify landmarks, + roads, and other featured content. DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN SPLAT! determines antenna height above average terrain @@ -655,66 +991,59 @@ DETERMINATION OF ANTENNA HEIGHT ABOVE AVERAGE TERRAIN lie entirely over water or over land outside the United States (areas for which no USGS topography data is avail- able), then those radials are omitted from the calculation - of average terrain. If part of a radial extends over a - body of water or over land outside the United States, then - only that part of the radial lying over United States land - is used in the determination of average terrain. - - Note that SRTM elevation data, unlike older 3-arc second - USGS data, extends beyond the borders of the United - States. Therefore, HAAT results may not be in full com- + of average terrain. + + Note that SRTM elevation data, unlike older 3-arc second + USGS data, extends beyond the borders of the United + States. Therefore, HAAT results may not be in full com- pliance with FCC Part 73.313(d) in areas along the borders - of the United States if the SDF files used by SPLAT! are + of the United States if the SDF files used by SPLAT! are SRTM-derived. - When performing point-to-point terrain analysis, SPLAT! - determines the antenna height above average terrain only - if enough topographic data has already been loaded by the - program to perform the point-to-point analysis. In most + When performing point-to-point terrain analysis, SPLAT! + determines the antenna height above average terrain only + if enough topographic data has already been loaded by the + program to perform the point-to-point analysis. In most cases, this will be true, unless the site in question does - not lie within 10 miles of the boundary of the topography + not lie within 10 miles of the boundary of the topography data in memory. - When performing area prediction analysis, enough topogra- - phy data is normally loaded by SPLAT! to perform average - terrain calculations. Under such conditions, SPLAT! will - provide the antenna height above average terrain as well - as the average terrain above mean sea level for azimuths - of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, and - include such information in the site report generated. If + When performing area prediction analysis, enough topogra- + phy data is normally loaded by SPLAT! to perform average + terrain calculations. Under such conditions, SPLAT! will + provide the antenna height above average terrain as well + as the average terrain above mean sea level for azimuths + of 0, 45, 90, 135, 180, 225, 270, and 315 degrees, and + include such information in the generated site report. If one or more of the eight radials surveyed fall over water, or over regions for which no SDF data is available, SPLAT! reports No Terrain for the radial paths affected. RESTRICTING THE MAXIMUM SIZE OF AN ANALYSIS REGION - SPLAT! reads SDF files as needed into a series of memory - "slots" within the structure of the program. Each "slot" - holds one SDF file representing a one degree by one degree - region of terrain. A #define MAXSLOTS statement in the - first several lines of splat.cpp sets the maximum number - of "slots" available for topography data. It also sets - the maximum size of the topographic maps generated by - SPLAT!. MAXSLOTS is set to 9 by default. If SPLAT! pro- - duces a segmentation fault on start-up with this default, - it is an indication that not enough RAM and/or virtual - memory (swap space) is available to run SPLAT! with this - number of MAXSLOTS. In situations where available memory - is low, MAXSLOTS may be reduced to 4 with the understand- - ing that this will greatly limit the maximum region SPLAT! - will be able to analyze. If 118 megabytes or more of - total memory (swap space plus RAM) is available, then - MAXSLOTS may be increased to 16. This will permit opera- - tion over a 4-degree by 4-degree region, which is suffi- - cient for single antenna heights in excess of 10,000 feet - above mean sea level, or point-to-point distances of over - 1000 miles. + SPLAT! reads SDF files as needed into a series of memory + pages or "slots" within the structure of the program. + Each "slot" holds one SDF file representing a one degree + by one degree region of terrain. A #define MAXSLOTS + statement in the first several lines of splat.cpp sets the + maximum number of "slots" available for holding topography + data. It also sets the maximum size of the topographic + maps generated by SPLAT!. MAXSLOTS is set to 9 by + default. If SPLAT! produces a segmentation fault on + start-up with this default, it is an indication that not + enough RAM and/or virtual memory (swap space) is available + to run SPLAT! with the number of MAXSLOTS specified. In + situations where available memory is low, MAXSLOTS may be + reduced to 4 with the understanding that this will greatly + limit the maximum region SPLAT! will be able to analyze. + If 118 megabytes or more of total memory (swap space plus + RAM) is available, then MAXSLOTS may be increased to 16. + This will permit operation over a 4-degree by 4-degree + region, which is sufficient for single antenna heights in + excess of 10,000 feet above mean sea level, or point-to- + point distances of over 1000 miles. ADDITIONAL INFORMATION - Invoking SPLAT! without any arguments will display all the - command-line options available with the program along with - a brief summary of each. - - The latest news and information regarding SPLAT! software + The latest news and information regarding SPLAT! software is available through the official SPLAT! software web page located at: http://www.qsl.net/kd2bd/splat.html. @@ -725,5 +1054,10 @@ AUTHORS Doug McDonald Longley-Rice Model integration + Ron Bentley + Fresnel Zone plotting and clearance determination + + +KD2BD Software 20 December 2006 SPLAT!(1) diff --git a/splat-1.1.1.lsm b/splat-1.2.0.lsm similarity index 78% rename from splat-1.1.1.lsm rename to splat-1.2.0.lsm index 1f83772..bd7e003 100644 --- a/splat-1.1.1.lsm +++ b/splat-1.2.0.lsm @@ -1,7 +1,7 @@ -Begin4 +Begin3 Title: SPLAT! -Version: 1.1.1 -Entered-date: 2006-04-01 +Version: 1.2.0 +Entered-date: 22DEC06 Description: SPLAT! is a terrestrial RF propagation analysis tool for the spectrum between 20 MHz and 20 GHz. SPLAT! provides site engineering data such as the great circle distances @@ -10,10 +10,10 @@ Description: SPLAT! is a terrestrial RF propagation analysis tool for above mean sea level, antenna height above average terrain, bearings and distances to known obstructions, path loss based on the Longley-Rice Irregular Terrain - Model, and minimum antenna height requirements needed - to establish line-of-sight communication paths absent - of obstructions due to terrain. SPLAT! produces - reports, graphs, and highly detailed and carefully + Model, and minimum antenna height requirements needed to + establish first Fresnel zone clearance and line-of-sight + RF paths absent of obstructions due to terrain. SPLAT! + produces reports, graphs, and highly detailed and carefully annotated topographic maps depicting line-of-sight paths, path loss, and expected coverage areas of transmitters and repeater systems. Applications of SPLAT! include @@ -29,8 +29,9 @@ Keywords: Terrain analysis, site engineering, Longley-Rice path amateur radio, wireless WAN analysis and design Author: kd2bd@amsat.org (John A. Magliacane) (Creator, Lead Developer) mcdonald@scs.uiuc.edu (Doug McDonald) (L-R Model Integration) + ronbentley@earthlink.net (Ron Bentley) (Fresnel Zone Plotting) Maintained-by: kd2bd@amsat.org (John A. Magliacane) -Primary-site: ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.1.1.tar.gz +Primary-site: ftp.ibiblio.org /pub/Linux/apps/ham/splat-1.2.0.tar.gz Original-site: http://www.qsl.net/kd2bd/splat.html Platforms: Linux/Unix Copying-policy: GPL diff --git a/splat.cpp b/splat.cpp index 3e17692..4c801c0 100644 --- a/splat.cpp +++ b/splat.cpp @@ -1,6 +1,6 @@ /**************************************************************************** * SPLAT: An RF Signal Propagation Loss and Terrain Analysis Tool * -* Last update: 31-Mar-2006 * +* Last update: 21-Dec-2006 * ***************************************************************************** * Project started in 1997 by John A. Magliacane, KD2BD * ***************************************************************************** @@ -56,48 +56,52 @@ #define ARRAYSIZE 30025 #endif -char string[255], sdf_path[255], opened=0, *splat_version={"1.1.1"}; +char string[255], sdf_path[255], opened=0, *splat_version={"1.2.0"}; double TWOPI=6.283185307179586, HALFPI=1.570796326794896, PI=3.141592653589793, deg2rad=1.74532925199e-02, EARTHRADIUS=20902230.97, METERS_PER_MILE=1609.344, - METERS_PER_FOOT=0.3048, earthradius, max_range=0.0; + METERS_PER_FOOT=0.3048, KM_PER_MILE=1.609344, earthradius, + max_range=0.0; int min_north=90, max_north=-90, min_west=360, max_west=-1, max_elevation=-32768, min_elevation=32768, bzerror, maxdB=230; -struct site { double lat; - double lon; - double alt; - char name[50]; - } site; - -struct path { float lat[ARRAYSIZE]; - float lon[ARRAYSIZE]; - float elevation[ARRAYSIZE]; - float distance[ARRAYSIZE]; - int length; - } path; - -struct dem { int min_north; - int max_north; - int min_west; - int max_west; - int max_el; - int min_el; - short data[1200][1200]; - unsigned char mask[1200][1200]; - } dem[MAXSLOTS]; - -struct LR { double eps_dielect; - double sgm_conductivity; - double eno_ns_surfref; - double frq_mhz; - double conf; - double rel; - int radio_climate; - int pol; - } LR; +unsigned char got_elevation_pattern=0, got_azimuth_pattern=0, metric=0; + +struct site { double lat; + double lon; + float alt; + char name[50]; + } site; + +struct path { double lat[ARRAYSIZE]; + double lon[ARRAYSIZE]; + double elevation[ARRAYSIZE]; + double distance[ARRAYSIZE]; + int length; + } path; + +struct dem { int min_north; + int max_north; + int min_west; + int max_west; + int max_el; + int min_el; + short data[1200][1200]; + unsigned char mask[1200][1200]; + } dem[MAXSLOTS]; + +struct LR { double eps_dielect; + double sgm_conductivity; + double eno_ns_surfref; + double frq_mhz; + double conf; + double rel; + int radio_climate; + int pol; + float antenna_pattern[361][1001]; + } LR; double elev_l[ARRAYSIZE+10]; @@ -138,12 +142,19 @@ char *dec2dms(double decimal) { /* Converts decimal degrees to degrees, minutes, seconds, (DMS) and returns the result as a character string. */ - - int degrees, minutes, seconds; - double a, b, c, d; + + char sign; + int degrees, minutes, seconds; + double a, b, c, d; if (decimal<0.0) + { decimal=-decimal; + sign=-1; + } + + else + sign=1; a=floor(decimal); b=60.0*(decimal-a); @@ -161,7 +172,7 @@ char *dec2dms(double decimal) seconds=59; string[0]=0; - sprintf(string,"%d%c %d\' %d\"", degrees, 176, minutes, seconds); + sprintf(string,"%d%c %d\' %d\"", degrees*sign, 176, minutes, seconds); return (string); } @@ -173,8 +184,8 @@ int OrMask(double lat, double lon, int value) the mask based on the latitude and longitude of the area pointed to. */ - int x, y, indx, minlat, minlon; - char found; + int x, y, indx, minlat, minlon; + char found; minlat=(int)floor(lat); minlon=(int)floor(lon); @@ -213,9 +224,9 @@ double GetElevation(struct site location) represented by the digital elevation model data in memory. Function returns -5000.0 for locations not found in memory. */ - char found; - int x, y, indx, minlat, minlon; - double elevation; + char found; + int x, y, indx, minlat, minlon; + double elevation; elevation=-5000.0; @@ -238,12 +249,41 @@ double GetElevation(struct site location) return elevation; } +int AddElevation(double lat, double lon, double height) +{ + /* This function adds a user-defined terrain feature + (in meters AGL) to the digital elevation model data + in memory. Does nothing and returns 0 for locations + not found in memory. */ + + char found; + int x, y, indx, minlat, minlon; + + minlat=(int)floor(lat); + minlon=(int)floor(lon); + + x=(int)(1199.0*(lat-floor(lat))); + y=(int)(1199.0*(lon-floor(lon))); + + for (indx=0, found=0; indxcos_test_angle) + { + block=1; + first_obstruction_angle=((acos(cos_test_angle))/deg2rad)-90.0; + } + } + + if (block) + elevation=first_obstruction_angle; + + else + elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0; + + path=temp; + + return elevation; +} + double AverageTerrain(struct site source, double azimuthx, double start_distance, double end_distance) { /* This function returns the average terrain calculated in @@ -418,9 +540,9 @@ double AverageTerrain(struct site source, double azimuthx, double start_distance memory to complete the survey (critical error), then -9999.0 is returned. */ - int c, samples, endpoint; - double beta, lat1, lon1, lat2, lon2, num, den, azimuth, terrain=0.0; - struct site destination; + int c, samples, endpoint; + double beta, lat1, lon1, lat2, lon2, num, den, azimuth, terrain=0.0; + struct site destination; lat1=source.lat*deg2rad; lon1=source.lon*deg2rad; @@ -509,9 +631,9 @@ double haat(struct site antenna) error occurs, such as a lack of SDF data to complete the survey, -5000.0 is returned. */ - int azi, c; - char error=0; - double terrain, avg_terrain, haat, sum=0.0; + int azi, c; + char error=0; + double terrain, avg_terrain, haat, sum=0.0; /* Calculate the average terrain between 2 and 10 miles from the antenna site at azimuths of 0, 45, 90, 135, @@ -586,7 +708,6 @@ void PlaceMarker(struct site location) lat=location.lat; lon=location.lon; - if (latxmin && (LonDiff(lon,ymax)<0.0) && (LonDiff(lon,ymin)>0.0)) { p1=1.0/1200.0; @@ -788,9 +909,9 @@ double ReadBearing(char *input) embedded within the numbers expressed in the input string. Decimal seconds are permitted. */ - double seconds, bearing=0.0; - char string[20]; - int a, b, length, degrees, minutes; + double seconds, bearing=0.0; + char string[20]; + int a, b, length, degrees, minutes; /* Copy "input" to "string", and ignore any extra spaces that might be present in the process. */ @@ -800,7 +921,7 @@ double ReadBearing(char *input) for (a=0, b=0; a=0 && x<=360 && fd!=NULL) + { + azimuth[x]+=amplitude; + read_count[x]++; + } + + fgets(string,254,fd); + pointer=strchr(string,';'); + + if (pointer!=NULL) + *pointer=0; + + sscanf(string,"%f %f",&az, &litude); + + } while (feof(fd)==0); + + fclose(fd); + + + /* Handle 0=360 degree ambiguity */ + + if ((read_count[0]==0) && (read_count[360]!=0)) + { + read_count[0]=read_count[360]; + azimuth[0]=azimuth[360]; + } + + if ((read_count[0]!=0) && (read_count[360]==0)) + { + read_count[360]=read_count[0]; + azimuth[360]=azimuth[0]; + } + + /* Average pattern values in case more than + one was read for each degree of azimuth. */ + + for (x=0; x<=360; x++) + { + if (read_count[x]>1) + azimuth[x]/=(float)read_count[x]; + } + + /* Interpolate missing azimuths + to completely fill the array */ + + last_index=-1; + next_index=-1; + + for (x=0; x<=360; x++) + { + if (read_count[x]!=0) + { + if (last_index==-1) + last_index=x; + else + next_index=x; + } + + if (last_index!=-1 && next_index!=-1) + { + valid1=azimuth[last_index]; + valid2=azimuth[next_index]; + + span=next_index-last_index; + delta=(valid2-valid1)/(float)span; + + for (y=last_index+1; y=360) + y-=360; + + azimuth_pattern[y]=azimuth[x]; + } + + azimuth_pattern[360]=azimuth_pattern[0]; + + got_azimuth_pattern=255; + } + + /* Read and process .el file */ + + fd=fopen(elfile,"r"); + + if (fd!=NULL) + { + for (x=0; x<=10000; x++) + { + el_pattern[x]=0.0; + read_count[x]=0; + } + + /* Read mechanical tilt (degrees) and + tilt azimuth in degrees measured + clockwise from true North. */ + + fgets(string,254,fd); + pointer=strchr(string,';'); + + if (pointer!=NULL) + *pointer=0; + + sscanf(string,"%f %f",&mechanical_tilt, &tilt_azimuth); + + /* Read elevation (degrees) and corresponding + normalized field radiation pattern amplitude + (0.0 to 1.0) until EOF is reached. */ + + fgets(string,254,fd); + pointer=strchr(string,';'); + + if (pointer!=NULL) + *pointer=0; + + sscanf(string,"%f %f", &elevation, &litude); + + while (feof(fd)==0) + { + /* Read in normalized radiated field values + for every 0.01 degrees of elevation between + -10.0 and +90.0 degrees */ + + x=(int)rintf(100.0*(elevation+10.0)); + + if (x>=0 && x<=10000) + { + el_pattern[x]+=amplitude; + read_count[x]++; + } + + fgets(string,254,fd); + pointer=strchr(string,';'); + + if (pointer!=NULL) + *pointer=0; + + sscanf(string,"%f %f", &elevation, &litude); + } + + fclose(fd); + + /* Average the field values in case more than + one was read for each 0.01 degrees of elevation. */ + + for (x=0; x<=10000; x++) + { + if (read_count[x]>1) + el_pattern[x]/=(float)read_count[x]; + } + + /* Interpolate between missing elevations (if + any) to completely fill the array and provide + radiated field values for every 0.01 degrees of + elevation. */ + + last_index=-1; + next_index=-1; + + for (x=0; x<=10000; x++) + { + if (read_count[x]!=0) + { + if (last_index==-1) + last_index=x; + else + next_index=x; + } + + if (last_index!=-1 && next_index!=-1) + { + valid1=el_pattern[last_index]; + valid2=el_pattern[next_index]; + + span=next_index-last_index; + delta=(valid2-valid1)/(float)span; + + for (y=last_index+1; y=360) + y-=360; + + while (y<0) + y+=360; + + if (x<=180) + slant_angle[y]=-(tilt_increment*(90.0-xx)); + + if (x>180) + slant_angle[y]=-(tilt_increment*(xx-270.0)); + } + } + + slant_angle[360]=slant_angle[0]; /* 360 degree wrap-around */ + + for (w=0; w<=360; w++) + { + tilt=slant_angle[w]; + + /** Convert tilt angle to + an array index offset **/ + + y=(int)rintf(100.0*tilt); + + /* Copy shifted el_pattern[10001] field + values into elevation_pattern[361][1001] + at the corresponding azimuth, downsampling + (averaging) along the way in chunks of 10. */ + + for (x=y, z=0; z<=1000; x+=10, z++) + { + for (sum=0.0, a=0; a<10; a++) + { + b=a+x; + + if (b>=0 && b<=10000) + sum+=el_pattern[b]; + if (b<0) + sum+=el_pattern[0]; + if (b>10000) + sum+=el_pattern[10000]; + } + + elevation_pattern[w][z]=sum/10.0; + } + } + + got_elevation_pattern=255; + } + + for (x=0; x<=360; x++) + { + for (y=0; y<=1000; y++) + { + if (got_elevation_pattern) + elevation=elevation_pattern[x][y]; + else + elevation=1.0; + + if (got_azimuth_pattern) + az=azimuth_pattern[x]; + else + az=1.0; + + LR.antenna_pattern[x][y]=az*elevation; + } + } +} + int LoadSDF_SDF(char *name) { /* This function reads uncompressed SPLAT Data Files (.sdf) @@ -925,9 +1413,10 @@ int LoadSDF_SDF(char *name) quadrangle limits are stored in the first available dem[] structure. */ - int x, y, data, indx, minlat, minlon, maxlat, maxlon; - char found, free_slot=0, line[20], sdf_file[255], path_plus_name[255]; - FILE *fd; + int x, y, data, indx, minlat, minlon, maxlat, maxlon; + char found, free_slot=0, line[20], sdf_file[255], + path_plus_name[255]; + FILE *fd; for (x=0; name[x]!='.' && name[x]!=0 && x<250; x++) sdf_file[x]=name[x]; @@ -1149,10 +1638,10 @@ int LoadSDF_BZ(char *name) maximum and minimum elevations, and quadrangle limits are stored in the first available dem[] structure. */ - int x, y, data, indx, minlat, minlon, maxlat, maxlon; - char found, free_slot=0, sdf_file[255], path_plus_name[255]; - FILE *fd; - BZFILE *bzfd; + int x, y, data, indx, minlat, minlon, maxlat, maxlon; + char found, free_slot=0, sdf_file[255], path_plus_name[255]; + FILE *fd; + BZFILE *bzfd; for (x=0; name[x]!='.' && name[x]!=0 && x<247; x++) sdf_file[x]=name[x]; @@ -1299,9 +1788,11 @@ int LoadSDF_BZ(char *name) fflush(stdout); return 1; } + else return -1; } + else return 0; } @@ -1317,9 +1808,9 @@ char LoadSDF(char *name) exists for the region requested, and that the region requested must be entirely over water. */ - int x, y, indx, minlat, minlon, maxlat, maxlon; - char found, free_slot=0; - int return_value=-1; + int x, y, indx, minlat, minlon, maxlat, maxlon; + char found, free_slot=0; + int return_value=-1; /* Try to load an uncompressed SDF first. */ @@ -1448,10 +1939,10 @@ void LoadCities(char *filename) the locations and names of the cities and site locations read on topographic maps generated by SPLAT! */ - int x, y, z; - char input[80], str[3][80]; - struct site city_site; - FILE *fd=NULL; + int x, y, z; + char input[80], str[3][80]; + struct site city_site; + FILE *fd=NULL; fd=fopen(filename,"r"); @@ -1496,45 +1987,185 @@ void LoadCities(char *filename) fprintf(stdout,"Done!\n"); fflush(stdout); } + else fprintf(stderr,"*** ERROR: \"%s\": not found!\n",filename); } -void LoadBoundaries(char *filename) +void LoadUDT(char *filename) { - /* This function reads Cartographic Boundary Files available from - the U.S. Census Bureau, and plots the data contained in those - files on the PPM Map generated by SPLAT!. Such files contain - the coordinates that describe the boundaries of cities, - counties, and states. */ - - int x; - double lat0, lon0, lat1, lon1; - char string[80]; - struct site source, destination; - FILE *fd=NULL; + /* This function reads a file containing User-Defined Terrain + features for their addition to the digital elevation model + data used by SPLAT!. Elevations in the UDT file are evaluated + and then copied into a temporary file under /tmp. Then the + contents of the temp file are scanned, and if found to be unique, + are added to the ground elevations described by the digital + elevation data already loaded into memory. */ + + int i, x, y, z, fd=0; + char input[80], str[3][80], tempname[15], *pointer=NULL; + double latitude, longitude, height, templat, templon, + tempheight, one_pixel; + FILE *fd1=NULL, *fd2=NULL; + + strcpy(tempname,"/tmp/XXXXXX\0"); + one_pixel=1.0/1200.0; - fd=fopen(filename,"r"); + fd1=fopen(filename,"r"); - if (fd!=NULL) + if (fd1!=NULL) { - fgets(string,78,fd); + fd=mkstemp(tempname); + fd2=fopen(tempname,"w"); + + fgets(input,78,fd1); + + pointer=strchr(input,';'); + + if (pointer!=NULL) + *pointer=0; fprintf(stdout,"Reading \"%s\"... ",filename); fflush(stdout); - do + while (feof(fd1)==0) { - fgets(string,78,fd); - sscanf(string,"%lf %lf", &lon0, &lat0); - fgets(string,78,fd); + /* Parse line for latitude, longitude, height */ - do + for (x=0, y=0, z=0; x<78 && input[x]!=0 && z<3; x++) { - sscanf(string,"%lf %lf", &lon1, &lat1); - - lon0=fabs(lon0); - lon1=fabs(lon1); + if (input[x]!=',' && y<78) + { + str[z][y]=input[x]; + y++; + } + + else + { + str[z][y]=0; + z++; + y=0; + } + } + + latitude=ReadBearing(str[0]); + longitude=ReadBearing(str[1]); + + /* Remove and/or from antenna height string */ + + for (i=0; str[2][i]!=13 && str[2][i]!=10 && str[2][i]!=0; i++); + + str[2][i]=0; + + /* The terrain feature may be expressed in either + feet or meters. If the letter 'M' or 'm' is + discovered in the string, then this is an + indication that the value given is expressed + in meters. Otherwise the height is interpreted + as being expressed in feet. */ + + for (i=0; str[2][i]!='M' && str[2][i]!='m' && str[2][i]!=0 && i<48; i++); + + if (str[2][i]=='M' || str[2][i]=='m') + { + str[2][i]=0; + height=rint(atof(str[2])); + } + + else + { + str[2][i]=0; + height=rint(3.28084*atof(str[2])); + } + + if (height>0.0) + fprintf(fd2,"%f, %f, %f\n",latitude, longitude, height); + + fgets(input,78,fd1); + + pointer=strchr(input,';'); + + if (pointer!=NULL) + *pointer=0; + } + + fclose(fd1); + fclose(fd2); + close(fd); + + fprintf(stdout,"Done!\n"); + fflush(stdout); + + fd1=fopen(tempname,"r"); + fd2=fopen(tempname,"r"); + + fscanf(fd1,"%lf, %lf, %lf", &latitude, &longitude, &height); + + for (y=0; feof(fd1)==0; y++) + { + rewind(fd2); + + fscanf(fd2,"%lf, %lf, %lf", &templat, &templon, &tempheight); + + for (x=0, z=0; feof(fd2)==0; x++) + { + if (x>y) + if (fabs(latitude-templat)<=one_pixel && fabs(longitude-templon)<=one_pixel) + z=1; + + fscanf(fd2,"%lf, %lf, %lf", &templat, &templon, &tempheight); + } + + if (z==0) + AddElevation(latitude, longitude, height); + + fscanf(fd1,"%lf, %lf, %lf", &latitude, &longitude, &height); + } + + fclose(fd1); + fclose(fd2); + unlink(tempname); + } + + else + fprintf(stderr,"*** ERROR: \"%s\": not found!\n",filename); +} + +void LoadBoundaries(char *filename) +{ + /* This function reads Cartographic Boundary Files available from + the U.S. Census Bureau, and plots the data contained in those + files on the PPM Map generated by SPLAT!. Such files contain + the coordinates that describe the boundaries of cities, + counties, and states. */ + + int x; + double lat0, lon0, lat1, lon1; + char string[80]; + struct site source, destination; + FILE *fd=NULL; + + fd=fopen(filename,"r"); + + if (fd!=NULL) + { + fgets(string,78,fd); + + fprintf(stdout,"Reading \"%s\"... ",filename); + fflush(stdout); + + do + { + fgets(string,78,fd); + sscanf(string,"%lf %lf", &lon0, &lat0); + fgets(string,78,fd); + + do + { + sscanf(string,"%lf %lf", &lon1, &lat1); + + lon0=fabs(lon0); + lon1=fabs(lon1); source.lat=lat0; source.lon=lon0; @@ -1575,12 +2206,12 @@ void ReadLRParm(char *txsite_filename) is not found, then the file "splat.lrp" is read from the current working directory. Failure to load this file will result in the default parameters hard coded into this - being used and written to "splat.lrp". */ + function to be used and written to "splat.lrp". */ - double din; - char filename[255], lookup[256], string[80]; - int iin, ok=0, x; - FILE *fd=NULL, *outfile=NULL; + double din; + char filename[255], string[80], *pointer=NULL; + int iin, ok=0, x; + FILE *fd=NULL, *outfile=NULL; /* Default parameters in case things go bad */ @@ -1605,20 +2236,6 @@ void ReadLRParm(char *txsite_filename) filename[x+3]='p'; filename[x+4]=0; - /* Small lookup table to parse file, pass - numeric data, and ignore comments. */ - - for (x=0; x<=255; x++) - lookup[x]=0; - - /* Valid characters */ - - for (x=48; x<=57; x++) - lookup[x]=x; - - lookup[32]=32; - lookup[46]='.'; - fd=fopen(filename,"r"); if (fd==NULL) @@ -1633,10 +2250,10 @@ void ReadLRParm(char *txsite_filename) { fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); @@ -1646,10 +2263,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); } @@ -1660,10 +2277,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); } @@ -1674,10 +2291,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); } @@ -1688,10 +2305,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%d", &iin); } @@ -1702,10 +2319,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%d", &iin); } @@ -1716,10 +2333,10 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); } @@ -1730,18 +2347,21 @@ void ReadLRParm(char *txsite_filename) fgets(string,80,fd); - for (x=0; lookup[(int)string[x]] && x<20; x++) - string[x]=lookup[(int)string[x]]; + pointer=strchr(string,';'); - string[x]=0; + if (pointer!=NULL) + *pointer=0; ok=sscanf(string,"%lf", &din); } + fclose(fd); + if (ok) + { LR.rel=din; - - fclose(fd); + LoadPAT(filename); + } } if (fd==NULL) @@ -1752,21 +2372,13 @@ void ReadLRParm(char *txsite_filename) outfile=fopen("splat.lrp","w"); fprintf(outfile,"%.3f\t; Earth Dielectric Constant (Relative permittivity)\n",LR.eps_dielect); - fprintf(outfile,"%.3f\t; Earth Conductivity (Siemens per meter)\n", LR.sgm_conductivity); - fprintf(outfile,"%.3f\t; Atmospheric Bending Constant (N-Units)\n",LR.eno_ns_surfref); - fprintf(outfile,"%.3f\t; Frequency in MHz (20 MHz to 20 GHz)\n", LR.frq_mhz); - fprintf(outfile,"%d\t; Radio Climate\n",LR.radio_climate); - fprintf(outfile,"%d\t; Polarization (0 = Horizontal, 1 = Vertical)\n", LR.pol); - fprintf(outfile,"%.2f\t; Fraction of situations\n",LR.conf); - fprintf(outfile, "%.2f\t; Fraction of time\n",LR.rel); - fprintf(outfile,"\nPlease consult SPLAT! documentation for the meaning and use of this data.\n"); fclose(outfile); @@ -1778,98 +2390,6 @@ void ReadLRParm(char *txsite_filename) fprintf(stderr,"Longley-Rice default parameters have been assumed for this analysis.\n"); } -struct site los(struct site source, struct site destination) -{ - /* This function determines whether a line-of-sight path - unobstructed by terrain exists between source (transmitter) - and destination (receiver) based on the geographical - locations of the two sites, their respective antenna - heights above ground, and the terrain between them. - A site structure is returned upon completion. If the - first character of site.name is ' ', then a clear path - exists between source and destination. If the first - character is '*', then an obstruction exists, and the - site.lat and site.lon elements of the structure provide - the geographical location of the obstruction. */ - - int x; - char block; - struct site test, blockage; - register double distance, tx_alt, rx_alt, - cos_xmtr_angle, cos_test_angle, test_alt; - - ReadPath(source,destination); - - distance=5280.0*Distance(source,destination); - tx_alt=earthradius+source.alt+GetElevation(source); - rx_alt=earthradius+destination.alt+GetElevation(destination); - - /* Elevation angle of the xmtr (source) as seen by the rcvr */ - - cos_xmtr_angle=((rx_alt*rx_alt)+(distance*distance)-(tx_alt*tx_alt))/(2.0*rx_alt*distance); - - /* Determine the elevation angle of each discrete location - along the path between the receiver and transmitter. - - Since obstructions are more likely due to terrain effects - closest to the receiver rather than farther away, we start - looking for potential obstructions from the receiver's - location, and work our way towards the transmitter. - This loop is broken when the first obstruction is - detected. If we can travel all the way to the transmitter - without detecting an obstruction, then we have a clear - unobstructed path between transmitter and receiver. */ - - for (x=path.length-1, block=0; x>0 && block==0; x--) - { - /* Build a structure for each test - point along the path to be surveyed. */ - - test.lat=path.lat[x]; - test.lon=path.lon[x]; - - /* Measure the distance between the - test point and the receiver locations */ - - distance=5280.0*Distance(test,destination); - test_alt=earthradius+path.elevation[x]; - - /* Determine the cosine of the elevation of the test - point as seen from the location of the receiver */ - - cos_test_angle=((rx_alt*rx_alt)+(distance*distance)-(test_alt*test_alt))/(2.0*rx_alt*distance); - - /* If the elevation angle to the test point (as seen from - the receiver) is greater than the elevation angle to the - transmitter (as seen by the receiver), then we have a - path obstructed by terrain. Note: Since we're comparing - the cosines of these angles rather than the angles - themselves (eliminating the call to acos() saves - considerable time), the following "if" statement is - reversed from what it would normally be if the angles - were compared. */ - - if (cos_xmtr_angle>cos_test_angle) - { - block=1; - blockage.lat=path.lat[x]; - blockage.lon=path.lon[x]; - blockage.alt=path.elevation[x]; - blockage.name[0]='*'; - } - } - - if (block==0) - { - blockage.lat=0.0; - blockage.lon=0.0; - blockage.alt=0.0; - blockage.name[0]=' '; - } - - return blockage; -} - void PlotPath(struct site source, struct site destination, char mask_value) { /* This function analyzes the path between the source and @@ -1928,39 +2448,146 @@ void PlotPath(struct site source, struct site destination, char mask_value) } } -void PlotLRPath(struct site source, struct site destination) +void PlotLRPath(struct site source, struct site destination, FILE *fd) { - /* This function plots the RF signal path loss - between source and destination points based - on the Longley-Rice propagation model. */ - - char strmode[100]; - int x, y, errnum; - double loss; + /* This function plots the RF path loss between source and + destination points based on the Longley-Rice propagation + model, taking into account antenna pattern data, if available. */ + + char block=0, strmode[100]; + int x, y, errnum; + double loss, azimuth, pattern=0.0, + source_alt, dest_alt, source_alt2, dest_alt2, + cos_xmtr_angle, cos_test_angle=0.0, test_alt, + elevation, distance=0.0, + four_thirds_earth; + struct site temp; ReadPath(source,destination); - elev_l[1]=0.04*METERS_PER_MILE; + + four_thirds_earth=EARTHRADIUS*(4.0/3.0); + + /* Copy elevations along path into the elev_l[] array. */ for (x=0; xcos_test_angle) + block=1; + } + + /* At this point, we have the elevation angle + to the first obstruction (if it exists). */ + } + + /* Determine attenuation for each point along the + path using Longley-Rice's point_to_point mode + starting at y=2 (number_of_points = 1), the + shortest distance terrain can play a role in + path loss. */ + + elev_l[0]=y-1; /* (number of points - 1) */ + + /* Distance between elevation samples */ + elev_l[1]=METERS_PER_MILE*(path.distance[y]-path.distance[y-1]); point_to_point(elev_l,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); + 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); + + if (block) + elevation=((acos(cos_test_angle))/deg2rad)-90.0; + + else + elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0; + + temp.lat=path.lat[y]; + temp.lon=path.lon[y]; + + azimuth=(Azimuth(source,temp)); + + if (fd!=NULL) + { + /* Write path loss data to output file */ + + fprintf(fd,"%.7f, %.7f, %.3f, %.3f, %.2f\n",path.lat[y], path.lon[y], azimuth, elevation, loss); + } + + /* Integrate the antenna's radiation + pattern into the overall path loss. */ - /* Note: PASS BY REFERENCE ... loss and errnum are - passed by reference, and are only used in this - file by this function */ + x=(int)rint(10.0*(10.0-elevation)); + + if (x>=0 && x<=1000) + { + azimuth=rint(azimuth); + + pattern=(double)LR.antenna_pattern[(int)azimuth][x]; + + if (pattern!=0.0) + { + pattern=20.0*log10(pattern); + loss-=pattern; + } + } if (loss>225.0) loss=225.0; @@ -1975,7 +2602,7 @@ void PlotLRPath(struct site source, struct site destination) OrMask(path.lat[y],path.lon[y],((unsigned char)(loss))<<3); } - else if (GetMask(path.lat[y],path.lon[y])==0 && 0.04*y>max_range) + else if (GetMask(path.lat[y],path.lon[y])==0 && path.distance[y]>max_range) OrMask(path.lat[y],path.lon[y],1); } } @@ -2011,7 +2638,7 @@ void PlotCoverage(struct site source, double altitude) count=0; - fprintf(stdout,"\nComputing line-of-sight coverage of %s with an RX antenna\nat %.2f feet AGL:\n\n 0%c to 25%c ",source.name,altitude,37,37); + fprintf(stdout,"\nComputing line-of-sight coverage of %s with an RX antenna\nat %.2f %s AGL:\n\n 0%c to 25%c ",source.name,metric?altitude*METERS_PER_FOOT:altitude,metric?"meters":"feet",37,37); fflush(stdout); /* 18.75=1200 pixels/degree divided by 64 loops @@ -2151,7 +2778,7 @@ void PlotCoverage(struct site source, double altitude) } } -void PlotLRMap(struct site source, double altitude) +void PlotLRMap(struct site source, double altitude, char *plo_filename) { /* This function performs a 360 degree sweep around the transmitter site (source location), and plots the @@ -2166,6 +2793,7 @@ void PlotLRMap(struct site source, double altitude) struct site edge; float lat, lon, one_pixel; unsigned char symbol[4], x; + FILE *fd=NULL; one_pixel=1.0/1200.0; @@ -2177,9 +2805,20 @@ void PlotLRMap(struct site source, double altitude) count=0; fprintf(stdout,"\nComputing Longley-Rice coverage of %s ", source.name); - fprintf(stdout,"out to a radius\nof %.2f miles with an RX antenna at %.2f feet AGL:\n\n 0%c to 25%c ",max_range,altitude,37,37); + + fprintf(stdout,"out to a radius\nof %.2f %s with an RX antenna at %.2f %s AGL:\n\n 0%c to 25%c ",metric?max_range*KM_PER_MILE:max_range,metric?"kilometers":"miles",metric?altitude*METERS_PER_FOOT:altitude,metric?"meters":"feet",37,37); fflush(stdout); + if (plo_filename[0]!=0) + fd=fopen(plo_filename,"wb"); + + if (fd!=NULL) + { + /* Write header information to output file */ + + fprintf(fd,"%d, %d\t; max_west, min_west\n%d, %d\t; max_north, min_north\n",max_west, min_west, max_north, min_north); + } + /* 18.75=1200 pixels/degree divided by 64 loops per progress indicator symbol (.oOo) printed. */ @@ -2194,7 +2833,7 @@ void PlotLRMap(struct site source, double altitude) edge.lon=lon; edge.alt=altitude; - PlotLRPath(source,edge); + PlotLRPath(source,edge,fd); count++; if (count==z) @@ -2222,7 +2861,7 @@ void PlotLRMap(struct site source, double altitude) edge.lon=min_west; edge.alt=altitude; - PlotLRPath(source,edge); + PlotLRPath(source,edge,fd); count++; if (count==z) @@ -2253,7 +2892,7 @@ void PlotLRMap(struct site source, double altitude) edge.lon=lon; edge.alt=altitude; - PlotLRPath(source,edge); + PlotLRPath(source,edge,fd); count++; if (count==z) @@ -2281,7 +2920,7 @@ void PlotLRMap(struct site source, double altitude) edge.lon=max_west; edge.alt=altitude; - PlotLRPath(source,edge); + PlotLRPath(source,edge,fd); count++; if (count==z) @@ -2297,11 +2936,14 @@ void PlotLRMap(struct site source, double altitude) } } + if (fd!=NULL) + fclose(fd); + fprintf(stdout,"\nDone!\n"); fflush(stdout); } -void WritePPM(char *filename) +void WritePPM(char *filename, unsigned char geo) { /* This function generates a topographic map in Portable Pix Map (PPM) format based on logarithmically scaled topology data, @@ -2310,7 +2952,7 @@ void WritePPM(char *filename) from its representation in dem[][] so that north points up and east points right in the image generated. */ - char mapfile[255]; + char mapfile[255], geofile[255]; unsigned char found, mask; unsigned width, height, output; int indx, x, y, x0=0, y0=0, minlat, minlon; @@ -2329,13 +2971,35 @@ void WritePPM(char *filename) else { for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++) + { mapfile[x]=filename[x]; + geofile[x]=filename[x]; + } mapfile[x]='.'; + geofile[x]='.'; mapfile[x+1]='p'; + geofile[x+1]='g'; mapfile[x+2]='p'; + geofile[x+2]='e'; mapfile[x+3]='m'; + geofile[x+3]='o'; mapfile[x+4]=0; + geofile[x+4]=0; + } + + if (geo) + { + fd=fopen(geofile,"wb"); + + fprintf(fd,"FILENAME\t%s\n",mapfile); + fprintf(fd,"#\t\tX\tY\tLong\t\tLat\n"); + fprintf(fd,"TIEPOINT\t0\t0\t%d.000\t\t%d.000\n",(max_west<180?-max_west:360-max_west),max_north); + fprintf(fd,"TIEPOINT\t%u\t%u\t%d.000\t\t%d.000\n",width-1,height-1,(min_west<180?-min_west:360-min_west),min_north); + fprintf(fd,"IMAGESIZE\t%u\t%u\n",width,height); + fprintf(fd,"#\n# Auto Generated by SPLAT! v%s\n#\n",splat_version); + + fclose(fd); } fd=fopen(mapfile,"wb"); @@ -2482,7 +3146,7 @@ void WritePPM(char *filename) fflush(stdout); } -void WritePPMLR(char *filename) +void WritePPMLR(char *filename, unsigned char geo) { /* This function generates a topographic map in Portable Pix Map (PPM) format based on the content of flags held in the mask[][] @@ -2490,7 +3154,7 @@ void WritePPMLR(char *filename) 90 degrees from its representation in dem[][] so that north points up and east points right in the image generated. */ - char mapfile[255]; + char mapfile[255], geofile[255]; unsigned width, height, output; unsigned char found, mask, cityorcounty; int indx, x, y, t, t2, x0, y0, minlat, minlon, loss; @@ -2509,13 +3173,35 @@ void WritePPMLR(char *filename) else { for (x=0; filename[x]!='.' && filename[x]!=0 && x<250; x++) + { mapfile[x]=filename[x]; + geofile[x]=filename[x]; + } mapfile[x]='.'; + geofile[x]='.'; mapfile[x+1]='p'; + geofile[x+1]='g'; mapfile[x+2]='p'; + geofile[x+2]='e'; mapfile[x+3]='m'; + geofile[x+3]='o'; mapfile[x+4]=0; + geofile[x+4]=0; + } + + if (geo) + { + fd=fopen(geofile,"wb"); + + fprintf(fd,"FILENAME\t%s\n",mapfile); + fprintf(fd,"#\t\tX\tY\tLong\t\tLat\n"); + fprintf(fd,"TIEPOINT\t0\t0\t%d.000\t\t%d.000\n",(max_west<180?-max_west:360-max_west),max_north); + fprintf(fd,"TIEPOINT\t%u\t%u\t%d.000\t\t%.3f\n",width-1,height+29,(min_west<180?-min_west:360-min_west),(double)(min_north-0.025)); + fprintf(fd,"IMAGESIZE\t%u\t%u\n",width,height+30); + fprintf(fd,"#\n# Auto Generated by SPLAT! v%s\n#\n",splat_version); + + fclose(fd); } fd=fopen(mapfile,"wb"); @@ -2554,7 +3240,6 @@ void WritePPMLR(char *filename) { /* Text Labels - Black or Red */ - /* if ((mask&120) && (loss<=maxdB)) */ if ((mask&120) && (loss<=90)) fprintf(fd,"%c%c%c",0,0,0); else @@ -2797,18 +3482,24 @@ void GraphTerrain(struct site source, struct site destination, char *name) and destination locations. "filename" is the name assigned to the output file generated by gnuplot. The filename extension is used to set gnuplot's terminal setting and output file type. - If no extension is found, .gif is assumed. */ + If no extension is found, .png is assumed. */ - int x, y, z; - char filename[255], term[15], ext[15]; - FILE *fd=NULL; + int x, y, z; + char filename[255], term[30], ext[15]; + FILE *fd=NULL; ReadPath(destination,source); fd=fopen("profile.gp","wb"); for (x=0; xmaxangle) maxangle=angle; } - fprintf(fd,"%f\t%f\n",path.distance[path.length-1],refangle); - fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],refangle); + if (metric) + { + fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],refangle); + fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[path.length-1],refangle); + } + + else + { + fprintf(fd,"%f\t%f\n",path.distance[path.length-1],refangle); + fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],refangle); + } fclose(fd); fclose(fd2); @@ -2932,8 +3656,8 @@ void GraphElevation(struct site source, struct site destination, char *name) /* Default filename and output file type */ strncpy(filename,"profile\0",8); - strncpy(term,"gif\0",4); - strncpy(ext,"gif\0",4); + strncpy(term,"png\0",4); + strncpy(ext,"png\0",4); } else @@ -2957,11 +3681,11 @@ void GraphElevation(struct site source, struct site destination, char *name) } else - { /* No extension -- Default is gif */ + { /* No extension -- Default is png */ filename[x]=0; - strncpy(term,"gif\0",4); - strncpy(ext,"gif\0",4); + strncpy(term,"png\0",4); + strncpy(ext,"png\0",4); } } @@ -2972,7 +3696,7 @@ void GraphElevation(struct site source, struct site destination, char *name) strncpy(ext,"ps\0",3); else if (strncmp(ext,"ps",2)==0) - strncpy(term,"postscript\0",11); + strncpy(term,"postscript enhanced color\0",26); fprintf(stdout,"Writing \"%s.%s\"...",filename,ext); fflush(stdout); @@ -2981,12 +3705,19 @@ void GraphElevation(struct site source, struct site destination, char *name) fprintf(fd,"set grid\n"); fprintf(fd,"set yrange [%2.3f to %2.3f]\n", (-fabs(refangle)-0.25), maxangle+0.25); + fprintf(fd,"set encoding iso_8859_1\n"); fprintf(fd,"set term %s\n",term); - fprintf(fd,"set title \"SPLAT! Elevation Profile\"\n"); - fprintf(fd,"set xlabel \"Distance Between %s and %s (miles)\"\n",destination.name,source.name); - fprintf(fd,"set ylabel \"Elevation Angle Along Path Between %s and %s (degrees)\"\n",destination.name,source.name); + fprintf(fd,"set title \"SPLAT! Elevation Profile Between %s and %s (%.2f%c azimuth)\"\n",destination.name,source.name,Azimuth(destination,source),176); + + if (metric) + fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f kilometers)\"\n",destination.name,source.name,KM_PER_MILE*Distance(source,destination)); + else + fprintf(fd,"set xlabel \"Distance Between %s and %s (%.2f miles)\"\n",destination.name,source.name,Distance(source,destination)); + + + fprintf(fd,"set ylabel \"Elevation Angle Along LOS Path Between %s and %s (degrees)\"\n",destination.name,source.name); fprintf(fd,"set output \"%s.%s\"\n",filename,ext); - fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line Of Sight Path\" with lines\n"); + fprintf(fd,"plot \"profile.gp\" title \"Real Earth Profile\" with lines, \"reference.gp\" title \"Line of Sight Path (%.2f%c elevation)\" with lines\n",refangle,176); fclose(fd); @@ -3006,68 +3737,209 @@ void GraphElevation(struct site source, struct site destination, char *name) fprintf(stderr,"\n*** ERROR: Error occurred invoking gnuplot!\n"); } -void GraphHeight(struct site source, struct site destination, char *name) +void GraphHeight(struct site source, struct site destination, char *name, double f, unsigned char n) { /* This function invokes gnuplot to generate an appropriate output file indicating the terrain profile between the source - and destination locations. What is plotted is the height of - land above or below a straight line between the receibe and - transmit sites. "filename" is the name assigned to the output - file generated by gnuplot. The filename extension is used - to set gnuplot's terminal setting and output file type. - If no extension is found, .gif is assumed. */ - - int x, y, z; - char filename[255], term[15], ext[15]; - double a, b, c, height, refangle, cangle, maxheight=-100000.0, - minheight=100000.0; - struct site remote; - FILE *fd=NULL, *fd2=NULL; + and destination locations referenced to the line-of-sight path + between the receive and transmit sites. "filename" is the name + assigned to the output file generated by gnuplot. The filename + extension is used to set gnuplot's terminal setting and output + file type. If no extension is found, .png is assumed. */ + + int x, y, z; + char filename[255], term[30], ext[15]; + double a, b, c, height=0.0, refangle, cangle, maxheight=-100000.0, + minheight=100000.0, lambda=0.0, f_zone=0.0, fpt6_zone=0.0, + nm=0.0, nb=0.0, ed=0.0, es=0.0, r=0.0, d=0.0, d1=0.0, + terrain, azimuth, distance, dheight=0.0, minterrain=100000.0, + minearth=100000.0, miny, maxy, min2y, max2y; + struct site remote; + FILE *fd=NULL, *fd2=NULL, *fd3=NULL, *fd4=NULL, *fd5=NULL; ReadPath(destination,source); /* destination=RX, source=TX */ + azimuth=Azimuth(destination,source); + distance=Distance(destination,source); refangle=ElevationAngle(destination,source); b=GetElevation(destination)+destination.alt+earthradius; + /* Wavelength and path distance (great circle) in feet. */ + + if (f) + { + lambda=9.8425e8/(f*1e6); + d=5280.0*path.distance[path.length-1]; + } + + if (n) + { + ed=GetElevation(destination); + es=GetElevation(source); + nb=-destination.alt-ed; + nm=(-source.alt-es-nb)/(path.distance[path.length-1]); + } + fd=fopen("profile.gp","wb"); fd2=fopen("reference.gp","wb"); + fd5=fopen("curvature.gp", "wb"); - for (x=1; x0) + { + f_zone+=r; + fpt6_zone+=r; + } + } + + else + r=0.0; + + if (metric) + { + fprintf(fd,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*height); + fprintf(fd2,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*r); + fprintf(fd5,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*(height-terrain)); + } + + else + { + fprintf(fd,"%f\t%f\n",path.distance[x],height); + fprintf(fd2,"%f\t%f\n",path.distance[x],r); + fprintf(fd5,"%f\t%f\n",path.distance[x],height-terrain); + } + + if (f) + { + if (metric) + { + fprintf(fd3,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*f_zone); + fprintf(fd4,"%f\t%f\n",KM_PER_MILE*path.distance[x],METERS_PER_FOOT*fpt6_zone); + } + + else + { + fprintf(fd3,"%f\t%f\n",path.distance[x],f_zone); + fprintf(fd4,"%f\t%f\n",path.distance[x],fpt6_zone); + } + + if (f_zonemaxheight) maxheight=height; if (heightmaxheight) + maxheight=r; + + if (terrainmaxheight) + maxheight=r; - fprintf(fd,"%f\t%f\n",path.distance[path.length-1],0.0); - fprintf(fd2,"%f\t%f\n",path.distance[path.length-1],0.0); + if (r-4999.0) - fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt); + { + if (metric) + fprintf(fd2,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt); + else + fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt); + } + + azimuth=Azimuth(source,destination); + angle1=ElevationAngle(source,destination); + angle2=ElevationAngle2(source,destination,earthradius); + + if (got_azimuth_pattern || got_elevation_pattern) + { + x=(int)rint(10.0*(10.0-angle2)); + + if (x>=0 && x<=1000) + pattern=(double)LR.antenna_pattern[(int)rint(azimuth)][x]; + + patterndB=20.0*log10(pattern); + + fprintf(fd2,"Antenna pattern between %s and %s: %.3f (%.2f dB)\n",source.name, destination.name, pattern, patterndB); + + } + + if (metric) + fprintf(fd2,"Distance to %s: %.2f kilometers\n",destination.name,METERS_PER_FOOT*Distance(source,destination)); - fprintf(fd2,"Distance to %s: %.2f miles.\n",destination.name,Distance(source,destination)); - fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",destination.name,Azimuth(source,destination)); + else + fprintf(fd2,"Distance to %s: %.2f miles.\n",destination.name,Distance(source,destination)); + + fprintf(fd2,"Azimuth to %s: %.2f degrees\n",destination.name,azimuth); - angle=ElevationAngle(source,destination); + if (angle1>=0.0) + fprintf(fd2,"Elevation angle to %s: %+.4f degrees\n",destination.name,angle1); - if (angle>=0.0) - fprintf(fd2,"Angle of elevation between %s and %s: %+.4f degrees.\n",source.name,destination.name,angle); + else + fprintf(fd2,"Depression angle to %s: %+.4f degrees\n",destination.name,angle1); - if (angle<0.0) - fprintf(fd2,"Angle of depression between %s and %s: %+.4f degrees.\n",source.name,destination.name,angle); + if (angle1!=angle2) + { + if (angle2<0.0) + fprintf(fd2,"Depression"); + else + fprintf(fd2,"Elevation"); + + fprintf(fd2," angle to the first obstruction: %+.4f degrees\n",angle2); + } fprintf(fd2,"\n-------------------------------------------------------------------------\n\n"); @@ -3225,24 +4205,57 @@ void GraphLongley(struct site source, struct site destination, char *name) } fprintf(fd2, "%s W)\n", dec2dms(destination.lon)); - fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(destination)); - fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",destination.alt, destination.alt+GetElevation(destination)); + + if (metric) + { + fprintf(fd2,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(destination)); + fprintf(fd2,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*destination.alt, METERS_PER_FOOT*(destination.alt+GetElevation(destination))); + } + + else + { + fprintf(fd2,"Ground elevation: %.2f feet AMSL\n",GetElevation(destination)); + fprintf(fd2,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",destination.alt, destination.alt+GetElevation(destination)); + } haavt=haat(destination); if (haavt>-4999.0) - fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt); + { + if (metric) + fprintf(fd2,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt); + else + fprintf(fd2,"Antenna height above average terrain: %.2f feet\n",haavt); + } + + if (metric) + fprintf(fd2,"Distance to %s: %.2f kilometers\n",source.name,KM_PER_MILE*Distance(source,destination)); + + else + fprintf(fd2,"Distance to %s: %.2f miles\n",source.name,Distance(source,destination)); + + azimuth=Azimuth(destination,source); - fprintf(fd2,"Distance to %s: %.2f miles.\n",source.name,Distance(source,destination)); - fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",source.name,Azimuth(destination,source)); + angle1=ElevationAngle(destination,source); + angle2=ElevationAngle2(destination,source,earthradius); - angle=ElevationAngle(destination,source); + fprintf(fd2,"Azimuth to %s: %.2f degrees.\n",source.name,azimuth); - if (angle>=0.0) - fprintf(fd2,"Angle of elevation between %s and %s: %+.4f degrees.\n",destination.name,source.name,angle); + if (angle1>=0.0) + fprintf(fd2,"Elevation angle to %s: %+.4f degrees\n",source.name,angle1); - if (angle<0.0) - fprintf(fd2,"Angle of depression between %s and %s: %+.4f degrees.\n",destination.name,source.name,angle); + else + fprintf(fd2,"Depression angle to %s: %+.4f degrees\n",source.name,angle1); + + if (angle1!=angle2) + { + if (angle2<0.0) + fprintf(fd2,"Depression"); + else + fprintf(fd2,"Elevation"); + + fprintf(fd2," angle to the first obstruction: %+.4f degrees\n",angle2); + } fprintf(fd2,"\n-------------------------------------------------------------------------\n\n"); @@ -3297,54 +4310,145 @@ void GraphLongley(struct site source, struct site destination, char *name) fprintf(fd2,")\nFraction of Situations: %.1lf%c\n",LR.conf*100.0,37); fprintf(fd2,"Fraction of Time: %.1lf%c\n",LR.rel*100.0,37); - fprintf(fd2,"\n-------------------------------------------------------------------------\n\n"); fprintf(fd2,"Analysis Results:\n\n"); - ReadPath(source, destination); /* destination=RX, source=TX */ + ReadPath(source, destination); /* source=TX, destination=RX */ - elev_l[1]=0.04*METERS_PER_MILE; + /* Copy elevations along path into the elev_l[] array. */ - for (x=1; xcos_test_angle) + block=1; + } + + /* At this point, we have the elevation angle + to the first obstruction (if it exists). */ + } + + /* Determine path loss for each point along the + path using Longley-Rice's point_to_point mode + starting at x=2 (number_of_points = 1), the + shortest distance terrain can play a role in + path loss. */ + + elev_l[0]=y-1; /* (number of points - 1) */ + + /* Distance between elevation samples */ + elev_l[1]=METERS_PER_MILE*(path.distance[y]-path.distance[y-1]); point_to_point(elev_l, 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); + 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); + + if (block) + elevation=((acos(cos_test_angle))/deg2rad)-90.0; + else + elevation=((acos(cos_xmtr_angle))/deg2rad)-90.0; + + /* Integrate the antenna's radiation + pattern into the overall path loss. */ + + x=(int)rint(10.0*(10.0-elevation)); + + if (x>=0 && x<=1000) + { + pattern=(double)LR.antenna_pattern[(int)azimuth][x]; + + if (pattern!=0.0) + patterndB=20.0*log10(pattern); + } - /* Note: PASS BY REFERENCE ... loss and errnum are - passed by reference, and are only used in this - file by this function */ + else + patterndB=0.0; + + total_loss=loss-patterndB; + if (metric) + { + fprintf(fd,"%f\t%f\n",KM_PER_MILE*(path.distance[path.length-1]-path.distance[y]),total_loss); + fprintf(fd2,"%7.2f\t\t%7.2f\t\t %d\t%s\n",KM_PER_MILE*path.distance[y],total_loss, errnum, strmode); + } - fprintf(fd,"%f\t%f\n",path.distance[path.length-1]-path.distance[x],loss); - fprintf(fd2,"%7.2f\t\t%7.2f\t\t %d\t%s\n",path.distance[x],loss, errnum, strmode); + else + { + fprintf(fd,"%f\t%f\n",path.distance[path.length-1]-path.distance[y],total_loss); + fprintf(fd2,"%7.2f\t\t%7.2f\t\t %d\t%s\n",path.distance[y],total_loss, errnum, strmode); + } errflag|=errnum; - - if (loss>maxloss) - maxloss=loss; - if (lossmaxloss) + maxloss=total_loss; + + if (total_loss-4999.0) - fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt); + { + if (metric) + fprintf(fd,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt); + else + fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt); + } + + pattern=1.0; + patterndB=0.0; + distance=Distance(xmtr,rcvr); + azimuth=Azimuth(xmtr,rcvr); + angle1=ElevationAngle(xmtr,rcvr); + angle2=ElevationAngle2(xmtr,rcvr,earthradius); + + if (got_azimuth_pattern || got_elevation_pattern) + { + x=(int)rint(10.0*(10.0-angle2)); + + if (x>=0 && x<=1000) + pattern=(double)LR.antenna_pattern[(int)rint(azimuth)][x]; + + if (pattern!=1.0) + { + fprintf(fd,"Antenna pattern toward %s: %.3f",rcvr.name,pattern); + patterndB=20.0*log10(pattern); + fprintf(fd," (%.2f dB)\n",patterndB); + } + } - fprintf(fd,"Distance to %s: %.2f miles.\n",rcvr.name,Distance(xmtr,rcvr)); - fprintf(fd,"Azimuth to %s: %.2f degrees.\n",rcvr.name,Azimuth(xmtr,rcvr)); + if (metric) + fprintf(fd,"Distance to %s: %.2f kilometers\n",rcvr.name,KM_PER_MILE*distance); + + else + fprintf(fd,"Distance to %s: %.2f miles\n",rcvr.name,distance); - angle=ElevationAngle(xmtr,rcvr); + fprintf(fd,"Azimuth to %s: %.2f degrees\n",rcvr.name,azimuth); + + if (angle1>=0.0) + fprintf(fd,"Elevation angle to %s: %+.4f degrees\n",rcvr.name,angle1); + + else + fprintf(fd,"Depression angle to %s: %+.4f degrees\n",rcvr.name,angle1); - if (angle>=0.0) - fprintf(fd,"Angle of elevation between %s and %s: %+.4f degrees.\n",xmtr.name,rcvr.name,angle); + if (angle1!=angle2) + { + if (angle2<0.0) + fprintf(fd,"Depression"); + else + fprintf(fd,"Elevation"); - if (angle<0.0) - fprintf(fd,"Angle of depression between %s and %s: %+.4f degrees.\n",xmtr.name,rcvr.name,angle); + fprintf(fd," angle to the first obstruction: %+.4f degrees\n",angle2); + } fprintf(fd,"\n-------------------------------------------------------------------------\n\n"); @@ -3513,85 +4684,465 @@ void ObstructionReport(struct site xmtr, struct site rcvr, char report) fprintf(fd, " (%s S / ", dec2dms(rcvr.lat)); } - fprintf(fd, "%s W)\n", dec2dms(rcvr.lon)); - fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(rcvr)); - fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",rcvr.alt, rcvr.alt+GetElevation(rcvr)); + fprintf(fd, "%s W)\n", dec2dms(rcvr.lon)); + + if (metric) + { + fprintf(fd,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(rcvr)); + fprintf(fd,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*rcvr.alt, METERS_PER_FOOT*(rcvr.alt+GetElevation(rcvr))); + } + + else + { + fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(rcvr)); + fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",rcvr.alt, rcvr.alt+GetElevation(rcvr)); + } + + haavt=haat(rcvr); + + if (haavt>-4999.0) + { + if (metric) + fprintf(fd,"Antenna height above average terrain: %.2f meters\n",METERS_PER_FOOT*haavt); + else + fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt); + } + + azimuth=Azimuth(rcvr,xmtr); + angle1=ElevationAngle(rcvr,xmtr); + angle2=ElevationAngle2(rcvr,xmtr,earthradius); + + if (metric) + fprintf(fd,"Distance to %s: %.2f kilometers\n",xmtr.name,KM_PER_MILE*distance); + else + fprintf(fd,"Distance to %s: %.2f miles\n",xmtr.name,distance); + + fprintf(fd,"Azimuth to %s: %.2f degrees\n",xmtr.name,azimuth); + + if (angle1>=0.0) + fprintf(fd,"Elevation to %s: %+.4f degrees\n",xmtr.name,angle1); + + else + fprintf(fd,"Depression angle to %s: %+.4f degrees\n",xmtr.name,angle1); + + if (angle1!=angle2) + { + if (angle2<0.0) + fprintf(fd,"Depression"); + else + fprintf(fd,"Elevation"); + + fprintf(fd," angle to the first obstruction: %+.4f degrees\n",angle2); + + } + + fprintf(fd,"\n-------------------------------------------------------------------------\n\n"); + + if (report=='y') + { + /* Generate profile of the terrain. Create the path + from transmitter to receiver because that's the + way the original los() function did it, and going + the other way can yield slightly different results. */ + + ReadPath(xmtr,rcvr); + h_r=GetElevation(rcvr)+rcvr.alt+earthradius; + h_r_f1=h_r; + h_r_fpt6=h_r; + h_r_orig=h_r; + h_t=GetElevation(xmtr)+xmtr.alt+earthradius; + d_tx=5280.0*Distance(rcvr,xmtr); + cos_tx_angle=((h_r*h_r)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r*d_tx); + cos_tx_angle_f1=cos_tx_angle; + cos_tx_angle_fpt6=cos_tx_angle; + + if (f) + lambda=9.8425e8/(f*1e6); + + /* At each point along the path calculate the cosine + of a sort of "inverse elevation angle" at the receiver. + From the antenna, 0 deg. looks at the ground, and 90 deg. + is parallel to the ground. + + Start at the receiver. If this is the lowest antenna, + then terrain obstructions will be nearest to it. (Plus, + that's the way the original los() did it.) + + Calculate cosines only. That's sufficient to compare + angles and it saves the extra computational burden of + acos(). However, note the inverted comparison: if + acos(A) > acos(B), then B > A. */ + + for (x=path.length-1; x>0; x--) + { + site_x.lat=path.lat[x]; + site_x.lon=path.lon[x]; + site_x.alt=0.0; + + h_x=GetElevation(site_x)+earthradius; + d_x=5280.0*Distance(rcvr,site_x); + + /* Deal with the LOS path first. */ + + cos_test_angle=((h_r*h_r)+(d_x*d_x)-(h_x*h_x))/(2.0*h_r*d_x); + + if (cos_tx_angle>cos_test_angle) + { + if (h_r==h_r_orig) + fprintf(fd,"SPLAT! detected obstructions at:\n\n"); + + if (site_x.lat>=0.0) + { + if (metric) + fprintf(fd,"\t%.4f N, %.4f W, %5.2f kilometers, %6.2f meters AMSL\n",site_x.lat, site_x.lon, KM_PER_MILE*(d_x/5280.0), METERS_PER_FOOT*(h_x-earthradius)); + else + fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL\n",site_x.lat, site_x.lon, d_x/5280.0, h_x-earthradius); + } + + else + { + if (metric) + fprintf(fd,"\t%.4f S, %.4f W, %5.2f kilometers, %6.2f meters AMSL\n",-site_x.lat, site_x.lon, KM_PER_MILE*(d_x/5280.0), METERS_PER_FOOT*(h_x-earthradius)); + else + + fprintf(fd,"\t%.4f S, %.4f W, %5.2f miles, %6.2f feet AMSL\n",-site_x.lat, site_x.lon, d_x/5280.0, h_x-earthradius); + } + } + + while (cos_tx_angle>cos_test_angle) + { + h_r+=1; + cos_test_angle=((h_r*h_r)+(d_x*d_x)-(h_x*h_x))/(2.0*h_r*d_x); + cos_tx_angle=((h_r*h_r)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r*d_tx); + } + + if (f) + { + /* Now clear the first Fresnel zone, but don't + clutter the obstruction report. */ + + cos_tx_angle_f1=((h_r_f1*h_r_f1)+(d_tx*d_tx)-(h_t*h_t))/(2.0*h_r_f1*d_tx); + h_los=sqrt(h_r_f1*h_r_f1+d_x*d_x-2*h_r_f1*d_x*cos_tx_angle_f1); + h_f=h_los-sqrt(lambda*d_x*(d_tx-d_x)/d_tx); + + while (h_fh_r_orig) + { + if (metric) + sprintf(string,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear all obstructions detected by SPLAT!\n",rcvr.name, METERS_PER_FOOT*(h_r-GetElevation(rcvr)-earthradius)); + else + sprintf(string,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear all obstructions detected by SPLAT!\n",rcvr.name, h_r-GetElevation(rcvr)-earthradius); + } + + else + sprintf(string,"\nNo obstructions to LOS path due to terrain were detected by SPLAT!\n"); + + if (f) + { + if (h_r_fpt6>h_r_orig) + { + if (metric) + sprintf(string_fpt6,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear 60%c of the first Fresnel zone.\n",rcvr.name, METERS_PER_FOOT*(h_r_fpt6-GetElevation(rcvr)-earthradius),37); + + else + sprintf(string_fpt6,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear 60%c of the first Fresnel zone.\n",rcvr.name, h_r_fpt6-GetElevation(rcvr)-earthradius,37); + } + + else + sprintf(string_fpt6,"\n60%c of the first Fresnel zone is clear.\n",37); + + if (h_r_f1>h_r_orig) + { + if (metric) + sprintf(string_f1,"\nAntenna at %s must be raised to at least %.2f meters AGL\nto clear the first Fresnel zone.\n",rcvr.name, METERS_PER_FOOT*(h_r_f1-GetElevation(rcvr)-earthradius)); + + else + sprintf(string_f1,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear the first Fresnel zone.\n",rcvr.name, h_r_f1-GetElevation(rcvr)-earthradius); + + } + + else + sprintf(string_f1,"\nThe first Fresnel zone is clear.\n\n"); + } + } + + fprintf(fd,"%s",string); + + if (f) + { + fprintf(fd,"%s",string_f1); + fprintf(fd,"%s",string_fpt6); + } + + fclose(fd); + + /* Display report summary on terminal */ + + /* Line-of-sight status */ + + fprintf(stdout,"%s",string); + + if (f) + { + /* Fresnel zone status */ + + fprintf(stdout,"%s",string_f1); + fprintf(stdout,"%s",string_fpt6); + } + + fprintf(stdout, "\nObstruction report written to: \"%s\"\n",report_name); + + fflush(stdout); +} + +void SiteReport(struct site xmtr) +{ + char report_name[80]; + double terrain; + int x, azi; + FILE *fd; + + sprintf(report_name,"%s-site_report.txt",xmtr.name); + + for (x=0; report_name[x]!=0; x++) + if (report_name[x]==32 || report_name[x]==17 || report_name[x]==92 || report_name[x]==42 || report_name[x]==47) + report_name[x]='_'; + + fd=fopen(report_name,"w"); + + fprintf(fd,"\n\t--==[ SPLAT! v%s Site Analysis Report For: %s ]==--\n\n",splat_version,xmtr.name); + + fprintf(fd,"---------------------------------------------------------------------------\n\n"); + + if (xmtr.lat>=0.0) + { + fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon); + fprintf(fd, " (%s N / ",dec2dms(xmtr.lat)); + } + + else + { + fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon); + fprintf(fd, " (%s S / ",dec2dms(xmtr.lat)); + } + + fprintf(fd, "%s W)\n",dec2dms(xmtr.lon)); + + if (metric) + { + fprintf(fd,"Ground elevation: %.2f meters AMSL\n",METERS_PER_FOOT*GetElevation(xmtr)); + fprintf(fd,"Antenna height: %.2f meters AGL / %.2f meters AMSL\n",METERS_PER_FOOT*xmtr.alt, METERS_PER_FOOT*(xmtr.alt+GetElevation(xmtr))); + } + + else + { + fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr)); + fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr)); + } + + terrain=haat(xmtr); + + if (terrain>-4999.0) + { + if (metric) + fprintf(fd,"Antenna height above average terrain: %.2f meters\n\n",METERS_PER_FOOT*terrain); + else + fprintf(fd,"Antenna height above average terrain: %.2f feet\n\n",terrain); + + /* Display the average terrain between 2 and 10 miles + from the transmitter site at azimuths of 0, 45, 90, + 135, 180, 225, 270, and 315 degrees. */ + + for (azi=0; azi<=315; azi+=45) + { + fprintf(fd,"Average terrain at %3d degrees azimuth: ",azi); + terrain=AverageTerrain(xmtr,(double)azi,2.0,10.0); + + if (terrain>-4999.0) + { + if (metric) + fprintf(fd,"%.2f meters AMSL\n",METERS_PER_FOOT*terrain); + else + fprintf(fd,"%.2f feet AMSL\n",terrain); + } + + else + fprintf(fd,"No terrain\n"); + } + } + + fprintf(fd,"\n---------------------------------------------------------------------------\n\n"); + fclose(fd); + fprintf(stdout,"\nSite analysis report written to: \"%s\"\n",report_name); +} + +void LoadTopoData(int max_lon, int min_lon, int max_lat, int min_lat) +{ + /* This function loads the SDF files required + to cover the limits of the region specified. */ + + int x, y, width, ymin, ymax; + + width=ReduceAngle(max_lon-min_lon); + + if ((max_lon-min_lon)<=180.0) + { + for (y=0; y<=width; y++) + for (x=min_lat; x<=max_lat; x++) + { + ymin=(int)(min_lon+(double)y); + + while (ymin<0) + ymin+=360; + + while (ymin>=360) + ymin-=360; + + ymax=ymin+1; + + while (ymax<0) + ymax+=360; + + while (ymax>=360) + ymax-=360; + + sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); + LoadSDF(string); + } + } + + else + { + for (y=0; y<=width; y++) + for (x=min_lat; x<=max_lat; x++) + { + ymin=max_lon+y; + + while (ymin<0) + ymin+=360; + + while (ymin>=360) + ymin-=360; + + ymax=ymin+1; + + while (ymax<0) + ymax+=360; + + while (ymax>=360) + ymax-=360; + + sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); + LoadSDF(string); + } + } +} + +int LoadPLI(char *filename) +{ + int error=0, max_west, min_west, max_north, min_north; + char string[80], *pointer=NULL; + double latitude=0.0, longitude=0.0, azimuth=0.0, elevation=0.0, + loss=0.0; + FILE *fd; + + fd=fopen(filename,"r"); - haavt=haat(rcvr); + if (fd!=NULL) + { + fgets(string,78,fd); + pointer=strchr(string,';'); - if (haavt>-4999.0) - fprintf(fd,"Antenna height above average terrain: %.2f feet\n",haavt); + if (pointer!=NULL) + *pointer=0; + + sscanf(string,"%d, %d",&max_west, &min_west); - fprintf(fd,"Distance to %s: %.2f miles.\n",xmtr.name,Distance(xmtr,rcvr)); - fprintf(fd,"Azimuth to %s: %.2f degrees.\n",xmtr.name,Azimuth(rcvr,xmtr)); + fgets(string,78,fd); + pointer=strchr(string,';'); - angle=ElevationAngle(rcvr,xmtr); + if (pointer!=NULL) + *pointer=0; - if (angle>=0.0) - fprintf(fd,"Angle of elevation between %s and %s: %+.4f degrees.\n",rcvr.name,xmtr.name,angle); + sscanf(string,"%d, %d",&max_north, &min_north); - if (angle<0.0) - fprintf(fd,"Angle of depression between %s and %s: %+.4f degrees.\n",rcvr.name,xmtr.name,angle); + fgets(string,78,fd); + pointer=strchr(string,';'); - fprintf(fd,"\n-------------------------------------------------------------------------\n\n"); + if (pointer!=NULL) + *pointer=0; - if (report=='y') - { - /* Write an Obstruction Report */ + LoadTopoData(max_west-1, min_west, max_north-1, min_north); - new_site=rcvr; - result=los(xmtr,rcvr); - result2=result; - result2.alt-=1; - block=result.name[0]; + fprintf(stdout,"\nReading \"%s\"... ",filename); + fflush(stdout); - if (block=='*') - fprintf(fd,"SPLAT! detected obstructions at:\n\n"); + fscanf(fd,"%lf, %lf, %lf, %lf, %lf",&latitude, &longitude, &azimuth, &elevation, &loss); - while (block=='*') + while (feof(fd)==0) { - if (result.lat!=result2.lat || result.lon!=result2.lon || result.alt!=result2.alt) - { - if (result.lat>=0.0) - fprintf(fd,"\t%.4f N, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",result.lat, result.lon, Distance(rcvr,result), result.alt); - else + if (loss>225.0) + loss=225.0; - fprintf(fd,"\t%.4f S, %.4f W, %5.2f miles, %6.2f feet AMSL.\n",-result.lat, result.lon, Distance(rcvr,result), result.alt); - } + if (loss<75.0) + loss=75.0; - result2=result; - new_site.alt+=1.0; + loss-=75.0; + loss/=10.0; + loss+=1.0; - /* Can you hear me now? :-) */ + if (loss<=(double)maxdB) + OrMask(latitude,longitude,((unsigned char)(loss))<<3); - result=los(xmtr,new_site); - block=result.name[0]; + fscanf(fd,"%lf, %lf, %lf, %lf, %lf",&latitude, &longitude, &azimuth, &elevation, &loss); } - if (new_site.alt!=rcvr.alt) - sprintf(string,"\nAntenna at %s must be raised to at least %.2f feet AGL\nto clear all obstructions detected by SPLAT!\n\n",rcvr.name, new_site.alt); - else - sprintf(string,"\nNo obstructions due to terrain were detected by SPLAT!\n\n"); - } - - fprintf(fd,"%s",string); + fclose(fd); - fclose(fd); + fprintf(stdout," Done!\n"); + fflush(stdout); + } - /* Display LOS status to terminal */ + else + error=1; - fprintf(stdout,"%sObstruction report written to: \"%s\"\n",string,report_name); - fflush(stdout); + return error; } -void SiteReport(struct site xmtr) +void WriteKML(struct site source, struct site destination) { - char report_name[80]; - double terrain; - int x, azi; - FILE *fd; + int x, y; + char block, report_name[80]; + double distance, rx_alt, tx_alt, cos_xmtr_angle, + azimuth, cos_test_angle, test_alt; + FILE *fd=NULL; - sprintf(report_name,"%s-site_report.txt",xmtr.name); + ReadPath(source,destination); + + sprintf(report_name,"%s-to-%s.kml",source.name,destination.name); for (x=0; report_name[x]!=0; x++) if (report_name[x]==32 || report_name[x]==17 || report_name[x]==92 || report_name[x]==42 || report_name[x]==47) @@ -3599,99 +5150,260 @@ void SiteReport(struct site xmtr) fd=fopen(report_name,"w"); - fprintf(fd,"\n\t--==[ SPLAT! v%s Site Analysis Report For: %s ]==--\n\n",splat_version,xmtr.name); + fprintf(fd,"\n"); + fprintf(fd,"\n"); + fprintf(fd,"\n",splat_version); + fprintf(fd,"\n"); + fprintf(fd,"SPLAT! Path\n"); + fprintf(fd,"1\n"); + fprintf(fd,"Path Between %s and %s\n",source.name,destination.name); - fprintf(fd,"---------------------------------------------------------------------------\n\n"); + fprintf(fd,"\n"); + fprintf(fd," %s\n",source.name); + fprintf(fd," \n"); + fprintf(fd," Transmit Site\n"); - if (xmtr.lat>=0.0) - { - fprintf(fd,"Site location: %.4f North / %.4f West",xmtr.lat, xmtr.lon); - fprintf(fd, " (%s N / ",dec2dms(xmtr.lat)); - } + if (source.lat>=0.0) + fprintf(fd,"
%s North
\n",dec2dms(source.lat)); + else + fprintf(fd,"
%s South
\n",dec2dms(source.lat)); + + fprintf(fd,"
%s West
\n",dec2dms(source.lon)); + azimuth=Azimuth(source,destination); + distance=Distance(source,destination); + + if (metric) + fprintf(fd,"
%.2f km",distance*KM_PER_MILE); else - { - fprintf(fd,"Site location: %.4f South / %.4f West",-xmtr.lat, xmtr.lon); - fprintf(fd, " (%s S / ",dec2dms(xmtr.lat)); - } + fprintf(fd,"
%.2f miles",distance); + + fprintf(fd," to %s
\n
toward an azimuth of %.2f%c
\n",destination.name,azimuth,176); + + fprintf(fd,"
\n"); + fprintf(fd," 1\n"); + fprintf(fd," \n"); + fprintf(fd," \n"); + fprintf(fd," 1\n"); + fprintf(fd," relativeToGround\n"); + fprintf(fd," %f,%f,30\n",(source.lon<180.0?-source.lon:360.0-source.lon),source.lat); + fprintf(fd," \n"); + fprintf(fd,"
\n"); + + fprintf(fd,"\n"); + fprintf(fd," %s\n",destination.name); + fprintf(fd," \n"); + fprintf(fd," Receive Site\n"); - fprintf(fd, "%s W)\n",dec2dms(xmtr.lon)); - fprintf(fd,"Ground elevation: %.2f feet AMSL\n",GetElevation(xmtr)); - fprintf(fd,"Antenna height: %.2f feet AGL / %.2f feet AMSL\n",xmtr.alt, xmtr.alt+GetElevation(xmtr)); + if (destination.lat>=0.0) + fprintf(fd,"
%s North
\n",dec2dms(destination.lat)); + else + fprintf(fd,"
%s South
\n",dec2dms(destination.lat)); - terrain=haat(xmtr); + fprintf(fd,"
%s West
\n",dec2dms(destination.lon)); - if (terrain>-4999.0) + + if (metric) + fprintf(fd,"
%.2f km",distance*KM_PER_MILE); + else + fprintf(fd,"
%.2f miles",distance); + + fprintf(fd," to %s
\n
toward an azimuth of %.2f%c
\n",source.name,Azimuth(destination,source),176); + + fprintf(fd,"
\n"); + fprintf(fd," 1\n"); + fprintf(fd," \n"); + fprintf(fd," \n"); + fprintf(fd," 1\n"); + fprintf(fd," relativeToGround\n"); + fprintf(fd," %f,%f,30\n",(destination.lon<180.0?-destination.lon:360.0-destination.lon),destination.lat); + fprintf(fd," \n"); + fprintf(fd,"
\n"); + + fprintf(fd,"\n"); + fprintf(fd,"Point-to-Point Path\n"); + fprintf(fd," 1\n"); + fprintf(fd," 0\n"); + fprintf(fd," \n"); + fprintf(fd," \n"); + fprintf(fd," 1\n"); + fprintf(fd," 1\n"); + fprintf(fd," relativeToGround\n"); + fprintf(fd," \n"); + + for (x=0; x\n"); + fprintf(fd," \n"); + fprintf(fd,"\n"); + + fprintf(fd,"\n"); + fprintf(fd,"Line-of-Sight Path\n"); + fprintf(fd," 1\n"); + fprintf(fd," 0\n"); + fprintf(fd," \n"); + fprintf(fd," \n"); + fprintf(fd," 1\n"); + fprintf(fd," 1\n"); + fprintf(fd," relativeToGround\n"); + fprintf(fd," \n"); + + /* Walk across the "path", indentifying obstructions along the way */ + + for (y=0; y=0 && block==0; x--) { - fprintf(fd,"Average terrain at %3d degrees azimuth: ",azi); - terrain=AverageTerrain(xmtr,(double)azi,2.0,10.0); + distance=5280.0*(path.distance[y]-path.distance[x]); + test_alt=earthradius+path.elevation[x]; - if (terrain>-4999.0) - fprintf(fd,"%.2f feet AMSL\n",terrain); - else - fprintf(fd,"No terrain\n"); + cos_test_angle=((rx_alt*rx_alt)+(distance*distance)-(test_alt*test_alt))/(2.0*rx_alt*distance); + + /* Compare these two angles to determine if + an obstruction exists. Since we're comparing + the cosines of these angles rather than + the angles themselves, the following "if" + statement is reversed from what it would + be if the actual angles were compared. */ + + if (cos_xmtr_angle>cos_test_angle) + block=1; } + + if (block) + fprintf(fd," %f,%f,-30\n",(path.lon[y]<180.0?-path.lon[y]:360.0-path.lon[y]),path.lat[y]); + else + fprintf(fd," %f,%f,5\n",(path.lon[y]<180.0?-path.lon[y]:360.0-path.lon[y]),path.lat[y]); } - fprintf(fd,"\n---------------------------------------------------------------------------\n\n"); + fprintf(fd," \n"); + fprintf(fd," \n"); + fprintf(fd,"\n"); + + fprintf(fd," \n"); + fprintf(fd," %f\n",(source.lon<180.0?-source.lon:360.0-source.lon)); + fprintf(fd," %f\n",source.lat); + fprintf(fd," 300.0\n"); + fprintf(fd," 45.0\n"); + fprintf(fd," %f\n",azimuth); + fprintf(fd," \n"); + + fprintf(fd,"
\n"); + fprintf(fd,"
\n"); + fclose(fd); - fprintf(stdout,"\nSite analysis report written to: \"%s\"\n",report_name); + + fprintf(stdout, "KML file written to: \"%s\"\n",report_name); + + fflush(stdout); } int main(char argc, char *argv[]) { - int x, y, ymin, ymax, width, z=0, min_lat, min_lon, - max_lat, max_lon, rxlat, rxlon, txlat, txlon, - west_min, west_max, north_min, north_max; + int x, y, z=0, min_lat, min_lon, max_lat, max_lon, + rxlat, rxlon, txlat, txlon, west_min, west_max, + north_min, north_max; unsigned char coverage=0, LRmap=0, ext[20], terrain_plot=0, elevation_plot=0, height_plot=0, longley_plot=0, cities=0, bfs=0, txsites=0, - count, report='y'; + count, report='y', norm=0, topomap=0, geo=0, + kml=0; char mapfile[255], header[80], city_file[5][255], elevation_file[255], height_file[255], longley_file[255], terrain_file[255], string[255], rxfile[255], *env=NULL, txfile[255], map=0, boundary_file[5][255], - rxsite=0; + udt_file[255], rxsite=0, plo_filename[255], + pli_filename[255], nf=0; double altitude=0.0, altitudeLR=0.0, tx_range=0.0, rx_range=0.0, deg_range=0.0, deg_limit, - deg_range_lon, er_mult; + deg_range_lon, er_mult, freq=0.0; struct site tx_site[4], rx_site; FILE *fd; - sprintf(header,"\n\t\t--==[ Welcome To SPLAT! v%s ]==--\n\n", splat_version); if (argc==1) { - fprintf(stdout, "%sAvailable Options...\n\n\t -t txsite(s).qth (max of 4)\n\t -r rxsite.qth\n",header); - fprintf(stdout,"\t -c plot coverage area(s) of TX(s) based on an RX antenna at X feet AGL\n"); - fprintf(stdout,"\t -L plot path loss map of TX based on an RX antenna at X feet AGL\n"); - fprintf(stdout,"\t -s filename(s) of city/site file(s) to import (max of 5)\n"); - fprintf(stdout,"\t -b filename(s) of cartographic boundary file(s) to import (max of 5)\n"); - fprintf(stdout,"\t -p filename of terrain profile graph to plot\n"); - fprintf(stdout,"\t -e filename of terrain elevation graph to plot\n"); - fprintf(stdout,"\t -h filename of terrain height graph to plot\n"); - fprintf(stdout,"\t -l filename of Longley-Rice graph to plot\n"); - fprintf(stdout,"\t -o filename of topographic map to generate (.ppm)\n"); - fprintf(stdout,"\t -d sdf file directory path (overrides path in ~/.splat_path file)\n"); - fprintf(stdout,"\t -n no analysis, brief report\n\t -N no analysis, no report\n"); - fprintf(stdout,"\t -m earth radius multiplier\n"); - fprintf(stdout,"\t -R modify default range for -c or -L (miles)\n"); - fprintf(stdout,"\t-db maximum loss contour to display on path loss maps (80-230 dB)\n\n"); - + fprintf(stdout,"\n\t\t --==[ SPLAT! v%s Available Options... ]==--\n\n",splat_version); + fprintf(stdout," -t txsite(s).qth (max of 4)\n"); + fprintf(stdout," -r rxsite.qth\n"); + fprintf(stdout," -c plot coverage of TX(s) with an RX antenna at X feet/meters AGL\n"); + fprintf(stdout," -L plot path loss map of TX based on an RX at X feet/meters AGL\n"); + fprintf(stdout," -s filename(s) of city/site file(s) to import (5 max)\n"); + fprintf(stdout," -b filename(s) of cartographic boundary file(s) to import (max of 5)\n"); + fprintf(stdout," -p filename of terrain profile graph to plot\n"); + fprintf(stdout," -e filename of terrain elevation graph to plot\n"); + fprintf(stdout," -h filename of terrain height graph to plot\n"); + fprintf(stdout," -H filename of normalized terrain height graph to plot\n"); + fprintf(stdout," -l filename of Longley-Rice graph to plot\n"); + fprintf(stdout," -o filename of topographic map to generate (.ppm)\n"); + fprintf(stdout," -u filename of user-defined terrain file to import\n"); + fprintf(stdout," -d sdf file directory path (overrides path in ~/.splat_path file)\n"); + fprintf(stdout," -n no analysis, brief report\n"); + fprintf(stdout," -N no analysis, no report\n"); + fprintf(stdout," -m earth radius multiplier\n"); + fprintf(stdout," -f frequency for Fresnel zone calculation (MHz)\n"); + fprintf(stdout," -R modify default range for -c or -L (miles/kilometers)\n"); + fprintf(stdout," -db maximum loss contour to display on path loss maps (80-230 dB)\n"); + fprintf(stdout," -nf do not plot Fresnel zones in height plots\n"); + fprintf(stdout," -plo filename of path-loss output file\n"); + fprintf(stdout," -pli filename of path-loss input file\n"); + fprintf(stdout," -udt filename of user defined terrain input file\n"); + fprintf(stdout," -geo generate an Xastir .geo georeference file (with .ppm output)\n"); + fprintf(stdout," -kml generate a Google Earth .kml file (for point-to-point links)\n"); + fprintf(stdout," -metric employ metric rather than imperial units for all user I/O\n\n"); + + fprintf(stdout,"If that flew by too fast, consider piping the output through 'less':\n"); + fprintf(stdout,"\n\tsplat | less\n\n"); fprintf(stdout,"Type 'man splat', or see the documentation for more details.\n\n"); fflush(stdout); return 1; @@ -3699,6 +5411,7 @@ int main(char argc, char *argv[]) y=argc-1; + metric=0; rxfile[0]=0; txfile[0]=0; string[0]=0; @@ -3706,11 +5419,17 @@ int main(char argc, char *argv[]) elevation_file[0]=0; terrain_file[0]=0; sdf_path[0]=0; + udt_file[0]=0; path.length=0; + LR.frq_mhz=0.0; rx_site.lat=91.0; rx_site.lon=361.0; + plo_filename[0]=0; + pli_filename[0]=0; earthradius=EARTHRADIUS; + sprintf(header,"\n\t\t--==[ Welcome To SPLAT! v%s ]==--\n\n", splat_version); + for (x=0; x<4; x++) { tx_site[x].lat=91.0; @@ -3727,7 +5446,6 @@ int main(char argc, char *argv[]) dem[x].max_west=-1; } - /* Scan for command line arguments */ for (x=1; x<=y; x++) @@ -3775,6 +5493,14 @@ int main(char argc, char *argv[]) map=1; } + if (strcmp(argv[x],"-u")==0) + { + z=x+1; + + if (z<=y && argv[z][0] && argv[z][0]!='-') + strncpy(udt_file,argv[z],253); + } + if (strcmp(argv[x],"-c")==0) { z=x+1; @@ -3786,7 +5512,7 @@ int main(char argc, char *argv[]) } } - if (strcmp(argv[x],"-db")==0) + if (strcmp(argv[x],"-db")==0 || strcmp(argv[x],"-dB")==0) { z=x+1; @@ -3826,7 +5552,7 @@ int main(char argc, char *argv[]) } } - if (strcmp(argv[x],"-h")==0) + if (strcmp(argv[x],"-h")==0 || strcmp(argv[x],"-H")==0) { z=x+1; @@ -3835,26 +5561,37 @@ int main(char argc, char *argv[]) strncpy(height_file,argv[z],253); height_plot=1; } + + if (strcmp(argv[x],"-H")==0) + norm=1; + else + norm=0; } if (strcmp(argv[x],"-n")==0) { - if (z<=y && argv[z][0] && argv[z][0]!='-') - { - report='n'; - map=1; - } + report='n'; + map=1; } if (strcmp(argv[x],"-N")==0) { - if (z<=y && argv[z][0] && argv[z][0]!='-'); - { - report='N'; - map=1; - } + report='N'; + map=1; } + if (strcmp(argv[x],"-metric")==0) + metric=1; + + if (strcmp(argv[x],"-geo")==0) + geo=1; + + if (strcmp(argv[x],"-kml")==0) + kml=1; + + if (strcmp(argv[x],"-nf")==0) + nf=1; + if (strcmp(argv[x],"-d")==0) { z=x+1; @@ -3876,6 +5613,7 @@ int main(char argc, char *argv[]) txsites++; z++; } + z--; } @@ -3936,6 +5674,7 @@ int main(char argc, char *argv[]) cities++; z++; } + z--; } @@ -3951,8 +5690,41 @@ int main(char argc, char *argv[]) bfs++; z++; } + z--; } + + if (strcmp(argv[x],"-f")==0) + { + z=x+1; + + if (z<=y && argv[z][0] && argv[z][0]!='-') + { + sscanf(argv[z],"%lf",&freq); + + if (freq<20) + freq=20; + + if (freq>20e3) + freq=20e3; + } + } + + if (strcmp(argv[x],"-plo")==0) + { + z=x+1; + + if (z<=y && argv[z][0] && argv[z][0]!='-') + strncpy(plo_filename,argv[z],253); + } + + if (strcmp(argv[x],"-pli")==0) + { + z=x+1; + + if (z<=y && argv[z][0] && argv[z][0]!='-') + strncpy(pli_filename,argv[z],253); + } } /* Perform some error checking on the arguments @@ -3981,13 +5753,34 @@ int main(char argc, char *argv[]) exit (-1); } - if ((coverage+LRmap)==0 && rx_site.lat==91.0 && rx_site.lon==361.0) + if ((coverage+LRmap+pli_filename[0])==0 && rx_site.lat==91.0 && rx_site.lon==361.0) { - fprintf(stderr,"\n%c*** ERROR: No receiver site found or specified!\n\n",7); - exit (-1); + if (max_range!=0.0 && txsites!=0) + { + /* Plot topographic map of radius "max_range" */ + + map=0; + topomap=1; + report='N'; + } + + else + { + fprintf(stderr,"\n%c*** ERROR: No receiver site found or specified!\n\n",7); + exit (-1); + } } - /* No errors were detected. Whew! :-) */ + /* No major errors were detected. Whew! :-) */ + + /* Adjust input parameters if -metric option is used */ + + if (metric) + { + altitudeLR/=METERS_PER_FOOT; /* meters --> feet */ + max_range/=KM_PER_MILE; /* kilometers --> miles */ + altitude/=METERS_PER_FOOT; /* meters --> feet */ + } /* If no SDF path was specified on the command line (-d), check for a path specified in the $HOME/.splat_path file. If the @@ -4032,6 +5825,33 @@ int main(char argc, char *argv[]) fprintf(stdout,"%s",header); fflush(stdout); + if (pli_filename[0]) + { + y=LoadPLI(pli_filename); + + for (x=0; x=360) - ymin-=360; - - ymax=ymin+1; - - while (ymax<0) - ymax+=360; - - while (ymax>=360) - ymax-=360; - - sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); - LoadSDF(string); - } - } - - else - { - for (y=0; y<=width; y++) - for (x=min_lat; x<=max_lat; x++) - { - ymin=max_lon+y; - - while (ymin<0) - ymin+=360; - - while (ymin>=360) - ymin-=360; - - ymax=ymin+1; - - while (ymax<0) - ymax+=360; - - while (ymax>=360) - ymax-=360; - - sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); - LoadSDF(string); - } - } + LoadTopoData(max_lon, min_lon, max_lat, min_lat); - if (coverage | LRmap) + if (coverage | LRmap | topomap) { if (LRmap) txsites=1; @@ -4237,68 +6004,22 @@ int main(char argc, char *argv[]) max_lon=west_max; } + /* Load any additional SDF files, if required */ - /* Load the required SDF files */ - - width=ReduceAngle(max_lon-min_lon); - - if ((max_lon-min_lon)<=180.0) - { - for (y=0; y<=width; y++) - for (x=min_lat; x<=max_lat; x++) - { - ymin=(int)(min_lon+(double)y); - - while (ymin<0) - ymin+=360; - - while (ymin>=360) - ymin-=360; - - ymax=ymin+1; - - while (ymax<0) - ymax+=360; - - while (ymax>=360) - ymax-=360; - - sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); - LoadSDF(string); - } - } - - else - { - for (y=0; y<=width; y++) - for (x=min_lat; x<=max_lat; x++) - { - ymin=(int)(max_lon+(double)y); - - while (ymin<0) - ymin+=360; - - while (ymin>=360) - ymin-=360; - - ymax=ymin+1; - - while (ymax<0) - ymax+=360; - - while (ymax>=360) - ymax-=360; - - sprintf(string,"%d:%d:%d:%d",x, x+1, ymin, ymax); - LoadSDF(string); - } - } + LoadTopoData(max_lon, min_lon, max_lat, min_lat); } + if (udt_file[0]) + LoadUDT(udt_file); - if (mapfile[0]) + if (mapfile[0] && topomap==0) map=1; + if (freq==0.0 && nf==0) + freq=LR.frq_mhz; + else + freq=0.0; + if (coverage | LRmap) { for (x=0; x1) -- 2.30.2