quote:
/* * 7 July 2002 SCL: creation * Copyright(c) 2002 Sam C. Lin ALL RIGHTS RESERVED * 20040225 v1.1 - added 802.11a freq's from * http://www.cisco.com/univercd/cc/td/doc/product/wireless/airo1200/accsspts/ap120scg/bkscgaxa.htm#1023693 */ #include <stdio.h> #include <math.h> const char *copr = "Copyright (c) 2002-2004 Sam C. Lin ALL RIGHTS RESERVED"; double C = 299792458; // speed of light, m/s const double g_din2mm = 25.4; // inches to mm double channels[15] = { 0, 2412, // 1 2417, // 2 2422, // 3 2427, // 4 2432, // 5 2437, // 6 2442, // 7 2447, // 8 2452, // 9 2457, // 10 2462, // 11 2467, // 12 2472, // 13 2484 // 14 }; typedef struct chanspec { int chnl; double freq; } CHANSPEC,*PCHANSPEC; CHANSPEC channels11a[] = { {34,5170}, {36,5180}, {38,5190}, {40,5200}, {42,5210}, {44,5220}, {46,5230}, {48,5240}, {52,5260}, {56,5280}, {60,5300}, {64,5320}, {149,5745}, {153,5765}, {157,5785}, {161,5805}, {0,0} }; // source: ARRL Antenna Book 18-16 // guide wavelength in inches // f0 = operating freq, MHz // fc = TE11 cutoff freq, MHz double LambdaGuide(double f0,double fc) { return 11802.85/sqrt(f0*f0 - fc*fc); } // TE11 mode cutoff freq, MHz // d = waveguide inner diameter, in double FcTE11(double d) { return 6917.26 / d; } // TM01 mode cutoff freq, MHz // d = waveguide inner diameter, in double FcTM01(double d) { return 9034.85 / d; } int main(int argc,char *argv[]) { printf("Lincomatic Circular Waveguide Calculator V1.1 (%s %s)\n\n",__DATE__, __TIME__); if (argc != 3) { printf("Usage: %s diameter channel",argv[0]); printf("where\n"); printf(" diameter = can diameter in mm\n"); printf(" channel = 1-14 for 802.11b, or valid 802.11a channel between 34-161\n"); return 1; } double dia; int chnl; sscanf(argv[1],"%lf",&dia); sscanf(argv[2],"%d",&chnl); double freq = 0; int chnlidx; if ((chnl > 0) && (chnl < 15)) // 11b freq = channels[chnl]; else { int i=0; while (channels11a.chnl) { if (channels11a.chnl == chnl) { freq = channels11a.freq; chnlidx = i; break; } i++; } if (!freq) { printf("invalid channel %d\n",chnl); return 1; } } double diain = dia/g_din2mm; printf("Waveguide diameter: %lf mm (%lf in)\n",dia,diain); printf("Channel: %d (%4.0lf MHz)\n",chnl,freq); printf("\n"); double fcte11 = FcTE11(diain); printf("TE11 Cutoff (MHz): %lf\n",fcte11); printf("TM01 Cutoff (MHz): %lf\n",FcTM01(diain)); double lg = LambdaGuide(freq,fcte11); printf("Guide Wavelength (mm): %lf (%lf in)\n",lg*g_din2mm,lg); double l0 = C/1000/freq; printf("Operating wavelength (mm): %lf (%lf in)\n", l0,l0/g_din2mm); printf("\n"); printf("1/4 Guide Wavelength (probe to back) (mm): %lf (%lf in)\n", lg/4*g_din2mm,lg/4); printf("Probe Length (mm): %lf (%lf in)\n", l0/4,l0/g_din2mm/4); if (chnl < 15) { printf("\nprobe pos (Ch1): %lf\n",LambdaGuide(channels[1],fcte11)*g_din2mm/4); printf("probe pos (Ch11): %lf\n",LambdaGuide(channels[11],fcte11)*g_din2mm/4); printf("probe pos (Ch14): %lf\n",LambdaGuide(channels[14],fcte11)*g_din2mm/4); printf("difference between Ch1-Ch11 (mm): %lf\n", (LambdaGuide(channels[1],fcte11)-LambdaGuide(channels[11],fcte11))*g_din2mm/4); } else { int i=0; printf("\n"); while (channels11a.chnl) { printf("probe pos (Ch%d): %lf\n",channels11a.chnl,LambdaGuide(channels11a.freq,fcte11)*g_din2mm/4); i++; } } return 0; } |