Обработка данных радиотелескопов: выбор технологий и методов
В этой статье мы обсуждаем выбор технологий и методов обработки данных радиотелескопов, включая языки программирования и форматы хранения данных.

В данной статье мы рассмотрим ключевой аспект работы радиотелескопов — обработку данных. Эта тема требует наличия знаний в области программирования, и создание соответствующего программного обеспечения может быть сложной задачей. К счастью, существует множество ресурсов, которые могут помочь в этом.
Выбор технологий
Существует множество языков программирования и библиотек, что может запутать новичков. Каждый язык имеет свои особенности и предназначен для определенных задач. Например, PHP не подходит для радиотелескопов, так как он предназначен для веб-разработки. Аналогично, использование VB на Raspberry Pi с Linux невозможно из-за несовместимости. Каждый случай уникален, и выбор зависит от навыков разработчика. Лично я использую C для оптимизации работы программ.
Описание языков:
C и C++

Если вы имеете опыт в программировании, стоит рассмотреть C или C++, особенно если вам знакома объектно-ориентированная программа. Эти языки обеспечивают высокую производительность и экономию ресурсов, но их сложность может стать преградой для новичков. Основная сложность заключается в том, что программист сам управляет памятью, и ошибки могут привести к множеству проблем. Кроме того, C и C++ являются компилируемыми языками, что требует дополнительных шагов для создания исполняемого файла.
Python

Если вы только начинаете, Python станет отличным выбором. Этот язык прост в освоении и использовании. Установка библиотек осуществляется легко через командную строку, например, команда pip install numpy. Библиотека NumPy значительно упрощает математические операции, а добавление SciPy предоставляет все необходимые функции для обработки сигналов, включая FFT. Python не компилируется, что облегчает его использование — достаточно ввести python my_script.py, чтобы запустить программу. Однако стоит помнить, что на Raspberry Pi с 500 МБ ОЗУ могут возникнуть ограничения.
Другие языки
Что касается других языков:
- Java не подходит для радиотелескопов, так как он создан для долгосрочного поддержания кода и не оптимален.
- Perl можно заменить на Python, который проще и более эффективен.
- VB не стоит использовать, так как лучше работать с Linux.
- C# остается без комментариев, так как, если бы он был лучше Python, я бы это знал.
Таким образом, Python оказывается наиболее простым и эффективным выбором.
Теперь, когда мы выбрали язык, давайте рассмотрим операционную систему.
Linux подходит лучше всего: он эффективен и гибок. Хотя для новичков он может показаться сложным, после небольшого обучения он оказывается гораздо проще, чем Windows. Лично я предпочитаю Debian или Ubuntu.
Как обрабатывать сырые данные?
Данные поступают от АЦП, который преобразует радио сигнал в цифровые данные. Существует два сценария:
- Сложные данные с двумя АЦП, один из которых принимает сигнал с фазовым сдвигом 90°.
- Обычные данные с одним АЦП.
Это влияет на обработку перед вычислением спектра. Если у вас два АЦП, как в RTLSDR, необходимо преобразовать блоки из двух чисел в одно комплексное число, называемое IQ-данными или квадратичным сигналом.
Какие расчеты выполнять в программном обеспечении радиотелескопа?
Для получения спектра сигнала используются Быстрые Преобразования Фурье (FFT). В зависимости от выбранного языка доступны различные библиотеки:
- В Python: NumPy и SciPy.
- В C: FFTW.
В Python достаточно вызвать функцию, и она выполнит все необходимые операции. В C потребуется использовать разные функции в зависимости от типа сырых данных (комплексные или реальные). В итоге, все сводится к простому ожиданию завершения вычислений.
Что делать с результатами?
Когда программа выделяет интересующие данные, необходимо определить, как их сохранить и проанализировать. Основная цель радиотелескопа — это именно анализ данных. Существует несколько вариантов, и мы рассмотрим наиболее эффективный и простой.
Наилучший вариант — создать файл, который займет минимум места и не будет слишком ресурсоемким. Формат файла должен быть легким для обработки.
Например, число 144 можно сохранить в текстовом файле, используя 3 байта, что будет занимать больше места, чем если бы мы сохранили его в бинарном формате. Однако бинарный формат не будет совместим с обычными текстовыми редакторами. Поэтому наиболее простым вариантом является использование CSV, который легко импортировать в таблицы и создавать графики, так как все языки программирования имеют встроенные функции для работы с ним.
Также существует метод создания изображений, который будет описан в отдельной статье. Я предпочитаю визуализировать данные, и поэтому мой радиотелескоп основан на записи метеоров в виде изображений.
Маленький бонус:
В заключение, приведем несколько фрагментов кода, которые могут помочь в разработке.



