links:band_plan_with_swr
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| links:band_plan_with_swr [2024/11/21 21:40] – created - external edit 127.0.0.1 | links:band_plan_with_swr [2024/12/08 22:47] (current) – va7fi | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| {{ bandplanwithswr.png? | {{ bandplanwithswr.png? | ||
| This python script does two things: | This python script does two things: | ||
| - | - It reads all .asd output files from the Rig Expert that are placed in the same folder as this script and calculates the VSWR as a function of the frequency. | + | - It reads all '' |
| - It recreates the band plan for all bands from 2200m to 70cm and adds VSWR graphs on top of it. | - It recreates the band plan for all bands from 2200m to 70cm and adds VSWR graphs on top of it. | ||
| Line 11: | Line 11: | ||
| The VHF and UHF band plan information is for British-Columbia and was taken from https:// | The VHF and UHF band plan information is for British-Columbia and was taken from https:// | ||
| - | Here's the {{canbandplan.pdf |output of my G5RV and GP9}} so far: | + | Here's the {{canadianbandplan.pdf |output of my G5RV and GP9}} so far: |
| * The top of the band plan graph corresponds to SWR = 1:1, where the first dotted horizontal line is. | * The top of the band plan graph corresponds to SWR = 1:1, where the first dotted horizontal line is. | ||
| * For HF, I also added a horizontal line at SWR = 3:1, which is where my internal tuner can reach. | * For HF, I also added a horizontal line at SWR = 3:1, which is where my internal tuner can reach. | ||
| Line 17: | Line 17: | ||
| * The red graph is the SWR curve. | * The red graph is the SWR curve. | ||
| - | <fc # | + | <fc # |
| <hidden Python Code> | <hidden Python Code> | ||
| Line 27: | Line 27: | ||
| License: | License: | ||
| - | This script by Patrick Truchon <https:// | + | This script by Patrick Truchon <va7fi@rbox.me> is licensed |
| under a Creative Commons Creative Commons Attribution-Share Alike 4.0 | under a Creative Commons Creative Commons Attribution-Share Alike 4.0 | ||
| | | ||
| Line 37: | Line 37: | ||
| * Improve the scripts, and release the improvements to the public, so | * Improve the scripts, and release the improvements to the public, so | ||
| that the whole community benefits. | that the whole community benefits. | ||
| - | + | ||
| | | ||
| * Attribute the work to me by linking to | * Attribute the work to me by linking to | ||
| - | < | + | < |
| * Distribute any derivative work under the same license. | * Distribute any derivative work under the same license. | ||
| Line 56: | Line 56: | ||
| was taken from: | was taken from: | ||
| | | ||
| + | |||
| + | Versions | ||
| + | * 2021.01.30 | ||
| + | * 2024.12.08 (added 630m and updated 60m band plan) | ||
| """ | """ | ||
| + | import os | ||
| + | import json | ||
| import numpy as np | import numpy as np | ||
| import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
| import matplotlib.ticker as mtick | import matplotlib.ticker as mtick | ||
| from matplotlib.backends.backend_pdf import PdfPages | from matplotlib.backends.backend_pdf import PdfPages | ||
| - | import json | ||
| - | import os | ||
| # The output will be a multipage PDF document: | # The output will be a multipage PDF document: | ||
| pdf_pages = PdfPages(' | pdf_pages = PdfPages(' | ||
| - | TITLE = ' | + | TITLE = ' |
| #### Import SWR Data from Rig Expert .asd files #### | #### Import SWR Data from Rig Expert .asd files #### | ||
| # Make a list of the .asd files in current folder and sort them by name. | # Make a list of the .asd files in current folder and sort them by name. | ||
| PATH = r" | PATH = r" | ||
| - | DIR = os.listdir( PATH ) | + | DIR = os.listdir(PATH) |
| FILES = [] | FILES = [] | ||
| for file in DIR: | for file in DIR: | ||
| - | if file.endswith(" | + | |
| - | | + | FILES = FILES + [file] |
| FILES.sort() | FILES.sort() | ||
| Line 84: | Line 88: | ||
| REACTANCE = [] | REACTANCE = [] | ||
| for file in FILES: | for file in FILES: | ||
| - | with open (file, " | + | |
| - | | + | |
| - | | + | SIZE = len(raw[' |
| - | | + | FREQ = [raw[' |
| + | RESISTANCE = [raw[' | ||
| + RESISTANCE | + RESISTANCE | ||
| - | REACTANCE = [raw[' | + | |
| + REACTANCE | + REACTANCE | ||
| Line 98: | Line 103: | ||
| ## Two steps to calculate the VSWR from the Resistance and Reactance: | ## Two steps to calculate the VSWR from the Resistance and Reactance: | ||
| - | # 1) Rho = sqrt( ((R - 50)^2 + X^2)/(R + 50)^2 + X^2) ) | + | # 1) Rho = sqrt( ((R - 50)^2 + X^2)/(R + 50)^2 + X^2)) |
| RHO = np.sqrt(np.divide(np.square(RESISTANCE - 50) + np.square(REACTANCE), | RHO = np.sqrt(np.divide(np.square(RESISTANCE - 50) + np.square(REACTANCE), | ||
| - | np.square(RESISTANCE + 50) + np.square(REACTANCE))) | + | |
| # 2) VSWR = (1 + Rho) / (1 - Rho) | # 2) VSWR = (1 + Rho) / (1 - Rho) | ||
| Line 109: | Line 114: | ||
| FREQ = FREQ[np.argsort(FREQ)] | FREQ = FREQ[np.argsort(FREQ)] | ||
| - | # Create Horizontal lines at 1, 3, and 10 | + | # Create Horizontal lines at 1, 3, and 10 |
| VSWR1 = len(FREQ)*[1] | VSWR1 = len(FREQ)*[1] | ||
| VSWR3 = len(FREQ)*[3] | VSWR3 = len(FREQ)*[3] | ||
| Line 129: | Line 134: | ||
| label2_y = -0.4 # Centre label | label2_y = -0.4 # Centre label | ||
| label3_y = 0.1 # Top label | label3_y = 0.1 # Top label | ||
| - | label4_y = 8.5 # Very top band name | + | label4_y = 8.1 # Very top band name |
| # Vertical Axis Marks | # Vertical Axis Marks | ||
| Line 137: | Line 142: | ||
| #### FIRST PAGE: 2200m to 20m | #### FIRST PAGE: 2200m to 20m | ||
| # Axes: 7 graphs in a 8.5x11 page. | # Axes: 7 graphs in a 8.5x11 page. | ||
| - | fig, ax = plt.subplots(nrows=7, | + | fig, ax = plt.subplots(nrows=8, figsize=(8.5, |
| # Title on first [0] graph only | # Title on first [0] graph only | ||
| Line 143: | Line 148: | ||
| # Axis labels | # Axis labels | ||
| - | for i in range(0,7): | + | for i in range(0, |
| - | | + | ax[i].set(ylabel=' |
| - | | + | # SWR Data |
| - | | + | ax[i].plot(FREQ, |
| - | | + | ax[i].plot(FREQ, |
| - | | + | ax[i].plot(FREQ, |
| ### 2200m | ### 2200m | ||
| i = 0 # First graph | i = 0 # First graph | ||
| - | left = 0.1355 # Left edge | + | left = 0.1356 # Left edge |
| - | right = 0.138 # Right edge | + | right = 0.1379 # Right edge |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 171: | Line 176: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(0.13655, | + | ax[i].text(0.13655, |
| - | ax[i].text(0.13747, | + | ax[i].text(0.13747, |
| - | ax[i].text(0.13765, | + | ax[i].text(0.13765, |
| + | |||
| + | # Axis | ||
| + | ax[i].set_xlim((left, | ||
| + | ax[i].set_xticks(xlabels) | ||
| + | ax[i].set_ylim((-1, | ||
| + | ax[i].set_yticks(y_ticks) | ||
| + | ax[i].set_xticklabels(xlabels, | ||
| + | |||
| + | |||
| + | ### 630m | ||
| + | i = i + 1 # First graph | ||
| + | left = 0.4716 | ||
| + | right = 0.4794 | ||
| + | ax[i].set_xlim(left, | ||
| + | ax[i].set_ylim(-1, | ||
| + | |||
| + | # Frequency labels: | ||
| + | x1 = 0.472 | ||
| + | x2 = 0.475 | ||
| + | x3 = 0.479 | ||
| + | xlabels = [x1, x2, x3] | ||
| + | |||
| + | # Bar Graphs | ||
| + | ax[i].broken_barh([(x1, | ||
| + | ax[i].broken_barh([(x2, | ||
| + | |||
| + | # Labels | ||
| + | ax[i].text(left, | ||
| + | ax[i].text(0.4735, | ||
| + | ax[i].text(0.4768, | ||
| # Axis | # Axis | ||
| Line 185: | Line 220: | ||
| ### 160m | ### 160m | ||
| - | i = 1 | + | i = i + 1 |
| - | left = 1.775 | + | left = 1.79 |
| - | right = 2.025 | + | right = 2.01 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 204: | Line 239: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(1.817, | + | ax[i].text(1.817, |
| - | ax[i].text(1.915, | + | ax[i].text(1.915, |
| - | ax[i].text(1.801, | + | ax[i].text(1.801, |
| # Axis | # Axis | ||
| Line 219: | Line 254: | ||
| #### 80m | #### 80m | ||
| - | i = 2 | + | i = i + 1 |
| - | left = 3.450 | + | left = 3.475 |
| - | right = 4.050 | + | right = 4.025 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 243: | Line 278: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(3.536, | + | ax[i].text(3.536, |
| - | ax[i].text(3.592, | + | ax[i].text(3.592, |
| - | ax[i].text(3.725, | + | ax[i].text(3.725, |
| - | ax[i].text(3.839, | + | ax[i].text(3.839, |
| - | ax[i].text(3.91, | + | ax[i].text(3.91, |
| # Axis | # Axis | ||
| Line 260: | Line 295: | ||
| # 60m | # 60m | ||
| - | i = 3 | + | i = i + 1 |
| - | left = 5.325 | + | left = 5.327 |
| - | right = 5.411 | + | right = 5.409 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| - | x1 = 5.3306 | + | x1 = 5.3305 |
| - | x2 = 5.3466 | + | x2 = 5.3465 |
| - | x3 = 5.3571 | + | x3 = 5.3515 |
| - | x4 = 5.3716 | + | x4 = 5.3715 |
| - | x5 = 5.4036 | + | x5 = 5.4035 |
| - | xlabels = [x1, x1 + 0.0028, x2, x2 + 0.0028, x3, x3 + 0.0028, | + | xlabels = [x1, x1 + 0.0030, x2, x2 + 0.0030, x3, x3 + 0.0150, |
| - | x4, x4 + 0.0028, x5, x5 + 0.0028] | + | x4, x4 + 0.0030, x5, x5 + 0.0030] |
| # Bar Graphs | # Bar Graphs | ||
| - | ax[i].broken_barh([(x1, | + | ax[i].broken_barh([(x1, |
| - | ax[i].broken_barh([(x1, | + | ax[i].broken_barh([(x1, |
| - | ax[i].broken_barh([(x1, | + | ax[i].broken_barh([(x1, |
| - | ax[i].broken_barh([(x2, | + | ax[i].broken_barh([(x2, |
| - | ax[i].broken_barh([(x2, | + | ax[i].broken_barh([(x2, |
| - | ax[i].broken_barh([(x2, | + | ax[i].broken_barh([(x2, |
| - | ax[i].broken_barh([(x3, | + | ax[i].broken_barh([(x3, |
| - | ax[i].broken_barh([(x3, | + | ax[i].broken_barh([(x3, |
| - | ax[i].broken_barh([(x3, | + | ax[i].broken_barh([(x3, |
| - | ax[i].broken_barh([(x4, | + | ax[i].broken_barh([(x4, |
| - | ax[i].broken_barh([(x4, | + | ax[i].broken_barh([(x4, |
| - | ax[i].broken_barh([(x4, | + | ax[i].broken_barh([(x4, |
| - | ax[i].broken_barh([(x5, | + | ax[i].broken_barh([(x5, |
| - | ax[i].broken_barh([(x5, | + | ax[i].broken_barh([(x5, |
| - | ax[i].broken_barh([(x5, | + | ax[i].broken_barh([(x5, |
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(5.331, | + | ax[i].text(5.331, |
| - | ax[i].text(5.331, | + | ax[i].text(5.331, |
| - | ax[i].text(5.331, | + | ax[i].text(5.331, |
| # Axis | # Axis | ||
| Line 308: | Line 343: | ||
| # 40m | # 40m | ||
| - | i = 4 | + | i = i + 1 |
| - | left = 6.975 | + | left = 6.985 |
| - | right = 7.325 | + | right = 7.315 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 333: | Line 368: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(7.015, | + | ax[i].text(7.015, |
| - | ax[i].text(7.0355, | + | ax[i].text(7.0355, |
| - | ax[i].text(7.093, | + | ax[i].text(7.093, |
| - | ax[i].text(7.105, | + | ax[i].text(7.105, |
| - | ax[i].text(7.167, | + | ax[i].text(7.167, |
| - | ax[i].text(7.23, | + | ax[i].text(7.23, |
| # Axis | # Axis | ||
| Line 351: | Line 386: | ||
| # 30m | # 30m | ||
| - | i = 5 | + | i = i + 1 |
| - | left = 10.095 | + | left = 10.097 |
| - | right = 10.155 | + | right = 10.153 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 370: | Line 405: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(10.115, | + | ax[i].text(10.115, |
| - | ax[i].text(10.1345, | + | ax[i].text(10.1345, |
| - | ax[i].text(10.1445, | + | ax[i].text(10.1445, |
| # Axis | # Axis | ||
| Line 385: | Line 420: | ||
| # 20m | # 20m | ||
| - | i = 6 | + | i = i + 1 |
| - | left = 13.97 | + | left = 13.98 |
| - | right = 14.38 | + | right = 14.37 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 410: | Line 445: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(14.033, | + | ax[i].text(14.033, |
| - | ax[i].text(14.082, | + | ax[i].text(14.082, |
| - | ax[i].text(14.087, | + | ax[i].text(14.087, |
| - | ax[i].text(14.17, | + | ax[i].text(14.17, |
| - | ax[i].text(14.229, | + | ax[i].text(14.229, |
| - | ax[i].text(14.28, | + | ax[i].text(14.28, |
| # Axis | # Axis | ||
| Line 436: | Line 471: | ||
| #### SECOND PAGE: 17m - 70cm | #### SECOND PAGE: 17m - 70cm | ||
| # Axes | # Axes | ||
| - | fig2, ax = plt.subplots(nrows=7, | + | fig2, ax = plt.subplots(nrows=7, |
| # Axis labels | # Axis labels | ||
| - | for i in range(0, | + | for i in range(0, 7): |
| - | | + | ax[i].set(ylabel=' |
| - | | + | # SWR Data |
| - | | + | ax[i].plot(FREQ, |
| - | | + | ax[i].plot(FREQ, |
| - | | + | ax[i].plot(FREQ, |
| # 17m | # 17m | ||
| i = 0 | i = 0 | ||
| - | left = 18.06 | + | left = 18.062 |
| - | right = 18.18 | + | right = 18.174 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 469: | Line 504: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(18.082, | + | ax[i].text(18.082, |
| - | ax[i].text(18.102, | + | ax[i].text(18.102, |
| - | ax[i].text(18.135, | + | ax[i].text(18.135, |
| # Axis | # Axis | ||
| Line 484: | Line 519: | ||
| # 15m | # 15m | ||
| - | i = 1 | + | i = i + 1 |
| - | left = 20.97 | + | left = 20.975 |
| - | right = 21.48 | + | right = 21.475 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 513: | Line 548: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(21.03, | + | ax[i].text(21.03, |
| - | ax[i].text(21.095, | + | ax[i].text(21.095, |
| - | ax[i].text(21.13, | + | ax[i].text(21.13, |
| - | ax[i].text(21.24, | + | ax[i].text(21.24, |
| - | ax[i].text(21.337, | + | ax[i].text(21.337, |
| - | ax[i].text(21.39, | + | ax[i].text(21.39, |
| # Axis | # Axis | ||
| Line 531: | Line 566: | ||
| # 12m | # 12m | ||
| - | i = 2 | + | i = i + 1 |
| - | left = 24.88 | + | left = 24.884 |
| - | right = 25 | + | right = 24.996 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 555: | Line 590: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(24.904, | + | ax[i].text(24.904, |
| - | ax[i].text(24.9205, | + | ax[i].text(24.9205, |
| - | ax[i].text(24.93, | + | ax[i].text(24.93, |
| - | ax[i].text(24.956, | + | ax[i].text(24.956, |
| - | ax[i].text(24.9755, | + | ax[i].text(24.9755, |
| - | ax[i].text(24.982, | + | ax[i].text(24.982, |
| # Axis | # Axis | ||
| Line 573: | Line 608: | ||
| # 10m | # 10m | ||
| - | i = 3 | + | i = i + 1 |
| left = 27.9 | left = 27.9 | ||
| right = 29.8 | right = 29.8 | ||
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 603: | Line 638: | ||
| # Labels | # Labels | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(28.015, | + | ax[i].text(28.015, |
| - | ax[i].text(28.1, | + | ax[i].text(28.1, |
| - | ax[i].text(28.24, | + | ax[i].text(28.24, |
| - | ax[i].text(28.2, | + | ax[i].text(28.2, |
| - | ax[i].text(28.301, | + | ax[i].text(28.301, |
| - | ax[i].text(28.47, | + | ax[i].text(28.47, |
| - | ax[i].text(28.665, | + | ax[i].text(28.665, |
| - | ax[i].text(28.95, | + | ax[i].text(28.95, |
| - | ax[i].text(29.39, | + | ax[i].text(29.39, |
| - | ax[i].text(29.59, | + | ax[i].text(29.59, |
| # Axis | # Axis | ||
| Line 625: | Line 660: | ||
| # 6m | # 6m | ||
| - | i = 4 | + | i = i + 1 |
| - | left = 49.7 | + | left = 49.78 |
| - | right = 54.3 | + | right = 54.23 |
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(-1, | + | ax[i].set_ylim(-1, |
| # Frequency labels: | # Frequency labels: | ||
| Line 654: | Line 689: | ||
| # Label | # Label | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | ax[i].text(50.25, | + | ax[i].text(50.25, |
| - | ax[i].text(50, | + | ax[i].text(50, |
| - | ax[i].text(50, | + | ax[i].text(50, |
| - | ax[i].text(50.63, | + | ax[i].text(50.63, |
| - | ax[i].text(51, | + | ax[i].text(51, |
| - | ax[i].text(51, | + | ax[i].text(51, |
| - | ax[i].text(51.35, | + | ax[i].text(51.35, |
| - | ax[i].text(51.43, | + | ax[i].text(51.43, |
| - | ax[i].text(52.2, | + | ax[i].text(52.2, |
| - | ax[i].text(53.2, | + | ax[i].text(53.2, |
| # Axis | # Axis | ||
| Line 679: | Line 714: | ||
| label2_y = 0.79 # Centre label | label2_y = 0.79 # Centre label | ||
| label3_y = 0.88 # Top label | label3_y = 0.88 # Top label | ||
| - | label4_y = 1.92 # Very top band name | + | label4_y = 1.85 # Very top band name |
| # 2m https:// | # 2m https:// | ||
| - | i = 5 | + | i = i + 1 |
| left = 143.9 | left = 143.9 | ||
| right = 148.1 | right = 148.1 | ||
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(0.7, | + | ax[i].set_ylim(0.7, |
| # Frequency labels: | # Frequency labels: | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | xlabels= [144, 148] | + | xlabels = [144, 148] |
| # Misc | # Misc | ||
| - | ax[i].broken_barh([(144, | + | ax[i].broken_barh([(144, |
| - | ax[i].text(144.13, | + | ax[i].text(144.13, |
| # Digital Group 1 | # Digital Group 1 | ||
| - | xlabels= xlabels + [144.370] | + | xlabels = xlabels + [144.370] |
| - | ax[i].broken_barh([(144.37, | + | ax[i].broken_barh([(144.37, |
| - | ax[i].text(144.37, | + | ax[i].text(144.37, |
| # Repeater Group 1 and 2 | # Repeater Group 1 and 2 | ||
| - | xlabels= xlabels + [144.51, 145.11] | + | xlabels = xlabels + [144.51, 145.11] |
| ax[i].broken_barh([(144.51, | ax[i].broken_barh([(144.51, | ||
| ax[i].broken_barh([(145.11, | ax[i].broken_barh([(145.11, | ||
| - | ax[i].text(145.115, | + | ax[i].text(145.115, |
| - | ax[i].text(145.115, | + | ax[i].text(145.115, |
| - | ax[i].text(144.515, | + | ax[i].text(144.515, |
| - | ax[i].text(144.515, | + | ax[i].text(144.515, |
| - | ax[i].text(145.27, | + | ax[i].text(145.27, |
| - | ax[i].text(144.67, | + | ax[i].text(144.67, |
| ax[i].broken_barh([(144.59, | ax[i].broken_barh([(144.59, | ||
| ax[i].broken_barh([(145.19, | ax[i].broken_barh([(145.19, | ||
| # Digital Repeater Group 1 and 2 | # Digital Repeater Group 1 and 2 | ||
| - | xlabels= xlabels + [144.91, 145.51] | + | xlabels = xlabels + [144.91, 145.51] |
| - | ax[i].broken_barh([(144.91, | + | ax[i].broken_barh([(144.91, |
| - | ax[i].broken_barh([(145.51, | + | ax[i].broken_barh([(145.51, |
| - | ax[i].text(144.91, | + | ax[i].text(144.91, |
| - | ax[i].text(144.91, | + | ax[i].text(144.91, |
| - | ax[i].text(145.51, | + | ax[i].text(145.51, |
| - | ax[i].text(145.51, | + | ax[i].text(145.51, |
| - | ax[i].text(145.01, | + | ax[i].text(145.01, |
| - | ax[i].text(145.01, | + | ax[i].text(145.01, |
| - | ax[i].text(145.61, | + | ax[i].text(145.61, |
| - | ax[i].text(145.61, | + | ax[i].text(145.61, |
| # Repeater Group 3 | # Repeater Group 3 | ||
| - | xlabels= xlabels + [146.02, 146.62] | + | xlabels = xlabels + [146.02, 146.62] |
| - | ax[i].broken_barh([(146.02, | + | ax[i].broken_barh([(146.02, |
| - | ax[i].broken_barh([(146.62, | + | ax[i].broken_barh([(146.62, |
| - | ax[i].text(146.1, | + | ax[i].text(146.1, |
| - | ax[i].text(146.7, | + | ax[i].text(146.7, |
| # Repeater Group 4 | # Repeater Group 4 | ||
| - | xlabels= xlabels + [147, 147.6] | + | xlabels = xlabels + [147, 147.6] |
| - | ax[i].broken_barh([(147, | + | ax[i].broken_barh([(147, |
| - | ax[i].broken_barh([(147.6, | + | ax[i].broken_barh([(147.6, |
| - | ax[i].text(147.1, | + | ax[i].text(147.1, |
| - | ax[i].text(147.7, | + | ax[i].text(147.7, |
| # Digital Simplex | # Digital Simplex | ||
| - | xlabels= xlabels + [145.71] | + | xlabels = xlabels + [145.71] |
| - | ax[i].broken_barh([(145.71, | + | ax[i].broken_barh([(145.71, |
| - | ax[i].text(145.71, | + | ax[i].text(145.71, |
| # Satellite | # Satellite | ||
| - | xlabels= xlabels + [145.8] | + | xlabels = xlabels + [145.8] |
| - | ax[i].broken_barh([(145.8, | + | ax[i].broken_barh([(145.8, |
| - | ax[i].text(145.85, | + | ax[i].text(145.85, |
| # FM Simplex | # FM Simplex | ||
| - | xlabels= xlabels + [146.415] | + | xlabels = xlabels + [146.415] |
| - | ax[i].broken_barh([(146.415, | + | ax[i].broken_barh([(146.415, |
| - | ax[i].broken_barh([(147.6, | + | ax[i].broken_barh([(147.6, |
| - | ax[i].text(146.415, | + | ax[i].text(146.415, |
| - | ax[i].text(147.7, | + | ax[i].text(147.7, |
| # Internet Linked Simplex | # Internet Linked Simplex | ||
| - | xlabels= xlabels + [147.42] | + | xlabels = xlabels + [147.42] |
| - | ax[i].broken_barh([(147.42, | + | ax[i].broken_barh([(147.42, |
| - | ax[i].text(147.42, | + | ax[i].text(147.42, |
| - | ax[i].text(147.42, | + | ax[i].text(147.42, |
| # Axis | # Axis | ||
| Line 772: | Line 807: | ||
| # 70cm https:// | # 70cm https:// | ||
| - | i = 6 | + | i = i + 1 |
| left = 429.5 | left = 429.5 | ||
| right = 450.5 | right = 450.5 | ||
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(0.7, | + | ax[i].set_ylim(0.7, |
| # Frequency labels: | # Frequency labels: | ||
| - | ax[i].text(left, | + | ax[i].text(left, |
| - | xlabels= [430, 450] | + | xlabels = [430, 450] |
| # Packet Trunked Repeaters | # Packet Trunked Repeaters | ||
| - | xlabels= xlabels + [439.05] | + | xlabels = xlabels + [439.05] |
| - | ax[i].broken_barh([(430.05, | + | ax[i].broken_barh([(430.05, |
| - | ax[i].text(430.05, | + | ax[i].text(430.05, |
| - | ax[i].text(430.05, | + | ax[i].text(430.05, |
| - | ax[i].broken_barh([(439.05, | + | ax[i].broken_barh([(439.05, |
| - | ax[i].text(439.05, | + | ax[i].text(439.05, |
| - | ax[i].text(439.05, | + | ax[i].text(439.05, |
| # Not allocated | # Not allocated | ||
| - | xlabels= xlabels + [431] | + | xlabels = xlabels + [431] |
| - | ax[i].broken_barh([(431, | + | ax[i].broken_barh([(431, |
| # Misc | # Misc | ||
| - | xlabels= xlabels + [431.5] | + | xlabels = xlabels + [431.5] |
| - | ax[i].broken_barh([(431.5, | + | ax[i].broken_barh([(431.5, |
| - | ax[i].text(432, | + | ax[i].text(432, |
| # Digi Output | # Digi Output | ||
| - | xlabels= xlabels + [433.025] | + | xlabels = xlabels + [433.025] |
| - | ax[i].broken_barh([(433.025, | + | ax[i].broken_barh([(433.025, |
| - | ax[i].text(433.025, | + | ax[i].text(433.025, |
| - | ax[i].text(433.025, | + | ax[i].text(433.025, |
| # Digi Input | # Digi Input | ||
| - | xlabels= xlabels + [438.025] | + | xlabels = xlabels + [438.025] |
| - | ax[i].broken_barh([(438.025, | + | ax[i].broken_barh([(438.025, |
| - | ax[i].text(438.025, | + | ax[i].text(438.025, |
| - | ax[i].text(438.025, | + | ax[i].text(438.025, |
| # Repeater Output | # Repeater Output | ||
| - | xlabels= xlabels + [434.025] | + | xlabels = xlabels + [434.025] |
| - | ax[i].broken_barh([(434.025, | + | ax[i].broken_barh([(434.025, |
| - | ax[i].text(434.025, | + | ax[i].text(434.025, |
| - | ax[i].text(434.025, | + | ax[i].text(434.025, |
| # Repeater Input FIXME | # Repeater Input FIXME | ||
| - | #xlabels= xlabels + [439.025] | + | #xlabels = xlabels + [439.025] |
| - | ax[i].broken_barh([(439.025, | + | ax[i].broken_barh([(439.025, |
| - | # | + | # |
| - | # | + | # |
| # Sat | # Sat | ||
| - | xlabels= xlabels + [435] | + | xlabels = xlabels + [435] |
| - | ax[i].broken_barh([(435, | + | ax[i].broken_barh([(435, |
| - | ax[i].text(436.3, | + | ax[i].text(436.3, |
| # Digital and link repeaters, except where used by IC Output | # Digital and link repeaters, except where used by IC Output | ||
| - | xlabels= xlabels + [440.025] | + | xlabels = xlabels + [440.025] |
| - | ax[i].broken_barh([(440.025, | + | ax[i].broken_barh([(440.025, |
| - | ax[i].text(440.025, | + | ax[i].text(440.025, |
| - | ax[i].text(440.025, | + | ax[i].text(440.025, |
| # Digital and link repeaters, except where used by IC Input | # Digital and link repeaters, except where used by IC Input | ||
| - | xlabels= xlabels + [445.025] | + | xlabels = xlabels + [445.025] |
| - | ax[i].broken_barh([(445.025, | + | ax[i].broken_barh([(445.025, |
| - | ax[i].text(445.025, | + | ax[i].text(445.025, |
| - | ax[i].text(445.025, | + | ax[i].text(445.025, |
| # Simplex Point-to-Point links | # Simplex Point-to-Point links | ||
| - | xlabels= xlabels + [441] | + | xlabels = xlabels + [441] |
| - | ax[i].broken_barh([(441, | + | ax[i].broken_barh([(441, |
| - | ax[i].text(440.9, | + | ax[i].text(440.9, |
| - | ax[i].text(441, | + | ax[i].text(441, |
| # FM Repeaters Output | # FM Repeaters Output | ||
| - | xlabels= xlabels + [442] | + | xlabels = xlabels + [442] |
| - | ax[i].broken_barh([(442, | + | ax[i].broken_barh([(442, |
| - | ax[i].text(442, | + | ax[i].text(442, |
| - | ax[i].text(442, | + | ax[i].text(442, |
| # FM Repeaters Input | # FM Repeaters Input | ||
| - | xlabels= xlabels + [447] | + | xlabels = xlabels + [447] |
| - | ax[i].broken_barh([(447, | + | ax[i].broken_barh([(447, |
| - | ax[i].text(447, | + | ax[i].text(447, |
| - | ax[i].text(447, | + | ax[i].text(447, |
| # FM Repeaters Output | # FM Repeaters Output | ||
| - | xlabels= xlabels + [443.025] | + | xlabels = xlabels + [443.025] |
| - | ax[i].broken_barh([(443.025, | + | ax[i].broken_barh([(443.025, |
| - | ax[i].text(443.025, | + | ax[i].text(443.025, |
| - | ax[i].text(443.025, | + | ax[i].text(443.025, |
| # FM Repeaters Input | # FM Repeaters Input | ||
| - | xlabels= xlabels + [448.025] | + | xlabels = xlabels + [448.025] |
| - | ax[i].broken_barh([(448.025, | + | ax[i].broken_barh([(448.025, |
| - | ax[i].text(448.025, | + | ax[i].text(448.025, |
| - | ax[i].text(448.025, | + | ax[i].text(448.025, |
| # FM Simplex | # FM Simplex | ||
| - | xlabels= xlabels + [446] | + | xlabels = xlabels + [446] |
| - | ax[i].broken_barh([(446, | + | ax[i].broken_barh([(446, |
| - | ax[i].text(446, | + | ax[i].text(446, |
| Line 894: | Line 929: | ||
| # Axis: 2 graphs on a 11x8.5 sheet (landscape) | # Axis: 2 graphs on a 11x8.5 sheet (landscape) | ||
| - | fig3, ax = plt.subplots(nrows=2, | + | fig3, ax = plt.subplots(nrows=2, |
| # HF | # HF | ||
| i = 0 | i = 0 | ||
| - | ax[i].set(title=' | + | ax[i].set(title=' |
| left = 0 | left = 0 | ||
| right = 55 | right = 55 | ||
| Line 906: | Line 941: | ||
| # Axis | # Axis | ||
| ax[i].set_xlim((left, | ax[i].set_xlim((left, | ||
| - | ax[i].set_ylim(-0.3, | + | ax[i].set_ylim(-0.3, |
| ax[i].set_yticks(y_ticks) | ax[i].set_yticks(y_ticks) | ||
| # 160m | # 160m | ||
| - | ax[i].broken_barh([(1.8, | + | ax[i].broken_barh([(1.8, |
| - | ax[i].text(1.6, | + | ax[i].text(1.0, -1, ' |
| # 80m | # 80m | ||
| - | ax[i].broken_barh([(3.5, | + | ax[i].broken_barh([(3.5, |
| - | ax[i].text(3.6, | + | ax[i].text(3.2, -1, '80m', fontsize=7) |
| + | |||
| + | # 60m | ||
| + | ax[i].broken_barh([(5.3305, | ||
| + | ax[i].text(5.05, | ||
| # 40m | # 40m | ||
| - | ax[i].broken_barh([(7, | + | ax[i].broken_barh([(7, |
| - | ax[i].text(7.0, | + | ax[i].text(6.8, -1, ' |
| # 30m | # 30m | ||
| - | ax[i].broken_barh([(10.1, | + | ax[i].broken_barh([(10.1, |
| - | ax[i].text(10.15, | + | ax[i].text(10.15, |
| # 20m | # 20m | ||
| - | ax[i].broken_barh([(14, | + | ax[i].broken_barh([(14, |
| - | ax[i].text(14, | + | ax[i].text(13.7, -1, ' |
| # 17m | # 17m | ||
| - | ax[i].broken_barh([(18.068, | + | ax[i].broken_barh([(18.068, |
| - | ax[i].text(18.05, | + | ax[i].text(17.8, -1, ' |
| # 15m | # 15m | ||
| - | ax[i].broken_barh([(21, | + | ax[i].broken_barh([(21, |
| - | ax[i].text(21, | + | ax[i].text(20.7, -1, ' |
| # 12m | # 12m | ||
| - | ax[i].broken_barh([(24.89, | + | ax[i].broken_barh([(24.89, |
| - | ax[i].text(24.8, | + | ax[i].text(24.6, -1, ' |
| # 10m | # 10m | ||
| - | ax[i].broken_barh([(28, | + | ax[i].broken_barh([(28, |
| - | ax[i].text(28, | + | ax[i].text(28, |
| # 50m | # 50m | ||
| - | ax[i].broken_barh([(50, | + | ax[i].broken_barh([(50, |
| - | ax[i].text(51.5, | + | ax[i].text(51.5, |
| # SWR Data | # SWR Data | ||
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].set(ylabel=' | + | ax[i].set(ylabel=' |
| # VHF / UHF | # VHF / UHF | ||
| - | i = 1 | + | i = i + 1 |
| - | ax[i].set(title=' | + | ax[i].set(title=' |
| left = 100 | left = 100 | ||
| right = 500 | right = 500 | ||
| y_ticks = [1, 1.5, 2, 3, 5] | y_ticks = [1, 1.5, 2, 3, 5] | ||
| - | ax[i].set_xlim(left, | + | ax[i].set_xlim(left, |
| - | ax[i].set_ylim(0.8, | + | ax[i].set_ylim(0.8, |
| ax[i].set_yticks(y_ticks) | ax[i].set_yticks(y_ticks) | ||
| # 2m | # 2m | ||
| - | ax[i].broken_barh([(144, | + | ax[i].broken_barh([(144, |
| - | ax[i].text(138, | + | ax[i].text(138, |
| # 135cm | # 135cm | ||
| - | ax[i].broken_barh([(222, | + | ax[i].broken_barh([(222, |
| - | ax[i].text(220, | + | ax[i].text(220, |
| # 70cm | # 70cm | ||
| - | ax[i].broken_barh([(430, | + | ax[i].broken_barh([(430, |
| - | ax[i].text(430, | + | ax[i].text(430, |
| # SWR Data | # SWR Data | ||
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].plot(FREQ, | + | ax[i].plot(FREQ, |
| - | ax[i].set(ylabel=' | + | ax[i].set(ylabel=' |
| Line 995: | Line 1034: | ||
| </ | </ | ||
| - | FIXME: Update graphics to match latest band plan --- // | ||
links/band_plan_with_swr.1732254051.txt.gz · Last modified: by 127.0.0.1
