Все о GNU Radio
Добавлено: Сб сен 16, 2023 14:23:34
Собственно, тема по вопросам работы с софтом GNU Radio.
Столкнулся с необходимостью приема и декодирования GFSK сигнала на SDR приемник в целях отладки.
В качестве железа используется самый дешманский RTL-SDR приемник, который смог найти у китайцев.
Ясно, что у него частота плавать может, SNR и чувствительность не очень хорошие и вот это вот все,
но мне для этой задачи его более чем достаточно.
Задача: Принять и декодировать любой GFSK сигнал, проскочивший в исследуемой полосе приема.
Прослушиваемый диапазон: от 433,018 МГц до 434,822 МГц.
Центральная частота: 433,92 МГц.
Ширина диапазона: 1,804 МГц.
Частота выборок: 2,4 Мвыб/сек.
На данный момент я собрал приемник и декодер на одну частоту, но нужно на весь диапазон.
Что есть сейчас в программе:
Приемник настроен на центральную частоту (433,92).
Ввиду того, что приемник шлет синфазно-квадратурные выборки, он охватывает полосу аж в 2,4 МГц (а не 1,2 МГц, если бы это были обычные выборки [теорема Котельникова как ни как]), соответственно, интересующий диапазон он охватывает с запасом. И спектр несимметричный, что тоже упрощает задачу (по крайней мере, не придется отсекать от него половину).
Выборки приемника поступают на первый вход умножителя, а на второй вход подается синусоидальный сигнал с отступом от отдельно задаваемой принимаемой частоты (в пределах диапазона) в 8 кГц.
Формула частоты, заданная в блоке выглядит так: rcvBandCenter - (rcvChannelFreq + 8e3)
То есть, реализована перестройка в диапазоне методом гетеродинирования.
Далее, выборки с выхода умножителя поступают на вход ФНЧ с полосой пропускания 32кГц и полосой перехода 8кГц.
Как я понимаю, этот фильтр ограничивает полосу приема до 64 кГц (32 кГц вверх и столько же вниз по спектру от центра)
Выборки с выхода фильтра поступают поступают на "пороговое устройство" (Power Squelch), блок, который пропускает сигнал на выход только если его уровень выше заданного порога.
С выхода этого блока выборки поступают в блок "GFSK demod", который выдает на выход поток битов передаваемых данных.
Дальше уже происходит упаковка битов в байты с помощью блока "Sync and create PDU" и принятый пакет выводится в консоль в шестнадцатеричном виде.
В принципе, если пакет пришел по известной и заданной частоте, то он прекрасно принимается и выводится.
Но если пакет пришел на другой частоте, на которую на данный момент SDR приемник не настроен, то он не будет принят.
Соответственно вопрос: Как можно сделать так, чтобы принимался любой пакет, пришедший на любой частоте в пределах диапазона 1,804 МГц? На ум приходит какой-нибудь блок анализатора спектра (поставленный до смесителя), который выдавал бы на выходе частоту самого большого пика на спектре и по нему вычислить величину перестройки гетеродина. Но блоков таких я не нашел. Есть ли какие-то другие методы?
Столкнулся с необходимостью приема и декодирования GFSK сигнала на SDR приемник в целях отладки.
В качестве железа используется самый дешманский RTL-SDR приемник, который смог найти у китайцев.
Ясно, что у него частота плавать может, SNR и чувствительность не очень хорошие и вот это вот все,
но мне для этой задачи его более чем достаточно.
Задача: Принять и декодировать любой GFSK сигнал, проскочивший в исследуемой полосе приема.
Прослушиваемый диапазон: от 433,018 МГц до 434,822 МГц.
Центральная частота: 433,92 МГц.
Ширина диапазона: 1,804 МГц.
Частота выборок: 2,4 Мвыб/сек.
На данный момент я собрал приемник и декодер на одну частоту, но нужно на весь диапазон.
Что есть сейчас в программе:
Приемник настроен на центральную частоту (433,92).
Ввиду того, что приемник шлет синфазно-квадратурные выборки, он охватывает полосу аж в 2,4 МГц (а не 1,2 МГц, если бы это были обычные выборки [теорема Котельникова как ни как]), соответственно, интересующий диапазон он охватывает с запасом. И спектр несимметричный, что тоже упрощает задачу (по крайней мере, не придется отсекать от него половину).
Выборки приемника поступают на первый вход умножителя, а на второй вход подается синусоидальный сигнал с отступом от отдельно задаваемой принимаемой частоты (в пределах диапазона) в 8 кГц.
Формула частоты, заданная в блоке выглядит так: rcvBandCenter - (rcvChannelFreq + 8e3)
То есть, реализована перестройка в диапазоне методом гетеродинирования.
Далее, выборки с выхода умножителя поступают на вход ФНЧ с полосой пропускания 32кГц и полосой перехода 8кГц.
Как я понимаю, этот фильтр ограничивает полосу приема до 64 кГц (32 кГц вверх и столько же вниз по спектру от центра)
Выборки с выхода фильтра поступают поступают на "пороговое устройство" (Power Squelch), блок, который пропускает сигнал на выход только если его уровень выше заданного порога.
С выхода этого блока выборки поступают в блок "GFSK demod", который выдает на выход поток битов передаваемых данных.
Дальше уже происходит упаковка битов в байты с помощью блока "Sync and create PDU" и принятый пакет выводится в консоль в шестнадцатеричном виде.
В принципе, если пакет пришел по известной и заданной частоте, то он прекрасно принимается и выводится.
Но если пакет пришел на другой частоте, на которую на данный момент SDR приемник не настроен, то он не будет принят.
Соответственно вопрос: Как можно сделать так, чтобы принимался любой пакет, пришедший на любой частоте в пределах диапазона 1,804 МГц? На ум приходит какой-нибудь блок анализатора спектра (поставленный до смесителя), который выдавал бы на выходе частоту самого большого пика на спектре и по нему вычислить величину перестройки гетеродина. Но блоков таких я не нашел. Есть ли какие-то другие методы?