100 ' ******************************** 110 ' * IBM PC BASIC VERSION A3.30 * 120 ' * FILE NAME "RL" * 130 ' * RIDGE DIFFRACTION LOSS * 140 ' * 1987/10 I.KATO * 150 ' ******************************** 160 KEY OFF:CLS:SCREEN 9 170 FLAG$="" 180 DEFDBL A,B,C,E,F,G,K,L,M,O,S 190 DIM U$(10),Y(100) 200 DATA "FREQUENCY","k(average value)","k(minimum value)","A-B SPAN DISTANCE", "A HEIGHT","B HEIGHT","F ALTITD","F DISTANCE","L ALTITD","L DISTANCE" 210 FOR I=1 TO 10:READ U$(I):NEXT 220 COLOR 14:LOCATE 1,1:PRINT "[ITEM 10] RIDGE DIFFRACTION LOSS ":COLOR 7 230 PRINT "Ridge diffraction loss is determined by the ratio between a path clearance at the ridge point(Item 9) and a First Fresnel zone radius(Item 5)." 250 PRINT "[calculation formula]";: PRINT " Z=-CL/FR:CL=clearance(m):FR=First Fresnel zone radius(m)" 260 PRINT TAB(4)"RIDGE LOSS RL=20*log(2*3.14159*Z) in case Z>=1" 270 PRINT TAB(4)" RL=6+12*Z-2.2*Z*Z in case Z<1 and Z>0" 280 PRINT TAB(4)" RL=1/(.143-.17*Z+Z*Z)-1/(.994+1.48*Z+Z*Z) in case Z<=0" 290 PRINT STRING$(80,"-") 1000 ' ---------------------------- 1010 ' * fundamental data input * 1020 ' ---------------------------- 1030 RIDGE$="*" 1040 VSH1=60:VMH1=50:VXL=50:VYL=50:VMH2=10:VEH2=30 1050 GOSUB 8000 1060 FOR I=1 TO 10:LOCATE 8+I,1:PRINT USING "##";I;:PRINT " "U$(I):NEXT 1070 GOSUB 5370:GOSUB 5190:GOSUB 5280:GOSUB 4030:GOSUB 4200:GOSUB 4310: GOSUB 1370:GOSUB 1450:GOSUB 4420:GOSUB 4800:GOSUB 5000 1080 COLOR 6:LOCATE 23,10:PRINT "Do you correct any data (Y/N) ? ";:Y$=INPUT$(1) 1090 IF Y$<>"Y" AND Y$<>"y" AND Y$<>"N" AND Y$<>"n" THEN 1080 1100 COLOR 7:LOCATE 23,10:PRINT SPC(69) 1110 IF Y$="N" OR Y$="n" THEN GOTO 2000 ELSE 1120 1120 COLOR 6:LOCATE 23,10:LINE INPUT "Input the item number(1-14) to be correctde ";NO$ 1130 COLOR 7:LOCATE 23,10:PRINT SPC(69) 1140 NO=VAL(NO$) 1150 IF NO<1 OR NO>10 THEN 1120 1160 IF NO=8 THEN COLOR 4:LOCATE 23,10:PRINT "Do not correct independentry": FOR I=1 TO 5000:NEXT:COLOR 7:LOCATE 23,10:PRINT SPC(69):GOTO 1080 1170 LOCATE NO+8,28:PRINT SPC(20) 1180 IF NO=4 THEN GOSUB 4030:FOR I= 4 TO 5:LOCATE I+11,28:PRINT SPC(10):NEXT: GOSUB 1370:GOSUB 1410:GOSUB 4420 1190 IF NO=5 THEN GOSUB 4200:FOR I= 4 TO 5:LOCATE I+11,28:PRINT SPC(10):NEXT: GOSUB 1370:GOSUB 1430:GOSUB 4420 1200 IF NO=6 THEN GOSUB 4310:FOR I= 4 TO 5:LOCATE I+11,28:PRINT SPC(10):NEXT: GOSUB 1370:GOSUB 1430:GOSUB 4420 1210 IF NO=7 THEN LOCATE 16,28:PRINT SPC(10):GOSUB 4590 1220 IF NO=9 THEN GOSUB 4800:GOSUB 1410:GOSUB 1290 1230 IF NO=10 THEN GOSUB 1430:GOSUB 5000 1240 IF NO=1 THEN GOSUB 5370 1250 IF NO=2 THEN GOSUB 5190 1260 IF NO=3 THEN GOSUB 5280 1270 GOTO 1080 1280 ' 1290 LINE( 2,VMH1)-(VDF,VHF),7,,&H8888 1300 LINE(VDF,VHF)-(98,VMH2),7,,&H8888 1310 IF VHF>=99 THEN 1350 1320 LINE(VDF-5,100)-(VDF,VHF),2 1330 LINE(VDF,VHF)-(VDF+5,100),2 1340 PAINT(VDF,99),2,2 1350 LOCATE (64+VHF)/8-1,(400+VDF*2)/8:PRINT "F" 1360 RETURN 1370 ' 1380 IF H1>=H2 THEN VSH1=30:VMH1=10:VMH2=100-H2/H1*90:VEH2=VMH2+10:MAXH=H1 1390 IF H1< H2 THEN VEH2=30:VMH2=10:VMH1=100-H1/H2*90:VSH1=VMH1+10:MAXH=H2 1400 RETURN 1410 ' 1420 VDL=2+D1/D*94:D2=D-D1 1430 ' 1440 VXL=VDL:VYL=100-HS/MAXH*90 1450 CLS:GOSUB 8000 1460 RETURN 2000 ' ------------------ 2010 ' * culculations * 2020 ' ------------------ 2030 CLS:VIEW(400,112)-(600,287),,0 2050 FOR I=1 TO 2:AK(I)=1/(2*K(I)*6370)*1000:NEXT 2060 ' fresnel radius 2070 IF RIDGE$="" THEN FR=SQR(WL*DF*(D-DF)/D) ELSE FR=SQR(WL*D1*D2/D) 2080 ' direct wave clearance,ridge loss (K=minimum) 2100 IF RIDGE$<>"" THEN CLD=H1-D1/D*(H1-H2)-D1*D2*AK(2)-HS:CL=CLD:GOSUB 7000: RLD=RL 2110 ' 2120 ' reflection wave clearance,ridge loss (K=average) 2130 IF RIDGE$="" THEN 2170 2140 IF D1=DF THEN CLF=H2-D2/(D-DF)*(H2-HF)-D2*((D-DF)-D2)*AK(2)-HS 2160 CL=CLF:GOSUB 7000:RLF=RL 2170 LOCATE 9,41:PRINT "FRESNEL ZONE RADIUS" 2180 LOCATE 9,74:PRINT USING " ###.#m";FR 2190 LOCATE 10,41:PRINT STRING$(40,"-") 2200 LOCATE 11,41:PRINT "WAVES k CLEARANCE RIDGE LOSS" 2210 LOCATE 12,41:PRINT STRING$(40,"-") 2220 LOCATE 13,41:PRINT "DIRECT" 2230 LOCATE 13,51:IF RIDGE$="" THEN PRINT USING "##.## #####.#m ----- ";K(2),GLD ELSE PRINT USING "##.## #####.#m ###.#dB";K(2),CLD,RLD 2240 LOCATE 14,41:PRINT STRING$(40,"-") 2250 LOCATE 15,41:PRINT "REFLECTED" 2260 LOCATE 15,51:IF RIDGE$="" THEN PRINT USING "##.## ------ ----- ";K(1) ELSE PRINT USING "##.## #####.#m ###.#dB";K(1),CLF,RLF 2270 LOCATE 16,41:PRINT STRING$(40,"-") 2280 LOCATE 17,41:PRINT "k: minimum value for direct wave and" 2290 LOCATE 18,41:PRINT " average value for reflected wave" 2300 LOCATE 19, 1:PRINT STRING$(80,"-"):COLOR 3:LOCATE 20,1 2310 IF RIDGE$="" THEN PRINT "DIRECT WAVE LOSS 0dB":GOTO 2400 2320 IF RLD=<3 THEN PRINT USING "DIRECT WAVE LOSS ###.#dB (less than 3dB Path is acceptable )";RLD 2330 IF RLD>3 THEN PRINT USING "DIRECT WAVE LOSS ###.#dB (more than 3dB Path is intercepted )";RLD 2340 LOCATE 21, 1:PRINT USING "REFLECTED WAVE LOSS ###.#dB";RLF 2390 ' 2400 COLOR 6:LOCATE 23,10:PRINT "Do you continue this work (Y/N) ? ";:Y$=INPUT$(1) 2410 IF Y$<>"Y" AND Y$<>"y" AND Y$<>"N" AND Y$<>"n" THEN 2400 2420 COLOR 7:LOCATE 23,10:PRINT SPC(69) 2430 IF Y$="Y" OR Y$="y" THEN 2440 ELSE 2470 2440 CLS:FOR I= 9 TO 18:LOCATE I,25:PRINT SPC(56):NEXT 2450 FOR I=19 TO 21:LOCATE I, 1:PRINT SPC(79):NEXT: LOCATE 19,80:PRINT " " 2460 GOTO 220 2470 CLS:SCREEN 0:RUN "ME" 4000 ' -------------------- 4010 ' * data input sub * 4020 ' -------------------- 4030 ' SPAN DISTANCE 4040 COLOR 6:LOCATE 12, 1:PRINT USING "##";4;:PRINT " "U$(4) 4050 LINE( 2, 7)-(98, 7),6,,&H8888 4060 LINE( 2, 2)-( 2,12),6 4070 LINE(98, 2)-(98,12),6 4080 COLOR 6:LOCATE 9,56:PRINT "SPAN DISTANCE" 4090 COLOR 6:LOCATE 23,7:PRINT "Input "U$(4)" (km) ";:LINE INPUT X$ 4100 COLOR 7:LOCATE 23,7:PRINT SPC(73) 4110 D=VAL(X$) 4120 IF D<1 OR D>100 THEN 4030 4130 LOCATE 12,29:PRINT USING "###.#km";D 4140 LOCATE 12, 1:PRINT USING "##";4;:PRINT " "U$(4) 4150 LINE( 2, 7)-(98, 7),0 4160 LINE( 2, 2)-( 2,12),0 4170 LINE(98, 2)-(98,12),0 4180 LOCATE 9,56:PRINT SPC(13) 4190 RETURN 4200 ' A HEIGHT 4210 COLOR 6:LOCATE 13, 1:PRINT USING "##";5;:PRINT " "U$(5) 4220 LINE( 2,VMH1)-(2,100),6 4230 COLOR 6:LOCATE 23,7:PRINT "Input "U$(5)" (m) ";:LINE INPUT X$ 4240 COLOR 7:LOCATE 23,7:PRINT SPC(73) 4250 H1=VAL(X$) 4260 IF H1<1 THEN 4200 4270 LOCATE 13,28:PRINT USING "####.#m";H1 4280 LOCATE 13, 1:PRINT USING "##";5;:PRINT " "U$(5) 4290 LINE( 2,VMH1)-(2,100),0 4300 RETURN 4310 ' B HEIGHT 4320 COLOR 6:LOCATE 14, 1:PRINT USING "##";6;:PRINT " "U$(6) 4330 LINE(98,VMH2)-(98,100),6 4340 COLOR 6:LOCATE 23,7:PRINT "Input "U$(6)" (m) ";:LINE INPUT X$ 4350 COLOR 7:LOCATE 23,7:PRINT SPC(73) 4360 H2=VAL(X$) 4370 IF H2<1 THEN 4340 4380 LOCATE 14,28:PRINT USING "####.#m";H2 4390 LOCATE 14, 1:PRINT USING "##";6;:PRINT " "U$(6) 4400 LINE(98,VMH2)-(98,100),0 4410 RETURN 4420 ' F POINT 4430 HH=0:DM=D:GOSUB 6000:DF=DH:VDF=2+DF/D*94 4440 COLOR 6:LOCATE 15, 1:PRINT USING "##";7;:PRINT " "U$(7) 4450 LINE( 2,VMH1)-(VDF,100),6 4460 LINE(VDF,100)-(98,VMH2),6 4470 LOCATE 164/8-1,(400+VDF*2)/8:PRINT "F" :' F 4480 COLOR 3:LOCATE 20,1:PRINT "Obtain a ground-reflection point(F)": LOCATE 21,1:PRINT " between point A and B " 4490 COLOR 6:LOCATE 23,1:PRINT "Input an altitude(m) at the point";:COLOR 2: PRINT USING "###.#km";DF;:COLOR 6:LINE INPUT " away from point A ";X$ 4500 COLOR 7:FOR I=20 TO 21:LOCATE I,1:PRINT SPC(46):NEXT: LOCATE 23,1:PRINT SPC(79) 4510 HH=VAL(X$):IF HH>=H1 OR HH>=H2 THEN 4480 ELSE GOSUB 6000 4520 LINE( 2,VMH1)-(VDF,100),0 4530 LINE(VDF,100)-(98,VMH2),0 4540 LOCATE 164/8-1,(400+VDF*2)/8:PRINT " " :' F 4550 IF ABS(DF-DH)>.1 THEN 4560 ELSE HF=HH:GOTO 4680 4560 COLOR 3:LOCATE 21,1:PRINT "reflection point F is";:COLOR 2: PRINT USING "###.#km";DH;:COLOR 3:PRINT " away from point A":COLOR 6: LOCATE 23,1:LINE INPUT "Input altitude(m) at the point F ";X$ 4570 COLOR 7:FOR I=20 TO 21:LOCATE I,1:PRINT SPC(46):NEXT: LOCATE 23,1:PRINT SPC(79) 4580 HH=VAL(X$):IF HH>=H1 OR HH>=H2 THEN 4560 ELSE DF=DH:GOSUB 6000:GOTO 4550 4590 COLOR 6:LOCATE 15,1:PRINT USING "##";7;:PRINT " "U$(7) 4600 LINE( 2,VMH1)-(VDF,VHF),6 4610 LINE(VDF,VHF)-(98,VMH2),6 4620 COLOR 6:LOCATE 23,1:LINE INPUT "Input altitude(m) ";X$ 4630 COLOR 7:LOCATE 23,1:PRINT SPC(79) 4650 CLS:GOSUB 8000 4660 HH=VAL(X$):IF HH>=H1 OR HH>=H2 THEN 4620 ELSE DM=D:GOSUB 6000:GOTO 4550 4670 ' 4680 DF=DH:VDF=2+DF/D*94:VHF=100-HF/MAXH*90 4690 LOCATE 15,28:PRINT USING "####.#m";HF 4700 LOCATE 16,29:PRINT USING "###.#km";DF 4710 LOCATE 15, 1:PRINT USING "##";7;:PRINT " "U$(7) 4720 LOCATE (64+VHF)/8-1,(400+VDF*2)/8:PRINT "F" :' F 4730 LINE( 2,VMH1)-(VDF,VHF),0:LINE( 2,VMH1)-(VDF,VHF),7,,&H8888 4740 LINE(VDF,VHF)-(98,VMH2),0:LINE(VDF,VHF)-(98,VMH2),7,,&H8888 4750 IF VHF>=99 THEN RETURN 4760 LINE(VDF-5,100)-(VDF,VHF),2 4770 LINE(VDF,VHF)-(VDF+5,100),2 4780 PAINT(VDF,99),2,2 4790 RETURN 4800 ' RIDGE 4810 COLOR 6:LOCATE 17, 1:PRINT USING "##";9;:PRINT " "U$(9) 4820 LINE(VXL,VYL)-(VXL,100),6 4830 COLOR 6:LOCATE 23,1:LINE INPUT "Input an altitude(m) of the Ridge( input 0 in case nothing Ridge ) ";X$ 4840 COLOR 7:LOCATE 23,1:PRINT SPC(79) 4850 HS=VAL(X$) 4860 LOCATE 17,28:IF HS=0 THEN PRINT " ----" ELSE PRINT USING "####.#m";HS 4870 LOCATE 17, 1:PRINT USING "##";9;:PRINT " "U$(9) 4880 IF HS=0 THEN 4890 ELSE RETURN 4890 RIDGE$="":D1=0:D2=0:DR1=0:DR2=0:VXL=0:VYL=0:LOCATE 18,30:PRINT "----" 4900 CLS:GOSUB 8000 4910 LINE( 2,VMH1)-(VDF,VHF),7,,&H8888 4920 LINE(VDF,VHF)-(98,VMH2),7,,&H8888 4930 IF VHF>=99 THEN 4970 4940 LINE(VDF-5,100)-(VDF,VHF),2 4950 LINE(VDF,VHF)-(VDF+5,100),2 4960 PAINT(VDF,99),2,2 4970 LOCATE (64+VHF)/8-1,(400+VDF*2)/8:PRINT "F" :' F 4980 GOTO 1080 4990 ' 5000 RIDGE$="*":VHS=100-HS/MAXH*90 5010 COLOR 6:LOCATE 18, 1:PRINT USING "##";10;:PRINT " "U$(10) 5020 LINE(VXL,2)-(VXL,12),6 5030 LINE(2, 7)-(VXL, 7),6 ,,&H8888 5040 COLOR 6:LOCATE 23, 1:PRINT "Input distance(km) from point A to Ridge ";: LINE INPUT X$ 5050 COLOR 7:LOCATE 23, 1:PRINT SPC(79) 5060 D1=VAL(X$):D2=D-D1:VDL=2+D1/D*94 5070 IF D1>=D THEN 5040 5080 LOCATE 18,28:PRINT USING "####.#km";D1 5090 LOCATE 18, 1:PRINT USING "##";10;:PRINT " "U$(10) 5100 CLS:VXL=VDL:VYL=VHS:GOSUB 8000 5110 LINE( 2,VMH1)-(VDF,VHF),7,,&H8888 5120 LINE(VDF,VHF)-(98,VMH2),7,,&H8888 5130 IF VHF>=99 THEN 5170 5140 LINE(VDF-5,100)-(VDF,VHF),2 5150 LINE(VDF,VHF)-(VDF+5,100),2 5160 PAINT(VDF,99),2,2 5170 LOCATE (64+VHF)/8-1,(400+VDF*2)/8:PRINT "F" :' F 5180 RETURN 5190 ' K(average) 5200 COLOR 6:LOCATE 10,1:PRINT USING "##";2;:PRINT " "U$(2) 5210 COLOR 6:LOCATE 23,7:PRINT "Input "U$(2)" ";:LINE INPUT X$ 5220 COLOR 7:LOCATE 23,7:PRINT SPC(73) 5230 IF MID$(X$,2,1)="/" THEN K(1)=VAL(LEFT$(X$,1))/VAL(RIGHT$(X$,1)) ELSE K(1)=VAL(X$) 5240 IF K(1)<1 OR K(1)>=2 THEN 5210 5250 LOCATE 10,31:PRINT USING "#.##";K(1) 5260 LOCATE 10, 1:PRINT USING "##";2;:PRINT " "U$(2) 5270 RETURN 5280 ' K(mimimum) 5290 COLOR 6:LOCATE 11,1:PRINT USING "##";3;:PRINT " "U$(3) 5300 COLOR 6:LOCATE 23,7:PRINT "Input "U$(3)" ";:LINE INPUT X$ 5310 COLOR 7:LOCATE 23,7:PRINT SPC(73) 5320 IF MID$(X$,2,1)="/" THEN K(2)=VAL(LEFT$(X$,1))/VAL(RIGHT$(X$,1)) ELSE K(2)=VAL(X$) 5330 IF K(2)>1 THEN 5300 5340 LOCATE 11,31:PRINT USING "#.##";K(2) 5350 LOCATE 11, 1:PRINT USING "##";3;:PRINT " "U$(3) 5360 RETURN 5370 ' FREQUENCY 5380 COLOR 6:LOCATE 9,1:PRINT USING "##";1;:PRINT " "U$(1) 5390 COLOR 6:LOCATE 22,7:PRINT "Input "U$(1)" BAND (GHz) ( 2,4,5,6,7,8,11,15 ) ";:LINE INPUT X$ 5400 F=VAL(X$) 5410 IF F<>INT(F) OR F<2 OR F=3 OR (F>8 AND F<11) OR (F>8 AND F<11) OR F>15 THEN LOCATE 22,7:PRINT SPC(73):GOTO 5390 5420 IF F=6 THEN 5430 ELSE 5450 5430 LOCATE 23,7:INPUT "Input L(lower band) or U(upper band) L/U ";B$ 5440 IF B$<>"U" AND B$<>"u" AND B$<>"L" AND B$<>"l" THEN LOCATE 23,7:PRINT SPC(73):GOTO 5430 5450 COLOR 7:FOR I=22 TO 23:LOCATE I,7:PRINT SPC(73):NEXT 5460 IF F=2 THEN FQ=2.002 5470 IF F=4 THEN FQ=4.004 5480 IF F=5 THEN FQ=4.7 5490 IF (F=6 AND B$="L") OR (F=6 AND B$="l") THEN FQ=6.175 5500 IF (F=6 AND B$="U") OR (F=6 AND B$="u") THEN FQ=6.77 5510 IF F=7 THEN FQ=7.575 5520 IF F=8 THEN FQ=8 5530 IF F=11 THEN FQ=11.2 5540 IF F=15 THEN FQ=14.825 5550 LOCATE 9,30:PRINT USING "##.#GHz";FQ 5560 WL=3*100/FQ 5570 LOCATE 9, 1:PRINT USING "##";1;:PRINT " "U$(1) 5580 RETURN 6000 ' -------------------------------------- 6010 ' * reflection point calculation sub * 6020 ' -------------------------------------- 6030 P=H1-HH:Q=H2-HH 6040 C=(P-Q)/(P+Q) 6050 M=.5*DM*DM/(6370*K(1)*2*(P+Q))*1000 6060 K=C/(1+M) 6070 B=K: GOSUB 6180 6080 O=S:N=10^-4 6090 B=K+N:GOSUB 6180 6100 L=K:K=L-N*O/(S-O) 6110 IF ABS(L-K)>=1/10^8 THEN 6070 6120 DH=DM*(1+K)/2 6130 DH=INT((DH+.0005)*1000)/1000 6140 GLD=H1-DH/D*(H1-H2)-DH*(D-DH)/(2*K(2)*6370)*1000 6150 IF GLD<0 THEN VIEW(400,112)-(600,287),,0:CLS:COLOR 4:LOCATE 19,1:PRINT "Path line sink under the earth surface. This span is not line-of-sight.":GOTO 2400 6160 RETURN 6170 ' 6180 ' * cubic equation sub * 6190 S=(B*B-(1+M)/M)*B+C/M 6200 RETURN 7000 ' --------------------------------- 7010 ' * ridge loss calculation sub * 7020 ' --------------------------------- 7030 Z=-CL/FR 7040 IF Z>=1 THEN RL=20*LOG(2*3.14159*Z)/2.3026:GOTO 7070 7050 IF Z<1 AND Z>0 THEN RL=6+12*Z-2.2*Z*Z :GOTO 7070 7060 IF Z=<0 THEN RL=1/(.143-.17*Z+Z*Z)-1/(.994+1.48*Z+Z*Z) 7070 IF RL<0 THEN RL=0 7080 RETURN 8000 ' ----------------------- 8010 ' * data input sub(2) * 8020 ' ----------------------- 8030 VIEW(400,112)-(600,287),,5 8040 WINDOW SCREEN(0, 0)-(100,100) 8050 LINE( 2,VMH1)-(98,VMH2),7 :' A-B 8060 LINE( 0, 100)-( 0,VSH1),2 :' A 8070 LINE( 0,VSH1)-( 2,VMH1),2 8080 LINE( 2,VMH1)-(10, 100),2 8090 LINE( 0, 100)-(10, 100),2 8100 PAINT(2,VMH1+5),2,2 8110 LOCATE (64+VMH1)/8,(400+2)/8+1:PRINT "A" 8120 IF RIDGE$="" THEN 8190 8130 LINE(VXL-5,100)-(VXL, VYL),2 :' L 8140 LINE(VXL, VYL)-(VXL+5,100),2 8150 LINE(VXL-5,100)-(VXL+5,100),2 8160 PAINT(VXL,99),2,2 8170 IF VYL<1 THEN LOCATE 9,(400+VXL*2)/8:PRINT "L" ELSE LOCATE (64+VYL)/8,(400+VXL*2)/8:PRINT "L" 8180 ' 8190 LINE( 88, 100)-( 98,VMH2),2 :' B 8200 LINE( 98,VMH2)-(100,VEH2),2 8210 LINE(100,VEH2)-(100, 100),2 8220 LINE( 88, 100)-(100, 100),2 8230 PAINT(98,VMH2+5),2,2 8240 LOCATE (64+VMH2)/8,(600-2)/8:PRINT "B" 8250 RETURN