Заметки из разработки
Что ломалось, как искали и чем закончилось
Ниже — четыре истории из отладки приложения для наблюдения за эфиром.
Полезны тем, кто пишет свой тракт: почти все ошибки типовые и всплывают
на первых же испытаниях.
Почему запись приносила одни нули
Симптом неприятный: поток с платы идёт, вход полон отсчётов, а записанный
фрагмент — нули от начала до конца.
Помогли счётчики: процент ненулевых отсчётов на входе и сразу после
преобразователя. На входе — почти шестьдесят процентов, на выходе — ноль.
Поток живой, терялось именно на переносе в основную полосу: шаг гетеродина
оставался равным единице, и сигнал сдвигался за пределы полосы.
Что сделали: шаг перестройки по умолчанию, привязку
фрагмента к центру приёма, а не к середине потока, и полосу из настроек.
Плюс отдельный признак «пустой фрагмент» с уровнем входа — чтобы отличать
«нет сигнала» от поломки.
Поиск не видел сильный сигнал
Сигнал заведомо мощный, а детектор его не находил. Оказалось, обход
диапазона выбрасывал четверть блока вокруг центральной частоты — около
двух с половиной мегагерц.
Разбор сырых блоков показал: собственная линия приёмника занимает один бин,
а уже в двадцати килогерцах от неё шум. То есть выброс был в сто раз шире,
чем нужно.
Что сделали: сузили выброс до пятидесяти килогерц и стали
заново выставлять частоту, полосу и усиление при старте приёма — после обхода
плата оставалась на своих настройках.
Сорок семь находок вместо одной
Поиск в полосе десять мегагерц выдавал десятки находок за секунды, из которых
настоящей была одна.
Причина в пороге: он считался от одного числа на кадр. Но при обходе каждый
блок приходит со своим усилением, а шум в полосе стоит на десять-двадцать
дБ выше, чем у центра.
Что сделали: шум оценивается по кадру процентилем, а каждый
бин сравнивается с шумом рядом с ним. В находке хранится местный шум — теперь
«дБ над шумом» в таблице совпадает с картинкой на экране.
Калибровка мерила юбку своей же линии
Уровень калибровался по генератору, а результат зависел от усиления и был
стабильно завышен.
Измерение шло ровно в центре настройки, причём один бин пропускался —
и отсчёт попадал на юбку собственной линии приёмника, которая растёт вместе
с усилением. Прибор тут был ни при чём.
Что сделали: приёмник настраивается на полмегагерца в
сторону, пик ищется в окне поиска вне центра, порог — десять дБ над местной
медианой. В журнал пишутся полоса, число бинов и абсолютная частота пика:
ошибку настройки видно сразу.
Что из этого стоит запомнить
- Счётчики потока на каждом этапе дешевле любого отладчика — они сразу
показывают, где именно теряются данные.
- Собственная линия приёмника — источник половины проблем с детектором
и калибровкой. Её всегда нужно выводить из зоны измерения.
- Порог по местному шуму надёжнее любого фиксированного, если усиление
меняется по ходу обхода.
- Проверять тракт надо тоном известной частоты: расхождение в единицы
герц на килогерце сразу показывает, где ошибка.
Устройство тракта