1. Вступ

Мета та цільова аудиторія

Перш за все, кілька важливих термінів:

Програмно-визначене радіо (SDR):

Як концепція, це використання програмного забезпечення для виконання завдань обробки сигналів, які традиційно виконувалися апаратними засобами та пов’язані з радіо/RF застосунками. Це програмне забезпечення може працювати на комп’ютері загального призначення (CPU), FPGA або навіть GPU і може застосовуватися як у режимі реального часу, так і для офлайн-обробки записаних сигналів. Аналогічні терміни: «програмне радіо» та «радіочастотна цифрова обробка сигналів».

Як пристрій (наприклад, «SDR») це зазвичай пристрій, до якого можна під’єднати антену й приймати радіочастотні сигнали, а оцифровані RF-вибірки надсилаються на комп’ютер для обробки чи запису (наприклад, через USB, Ethernet, PCI). Багато SDR також мають можливості передавання, що дозволяють комп’ютеру надсилати вибірки до SDR, який потім випромінює сигнал на заданій радіочастоті. Деякі вбудовані SDR мають інтегрований комп’ютер.

Цифрова обробка сигналів (DSP):
Цифрова обробка сигналів; у нашому випадку — радіосигналів.

Цей підручник є практичним вступом до галузей DSP, SDR та бездротового зв’язку. Він призначений для тих, хто:

  1. Зацікавлений у використанні SDR для створення крутих речей
  2. Добре знається на Python
  3. Відносно новачок в ЦОС (DSP), бездротовому зв’язку та SDR
  4. Візуальний учень, що віддає перевагу анімації, а не рівнянням
  5. Краще розуміє рівняння після вивчення концепцій
  6. Шукає стислі пояснення, а не 1000-сторінковий підручник

Прикладом може бути студент факультету комп’ютерних наук, зацікавлений у роботі, пов’язаній з бездротовим зв’язком, після закінчення навчання, хоча ним може користуватися будь-хто, хто прагне вивчити SDR і має досвід програмування. Таким чином, він охоплює необхідну теорію для розуміння методів DSP без складної математики, яка зазвичай присутня в курсах DSP. Замість того, щоб занурюватися в рівняння, автор використовує велику кількість зображень і анімацій, які допомагають передати концепції, наприклад анімацію комплексної площини ряду Фур’є, наведену нижче. Я вважаю, що рівняння найкраще розуміються після опанування концепцій за допомогою візуалізацій і практичних вправ. Інтенсивне використання анімацій — причина, чому PySDR ніколи не матиме друкованої версії, що продається на Amazon.

Логотип PySDR, створений за допомогою перетворення Фур'є

Цей підручник покликаний швидко і плавно ознайомити з поняттями, що дозволить читачеві виконувати DSP і розумно використовувати SDR. Він не задуманий як довідник з усіх тем DSP/SDR; уже існує безліч чудових підручників, таких як Analog Device’s SDR textbook та dspguide.com. Ви завжди можете скористатися Google, щоб пригадати тригонометричні тотожності або межу Шеннона. Сприймайте цей підручник як «ворота» у світ DSP та SDR: він легший і потребує менше часу та коштів у порівнянні з більш традиційними курсами і підручниками.

Щоб охопити фундаментальну теорію DSP, цілий семестр курсу «Сигнали і системи», типового для електротехнічних спеціальностей, стиснуто до кількох розділів. Після вивчення основ DSP ми переходимо до SDR, хоча поняття DSP і бездротового зв’язку продовжують з’являтися протягом усього підручника.

Чому Python?

З огляду на назву PySDR ви можете подумати, що Python є критично важливою частиною цього ресурсу, але насправді вибір мови програмування тут не такий вже й принциповий. В епоху ШІ переписати код з однієї мови на іншу - тривіальна задача. У цьому підручнику ми використовуємо Python майже як різновид псевдокоду, з тим бонусом, що його справді можна запустити, побачити результати, побудувати графіки сигналів, перебрати параметри тощо. Python обрано просто тому, що він безкоштовний, легко запускається на всіх платформах, потребує мало шаблонного коду, має легкий синтаксис, добре читається і має величезну екосистему бібліотек та прикладів коду. Допомагає й те, що більшість SDR мають Python API.

PySDR навмисно не містить власної бібліотеки Python чи будь-яких функцій-обгорток - увесь код написано чистим Python із використанням стандартних бібліотек, таких як NumPy (стандартна бібліотека для масивів і математики високого рівня), SciPy (більш специфічні для ЦОС функції, наприклад проєктування фільтрів) та Matplotlib (побудова графіків, що дозволяє візуалізувати сигнали).

Зауважте, що хоча Python загалом “повільніший” за C/C++, більшість функцій у Python/NumPy насправді реалізовано на C/C++ під капотом і добре оптимізовано, тож ви можете здивуватися, наскільки швидко ЦОС на процесорі може працювати в Python. Так само SDR API, які ми використовуємо (наприклад, UHD), - це просто набір Python-прив’язок до функцій/класів на C/C++. У реальних розгорнутих радіосистемах високошвидкісна обробка сигналів усе одно зазвичай реалізується у ПЛІС!

Деякі глави PySDR містять приклади коду, які можна відкрити як вебовий Jupyter-ноутбук (за допомогою JupyterLite), що дозволяє експериментувати з прикладами на Python і запускати їх прямо з браузера, нічого не встановлюючи. Щоб перевірити, чи це працює у вашому браузері, спробуйте відкрити цей приклад.

Долучитися

Якщо ви отримали користь від PySDR, поділіться ним із колегами, студентами та іншими допитливими людьми, яких може зацікавити цей матеріал. Ви також можете зробити пожертву через PySDR Patreon як спосіб подяки та отримати згадку зліва на кожній сторінці під списком розділів. Є також можливість зробити разову пожертву.

Якщо ви прочитаєте будь-яку частину цього підручника і напишете мені на marc@pysdr.org з питаннями/коментарями/пропозиціями, то вітаємо, ви зробили свій внесок у створення цього підручника! Ви також можете редагувати вихідний матеріал безпосередньо на сторінці підручника на GitHub (ваша зміна покладе початок новому запиту на заміну). Не соромтеся надсилати проблему або навіть запит на вилучення (PR) з виправленнями або покращеннями. Ті, хто надсилає цінні відгуки/виправлення, будуть постійно додаватися до розділу подяк нижче. Не дуже добре володієте Git’ом, але хочете запропонувати зміни? Не соромтеся писати мені на marc@pysdr.org.

Подяки

Дякуємо всім, хто прочитав будь-яку частину цього підручника і надіслав відгук, а особливо:

А також усім прихильникам PySDR Patreon!