Антенны > Устройства для настройки и проверки антенн, прочее
AA-30 Zero - собираем статистику и рисуем графики
(1/1)
UT3UDX:
Эта статья будет полезна в первую очередь тем , кто купил плату Rigexpert AA-30 ZERO и не особо
нашел ей применение,как я - до последнего времени
Как-то неделю назад я решил поработать на КВ, повесил антенну ,диполь ,
- размотал, поднял, подключил - померял КСВ и как-то загрустил.
КСВ на 7.15 mHz плавал в пределах от 1 до 1.5 в зависмости от погоды и сырости на улице - что за хрень, подумал я?
Сырость. Но надо-бы собрать статистику.
В итоге , я написал небольшой скрипт, состоящий из 4 частей - Python словарь, который содержит в себе параметры
каждого диапазона функция, которая общается с платой, функция генерации картинок, как в Антскоп, и функция ,
которая складывает параметры опроса в базу данных, для дальнейшей обработки. А , еще небольшая функция, которая
вычисляет КСВ исходя из значений сопротивления нагрузки, реактивного и активного сопротивления излучателя.
photo_2021-06-30_21-18-32.jpg (Filesize: 16.57 Кб)
photo_2021-06-27_21-09-03.jpg (Filesize: 16.56 Кб)
Принцип работы простой, из прибора берем частоту, активное и реактивное сопротивление, вычисляем КСВ и записываем в базу.
сам скрипт
--- Код: ---#!/usr/bin/env python3
import serial
import math
import matplotlib.pyplot as plt
from datetime import datetime
import sqlite3
import requests
Band = {'160':['fq1900000', 'sw200000', 'frx20', '20'],
'80': ['fq3750000', 'sw500000', 'frx50', '50'],
'60': ['fq5331900', 'sw28000', 'frx20', '20'],
'40': ['fq7150000', 'sw1000000', 'frx30', '30'],
'30': ['fq10125000', 'sw50000', 'frx10', '10'],
'20': ['fq14150000', 'sw300000', 'frx30', '30'],
'17': ['fq18118000', 'sw100000', 'frx10', '10'],
'15': ['fq21225000', 'sw450000', 'frx45', '45'],
'12': ['fq24940000', 'sw100000', 'frx10', '10'],
'10': ['fq28985000', 'sw1970000', 'frx50', '50']
}
ser = serial.Serial('/dev/ttyUSB3', baudrate=38400, timeout=1)
def swr_calculate(R, X):
XX = float(X) * float(X)
Rm = (float(R) - 50) * (float(R) - 50)
Rp = (float(R) + 50) * (float(R) + 50)
N = math.sqrt(Rm + XX)
D = math.sqrt(Rp + XX)
G = N / D
vswr = (1 + G) / (1 - G)
return round(vswr, 2)
freqs = []
vswrs = []
f = open("SWR-and-Frequency-" + str(datetime.now().strftime("%Y-%m-%d-%H-%M-%S"))+".csv","w+")
def insertVaribleIntoTable(freq,vswr, date):
try:
sqliteConnection = sqlite3.connect('aa-30-zero.db')
cursor = sqliteConnection.cursor()
sqlite_insert_with_param = """INSERT INTO swr_measurements (freq, vswr, date) VALUES (?, ?, ?);"""
data_tuple = (freq, vswr, date)
cursor.execute(sqlite_insert_with_param, data_tuple)
sqliteConnection.commit()
cursor.close()
except sqlite3.Error as error:
print("Failed to insert Python variable into sqlite table", error)
finally:
if sqliteConnection:
sqliteConnection.close()
def GetSWR(band):
ser.write(bytes((str(Band[band][0]) + '\r\n'), "ascii"))
ser.readline()
ser.write(bytes((str(Band[band][1]) + '\r\n'), "ascii"))
ser.readline()
ser.write(bytes((str(Band[band][2]) + '\r\n'), "ascii"))
ser.readline()
ser.write(bytes(('\n'), "ascii"))
for i in range(int(Band[band][3])):
x = ser.readline().decode('ascii').split(',')
freq = round(float(x[0]),3)
print('{freq},{swr}'.format(freq=freq, swr=swr_calculate(x[1], x[2])))
freqs.append(freq)
vswrs.append(swr_calculate(x[1], x[2]))
f.write('{freq},{swr}'.format(freq=freq, swr=swr_calculate(x[1], x[2])) + '\n')
vswr = swr_calculate(x[1], x[2])
datetttt= str(datetime.now().strftime("%Y-%m-%d-%H-%M-%S"))
insertVaribleIntoTable(freq,vswr,datetttt )
''' if you need graphs - uncoment this function call below'''
# graph(band)
def graph(band):
dpi = 120
plt.figure(dpi=dpi, figsize=(1324 / dpi, 600 / dpi))
plt.plot(freqs, vswrs)
plt.title(band + " SWR vs Frequency " + str(datetime.now().strftime("%Y-%m-%d %H-%M-%S")))
plt.xlabel("Frequency, MHz")
plt.ylabel("SWR")
start_freq = (freqs[0])
end_freq = (freqs[len(freqs)-1])
plt.axis([start_freq, end_freq, 1.0, 9.0])
plt.grid(True)
plt.savefig("band_" + band + "_" + str(datetime.now().strftime("%Y%m%d-%H%M%S")) + ".png")
freqs.clear()
vswrs.clear()
if __name__ == '__main__':
for key in ['80', '60', '40', '30', '20', '17', '15', '12', '10']:
GetSWR(key)
--- End code ---
создаем базу данных
--- Код: ---#sqlite3 aa-30-zero.db
--- End code ---
создаем таблицу
--- Код: ---max@max rigexpert (master) $ sqlite3 aa-30-zero.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> CREATE TABLE "swr_measurements" (
...> "freq" VARCHAR(255),
...> "vswr" VARCHAR(255),
...> "date" VARCHAR(255)
...> ;
sqlite>
--- End code ---
начинаем туда писать, писать, собираем статистику, ждем, и вот мы ее собрали.
посмотрим какой у нас КСВ от 7.1 до 7.25 mHz, отсортируем по полю vswr и выведем 10 результатов
--- Код: ---max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" WHERE freq > '7.1%' and freq < '7.25%' ORDER BY vswr LIMIT 10;" | sqlite33 -table aa-30-zero.db
+-------+------+---------------------+
| freq | vswr | date |
+-------+------+---------------------+
| 7.25 | 1.28 | 2021-06-28-01-26-39 |
| 7.25 | 1.3 | 2021-06-28-01-26-22 |
| 7.25 | 1.3 | 2021-06-28-01-30-04 |
| 7.25 | 1.32 | 2021-06-28-01-22-30 |
| 7.25 | 1.34 | 2021-06-28-01-26-59 |
| 7.25 | 1.34 | 2021-06-28-01-31-53 |
| 7.25 | 1.38 | 2021-06-28-02-14-26 |
| 7.25 | 1.4 | 2021-06-28-01-25-04 |
| 7.25 | 1.4 | 2021-06-28-02-10-03 |
| 7.217 | 1.41 | 2021-06-28-01-26-59 |
+-------+------+---------------------+
--- End code ---
Оk, а в целом, самый маленький во всем диапазоне ?
--- Код: ---max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" ORDER BY vswr LIMIT 10;" | sqlite33 -table aa-30-zero.db
+-------+------+---------------------+
| freq | vswr | date |
+-------+------+---------------------+
| 7.4 | 1.09 | 2021-06-28-00-45-14 |
| 7.417 | 1.09 | 2021-06-28-01-26-09 |
| 7.417 | 1.09 | 2021-06-28-01-34-08 |
| 7.417 | 1.09 | 2021-06-28-01-34-37 |
| 7.4 | 1.09 | 2021-06-28-06-00-14 |
| 7.4 | 1.09 | 2021-06-28-07-15-14 |
| 7.4 | 1.09 | 2021-06-28-08-00-14 |
| 7.4 | 1.1 | 2021-06-28-00-29-12 |
| 7.4 | 1.1 | 2021-06-28-00-29-56 |
| 7.4 | 1.1 | 2021-06-28-00-30-25 |
+-------+------+---------------------+
--- End code ---
Так, а самый большой?
--- Код: ---max@max rigexpert (master) $ echo "SELECT * FROM "swr_measurements" ORDER BY vswr DESC LIMIT 10;" | sqlite33 -table aa-30-zero.db
+-------+------+---------------------+
| freq | vswr | date |
+-------+------+---------------------+
| 5.107 | 8.55 | 2021-06-28-16-00-29 |
| 5.107 | 8.51 | 2021-06-28-16-45-08 |
| 5.107 | 8.43 | 2021-06-28-18-15-08 |
| 5.132 | 8.39 | 2021-06-28-16-00-30 |
| 5.107 | 8.38 | 2021-06-28-00-45-08 |
| 5.107 | 8.35 | 2021-06-28-17-00-08 |
| 5.107 | 8.33 | 2021-06-28-00-29-50 |
| 5.107 | 8.33 | 2021-06-28-18-00-08 |
| 5.132 | 8.32 | 2021-06-28-00-45-08 |
| 5.132 | 8.32 | 2021-06-28-18-00-08 |
+-------+------+---------------------+
[/ code]
Ну, как-то так.
Дальше данные уже можно сопоставить с погодой, ну и что-то решать - провести изоляционные работы или просто оставить как есть :)
--- End code ---
UT3UDX:
да, кстати, если у кого-то есть опыт сбора данных с aa-230 или любого другого который HID - я с радостью и удовольствием посмотрю ваш код, ибо у меня не получилось ничего написать для связи с этими анализаторами
UT5UKA:
Привет!
А есть уже статистика за месяц? И в графическом виде - как изменяется КСВ АФУ по дням (часам) ? И для сравнения график погоды, какая зависимость от погодных условий :smilie:
UT3UDX:
Привет!
Не, по дням нету, так, чтобы постоянно включать измерения - я не включал, надо же и поработать через антенну
Навігація
Go to full version