Если ты читаешь это, скорее всего тебе нужно видеть радиоэфир — не на экране осциллографа, а именно увидеть, какие частоты сейчас активны, поймать помеху в диапазоне КВ или УКВ, проверить работу передатчика или просто разобраться, что происходит в эфире. И ты хочешь сделать это сам, своими руками, используя то, что есть под рукой. С помощью одноплатного компьютера можно собрать вполне работоспособный анализатор спектра с полосой от пары килогерц до 30 МГц — и использовать его как в лаборатории, так и на выезде с ноутбуком и паяльником. Ниже я объясню по шагам, как это собрать, что выбрать и какие подстерегают подводные камни.
- Что вообще мы строим
- На базе чего реально работать до 30 МГц без аппаратных ухищрений
- Выбор АЦП: сердце анализатора
- Микросхемы для сравнения
- Передающая часть: генератор и смеситель
- Фильтрация: без неё никак
- Интерфейс АЦП с Raspberry Pi
- Программная часть: что крутить на Raspberry Pi
- Питание и портативность
- Типичные ошибки при сборке
- Что выбрать под свою задачу
- Как проверить, что всё работает
- Итог: что в итоге получаем
Что вообще мы строим
Анализатор спектра — это устройство, которое показывает, какой уровень сигнала присутствует на каждой частоте в заданном диапазоне. В отличие от осциллографа, где вы вите форму сигнала во времени, здесь вы вите «полосу» — уровень по вертикали, частоту по горизонтали. Прибор нужен всем, кто работает с радиочастотным спектром: от радиолюбителей до разработчиков электроники и инженеров по ЭМС.
Портативность в данном случае означает, что всё помещается в небольшой кейс, питается от 12-вольтового аккумулятора или USB-банка и не требует подключения к розетке. Полноценную лабораторную точность мы не получим, но для многих практических задач — вполне достаточно.
На базе чего реально работать до 30 МГц без аппаратных ухищрений
Почему именно 0–30 МГц? Потому что это любительские диапазоны от СДВ до УКВ, и здесь можно обойтись прямым дискретизацией. Большинство дешёвым SDR-приёмников не дотягивают до 30 МГц без щелей и скачков АРУ, а использование программируемых генераторов и трёх отвлечённых микросхем — уже совсем другая история.
Raspberry Pi в роли цифровой обработки — хороший выбор по нескольким причинам: мощный процессор для БПФ, поддержка Linux/Wires-X, наличие обширного сообщества и готовые библиотеки для обработки сигналов. Но у RPi нет встроенного АЦП, поэтому внешний преобразователь — обязательное звено.
Мы будем строить приёмник прямого преобразования (Direct Conversion Receiver), где входной сигнал смешивается с управляемым генератором (DDS или PLL), проходит фильтрацию и оцифровывается внешним АЦП. Затем Raspberry Pi берёт оцифрованные данные, выполняет БПФ и выводит спектр на экран.
Выбор АЦП: сердце анализатора
Для полосы 0–30 МГц нужно выбрать АЦП, который либо работает на частоте дискретизации не менее 60 МГц (по теореме Котельникова), либо использует принцип псевдослучайной выборки. На практике для начала лучше остановиться на двухканальном АЦП с частотой дискретизации 65 МГц и разрядностью 12 бит — например, AD9226 или аналоги. Это даст динамический диапазон около 70 дБ, что вполне достаточно для наблюдения за эфиром и поиска помех.
Более мощный вариант — использование АЦП на 125 МГц (AD9625), но интерфейс с Raspberry Pi станет сложнее, и для 30 МГц это избыточно. Поэтому 65-мегасэмплированный АЦП — оптимальный вариант для портативного прибора.
Важный момент: АЦП должен иметь внешний тактовый генератор, либо мы можем использовать генератор на плате для тактирования. Стабильность тактирования напрямую влияет на точность определения частоты, так что к этому нужно относиться серьёзно.
Микросхемы для сравнения
| Компонент | Макс. частота дискретизации | Разрядность | Интерфейс | Примечание |
|---|---|---|---|---|
| AD9238 | 65 Мвыб/с | 12 бит | Параллельный | Двухканальный, подходит для I/Q демодуляции |
| AD9226 | 65 Мвыб/с | 12 бит | Параллельный | Одноканальный, проще в развязке |
| LTC2145 | 125 Мвыб/с | 14 бит | LVDS | Выше динамический диапазон, но нужна плата-переходник |
| AD9361 | 61.44 Мвыб/с | 12 бит | LVDS | Полноценный SDR-трансивер, можно использовать только как приёмник |
Если бюджет ограничен и нет желания возиться с LVDS, AD9238 — самый простой путь. С ним можно собрать аналоговую часть на фольгированном стеклопластике без многослойной печатной платы.
Передающая часть: генератор и смеситель
Для выбранного диапазона 0–30 МГц генератор должен перестраиваться в пределах этих частот (плюс частота ПЧ, если используется супергетеродинная схема). Самый простой и предсказуемый вариант — использовать DDS-микросхему AD9850 или AD9851. Она выдаёт синусоиду до ~40 МГц, управляется по параллельному или последовательному интерфейсу, и имеет шаг подстройки ~0.029 Гц при 125-мегагерцевом тактовом генераторе.
Из минусов AD9850 — относительно высокий уровень гармоник и паразитных составляющих. Поэтому после него обязательно ставится фильтр нижних частот на частоте среза около 30–32 МГц. Без этого на спектре будут видны ложные сигналы от гармоник генератора.
В качестве смесителя подойд Gilbert cell на диодах или специализированная микросхема, например, ADE-1 (Mini-Circuits) или SA602. Последняя работает до 500 МГц, имеет встроенный генератор один для работы и низкое энергопотребление — то, что нужно для портативного варианта.
Принцип работы простой: входной сигнал с антенны проходит через полосовой фильтр, затем подаётся на смеситель, где умножается на сигнал генератора. На выходе мы получаем сигнал разностной частоты (ПЧ), который усиливается и подаётся на АЦП. Raspberry Pi управляет генератором, перестраивает его по шагам и одновременно снимает данные с АЦП — так и получается спектр.
Фильтрация: без неё никак
Входной полосовой фильтр — это первое, что отсекает помехи на частотах, кратных частоте ПЧ, и ложные каналы. Для диапазона 0–30 МГц можно использовать LC-фильтр 6-го порядка с частотой среза 32 МГц и полосой пропускания около 28 МГц. Компоненты — стандартные дроссели и конденсаторы, которые можно купить в магазине радиодеталей.
После смесителя нужен фильтр нижних частот на выходе ПЧ, чтобы убрать высокочастотные продукты смешения. Для этой цели подойдёт активный фильтр на операционном усилителе с полосой пропускания 1–2 МГц, если мы планируем анализировать узкополосные сигналы, или более широкий, если нужна полоса в десятки килогерц.
Если вы не хотите возиться с расчётами фильтров, можно взять готовые модули с AliExpress или аналогичных площадках — например, BPF для диапазонов 160–10 м. Но имейте в виду, что качество китайских фильтров сильно варьируется, и без проверки осциллографом не обойтись.
Интерфейс АЦП с Raspberry Pi
Это один из самых сложных моментов. АЦП выдаёт параллельные данные на частоте десятков мегагерц, а Raspberry Pi не имеет аппаратного параллельного ввода такой скорости. Есть несколько путей:
- Использовать FPGA как буфер. FPGA (например, Lattice iCE40) принимает данные от АЦП, буферизует их и по SPI или параллельному интерфейсу передаёт блоками на RPi. Это самый надёжный, но и самый сложный путь.
- Медленная дискретизация и программный БПФ. Если АЦП работает на низкой частоте (например, 1–2 Мвыб/с), данные можно читать напрямую через GPIO с помощью битбэнга. Но тогда полос анализа будет ограничена 1 МГц.
- Готовый SDR-приёмник в качестве АЦП. Можно взять модуль на основе AD9361 или аналог, который сам выполняет оцифровку и даёт данные по USB или Ethernet. Это сильно упрощает задачу, но теряется «честность» самодельного АЦПика.
Наиболее практичный для самоделки — первый вариант с FPGA. Да, это означает изучить основы Verilog/VHDL и купить отладочную плату, но зато вы получите полный контроль над временными характеристиками и сможете настроить любой цифровой интерфейс.
Более простой подход — использовать Raspberry Pi 4 с подключением АЦП через SPI-интерфейс с максимальной частотой SCLK. Для АЦПиков с встроенным SPI (например, MCP3208) это ограничивает нас частотой дискретизации в районе 100–200 кГц. Это не годится для 0–30 МГц, но подходит для анализа звукового спектра или низкочастотных сигналов.
Программная часть: что крутить на Raspberry Pi
После того как железо собрано и проверено, нужно заставить Raspberry Pi отображать спектр. Есть несколько готовых решений:
- GNU Radio + Python. Это основной инструмент для обработки сигналов на Linux. Вы можете написать свой блок БПФ, настроить параметры КПФ и визуализировать спектр в реальном времени. GNU Radio поддерживает множество источников данных, включая файлы, UDP и даже прямой ввод от SDR.
- C++ с FFTW. Если нужна максимальная производительность, можно написать программу на C++, использующую библиотеку FFTW для быстрого преобразования Фурье. RPi 4 с четырьмя ядрами вполне справляется с БПФ размером 4096–8192 точки в реальном времени, если оптимизировать код.
- SDR# или GQRX с конвертером. Если вы используете готовый SDR-приёмник (например, на базе RTL-SDR с апконвертером), то программная часть уже есть. Нужно только настроить параметры и убедиться, что конвертер работает в нужном диапазоне.
Для отображения водопада (спектрограммы) удобно использовать pygame или SDL2. Они позволяют рисовать изображение напрямую в фрейм缓冲 и обновлять экран с частотой 20–30 кадров/с, что достаточно для наблюдения за эфиром.
Если вы пишете свою программу, алгоритм такой: настраиваете генератор на определённую частоту, снимаете N отсчётов с АЦКП, оконно коррелируете (окно Ханна или Кайзера), выполняете БПФ, берёте модуль комплексного спектра, конвертируете в децибелы и отображаете. Повторяете для следующей частоты. Частотное разрешение будет равно Fs/N, где Fs — частота дискретизации АЦП.
Питание и портативность
Для портативного варианта нужно несколько напряжений: +5В для RPi, +3.3В для цифровых микросхем, +5В или +12В для аналоговой части (зависит от выбранных компонентов). Самый простой и надёжный путь — использовать DC-DC-преобразователи на базе микросхем вроде LM2596 (понижающий) или XL6009 (повышающий), подключённые к литиевому аккумулятору 3.7 В или 12-вольтовому свинцово-кислотному АКБ.
Важно: аналоговая часть (генератор, смеситель, усилители) очень чувствительна к помехам от импульсных преобразователей. Поэтому после каждого DC-DC ставьте LC-фильтр и размещайте аналоговую и цифровую части на разных участках платы, с отдельными земляными плоскостями, соединёнными в одну точку возле АЦП.
Если вы используете внешний АЦП на отдельной плате, подумайте о том, чтобы разместить его как можно ближе к аналоговой части и вести цифровые линии к RPi через плоский кабель или разъём. Длинные провода на частотах десятков мегагерц — это антенны, которые будут собирать помехи.
Типичные ошибки при сборке
- Игнорирование экранирования. Без металлического корпуса ваш приёмник будет ловить помехи от самой Raspberry Pi, от преобразователей питания и от окружающей электроники. Даже простая алюминиевая фольга, обёрнутая вокруг аналоговой части, сильно улучшит ситуацию.
- Плохая земля. Если вы соедините цифровую и аналоговую землю в разных точках, возникнут паразитные токи, и на спектре появятся ложные сигналы. Используйте одноточечное соединение земель и следите за тем, чтобы сигнальные провода не образовывали больших петель.
- Отсутствие входного фильтра. Без полосового фильтра на входе вы будете видеть не только нужный диапазон, но и ТВ-сигналы, FM-радио, сотовую связь — всё это попадёт в смеситель и создаст интермодуляционные искажения.
- Перегрузка смесителя. Если входной сигнал слишком мощный (например, от близко расположенного передатчика), смеситель перегрузится, и на спектре появятся ложные продукты. Используйте аттенюатор на входе или регулируемый усилитель с АРУ.
- Нестабильный генератор. Если генератор имеет фазовый шум, спектр будет размытым, и вы не сможете различить близко расположенные сигналы. Используйте кварцевый генератор с низким фазовым шумом и хорошо его экранируйте.
Что выбрать под свою задачу
Если тебе нужно просто посмотреть, что происходит в диапазоне КВ–УКВ, и ты не хочешь возиться с FPGA и высокочастотной схемотехникой — бери готовый SDR-приёмник на AD9361 или даже RTL-SDR с апконвертером. Это быстро, дёшево и работает приемлемо. Ты получишь анализатор спектра с полосой до 30 МГц без глубокого погружения в аналоговую схемотехнику.
Если ты хочешь aprender радиоэлектронику на практике и готов потратить время — собери свою схему с АЦП и DDS-генератором. Это даст глубокое понимание принципов работы супергетеродинных приёмников, фильтрации и оцифровки сигналов. Ты получишь устройство, которое можно модифицировать под конкретные задачи (например, добавить встроенный генератор или второй канал для приёма I/Q).
Если тебе важна портативность и автономность — отдавай предпочтение компонентам с низким энергопотреблением ( CMOS-микросхемы, литиевые аккумуляторы с DC-DC-преобразователями). Бери Raspberry Pi Zero 2 W вместо четвёртой модели — она потребляет меньше и при этом достаточно производительна для БПФ.
Как проверить, что всё работает
Первый тест — подать на вход сигнал от калибратора или простого генератора на частоту, например, 10 МГц. На спектре должна появиться чёткая линия на этой частоте. Если линия размазана — ищи источник шума (генератор, плохие контакты).
Второй тест — подать два сигнала близко, например 10 МГц и 10.01 МГц. Прибор должен различить обе линии. Если нет — проверь полосу пропускания ПЧ-фильтра и размер БПФ.
Третий тест — проверь динамический диапазон. Подай сигнал с затуханием от 0 до -70 дБм и посмотри, как меняется уровень на экране. Если при -50 дБм линия уже не видна, значит, динамический диапазон недостаточен — нужно снизить уровень шумов аналоговой части или увеличить разрядность АЦП.
Четвёртый тест — автономная работа. Отключи всё от сети и оставь прибор работать от аккумулятора на час-два. Параллельно включи рядом мобильный телефон и Bluetooth-наушники. Если на спектре не появилось новых сигналов — значит, экранирование и питание выполнены правильно.
Итог: что в итоге получаем
На выходе у нас есть устройство, которое:
- перестраивается по частоте в пределах 0–30 МГц,
- имеет полосу анализа до 2 МГц (зависит от ПЧ-фильтра),
- показывает спектр в реальном времени с водопадом,
- помещается в небольшой кейс и работает от аккумулятора,
- управляется с клавиатуры или сенсорного экрана.
Точность будет на уровне любительского прибора, но для поиска помех, наблюдения за эфиром и обучения — этого достаточно. Если вам нужна лабораторная точность, лучше взять готовый прибор. Но если вы хотите понять, как работает радиочастотный приёмник, и получить удовольствие от собственного железа — этот проект того стоит.
Начинать рекомендую с макетной платы и готовых модулей (DDS-генератор, смеситель, АЦП), постепенно заменяя их своей аналоговой частью на собственной плате. Так вы сможете сравнить и понять, где и что можно улучшить. Удачной сборки и чистого эфира!
