Легкий посібник з чіткими поясненнями основних фізичних принципів. Чудовий спосіб почати використовувати ваш NanoVNA з Python.
Основи NanoVNA
Векторні аналізатори мережі (VNA) існують вже довгий час і широко використовуються в дослідженнях. Хоча вони є чудовим інструментом, VNA завжди були дуже дорогими, тому доступні лише для дослідницьких груп і компаній, залишаючи студентів і хобістів без доступу. Нещодавно був представлений NanoVNA — компактний і доступний цифровий VNA. Це справжня революція, і тепер вони використовуються хобістами та дослідниками по всьому світу. У цій статті я продемонструю класичний приклад вимірювання кабелю з використанням NanoVNA та Python модуля pynanovna.
Основи параметрів s
Більшість VNA оснащені двома портами: один для випромінювання та вимірювання електромагнітних хвиль, а інший лише для вимірювань. Вимірювання зазвичай проводяться під час "сканувань", коли хвилі випромінюються на певному діапазоні частот. Один з типів вимірювань, що використовуються з VNA, це параметри розсіювання, часто називаються s-параметрами.
Перший s-параметр, S11, представляє сигнал, що випромінюється з першого порту та відбивається назад до нього. Другий параметр, S21, представляє сигнал, що випромінюється з першого порту та приймається другим портом. Дані s-параметрів є комплексними числами, що представляють величину та фазовий зсув прийнятого сигналу.
У цьому посібнику ми виміряємо довжину кабелю за допомогою двох різних методів: один використовуючи S11 і інший використовуючи S21.
Налаштування NanoVNA
Почніть з увімкнення NanoVNA та підключення його до вашого комп'ютера через USB-кабель. На комп'ютері встановіть pynanovna за допомогою наступної команди:
pip install pynanovna
Далі виконайте стандартну калібрування NanoVNA. (Порада: використовуйте цей скрипт калібрування). Не пропускайте крок калібрування, оскільки це важливо для отримання надійних вимірювань.
Вимірювання довжини кабелю за допомогою S11
Тепер до самих вимірювань кабелю! Підключіть один кінець кабелю до першого порту NanoVNA і залиште інший кінець не підключеним. Далі виконайте широке сканування; ви можете вибрати діапазон частот і кількість точок залежно від можливостей вашого конкретного NanoVNA. Я буду використовувати сканування з 1001 точок між 50 кГц та 3 ГГц. Ось кілька рядків коду для цього:
vna = pynanovna.VNA() # Ініціалізуємо NanoVNA.
vna.load_calibration("the_calibration_you_just_made.cal") # Завантажуємо калібрування. Калібрування має бути виконано заздалегідь.
vna.set_sweep(frequency_min, frequency_max, n_points) # Налаштовуємо сканування.
s11, s21, frequencies = vna.sweep() # Виконуємо сканування та отримуємо дані.
Що ж сталося? Ваш NanoVNA відправив сигнал для кожної частоти у скануванні через кабель. Потім він виміряв відбитий сигнал, що надійшов назад в кожен порт. Звісно, лише перший порт отримав сигнал, оскільки другий порт не був підключений до нічого. Виміряний сигнал у першому порту — це сигнал, що пішов до кінця кабелю і "відбився" назад.
Аналіз S11
S-параметри є комплексними числами, що описують відбиту версію оригінального сигналу, простіше кажучи: це сигнали у частотній області. Тепер це означає, що існує також представлення цих сигналів у часовій області! Якщо ми використаємо обернений перетворення Фур'є, ми отримаємо сигнал у часовій області. Ось де відбувається магія: інформація про час зсуву не є функцією довжини хвилі.
Часова область сигналу покаже виражений пік, що відповідає моменту, коли більша частина сигналу була прийнята! Позначимо значення часу цього піка як t1.
Часовий сигнал S11
Як ми знаємо, відстань d визначається за формулою:
Відстань d, швидкість v і час t
Ми також знаємо, що швидкість електромагнітних хвиль дорівнює швидкості світла c, помноженій на коефіцієнт для середовища, через яке поширюється хвиля, позначимо його як k. Цей коефіцієнт часто надається виробником кабелю.
Тепер ми можемо обчислити відстань кабелю:
Відстань d, швидкість світла c, коефіцієнт швидкості k і час піка t1
Тепер ви, можливо, запитаєте, чому ми ділимо на 2. Це тому, що сигнал має пройти двічі відстань кабелю, перш ніж повернутися до порту.
Ось кілька рядків коду для виконання цих обчислень:
time_domain = np.fft.ifft(s11) # Виконуємо IFFT для отримання даних у часовій області.
time = np.fft.fftfreq(len(frequencies), d=(frequencies[1] - frequencies[0])) # Також перетворюємо частотну вісь на час.
time_positive = time[time >= 0] # Тільки позитивні значення часу.
time_domain_positive = time_domain[time >= 0] # Тільки позитивні значення часу.
peak_time_index = np.argmax(np.abs(time_domain_positive)) # Знаходимо пік.
peak_time = time_positive[peak_time_index] # Знаходимо час піка.
Мої обчислення дали відстань 3.29 метра, що на один сантиметр менше реальної довжини кабелю 3.30 метра.
Вимірювання довжини кабелю за допомогою S21
Тепер ми можемо виміряти відстань кабелю за допомогою параметра S21. Підключіть вільний кінець кабелю до другого порту і виконайте ті ж самі дії, що й раніше. Тепер сигнал більше не «відбивається» назад, замість цього ми вимірюємо сигнал, що передається до другого порту.
Після оберненого перетворення сигналу S21 в часову область, ми повинні отримати подібний пік, як і раніше, але злегка зсунутий вліво.
Часовий сигнал S21
Часове значення цього піка t2 можна використовувати так само, як і раніше, але з тією відмінністю, що ми вже не ділимо на 2, оскільки сигнал S21 робить лише однонаправлений шлях.
Відстань d, швидкість світла c, коефіцієнт швидкості k і час піка t2
Але що робити, якщо коефіцієнт швидкості невідомий?
У такому випадку ви можете виміряти довжину кабелю вручну, а потім, використовуючи ту ж саму методику, але замість цього розв'язати для коефіцієнта k у формулі:
Відстань d, швидкість світла c, коефіцієнт швидкості k і час піка t
Це дасть вам точне значення коефіцієнта швидкості!
Код
Python ноутбук, що містить весь код та графіки, доступний тут.
Джерела
- pynanovna: Python модуль для NanoVNA (версія 1.0.0). 2024. DOI: 10.5281/zenodo.14231111.
- Перетворення Фур'є. Wikipedia, The Free Encyclopedia.
- Параметри розсіювання. Wikipedia, The Free Encyclopedia.
Перекладено з: How to Measure Cable Length with NanoVNA and Python: A Beginner’s Guide