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