До стрічки

Обробка даних у радіоастрономії: вибір технологій

У статті розглядається важливість обробки даних у радіоастрономії, вибір мов програмування та технологій для роботи з даними.

Обробка даних у радіоастрономії: вибір технологій

У цій статті ми розглянемо важливий аспект роботи радіотелескопів — обробку даних. Це складна тема, оскільки вимагає знань у галузі комп'ютерних наук. Створення програмного забезпечення та застосувань є непростим завданням, але на щастя, в Інтернеті існує безліч ресурсів, які можуть допомогти.

Які технології обрати?

Є багато мов програмування та бібліотек у рамках цих мов. Для новачка може бути важко визначити, які методи є найбільш підходящими. Слід пам'ятати, що кожна мова програмування має свої застосування. Наприклад, PHP не підходить для радіотелескопів, оскільки ця мова призначена для веб-сайтів. Також VB не можна використовувати на Raspberry з Linux, оскільки це не сумісно. Кожен випадок унікальний, і у кожного є свої навички. Особисто я використовую C для оптимізації.

Опис мов:

C та C++

Якщо ви добре знаєте програмування, обирайте C або C++, якщо вам знайома об'єктно-орієнтована програма. Хоча для радіотелескопа, що лише обробляє дані, об'єктно-орієнтована програма не є обов'язковою. C/C++ — це мови, які забезпечують найкращу продуктивність, швидкість і економію ресурсів. Але вони також є одними з найскладніших для освоєння, оскільки програміст самостійно управляє пам'яттю програми, що може призвести до багатьох помилок. Окрім того, це компільовані мови, тому потрібно використовувати програму для перетворення коду в виконуваний файл, що також не є простим завданням. Я рекомендую ці мови, але якщо ви їх ніколи не використовували, є й більш прості варіанти.

Python

Для тих, хто починає програмувати, рекомендую звернути увагу на Python. Це одна з найпростіших мов, як з точки зору коду, так і його використання. Встановлення бібліотек відбувається автоматично за допомогою однієї команди в консолі, наприклад: pip install numpy. NumPy — це бібліотека, що спрощує математичні обчислення в Python, дозволяючи виконувати складні завдання з мінімумом коду. Додавши SciPy до вашого скрипту, ви отримаєте всі необхідні функції для обробки сигналу, включаючи FFT. Зазначу, що я говорю про скрипт, а не програму, оскільки Python не компілюється, на відміну від C. Просто введіть у консолі: python my_script.py, і все — значно простіше. Що стосується продуктивності, то вона не вражає, але достатня для нормального комп'ютера. Проте на Raspberry потрібно бути обережним, адже вона має лише 500 МБ оперативної пам'яті.

Інші можливості

Які ще варіанти?

Java — це мова для компаній, які хочуть підтримувати свій код довгий час, але вона не оптимізована.

Perl, на мою думку, краще замінити на Python, оскільки він простіший і, напевно, більш оптимізований.

VB — зовсім ні, адже ми повинні працювати на системі Linux. Linux набагато зручніший у використанні.

C# — я не маю думки про цю мову, але якщо б вона була кращою за Python, я б про це знав, тому C# також не рекомендую.

Здається, ви починаєте розуміти, чому варто обирати просту мову, коли Python є ефективним вибором.

Отже, ми вибрали нашу мову, тепер розглянемо операційну систему.

Windows (автор цієї статті ледь не отримав серцевий напад при згадці про цю операційну систему) — жахливо.

Linux — так, Linux ідеально підходить для нас. Це легко, ефективно, гнучко. Хоча для новачків це може здаватися складним, але як тільки ви трохи знайомі з ним, все стає набагато простіше.

Яка версія Linux найкраща? Debian або Ubuntu. Я віддаю перевагу Debian.

Як обробляти сирі дані?

Ми отримуємо дані від нашого АЦП, який перетворює наш радіосигнал у цифрові дані. Існує два можливі варіанти:

  • Складні дані з 2 АЦП, один з яких отримує сигнал, зсунутий на 90° (детальніше про обробку сигналу).
  • Звичайні дані з 1 АЦП.

Це вплине на обробку перед розрахунком спектра. Якщо у вас 2 АЦП, як у випадку з RTLSDR, потрібно брати кожну пару чисел і перетворювати їх у комплексне число. Сигнал у формі комплексного числа називається IQ даними або квадратичним сигналом.

Які розрахунки виконати в програмному забезпеченні для радіотелескопа?

Ми прагнемо отримати спектр нашого сигналу. Для цього існують FFT (швидке перетворення Фур'є). Існують бібліотеки в залежності від обраної мови:

  • У Python — NumPy та SciPy.
  • У C — FFTW.

Для Python це дуже просто: потрібно просто викликати функцію, і вона виконає решту. Для C є кілька функцій в залежності від типу ваших сирих даних (складні або реальні). Все це поміщається в цикл, і залишається тільки чекати. Я люблю автономні системи, але кожна система має свій спосіб реагування в залежності від того, що ми хочемо, тому я не можу детально описати цю частину, але планую написати статтю, щоб пояснити свій випадок і дати вам уявлення.

Що робити з результатами?

Коли програма виділила цікаві дані, потрібно визначити, як їх зберегти та проаналізувати. Це, власне, і є метою нашого радіотелескопа. Існує кілька можливостей, і ми розглянемо найкраще та найпростіше рішення.

Найкраще рішення — те, яке займає найменше місця та не є занадто важким для машини. Найкраще створити формат файлу, який легко обробляти та легкий.

Наприклад, між форматом txt та власним форматом:

Число 144 має бути збережено. У файлі txt воно буде збережено на 3 байти так: ‘00110001 00110100 00110100’ або в шістнадцятковій системі ’31 34 34’, що відповідає 3 символам для запису ‘144’. Власний формат може означати збереження числа замість символів. Отже, в бінарному вигляді ‘10010000’ і в шістнадцятковій системі ’90’. Для того ж самого ми бачимо, що текстовий файл буде в 3 рази більшим. Цей випадок передбачає, що максимальне число не перевищує 255, оскільки в іншому випадку знадобиться 2 байти для збереження числа, хоча це все ще краще, ніж txt. Недолік цього методу полягає в тому, що ви не зможете відкривати свої файли за допомогою програм, як для txt. Вам, напевно, знадобиться інша програма для читання ваших файлів.

Найпростіший метод — зберігати дані у форматі CSV. Цей формат файлу використовує ту ж методику, що й текстові файли, але має додаткові функції. Їх легко імпортувати в табличний процесор і створювати графіки. Крім того, усі мови програмування мають вбудовані функції для їх читання або створення.

Існує також інший метод, який буде предметом окремої статті — створення зображень. Мені подобається візуалізувати свої дані, тому я побудував свій радіотелескоп на основі метеорів для запису у формі зображення.

Маленький бонус:

Велика кількість кодів, які можуть вам допомогти: Розділ програмування