Заметки из разработки

Что ломалось, как искали и чем закончилось

Ниже — четыре истории из отладки приложения для наблюдения за эфиром. Полезны тем, кто пишет свой тракт: почти все ошибки типовые и всплывают на первых же испытаниях.

Почему запись приносила одни нули

Симптом неприятный: поток с платы идёт, вход полон отсчётов, а записанный фрагмент — нули от начала до конца.

Помогли счётчики: процент ненулевых отсчётов на входе и сразу после преобразователя. На входе — почти шестьдесят процентов, на выходе — ноль. Поток живой, терялось именно на переносе в основную полосу: шаг гетеродина оставался равным единице, и сигнал сдвигался за пределы полосы.

Что сделали: шаг перестройки по умолчанию, привязку фрагмента к центру приёма, а не к середине потока, и полосу из настроек. Плюс отдельный признак «пустой фрагмент» с уровнем входа — чтобы отличать «нет сигнала» от поломки.

Поиск не видел сильный сигнал

Сигнал заведомо мощный, а детектор его не находил. Оказалось, обход диапазона выбрасывал четверть блока вокруг центральной частоты — около двух с половиной мегагерц.

Разбор сырых блоков показал: собственная линия приёмника занимает один бин, а уже в двадцати килогерцах от неё шум. То есть выброс был в сто раз шире, чем нужно.

Что сделали: сузили выброс до пятидесяти килогерц и стали заново выставлять частоту, полосу и усиление при старте приёма — после обхода плата оставалась на своих настройках.

Сорок семь находок вместо одной

Поиск в полосе десять мегагерц выдавал десятки находок за секунды, из которых настоящей была одна.

Причина в пороге: он считался от одного числа на кадр. Но при обходе каждый блок приходит со своим усилением, а шум в полосе стоит на десять-двадцать дБ выше, чем у центра.

Что сделали: шум оценивается по кадру процентилем, а каждый бин сравнивается с шумом рядом с ним. В находке хранится местный шум — теперь «дБ над шумом» в таблице совпадает с картинкой на экране.

Калибровка мерила юбку своей же линии

Уровень калибровался по генератору, а результат зависел от усиления и был стабильно завышен.

Измерение шло ровно в центре настройки, причём один бин пропускался — и отсчёт попадал на юбку собственной линии приёмника, которая растёт вместе с усилением. Прибор тут был ни при чём.

Что сделали: приёмник настраивается на полмегагерца в сторону, пик ищется в окне поиска вне центра, порог — десять дБ над местной медианой. В журнал пишутся полоса, число бинов и абсолютная частота пика: ошибку настройки видно сразу.

Что из этого стоит запомнить

Устройство тракта