PortMoresbyCurriculum: just-calc.htm

File just-calc.htm, 48.5 KB (added by joelja, 9 years ago)

wireless calculators (from ZYTRAX)

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html><head>
3
4
5<meta http-equiv="Content-Language" content="en-us">
6<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
7<meta name="GENERATOR" content="ZyTrax">
8<meta name="keywords" content="wireless calculators, Fresnel Zones, dBm conversion, Free Space Loss, Radio System Budget, cck,16QAM,64QAM,DQPSK">
9
10<title>ZYTRAX - Wireless Calculators</title>
11
12<!-- this page originated from http://www.zytrax.com/tech/wireless/calc.htm -->
13<!-- HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090810 Ubuntu/9.10 (karmic) Firefox/3.5.2 -->
14<style type="text/css">
15<!--
16/* ZYTRAX STYLE SHEET */
17/* google maps */
18v\:* {behavior:url(#default#VML);}
19a {text-decoration:none;}
20body {background-color:white;color:black;margin:0px;padding:0px;font:normal 10pt Verdana,Arial, Helvetica, sans-serif;}
21div.l-f table{width:100%;padding:4px;}
22h1 {font-size:14pt;background:#EEE;border-width:0 0 5px 0;border-style:solid;border-color:#9bf;padding:4px;color:#336}
23h2 {border-width:0 0 5px 0;border-color:#9bf;border-style:solid;font-size:12pt;font-weight:bold;padding:4px;color:#336}
24h3 {border-width:0 0 3px 0;border-color:#9BF;border-style:solid;font-size:12pt;padding:4px;color:#336;}
25h4 {border-width:0 0 2px 0;border-color:#9BF;border-style:solid;font-size:10pt;padding:2px;color:#336;}
26h5 {border-width:0 0 2px 0;border-color:silver;border-style:solid;font-size:10pt;font-weight:bold;padding:4px;}
27h6 {border-width:0 0 1px 0;border-color:silver;border-style:solid; font-size:10pt;color:silver;padding:4px;}
28form {border:1px solid #ccc;}
29input {border:1px solid #999;background:#acf;}
30textarea {border:1px solid #999;background:#acf;}
31/* Printer friendly */
32
33div.l-r #layout {visibility:visible;}
34div.l-l-fp #layout {visibility:visible;}
35.l-l {position:absolute;top:60px;left:6px;width:110px;font:10pt Verdana,Helvetica, Arial, sans-serif;z-index:1;}
36.l-c {margin:45px 170px 0px 125px;padding:4px 20px;font:1.0em Verdana,Helvetica, Arial, sans-serif;border-width:0 1px; border-style:solid; border-color:#336; z-index:5; line-height:1.3em;}
37.l-r {font:10pt Verdana,Arial, Helvetica, sans-serif;position:absolute;top:60px;right:6px;width:160px;background:#eee;z-index:2;}
38#popups {visibility:visible;}
39
40/* end printer friendly - begin divs - generic */
41.button {background:#ddd;border:3px outset #black;}
42.l-f {margin:0 200px 0 125px;}
43.l-c-fp {margin:0 160px 0 125px;padding:4px;font:10pt Verdana,Helvetica, Arial, sans-serif;border-width:0 1px;border-style:solid;border-color:#336;z-index:5;}
44.l-p {margin:10px;padding:4px;font:10pt Verdana,Helvetica, Arial, sans-serif;}
45.l-100 {width:100%;margin:0;}
46/* end divs - nav pop-outs */
47.n-l1 {padding:0;margin:0;list-style:none;width:100px;}
48.n-l1-e {text-align:right;margin:0;padding:2px;position:relative;}
49.n-t1-e,.n-t2-e,.n-t3-e {text-align:left;margin:0;padding:2px 5px;border:1px solid blue;border-width:1px 1px 0 1px;position:relative;}
50.n-t1-es,.n-t2-es,.n-t3-es {text-align:left;margin:0;padding:2px 5px;border:1px solid blue;border-width:1px 1px 0 1px;position:relative;background:#ccf;}
51.n-t1-v {position:absolute;display:none;padding:0;margin:0;list-style:none;top:100%;right:0;width:100px;border-bottom:1px solid blue;background:#EEE;}
52.n-t1-vr {position:absolute;display:none;padding:0;margin:0;list-style:none; top:100%;right:0;width:100px;border-bottom:1px solid blue;background:#EEE;}
53.n-t2,.n-t3 {position:absolute;display:none;padding:0;margin:0;list-style:none;top:0;right:100%;width:120px;border-bottom:1px solid blue;background:#EEE;}
54/* end pop-up styles - nav effects */
55a:hover {text-decoration:underline;}
56a:hover.p-f-s {color:black}
57.g-c-n:hover {background:#eee;}
58.g-c-s:hover {background:#eee;}
59.g-t-n:hover {background:#acf;}
60div.n-l a:hover {color:#336;}
61div.g-sb a:hover {background-color:#DDD;}
62/* W3c pop-ups - ignored by MSIE 6- */
63div.n-t0:hover > ul {display:block;}
64li.n-t1-e:hover > ul {display:block;}
65li.n-t1-es:hover > ul {display:block;}
66li.n-t1-e:hover, li.n-t1-es:hover,li.n-t2-e:hover,li.n-t2-es:hover,li.n-t3-e:hover {background:#ccc;}
67li.n-t2-e:hover > ul {display:block;}
68li.n-t2-es:hover > ul {display:block;}
69.n-l1-e:hover > ul {display:block;}
70.n-l1-es:hover > ul {display:block;}
71.n-l2-e:hover > ul {display:block;}
72.n-l2-es:hover > ul {display:block;}
73.n-l3-e:hover > ul {display:block;}
74.n-l3-es:hover > ul {display:block;}
75li.n-l1-e:hover,li.n-l2-e:hover,li.n-l2-es:hover, li.n-l3-e:hover, li.n-l3-es:hover,li.n-l4-e:hover  {background:#ccc;}
76/* end pop-out effects - generic alpha */
77.adv {}
78.at {font-family:Verdana,sans-serif;font-size:9pt;margin:0px;text-indent:8px;}
79.b-1 {font-family:Verdana, sans-serif;}
80.b-r {border-width:0 0 0 1px;border-color:#336;border-style:solid;width:150px;}
81.b-l    {border-width:0 1px 0 0;border-color:#336;border-style:solid;width:110px;}
82.b-b {list-style:none;margin:2px;font: 9pt Verdana,Arial,, sans-serif;padding:0 1.0em;}
83.b-b-s {border:1px solid black;}
84li.b-b-l {visibility:hidden;margin:10px 0;}
85.b-b-a {background:#336;color:white; text-decoration:none;border:1px solid black;padding:0 0.25em 0 0;}
86a.b-b-a span {color:#336;background:white;padding:0 0.25em 0 0.33em;text-decoration:none;}
87.d {font-family:Verdana,sans-serif;font-size:9pt;margin:0px;}
88.dd {position:absolute;left:0;top:0; font-family:Tahoma,sans-serif;font-size:9pt; visibility:hidden;background:cyan;color:black;margin:0px;border:black solid 1px;padding:2px;}
89.f-d {font-weight:bold;}
90.f-bd {font-weight:bold;font-size: 12pt;}
91.g-c-n {font:10pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px;background-color:#acf;padding:5px; color:black;}
92.g-c-nm {font: 10pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px;background-color:#ddd;padding:5px;color:black;margin:0 0 0 40px;}
93.g-c-s,.codegray {font: 8pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px; background-color:#acf;padding:5px; color:black;width;inherit;}
94.g-e-t {font-weight:normal;}
95.g-e-d {font-weight:normal;}
96.g-f-n {font:10pt "Courier New", monospace;}
97.g-h-n {background:#336;color:white;padding:4px; font-size:10pt;font-weight:normal;}
98.g-h-ng,.section {background:#9bf;color:#336;font:bold 10pt Verdana,sans-serif;padding:4px; text-decoration:none;}
99.g-h-s {background:#336;color:white;padding:4px; font-size:8pt;font-weight:bold;}
100.g-n {text-decoration:none;color:white;}
101.g-i1-n {margin:5px 5px 5px 20px;}
102.g-i2-n {margin:5px 5px 5px 30px;}
103.g-i3-n {margin:5px 5px 5px 40px;}
104.g-l-n {list-style:none;}
105.g-s-b {border-width:1px 5px;   border-color:black;border-style:solid;background:#EEE;color:black; font-family:Verdana,sans-serif;font-size:14pt;font-weight:bold; text-decoration:none;}
106.g-sb-h1 {background:#336;color:white;padding:4px; font-size:14pt;font-weight:bold;}
107.g-sb-h2 {background:#336;color:white;font-size:10pt;font-weight:bold;padding:2px;}
108.g-sb-n {color:blue;font-size:8pt;line-height:150%;margin:2px;}
109.g-s-n {background-color:#EEEEEE;color:black;font-size:10pt; text-decoration:none;}
110.g-s-nr {font-family:Verdana,sans-serif;background-color:red;color:white;font-size:10pt;font-weight:bold; text-decoration:none;}
111.g-s-gn {font-family:Verdana,sans-serif;background-color:silver;color:black;font-size:10pt;font-weight:bold; text-decoration:none;}
112.g-t-n {font-size:9pt;border-style:solid;border-color:#bbb;border-width: 1px 1px 1px 5px;margin:7px;padding:3px;background-color:#eee; color:black;}
113.gs-h {font-family:Verdana,sans-serif;color:black;font-size:28pt;font-weight:bold;text-decoration:none;}
114.gs-m {font-family:Verdana,sans-serif;color:black;font-size:22pt;font-weight:bold;text-decoration:none; margin-left:100px;}
115.gs-f {font-family:Verdana,sans-serif;color:black;font-size:12pt; font-weight:normal;text-decoration:none;}
116.h-b {background:#ddd;color:black;font-weight:bold;}
117.i-2 {background: url(../../images/info.gif) no-repeat top left;}
118.i-3 {background: url(../../../images/info.gif) no-repeat top left;}
119.i-n {border-width: 3px 0 3px 0; border-style:solid;border-color:#bbb;font-size:10pt;margin:10px 10px 10px 60px;padding:10px;}
120.i-h {margin:5px 5px 10px 60px;padding:5px;}
121.i-m-s {padding:2px;margin:0;}
122.i-s {border-width: 3px 0 3px 0; border-style:solid;border-color:#bbb;font-size:8pt;margin:10px 10px 10px 60px;padding:10px;}
123.n-b-l {font:1pt Verdana, Arial, Helvetica, sans-serif;border-width:0 0 1px 0;border-style:solid;border-color:#CCF;margin:0px;padding:0px;}
124.n-l-s {font:8pt Verdana, Arial, Helvetica, sans-serif;visibility:hidden;}
125.n-t0 {float:right;position:relative;color:white;}
126.n-t-t {text-align:right;padding:1px 1px 8px 1px;margin:0;color:white;}
127.p-b {background:#eee;text-indent:3em;}
128.p-m-ni {font-family:Verdana,sans-serif;font-size:10pt;font-style:italic;}
129.navback {background:white;color:black;font-family:Verdana,sans-serif; text-decoration:none;font-weight:bold;font-size:10pt;}
130.nav-top {background:blue;color:white;font-family:Verdana,sans-serif; text-decoration:none;font-weight:bold;font-size:10pt;}
131.p-m-n,.norm {font-size: 10pt;font-family: Verdana, Helvetica, Arial, sans-serif;}
132.p-m-s { font:8pt Verdana,Helvetica, Arial, sans-serif;}
133.p-m-si {font:italic 8pt Verdana, Helvetica, Arial, sans-serif;}
134.p-m-sp { background:white;font:8pt Verdana,Helvetica, Arial, sans-serif;}
135.q-i-2 {background: url(../../images/quotes-open.gif) no-repeat top left;}
136.q-s {border-width: 0 0 0 6px;border-style:solid;border-color:#acf;font-size:8pt;margin:10px 10px 10px 60px;padding:10px;}
137.smallbold { font-family: Verdana, sans-serif; font-size: 8pt; font-weight:bold;}
138/* link styles */
139.t-dd:hover {background:#ddd;}
140.t-ba {color:#aaa;font-weight:bold;}
141.t-gb {color:blue;background:#eee;}
142.t-dr {color:red;text-decoration:none;}
143.t-dw {color:#666;text-decoration:none;}
144.t-td1-l,.t-td1 {border-style:solid;border-width:5px 0 0 0;border-color:#ddd;padding:3px 3px 8px 5px;}
145.t-td2-l,.t-td2 {border-style:solid;border-width:5px 0 0 0;border-color:#acf;padding:3px 3px 8px 5px;}
146.t-m {background:#ccc;color:blue;text-decoration:none;}
147.vital {font-family:Tahoma,Arial, sans-serif;font-size:12pt;background-color:#ddd; color:black;border-color:red;}
148.w-2 {background: url(../../images/warning.gif) no-repeat top left;}
149.w-3 {background: url(../../../images/warning.gif) no-repeat top left;border-width: 3px 0 3px 0; border-style:solid;border-color:#bbb;}
150
151/* Gecko/W3C specific */
152abbr[title]:after {content:"";}
153abbr[title]:hover:after {content:" (" attr(title)")";}
154/* W3C pop-ups */
155.n-l2,.n-l3,.n-l4 {position:absolute;display:none;padding:0;margin:0;list-style:none;top:0;left:100%;width:120px;border-bottom:1px solid blue;background:#EEE;font:8pt Verdana,Helvetica, Arial, sans-serif}
156.n-l2-e,.n-l3-e,.n-l4-e {text-align:left;margin:0;padding:2px 5px;border:1px solid blue;border-width:1px 1px 0 1px;position:relative;}
157.n-l2-es,.n-l3-es,.n-l4-es {text-align:left;margin:0;padding:2px 5px;border:1px solid blue;border-width:1px 1px 0 1px;position:relative;background:#ccf;}
158/* end - start expand divs */
159.v-f {display:none;}
160.v-o {display:block;}
161/* end expand divs */
162.n-l-f a {color:#336;}
163#toplogo {float:left;vertical-align:bottom;}
164.g-b-n {font:10pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px;padding:5px;background:#eee;}
165.g-b-s {font:8pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px;padding:5px;background:#eee;}
166.g-ci-s {font:8pt "Courier New",monospace;border-style:solid;border-color:#ccc;border-width: 1px 1px 1px 5px; background-color:#acf;color:black;}
167.g-sb {font-family:Verdana, sans-serif;width:150px;}
168.jp-h-n {position:absolute;left:50%;top:50%;text-indent:4px;font-family:Verdana,sans-serif;font-size:10pt; visibility:hidden;background:#EEEEEE;color:blue;text-decoration:none;}
169.l-b {position:absolute;top:0px;left:0px;font:8pt Verdana, Arial, Helvetica, sans-serif;border:0;background:#336;color:white;height:44px;z-index:9;width:100%;}
170.l-b-s {position:absolute;top:0;left:0;font:8pt Verdana, Arial, Helvetica, sans-serif;border:0;background:red;color:white;height:44px;z-index:9;width:100%;}
171.l-b-fp {font:8pt Verdana, Arial, Helvetica, sans-serif;background:white;color:#336;height:88px;padding:5px 5px 0 5%;margin:0 0 5px 0;z-index:2;}
172.l-c-i {padding:10px;}
173.l-l-fp {position:absolute;top:95px;left:6px;width:120px;z-index:10;text-align:right;}
174.l-r-fp {position:absolute;top:95px;right:6px;width:150px;z-index:2;}
175.n-l {font-family:Verdana,sans-serif;position:fixed;top:60px;left:6px;width:110px;background:#eee;}
176.n-l-u {font-family:Verdana,sans-serif;top:60px;left:6px;width:110px;background:#eee;}
177.n-l-l {font-size: 9pt;color:black;text-align:right;line-height:150%;}                         
178.n-l-f {font-size: 9pt;text-align:right;line-height:1.2em;}
179.n-p-f {color:#336;font:9pt/16pt Verdana,sans-serif;text-decoration:none;text-indent:6px;}
180.n-p-n {background:#EEE;color:#336;font:9pt Verdana,sans-serif;text-indent:6px;}
181.n-p-n a {text-indent:6px;display:block;}
182.n-p-o {font:10pt Verdana,sans-serif; background:#DDD;color:blue;text-decoration:none;height:16pt;}
183.n-t-n {color:#336;font:10pt Verdana,sans-serif;text-decoration:none;margin:0;padding:0;}
184.n-t-s {color:white;font: 8pt Verdana,sans-serif;text-decoration:none;padding:0 3px 0 0}
185.p-b-h {visibility:hidden;}
186.p-n-h {position:absolute;left:0;top:0;text-indent:4px;font-family:Verdana,sans-serif;font-size:small; visibility:hidden;background:#EEE;color:blue;text-decoration:none;border:1px blue solid;width:110px;}
187.p-f-s {font-family: Verdana, sans-serif; font-size:8pt; color:silver; background:white;text-decoration:none;}
188.t-db,.t-dd,.t-dn,.w-db {color:blue;text-decoration:none;}
189
190//-->
191</style>
192<style type="text/css" media="print">
193<!--
194/* ZYTRAX STYLE SHEET PRINT TEMPLATE */
195.l-l {display:none;}
196.l-r {display:none;}
197.l-c {width:600px;margin:0;padding:30px 10px 5px 10px; border-width:0;}
198.l-f {margin:5px;}
199.n-t-t {display:none;}
200.n-t0 {display:none;}
201.adv {display:none;}
202-->
203</style>
204
205<script language="JavaScript" type="text/javascript">
206<!--
207// Copyright ZYTRAX, Inc. 2001 - 2007
208// You are welcome to copy or use this script for non-commercial purposes
209// We prefer you leave in this Copyright statement but don't insist on it       
210// if you make improvements send us a copy or make the code available on your
211// own web site.
212// NO WARRANTY OR FITNESS FOR PURPOSE UNDERTAKEN - USE AT YOUR OWN RISK
213// global variables
214        var     mw;     // milliwatts
215        var     w;      // watts
216        var     dbm;    // dBm
217        var     dbw;    // dBW
218        var     num;    // intermediate results
219        var f;                  // frequency
220        var d;                  // distance
221        var ktm = .621;         // km to miles
222        var mtk = 1.609;        // miles to klics
223        var ftm = 3.28;         // meters to feet
224        var mtf = .3048         // feet to meters
225        var db;                         // work variable
226function round(number,places) {
227        // rounding numbers default = 3
228        places = (!places ? 3 : places);
229        return Math.round(number*Math.pow(10,places))/Math.pow(10,places);
230}
231
232function log10(x) {
233        // Log 10 calculation
234        return(Math.log(x) / Math.log(10));
235}
236
237function from_dbm(u_dbm) {
238        // convert dbm to watts and milliwatts
239        dbm = parseFloat(u_dbm);
240       
241        // validate dbm range
242        if ((isNaN(dbm)) || (dbm < -110) || (dbm > 100))
243        {
244        window.alert("dBm range from -110 to 100");
245    return("Error");
246  }
247       
248        mw = Math.pow(10,dbm / 10);
249       
250        return(round(mw,3));
251}
252
253function to_dbm(u_mw) {
254        w = parseFloat(u_mw);
255       
256        // validate milliwatts range
257        if ((isNaN(w)) || (w < 0) || (w > 20000))
258        {
259        window.alert("millWatts range = 0 to 20,000");
260
261        return("Error");
262    }
263        w = log10(w) / log10(10);
264        dbm = round((10 * w),3);
265        return(dbm);
266}
267
268function free_space(u_freq, u_km, u_miles) {
269       
270        f = parseFloat(u_freq);
271        if ((d = check_m(u_km,u_miles,"Distance")) == "Error")
272        {
273                return("Error");
274        }
275        // validate frequency
276        if ((isNaN(f)) || (f < 100) || (f > 60000))
277        {
278        window.alert("Frequency (in MHz) range  = 100 to 60,000");
279    return("Error");
280    }
281       
282        f = log10(f) / log10(10);
283        d = log10(d) / log10(10);
284       
285        return(round((20 * f) + (20 * d) + 36.56,3));
286       
287}
288function check_dbm(u_dbm, u_mw)
289{
290        // normalise power to dbm
291        if(u_dbm == "")
292        {
293                dbm = to_dbm(u_mw);
294        }
295        else
296        {
297                dbm = parseFloat(u_dbm);
298        }
299        //validate dbm range
300        if ((isNaN(dbm)) || (dbm < -110) || (dbm > 100))
301        {
302        window.alert("dBm range from -110 to 100");
303    return("Error");
304  }
305        return(dbm);
306}
307
308function check_km(k,m,e) // returns KM
309{
310        if(k == ""){
311                if(m == ""){ // must have a mile measure
312                       
313                        alert(e+" not supplied");// error
314                        return -1;
315                }
316                else{
317                       
318                        if(isNaN(m) || m < 0.1 || m > 100){
319                        alert(e+" (Miles) not numeric or not in range .1 to 100");
320                        return -1;
321                }
322                        tm = parseFloat(m);
323                        return (tm * mtk);
324                }
325        }
326        else{
327                if(isNaN(k) || k < 0.1 || k > 160){
328                        alert(e+" (Km) not numeric or not in range .1 to 160");
329                        return -1;
330                }
331                return parseFloat(k);
332        }
333}
334function check_m(u_km, u_miles, err) // returns MILES
335{
336        if(u_km == "")
337        {
338                // must be miles
339                d = parseFloat(u_miles);
340                if(isNaN(d) || d < 0.1 || d > 100)
341                {
342                        window.alert(err+" range is .1 to 100 MILES");
343        return("Error");
344                }
345        }
346        else
347        {
348                d = parseFloat(u_km);
349                if(isNaN(d) || d < 0.1 || d > 160)
350                {
351                        window.alert("Distance range is .1 to 160 KM");
352        return("Error");
353                }
354                d = d * ktm;
355        }
356        return(d);
357}
358
359// W3C DOM'ish
360function check_int(num, lo, hi, def, err)
361{
362        if(num == "" && def != "")
363        {
364                return def;     // just return default
365        }
366       
367        tn = parseInt(num);
368        if(isNaN(tn) || tn < lo || tn > hi)
369        {
370                alert(err+" must be in range "+lo+" to "+hi);
371    return("Error");
372        }
373        return tn;
374}
375function fres_zone()
376{
377// note: uses explicit names in form which must be unique on page
378        if((tl = check_km(document.getElementById("fltk").value,document.getElementById("fltm").value,"Total Link distance")) == -1)
379        {
380                return;
381        }
382        // tl valid numeric in Km check for obstacle - if not present = link/2
383        tok = document.getElementById("flok").value;
384        tom = document.getElementById("flom").value;
385        if (tok == "" && tom == ""){
386                // default in km link/2
387                if (document.getElementById("fltk").value != ""){
388                        document.getElementById("flok").value = round(tl/2,3);
389                }else{
390                        document.getElementById("flom").value = round((tl/2)*ktm,3);
391                }
392        }
393        if((d1 = check_km(document.getElementById("flok").value, document.getElementById("flom").value, "Obstacle Distance")) == -1)
394        {
395                return;
396        }
397        d2 = tl - d1;
398        // check frequency present and numeric
399        flf = document.getElementById("flf").value;
400        if(flf == "")
401        {
402                alert("Frequency not specified");
403                return;
404        }
405        if(isNaN(flf ))
406        {
407                alert("Frequency not numeric");
408                return;
409        }
410        freq = parseFloat(flf);
411       
412        freq = freq /1000;      // in GHz
413        // fresnel and obstacle free zone
414        flrm = Math.round(17.3 * Math.sqrt((d1 * d2)/(freq * tl)));
415        document.getElementById("flzm").value = flrm;
416        document.getElementById("flzf").value = Math.round(flrm * ftm);
417        document.getElementById("fld1k").value = round(d1,3);
418        document.getElementById("fld1m").value = round(d1 * ktm,3);
419        //  0.6 fresnel
420        flr6m = round(flrm *0.6,3);
421        document.getElementById("flofm").value = flr6m;
422        document.getElementById("floff").value = Math.round((flr6m * ftm),3);
423        // earth's height at mid point
424        ehm = (Math.pow(tl,2)/(8*((4*6378)/3))) * 1000;
425        document.getElementById("flehm").value = round(ehm,3);
426        document.getElementById("flehf").value = round(ehm * ftm,3);
427}
428
429function power_budget()
430{
431        if((dbm = check_dbm(document.getElementById("bdbm").value, document.getElementById("bmw").value)) == "Error")
432        {
433                return ("Error");
434        }
435        // antenna
436        if((db = check_int(document.getElementById("bag").value,1,100, "", "Antenna Gain")) == "Error"){
437                return "Error";
438        }
439        // result for gains
440        radan_tot = dbm + db;
441        document.getElementById("brr").value = round(dbm + db,3);
442               
443        if(document.getElementById("blf").value != "" || document.getElementById("blm").value != "")
444        {
445                // handle cable loss
446                // we have a cable parameter normalise to meters
447                if(document.getElementById("bcf").value != "")
448                {
449                        // user supplied feet
450                        cable_loss = parseFloat(document.getElementById("bcf").value);
451                        if(isNaN(cable_loss))
452                        {
453                                window.alert("Cable loss not numeric");
454                return("Error");
455                        }
456                        cable_loss = cable_loss * ftm;
457                }
458                else
459                {
460                        cable_loss = parseFloat(document.getElementById("bcm").value);
461                        if(isNaN(cable_loss))
462                        {
463                                window.alert("Cable loss not numeric");
464                return("Error");
465                        }
466                }
467                if(document.getElementById("blf").value != "")
468                {
469                        // user supplied feet
470                        cable_length = parseFloat(document.getElementById("blf").value);
471                        if(isNaN(cable_length))
472                        {
473                                window.alert("Cable length not numeric");
474                return("Error");
475                        }
476                        cable_length = cable_length * mtf;
477                }
478                else
479                {
480                        cable_length = parseFloat(document.getElementById("blm").value);
481                        if(isNaN(cable_length))
482                        {
483                                window.alert("Cable length not numeric");
484                return("Error");
485                        }
486                }
487                // normalise cable loss
488                cable_tot = round((cable_loss /100) * cable_length,3);
489                document.getElementById("bcr").value = cable_tot;
490        }
491        else
492        {
493                cable_tot = 0;
494                document.getElementById("bcr").value = "0";
495        }
496       
497        // handle connectors
498        if(document.getElementById("bconno").value != "")
499        {
500                // handle connector loss
501                f = parseFloat(document.getElementById("bconf").value);
502                if ((isNaN(f)) || (f < 100) || (f > 25000))
503                {
504                        window.alert("Frequency range 100 to 25,000 MHz");
505        return("Error");
506                }
507                f = f /1000; //frequency in GHz
508                num_con = parseInt(document.getElementById("bconno").value);
509                if (isNaN(num_con))
510                {
511                        window.alert("Number of connectors not numeric");
512        return("Error");
513                }
514                // max. loss = 0.10 * sqrt(freq)
515                con_tot = round(num_con * (0.1 * Math.sqrt(f)),3);
516                document.getElementById("bconr").value = con_tot;
517        }
518        else
519        {
520                con_tot = 0;
521                document.getElementById("bconr").value = "0";
522        }
523        document.getElementById("btr").value = round(radan_tot - con_tot - cable_tot,3);
524}
525
526function op_margin()
527{
528        //calculate various operating margins or antenna gains or distance
529        want_dis = 0;
530        want_tan = 0;
531        want_ran = 0;
532        if((sad = check_int(document.getElementById("spomsad").value, 1, 100, 30, "SAD factor")) == "Error"){
533                return "Error";
534        }
535        sad = sad/100;
536        if(document.getElementById("spk").value == "" && document.getElementById("spm").value == ""){
537                want_dis = 1; // no distance - solve for distance only
538        }
539        else
540        {
541                if((d = check_m(document.getElementById("spk").value, document.getElementById("spm").value, "Distance")) == "Error")
542                {
543                        return("Error");
544                }
545        }
546        // must always have valid frequency
547        f = parseFloat(document.getElementById("spf").value);
548        if(isNaN(f) || f < 100 || f > 60000)
549        {
550                window.alert("Frequency range is 100 to 60,000 MHz");
551    return("Error");
552        }
553        f = log10(f) / log10(10);
554        if(!want_dis)
555        {
556                d = log10(d) / log10(10);
557                fs_loss = round((20 * f) + (20 * d) + 36.56,3);
558        }
559        // calculate tx power
560        // confirm TX antenna gain
561        if (document.getElementById("sptxa").value == "" && want_dis)
562        {
563                window.alert("Cannot solve for distance and TX antenna gain");
564    return("Error");
565        }
566        else
567        {
568                if (document.getElementById("sptxa").value == "")
569                {
570                        want_tan = 1;           // solve for tx gain
571                        tx_an = 0;                      // temp
572                }
573                else
574                {
575                        tx_an = parseFloat(document.getElementById("sptxa").value);
576                }
577        }
578        if(isNaN(tx_an) || tx_an < 0 || tx_an > 100)
579        {
580                alert("Antenna gain range 0 to 100");
581    return("Error");
582        }
583        // check radio power
584        if((tx_dbm = check_dbm(document.getElementById("sptxdbm").value, document.getElementById("sptxmw").value)) == "Error")
585        {
586                return("Error");
587        }
588        // if cable loss invalid substitute 0
589        tx_cable = parseFloat(document.getElementById("sptxc").value);
590        if (isNaN(tx_cable))
591        {
592                tx_cable = 0;
593                document.getElementById("sptxc").value = 0;
594        }
595        tx_budget = tx_an + tx_dbm - tx_cable;
596        // calculate rx power
597        // confirm RX antenna gain
598        if (document.getElementById("sprxa").value == "" && want_dis)
599        {
600                window.alert("Cannot solve for distance and RX antenna gain");
601    return("Error");
602        }
603        else
604        {
605                if (document.getElementById("sprxa").value == "")
606                {
607                        want_ran = 1;           // solve for rx gain
608                        rx_an = 0;
609                }
610                else
611                {
612                        rx_an = parseFloat(document.getElementById("sprxa").value);
613                }
614        }
615        if(isNaN(rx_an) || rx_an < 0 || rx_an > 100)
616        {
617                window.alert("Antenna gain range 0 to 100");
618    return("Error");
619        }
620        // check radio power
621        if((rx_dbm = check_dbm(document.getElementById("sprxdbm").value, "")) == "Error")
622        {
623                return("Error");
624        }
625        // if cable loss invalid substitute 0
626        rx_cable = parseFloat(document.getElementById("sprxc").value);
627        if (isNaN(rx_cable))
628        {
629                rx_cable = 0;
630                document.getElementById("sprxc").value = 0;
631        }
632        rx_budget = rx_an - rx_dbm - rx_cable;
633       
634        // got everything we might need - figure out what to do
635        if(!want_dis && !want_tan && !want_ran)
636        {
637                // straight calculation of margins
638                document.getElementById("sprxr").value = round(rx_budget,3);
639                document.getElementById("sptxr").value = round(tx_budget,3);
640                document.getElementById("spfr").value = fs_loss;
641                margin = tx_budget - fs_loss + rx_budget;
642                document.getElementById("spomr").value = round(margin,3);
643                document.getElementById("spomrx").value = round(margin + rx_dbm,3);
644                document.getElementById("spomsad").value = round(((margin/tx_budget) * 100),3);
645        }
646        else
647        {
648                if (want_dis)
649                {
650                        // solve for distance
651                        document.getElementById("sprxr").value = round(rx_budget,3);
652                        document.getElementById("sptxr").value = round(tx_budget,3);
653                        // reduce tx_budget by SAD
654                        tx_budget = tx_budget - (tx_budget * sad);
655                        fs_loss = tx_budget + rx_budget;
656                        // now solve fs equation for distance
657                        // 20*log10d(in miles) = 36.56 + (RX sensitivity + TX budget) + 20*log10(freq)
658                        alert("Solve for distance not currently operational - sorry");
659        return("Error");
660                }
661                else
662                {
663                        document.getElementById("spfr").value = fs_loss;
664                        temp_budget = tx_budget - (tx_budget * sad);
665                        gain = Math.ceil(fs_loss - (temp_budget + rx_budget));
666                        if(gain < 0){
667                                gain = 0;
668                        }
669                        // round gain up
670                        if(want_tan && want_ran){
671                                // solve for two antenna (symetric)
672                                gain = Math.ceil(gain /2);
673                                document.getElementById("sptxa").value = gain;
674                                document.getElementById("sprxa").value = gain;
675                                tx_budget = tx_dbm - tx_cable + gain;
676                                rx_budget = gain - rx_dbm - rx_cable;
677                        }else{
678                                // solve for one antenna
679                                if(want_tan){
680                                        document.getElementById("sptxa").value = gain;
681                                        tx_budget = tx_dbm - tx_cable + gain;
682                                }else{
683                                        document.getElementById("sprxa").value = gain;
684                                        rx_budget = gain - rx_dbm - rx_cable;
685                                }
686                        }
687                        document.getElementById("sprxr").value = round(rx_budget,3);
688                        document.getElementById("sptxr").value = round(tx_budget,3);
689                        document.getElementById("spfr").value = fs_loss;
690                        margin = tx_budget - fs_loss + rx_budget;
691                        document.getElementById("spomr").value = round(margin,3);
692                        document.getElementById("spomrx").value = round(margin + rx_dbm,3);
693                        if(document.getElementById("spomsad").value == ""){
694                                document.getElementById("spomsad").value = Math.ceil(sad * 100);
695                        }
696                }
697        }
698}
699
700//-->
701</script>
702
703
704<script language="JavaScript" type="text/javascript">
705<!--
706// copyright ZYTRAX, Inc. 1994 - 2003
707// you may use this javascript code at your own risk.
708// we would like you to keep the copyright statement intact but don't insist on it.
709// If you make improvements mail us a copy or make it available on your own web site.
710// global variables
711                var topall = new Array(2);
712                var lownav = new Array(2);
713                var lowpop = new Array(2);
714                var rightnav = new Array(2);
715                var rightpop = new Array(2);
716                var x = 0;      // global menu level
717                var way = 'h';
718                var menu = null;
719                var menus = null;
720                var pop1 = new Array(2);
721
722// -- W3C DOM specific code first choice always
723function lock(num){
724  // lock relies on a style which end with -l
725        rollover = document.getElementById("l" + num);
726        if(rollover){
727        cn = rollover.className
728        if((pos = cn.lastIndexOf("-")) != -1){
729                bcn = cn.substring(0,pos + 1);
730                scn = cn.substring(pos +1);
731                if(scn == "f" || scn == "o"){
732                        rollover.className = bcn + "l";
733                }
734        }
735        }
736}
737
738function expand(cid,img){
739 // expand hidden div cid = div class name, img = id
740 var io = document.getElementById(img);
741}
742function gotourl($url)
743{
744        window.location = $url;
745}
746function mailus(mbox,stub,subject)
747{
748        mail = "mailto:"+mbox+"@"+stub;
749        if(subject != ""){
750                mail = mail+"?SUBJECT="+"A-M: "+subject;
751        }
752        window.location = mail;
753        return;
754}
755
756// W3C compliant uses CSS popups not JS
757
758
759
760//-->
761</script>
762
763
764
765</head><body>
766
767<h1>Wireless Calculators</h1>
768<p>These calculators are written in Javascript (saves our bandwidth).
769Find the calculation you want, and enter the various parameters
770required then click the 'Calculate' button. If you don't like 'em or
771think you can improve 'em, the <a href="view-source:http://www.zytrax.com/scripts/wireless_calc.shtml" target="_blank" class="t-db">code for the calculators is here</a>. For the equations used in each calculator follow the <b>Calculations and equations used</b> link.</p>
772<p><b>Groveling apology 1:</b> The <a href="#fresnel" class="t-db">Fresnel calculator</a>
773said it would default to the mid-point if no obstacle distance was
774specified and it didn't. More importantly the 60% rule-of-thumb
775distance was incorrect on the pessimistic side. Thanks to Phil Wells
776for pointing out the errors.</p>
777<p><b>Groveling apology 2:</b> The <a href="#fresnel" class="t-db">Fresnel calculator</a> provides the earth's height at the mid-point. However the <a href="http://www.atis.org/0010/index.asp" class="t-db">ATIS Committe T1A1</a> recommends use of the <a href="http://www.atis.org/tg2k/_effective_earth_radius.html" class="t-db"> effective earth radius (4/3 * earth radius)</a>. Previous calculations used the earth's radius and were higher by ~30%. Thanks to Ranjan Sonalkar for pointing out the error.</p>
778<p><b>Partial Groveling apology 3:</b> The <a href="#fresnel" class="t-db">Fresnel calculator</a>
779incorrectly computed the 60% obstacle free zone for MSIE browsers.
780Those of you using Gecko/Moz based browsers (for example Firefox) had
781the right answer all the time. And the moral of this tale - get a
782decent browser. Thanks to Attila Altay Yavuz for pointing out the
783error. Also the Fresnel calculator equations quoted 72.1 as the
784conversion factor for miles - this should have been 72.6. Since the
785calculator normalizes to km/meters this had no effect on results.
786Thanks to Chris Herrington for pointing out this error. The calculators
787verify the various values entered for being within a valid range and
788output an error message if this is not the case. A number of error
789messages were inconsistent with the ranges being tested. While
790confusing, these inconsistent messages had no effect on the acuracy of
791results. Our thanks to Jay Joffe for taking the time to point out this
792problem.</p>
793<h3 align="center">A Wireless System (more or less!)</h3> 
794<p align="center"><img src="calc_files/radio_system.gif" alt="Radio system" border="0"></p>
795<p align="center"><b>Key:</b> Green is good, Red is bad.</p>
796<!-- Start of calculator tables -->
797<ol>
798<li><a href="#budget" class="t-db">Power Budget</a> - total power of your system in dBm.</li>
799<li><a href="#free_space" class="t-db">Free Space Loss</a> - power loss over distance.</li>
800<li><a href="#system" class="t-db">System Performance</a> - How far will it go, will it get there or what is my Operating Margin?</li>
801<li><a href="#fresnel" class="t-db">Fresnel Zones</a> - How much more than LOS or how high should my antenna be?</li>
802<li><a href="#dbm" class="t-db">Power Conversion</a> - dBm to milliWatts and milliWatts to dBm</li>
803</ol>
804<p><b>Serious Health Warning:</b> It is nothing short of a minor
805miracle of physics that ANY wireless signal gets to its destination.
806These calculators use standard algorithms which give reasonable results
807BUT it should be borne in mind you can have two locations 1 meter apart
808in which one gets great reception ALL the time and the other NEVER gets
809reception. Use <a href="http://www.zytrax.com/tech/wireless/intro.htm#propagation" class="t-db">this link</a>
810for our quick overview of the background to radio propagation and the
811side-bar links for some 'real brain-hurting stuff'. With suitable
812apologies to the the memory of the late, lamented <a href="http://www.phnet.fi/public/mamaa1/adams.htm" class="t-db">Douglas Noel Adams</a> the answer to the question of 'how far will this wireless transmission go?' is 42.</p>
813<!-- start of calculators -->
814
815<!-- W3C DOM'ish formats -->
816
817<table summary="" class="p-m-n" width="450" align="center" border="1" cellpadding="4" cellspacing="0">
818<tbody><tr>
819<td class="section"><a name="budget"></a>Power Budget</td>
820</tr>
821<tr>
822<td><p>Use this calculator to walk through all the factors that make up
823your Power Budget. The 'Power Budget' is the the total power being
824output from the wireless system and is the sum of:</p>
825<ul>
826<li> PLUS Radio Transmit Power (A above)</li>
827<li> MINUS cables and connectors losses (B above)</li>
828<li> PLUS antenna gain (C above).</li>
829</ul>
830<p>Enter one parameter in each column (or leave blank) depending on
831what you know and the calculator will supply the appropriate
832conversions automatically. Up to 2 decimal places may be entered as
8330.xx or .xx.</p>
834<p><b>Note:</b> Connector loss is generally small UNLESS you've got
835lots of 'em in which case you are probably in trouble anyway, or your
836cable is VERY short. Just leave the line blank if you are feeling lazy.</p>
837<a href="#budget_calc" class="t-db">Calculations and equations used.</a>
838<form name="calcbudget">
839<table summary="" class="p-m-n" width="450" align="center" border="0" cellpadding="4" cellspacing="0">
840<tbody><tr valign="top">
841<td class="g-h-n" width="180">Radio and Antenna</td>
842<td width="150">&nbsp;</td>
843<td width="120" align="center">&nbsp;</td>
844</tr>
845<tr valign="top">
846<td>Transmit Power</td>
847<td>Antenna Gain</td>
848<td align="center"><b>Power</b></td>
849</tr>
850<tr valign="top">
851<td><input id="bmw" size="6" type="text"><b>&nbsp;mW<br>OR</b><br>
852<input id="bdbm" size="6" type="text"><b>&nbsp;dBm</b></td>
853<td><input id="bag" size="6" type="text"><b>&nbsp;dB(i)</b></td>
854<td align="right"><input id="brr" size="10" type="text"><b>&nbsp;dB</b></td>
855</tr>
856<tr valign="top">
857<td class="g-h-n">Cable Loss</td>
858<td>&nbsp;</td>
859<td>&nbsp;</td>
860</tr>
861<tr valign="top">
862<td>Cable Properties<br>
863(per 100 ft or m)</td>
864<td>Cable Length</td>
865<td>&nbsp;</td>
866</tr>
867<tr valign="top">
868<td><input id="bcf" size="6" type="text"><b>&nbsp;dB</b> (100 ft)<br>
869<b>OR</b><br>
870<input id="bcm" size="6" type="text"><b>&nbsp;dB</b> (100 m)</td>
871<td><input id="blf" size="6" type="text"><b>&nbsp;feet<br>
872OR</b><br>
873<input id="blm" size="6" type="text"><b>&nbsp;meters</b></td>
874<td align="right"><input id="bcr" size="10" type="text"><b>&nbsp;dB</b></td>
875</tr>
876<tr valign="top">
877<td class="g-h-n">Connector Loss</td>
878<td>&nbsp;</td>
879<td>&nbsp;</td>
880</tr>
881<tr valign="top">
882<td>Frequency in MHz</td>
883<td>No. of Connectors</td>
884<td>&nbsp;</td>
885</tr>
886<tr valign="top">
887<td><input id="bconf" value="2400" size="6" type="text"><b>&nbsp;MHz.</b></td>
888<td><input id="bconno" size="6" type="text"><b>&nbsp;No.</b></td>
889<td align="right"><input id="bconr" size="10" type="text"><b>&nbsp;dB</b></td>
890</tr>
891<tr valign="top">
892<td class="g-h-n">Budget</td>
893<td>&nbsp;</td>
894<td>&nbsp;</td>
895</tr>
896<tr valign="top">
897<td>&nbsp;</td>
898<td><input class="button" value="Calculate" onclick="power_budget()" type="button"></td>
899<td align="right"><input id="btr" size="10" type="text"><b>&nbsp;dB</b></td>
900</tr>
901</tbody></table>
902</form>
903</td>
904</tr>
905</tbody></table>
906<p>&nbsp;</p>
907<table summary="" class="p-m-n" width="450" align="center" border="1" cellpadding="4" cellspacing="0">
908<tbody><tr>
909<td class="section"><a name="free_space"></a>Free Space Loss</td>
910</tr>
911<tr>
912<td><p>Loss of power over distance (assuming no <a href="#fresnel" class="t-db">FRESNEL Effect</a>
913and nothing in the way). This a very idealised calculation and in
914practice everything interferes with the signal but it will give you a
915reasonable approximation of the actual loss over distance.</p>
916<p>Enter the system Frequency in MHz and the distance in either <b>Kilometers (Km) or Miles</b> below and then click the 'Calculate' button. 1 GHz = 1000 MHz e.g. 2400 = 2.4 GHz.</p>
917<a href="#free_calc" class="t-db">Calculations and equations used.</a>
918<form name="calcfreeloss">
919<table summary="" class="p-m-s" width="100%" border="0" cellpadding="4" cellspacing="0">
920<tbody><tr valign="top">
921<td class="g-h-n" width="100">Frequency</td>
922<td class="g-h-n" width="120">Distance</td>
923<td>&nbsp;</td>
924<td align="center"><b>Result</b></td>
925</tr>
926<tr valign="top">
927<td><input id="fsf" size="6" value="2400" type="text"><b>&nbsp;MHz</b></td>
928<td><input id="fsk" size="6" type="text"><b>&nbsp;Km<br>OR<b><br>
929<input id="fsm" size="6" type="text"><b>&nbsp;Miles</b></b></b></td>
930<td><input class="button" id="dbmcalc" value="Calculate" onclick='document.getElementById("fsr").value = free_space(document.getElementById("fsf").value, document.getElementById("fsk").value, document.getElementById("fsm").value);' type="button"></td>
931<td align="right"><input id="fsr" size="6" type="text"><b>&nbsp;dB</b></td>
932</tr>
933</tbody></table>
934</form>
935</td>
936</tr>
937</tbody></table>
938<p>&nbsp;</p>
939<table summary="" class="p-m-n" width="450" align="center" border="1" cellpadding="4" cellspacing="0">
940<tbody><tr>
941<td class="section"><a name="fresnel"></a>Fresnel Zones</td>
942</tr>
943<tr>
944<td><p>Defines how much clearance you need (yes you need more than
945simple Line-of-Sight) and for longer links &gt; 3 Km (2 miles) whether
946you may have a ground clearance problem from our friendly planet. <a href="http://www.zytrax.com/tech/wireless/fresnel.htm" class="t-db">M. Fresnel and his theories</a>.</p>
947<p>Enter the <b>Total link</b> distance (in Miles or Kilometers), if you do not enter an <b>Obstacle distance</b> (in Miles or Kilometers) the calculator will use the mid-point for all calculations (<b>Note:</b>
948assumes antennas at same height). Finally enter the system Frequency in
949MHz and then click the 'Calculate' button. 1 GHz = 1000 MHz e.g. 2400 =
9502.4 GHz.</p>
951<p>The calculator will generate the radius of the 1st Fresnel zone only
952(at the obstable point or the mid-point), the 60% (no obstacle) radius
953and the height of the effective earth curvature at the mid-point of the
954<b>Total link</b> distance using the effective earth radius.</p>
955<a href="#fresnel_calc" class="t-db">Calculations and equations used.</a>
956<form name="calcfresnel">
957<table summary="" class="norm" width="100%" border="0" cellpadding="4" cellspacing="0">
958<tbody><tr class="g-h-n" valign="top">
959<td width="100">Total Link</td>
960<td width="100">Obstacle Distance</td>
961<td colspan="2" align="center">1st Fresnel Zone Radius</td>
962</tr>
963<tr valign="top">
964<td><input id="fltk" size="6" type="text"><b>&nbsp;Km<br>OR</b><br>
965<input id="fltm" size="6" type="text"><b>&nbsp;Miles</b></td>
966<td><input id="flok" size="6" type="text"><b>&nbsp;Km<br>OR<b><br>
967<input id="flom" size="6" type="text"><b>&nbsp;Miles</b></b></b></td>
968<td>
969<input id="flzm" size="6" type="text"><b>&nbsp;m<br>at<br></b>
970<input id="fld1k" size="6" type="text"><b>&nbsp;Km</b></td>
971<td><input id="flzf" size="6" type="text"><b>&nbsp;ft<br>at<br></b>
972<input id="fld1m" size="6" type="text"><b>&nbsp;Miles</b></td>
973</tr>
974<tr valign="top">
975<td class="g-h-n">Frequency</td>
976<td>&nbsp;</td>
977<td class="g-h-n" colspan="2" align="center">60% No Obstacle Radius</td>
978</tr>
979<tr valign="top">
980<td><input id="flf" size="6" value="2400" type="text"><b>&nbsp;MHz</b></td>
981<td>&nbsp;</td>
982<td align="right"><input id="flofm" size="6" type="text"><b>&nbsp;m</b></td>
983<td align="right"><input id="floff" size="6" type="text"><b>&nbsp;ft</b>
984</td></tr>
985<tr valign="top">
986<td><input class="button" name="flcalc" value="Calculate" onclick="fres_zone();" type="button"></td>
987<td>&nbsp;</td>
988<td class="g-h-n" colspan="2" align="center">Earth Height (mid-point)</td>
989</tr>
990<tr valign="top">
991<td>&nbsp;</td>
992<td>&nbsp;</td>
993<td align="right"><input id="flehm" size="6" type="text"><b>&nbsp;m</b></td>
994<td align="right"><input id="flehf" size="6" type="text"><b>&nbsp;ft</b>
995</td></tr>
996</tbody></table>
997</form>
998</td>
999</tr>
1000</tbody></table>
1001<p>&nbsp;</p>
1002<table summary="" class="norm" width="500" align="center" border="1" cellpadding="4" cellspacing="0">
1003<tbody><tr>
1004<td class="section"><a name="system"></a>System Performance</td>
1005</tr>
1006<tr>
1007<td><p>This calculator will give you one of three answers:</p>
1008<ol>
1009<li>If you leave distance blank it will apply the defined SAD factor
1010(or default to 30%) to the Operating Margin and supply the max.
1011distance (in Km and Miles) at which the Margin operates.</li>
1012<li>If you enter the distance it will calculate the Operating Margin and the SAD factor.</li>
1013<li>If you enter distance but leave RX or TX antenna gain (or both)
1014blank it will apply the chosen SAD factor (or default it to 30% if none
1015supplied) and generate the required antenna power. If both are left
1016blank it will calculate a symmetrical antenna gain.</li>
1017</ol>
1018<p>To RESET any parameter just set it to BLANK before clicking 'Calculate'</p>
1019<p><b>Notes:</b> RX Sensitivity is ALWAYS expressed as a negative dBm
1020(- dBm) and is the lowest power of signal your radio can handle. Its
1021buried somewhere in your radio spec and will be typically in the range
1022of -70 to -110 dBm. Don't guess or 'fudge' this number.</p>
1023<p><b>Note:</b> If you solve for TX antenna (you leave it blank) and
1024define a specific SAD factor it is applied to the TX budget and any TX
1025antenna value will include this factor. If you then click Calculate
1026again without changing anything, the SAD factor will be calculated to <b>include</b> the supplied TX antenna value and thus may show a lower value than the original one.</p>
1027<a href="#system_calc" class="t-db">Calculations and equations used.</a>
1028<form name="calcfreeloss">
1029<table summary="" class="p-m-n" width="100%" border="0" cellpadding="4" cellspacing="0">
1030<tbody><tr valign="top">
1031<td class="g-h-n" width="120">Frequency</td>
1032<td class="g-h-n" width="120">Distance</td>
1033<td class="g-h-n" width="120">&nbsp;</td>
1034<td class="g-h-n" align="center">FS Loss</td>
1035</tr>
1036<tr valign="top">
1037<td><input id="spf" value="2400" size="10" type="text"><b>&nbsp;MHz</b></td>
1038<td><input id="spk" size="6" type="text"><b>&nbsp;Km<br>OR</b><br>
1039<input id="spm" size="6" type="text"><b>&nbsp;Miles</b></td>
1040<td align="right">&nbsp;</td>
1041<td align="right"><input id="spfr" size="6" type="text"><b>&nbsp;dB</b></td>
1042</tr>
1043<tr valign="top">
1044<td class="g-h-n">TX Power</td>
1045<td class="g-h-n">TX Cable</td>
1046<td class="g-h-n">TX Antenna</td>
1047<td class="g-h-n" align="center">Total TX</td>
1048</tr>
1049<tr valign="top">
1050<td><input id="sptxdbm" size="6" type="text"><b>&nbsp;dBm<br>OR<br></b>
1051<input id="sptxmw" size="6" type="text"><b>&nbsp;mW</b></td>
1052<td><input id="sptxc" size="6" type="text"><b>&nbsp;dBm</b></td>
1053<td><input id="sptxa" size="6" type="text"><b>&nbsp;dB</b></td>
1054<td align="right"><input id="sptxr" size="6" type="text"><b>&nbsp;dB</b></td>
1055</tr>
1056<tr valign="top">
1057<td class="g-h-n">RX Sensitivity</td>
1058<td class="g-h-n">RX Cable</td>
1059<td class="g-h-n">RX Antenna</td>
1060<td class="g-h-n" align="center">Total RX</td>
1061</tr>
1062<tr valign="top">
1063<td><input id="sprxdbm" value="-89" size="6" type="text"><b>&nbsp;dBm</b></td>
1064<td><input id="sprxc" size="6" type="text"><b>&nbsp;dB</b></td>
1065<td><input id="sprxa" size="6" type="text"><b>&nbsp;dB</b></td>
1066<td align="right"><input id="sprxr" size="6" type="text"><b>&nbsp;dB</b></td>
1067</tr>
1068<tr class="g-h-n" valign="top">
1069<td>Margin</td>
1070<td>RX Power</td>
1071<td>SAD Factor</td>
1072<td align="center">Theoretical</td>
1073</tr>
1074<tr valign="top">
1075<td><input class="button" value="Calculate" onclick="op_margin()" type="button"></td>
1076<td><input id="spomrx" size="6" type="text"><b>&nbsp;dBm</b></td>
1077<td><input id="spomsad" size="6" type="text"><b>&nbsp;%</b></td>
1078<td align="right"><input id="spomr" size="6" type="text"><b>&nbsp;dB</b></td>
1079</tr>
1080</tbody></table>
1081</form>
1082</td>
1083</tr>
1084</tbody></table>
1085<p>&nbsp;</p>
1086<table summary="" class="norm" width="450" align="center" border="1" cellpadding="4" cellspacing="0">
1087<tbody><tr>
1088<td class="section"><a name="dbm"></a>milliWatts to dBm (and vice versa)
1089</td>
1090</tr>
1091<tr>
1092<td><p>Power in milliWatts to dBm (and vice versa) . Enter the 'Transmit Power' (<b>A or G above</b>) in <b>milliWatts</b> OR the 'Power Ratio' in <b>dBm</b> and click the appropriate 'Calculate' button. 1 Watt = 1000 milliWatts.</p>
1093<a href="#db_calc" class="t-db">Calculations and equations used.</a>
1094<form name="calcdbm" action="" method="get">
1095<table summary="" class="p-m-s" width="100%" border="0" cellpadding="4" cellspacing="0">
1096<tbody><tr valign="top">
1097<td class="g-h-n" width="150">Transmit Power</td>
1098<td width="150">&nbsp;</td>
1099<td class="g-h-n" width="140" align="center">Result</td>
1100</tr>
1101<tr valign="top">
1102<td><input id="dbmmw" size="10" type="text"><b>mW</b></td>
1103<td align="center"><input class="button" id="dbmcalc" value="Calculate" onclick='document.getElementById("rdbm").value = to_dbm(document.getElementById("dbmmw").value); return(0);' type="button"></td>
1104<td align="right"><input id="rdbm" size="10" type="text"><b>&nbsp;dBm</b></td>
1105</tr>
1106<tr valign="top">
1107<td class="g-h-n">Power Ratio</td>
1108<td>&nbsp;</td>
1109<td class="g-h-n" align="center">Result</td>
1110</tr>
1111<tr valign="top">
1112<td><input id="udbm" size="10" type="text"><b>&nbsp;dBm</b></td>
1113<td align="center"><input class="button" id="mwcalc" value="Calculate" onclick='document.getElementById("umw").value = from_dbm(document.getElementById("udbm").value); return(0);' type="button"></td>
1114<td align="right"><input id="umw" size="10" type="text"><b>&nbsp;mW</b></td>
1115</tr>
1116</tbody></table>
1117</form>
1118</td>
1119</tr>
1120</tbody></table>
1121
1122
1123
1124<!-- end of calculators -->
1125<h1><a name="budget_calc"></a>Power Budget Calculations</h1>
1126<ol>
1127<li><p>mW to dBm = 10Log<sub>10</sub>(Watts) + 30</p></li>
1128<li><p>feet to meters = .3048</p></li>
1129<li><p>meters to feet = 3.28</p></li>
1130<li><p>Calculator normalises all distances to kilometers and meters</p></li>
1131<li><p>Connectors loss = 0.10 * square root (frequency in GHz)</p></li>
1132</ol>
1133<h1><a name="free_calc"></a>Free Space Calculations</h1>
1134<ol>
1135<li><p>Free space loss = 36.56 + 20Log<sub>10</sub>(Frequency) + 20Log<sub>10</sub>(Distance in miles)</p></li>
1136<li><p>Calculator normalises all distances to miles</p></li>
1137<li><p>Miles to Kilometers = 1.609</p><p>
1138</p></li><li><p>Kilometers to miles = 0.621</p></li>
1139</ol>
1140<h1><a name="fresnel_calc"></a>Fresnel Zone Calculations</h1>
1141<ol>
1142<li><p>Calculator normalises all distances to kilometers and meters</p></li>
1143<li><p>Miles to Kilometers = 1.609</p><p>
1144</p></li><li><p>Kilometers to miles = 0.621</p></li>
1145<li><p>feet to meters = .3048</p></li>
1146<li><p>meters to feet = 3.28</p></li>
1147<li><p>1st Fresnel Zone radius (Km) = 17.3 x Sqr root ((Obstacle
1148Distance x (Total Link - Obstacle Distance)) / (Frequency in GHz x
1149Total Link))</p></li>
1150<li><p>1st Fresnel Zone radius (miles) = 72.6 x Sqr root ((Obstacle
1151Distance x (Total Link - Obstacle Distance)) / (Frequency in GHz x
1152Total Link))</p></li>
1153<li><p>Obstacle free radius = 0.6 x 1st Fresnel Zone radius</p></li>
1154<li><p>Radius of nth Fresnel zone (meter) = sqr root ( (n x wave length
1155x Obstacle distance x (Total Link - Obstacle Distance)) / Total Link )</p></li>
1156<li><p>wave length (meters) = speed of light (299,792,458 m/s) / frequency in Hz</p></li>
1157<li><p>Earth curvature calculation = (Total Link) <sup>2</sup> /(8 * effective earth radius)</p></li>
1158<li><p>effective earth radius = 4/3 * Earth radius</p></li>
1159<li><p>Earth radius = 3963 miles, 6378 Km</p></li>
1160</ol>
1161<h1><a name="system_calc"></a>System Performance Calculations</h1>
1162<ol>
1163<li><p>Calculator normalises all distances to miles and feet during calculations.</p></li>
1164<li><p>Free space loss = 36.56 + 20Log<sub>10</sub>(Frequency) + 20Log<sub>10</sub>(Dist in miles)</p></li>
1165<li><p>mW to dBm = 10Log<sub>10</sub>(milliWatts) + 30</p></li>
1166<li><p>dBm to mW = 10<sup>(dBm/10)</sup></p></li>
1167<li><p>RX Power = Margin - RX sensitivity</p></li>
1168<li><p>Theoretical margin = TX power budget + RX power budget - free space loss</p></li> 
1169<li><p>SAD factor = Theoretical margin/TX power budget * 100 and shows the percentage of spare power on transmission.</p></li>
1170</ol>
1171<h1><a name="db_calc"></a>dBm to Watts Calculations</h1>
1172<ol>
1173<li><p>mW to dBm = 10Log<sub>10</sub>(Watts) + 30</p></li>
1174<li><p>dBm to mW = 10<sup>(dBm/10)</sup></p></li>
1175</ol>
1176<hr>
1177<p class="p-m-n"><br>Problems, comments, suggestions, corrections
1178(including broken links) or something to add? Please take the time from
1179a busy life to 'mail us' (at top of screen), the webmaster (below) or <a href="javascript:mailus('info-support','zytrax.com','Support%20Issue')" class="t-db">info-support at zytrax</a>. You will have a warm inner glow for the rest of the day.</p>
1180</div>
1181</div>
1182
1183
1184<div class="l-f">
1185<div class="l-100">
1186<!-- standard footer full width -->
1187<table align="center" border="0" cellspacing="0">
1188  <tbody><tr valign="top">
1189    <td class="p-f-s" align="left">
1190               
1191                Copyright © 1994 - 2009 ZyTrax, Inc.<br> All rights reserved.
1192                <a href="http://www.zytrax.com/legal.html" class="p-f-s">Legal and Privacy</a>
1193                </td>
1194                <td align="center"><a href="http://www.zytrax.com/isp/web" target="_blank" class="p-f-s">site by zytrax</a><br> <a href="http://www.super.net.sg/" target="_blank" class="p-f-s"><img src="calc_files/super-net-s.gif" alt="Hosted by super.net.sg" border="0"></a></td>
1195                <td class="p-f-s" align="right">
1196                <a href="javascript:mailus('web-master','zytrax.com','About%20Web%20site')" class="p-f-s">web-master at zytrax</a><br>
1197                Page modified: July 10 2009.
1198                </td>
1199  </tr>
1200</tbody></table>
1201</body></html>