HackRF

Устранение центрального DC-пика частоты в Gnuradio простым способом

Недавно читатель RTL-SDR.com ghostop14 написал нам и захотел поделиться своим блоком GNU Radio и учебником, который показывает, как избавиться от DC-пика в GNU Radio. DC-пик — надоедливый пик в середине спектра, который появляется независимо от того, на какую частоту вы настраиваетесь, и встречается почти на всех SDR, таких как HackRF, используемый ghostop14. Программные программы вроде SDRsharp и HDSDR имеют алгоритмы по фильтрации и удалению DC-пика, но до сегодняшнего дня не существовало блока для GNU Radio.

Если вы ищете быстрое решение, блок CorrectIQ для GNU Radio от ghostop14 доступен по адресу https://github.com/ghostop14/gr-correctiq.git. Но если вам хочется интересного чтения о том, как ghostop14 понял, как создать этот блок, то у него есть отличный обзор, который доступен здесь (pdf).

Некоторые выдержки:

Это ваш первый опыт работы с gnuradio и вам нравится ваш hackrf. Вы поиграли с программным обеспечением приемника вроде SDRSharp и передачей аудио для декодирования вашего любимого сигнала, и теперь вы готовы углубиться и узнать больше о SDR. Все говорили о gnuradio, поэтому вы устанавливаете его и запускаете свой первый flowgraph. Вы добавляете блок источника osmocom и устанавливаете устройство на hackrf, задаёте частоту дискретизации, частоту и усиление, затем подключаете его к частотному приемнику и нажимаете кнопку, чтобы сгенерировать свой flowgraph. Простота, с которой вы только что построили приемник, и воодушевление от возможностей ошеломляют… вы не можете дождаться, чтобы нажать Play.

Затем случается следующее. Прямо посередине вашего первого flowgraph появляется огромный сигнал-пик, который вы знаете, что не тот сигнал, который вы хотите принять, и по мере изменения частоты он следует за вами. Что?!? Так что ваша первая мысль — вы что-то сделали неправильно. В конце концов вы новичок в gnuradio и уверены, что делаете ошибку новичка. Сначала вы убеждаетесь, что сигнала действительно нет. Вы возвращаетесь к SDRSharp и пика нет. Затем вы заменяете ваш hackrf на ваш airspy и rtl-sdr dongle, подаёте это в gnuradio, и пика всё равно нет. Что происходит? Почему мой любимый SDR, который я хочу использовать, делает это? Что вы натолкнулись на артефакт того, как SDR-радио выполняют IQ-сэмплинг. Ваши первые попытки поиска решения показывают, что это называется DC-пик, и он появится в исходных IQ-данных, и сделать ничего нельзя, чтобы остановить его. Поэтому вы возвращаетесь к любимому поисковику, потому что вы не можете быть первым, кто хочет избавиться от него, и обнаруживаете, что люди говорят, что у вас есть 3 варианта: 1) игнорировать его (да, не получится. Он огромный и прямо в середине моей полосы!) 2) смещённая настройка от него на вашей центральной частоте (что означает, что каждый flowgraph, который я создаю или загружаю, мне придётся вручную менять, чтобы действительно получить чистый сигнал центральной частоты и чтобы они работали. Должен быть лучший способ!), или 3) отфильтровать его.

Я наконец-то нашёл несколько часов, чтобы подробнее разобраться в проблеме и потратить время на поиск и понимание того, что происходило, и математику, лежащую в основе исправления. Затем я изучил, как другие делают то же самое в их коде. Оказывается, решение простое. Так как данные представляют собой чередующийся RF-сигнал, со временем среднее значение сигнала в чистом сигнале должно быть нулём (я понимаю, что упрощаю). Когда есть IQ DC-пик, это среднее не равно нулю. Поэтому решение — вычислять взвешенное среднее по текущим образцам и просто вычитать его из каждого будущего образца. Это не влияет на общее качество отфильтрованного сигнала, но пока пик находится на центральной частоте, такой подход очень эффективно его устраняет. И именно этого я и хотел добиться.

Блок CorrectIQ, который устраняет DC-пик в GNU Radio.

Источник:

Подбираете SDR под задачу?

Опишите, что и где хотите принимать, — подскажем подходящие модели и где их купить.

Похожие материалы

Весь блог