2016-03-27 10 views
1

Я пытаюсь демодулировать сигнал GFSK в течение нескольких месяцев, используя GNU Radio с USRP B210. К сожалению, я не нашел ни одной достойной книги на GNU Radio, и поэтому большинство моих ссылок основаны на некоторых случайных сайтах, включая официальную страницу GNU Radio.Демодуляция GFSK с фильтром Xlating в GNU Radio

Сигнал GFSK поступает из кубасата в лаборатории. В настоящий момент он передает тестовый сигнал «10101010 ......». Используемый индекс модуляции GFSK равен 0,6667, а скорость передачи данных - 9600 бит/с. В моем потоковом графике, как показано на диаграмме ниже, используется блок демонов GFSK, который, по-видимому, не имеет никакой документации, кроме исходного кода. Чувствительность установлена ​​на уровне pi * modulation_index/samples_per_symbol. Я записал несколько файлов, выбранных как 10x 20x 40x 80x и 160x скорость передачи (9600). В обоих этих файлах мне удалось получить повторяющиеся группы 0x55 и 0xAA, как и ожидалось. К сожалению, эти группы сопровождались некоторыми случайными байтами, о которых я не знаю, откуда они пришли [моя первая догадка - шум].

Серьезно, я смог получить очень приличный выход, когда я сдвинул принятый сигнал от USPR на 1000 Гц, используя частотный фильтр для фильтра, который был выбран в 40 раз. Здесь происходит какое-то смешное поведение гнурадио. Я использую ползунок для управления центральной частотой фильтра xlating, чтобы иметь возможность изменить его по умолчанию (1000hz) на любое значение, которое я хочу во время выполнения. Когда я меняю значение, сигнал становится менее приличным, то есть заменой бит, добавлением случайных байтов и т. Д. Я ожидал, что сигнал вернется к норме, когда я вернусь на 1000 Гц, что довольно странно.

Может ли кто-нибудь сказать мне, почему это происходит? Мой график показан ниже. Не стесняйтесь указывать на ошибки, которые я до сих пор забыл.

xlating еловые отводы фильтра: firdes.low_pass_2 (1, samp_rate, cut_off, xlating_bw, xlating_attn)

[enter image description here]

ответ

2

Во-первых: Нет, я не могу объяснить странное поведение при скольжении. Однако изменение смещения частоты, безусловно, приведет к большим частотным скачкам в декодированном сигнале (именно поэтому вы все-таки это делаете), и структурам, отвечающим за восстановление времени, это не понравится; это ожидалось.

К сожалению, я не нашел ни единого приличного книги по GNU Radio

Там нет. Радио GNU развивалось быстро, и поэтому ни один из людей, близких к «основным» кругам развития, не успел написать что-то подобное.

и, следовательно, большинство моих ссылок основаны на некоторых случайных сайтах, включая официальную страницу радио GNU.

Ну, официальный веб-сайт GNU Radio, безусловно, не случайный, но подходящее место!

Я буду ссылаться на условиях GNU Radio, такие как иерархического блока, связи и т.д. отсюда; если вы не понимаете всех этих, я бы рекомендовал пройти через official Guided Tutorials!

GFSK демодулятор блок, который, видимо, не делает никакой документации, кроме исходного кода

Ну, есть документация комментарий в исходном коде, который не получить добытые Сфинкс; однако, эта документация не видна в GRC. Мы должны работать над этим!

Однако документация комментарий довольно многословен:

Hierarchical block for Gaussian Minimum Shift Key (GFSK) 
demodulation. 

The input is the complex modulated signal at baseband. 
The output is a stream of bits packed 1 bit per byte (the LSB) 

Args: 
    samples_per_symbol: samples per baud (integer) 
    verbose: Print information about modulator? (bool) 
    log: Print modualtion data to files? (bool) 

Clock recovery parameters. These all have reasonble defaults. 

Args: 
    gain_mu: controls rate of mu adjustment (float) 
    mu: fractional delay [0.0, 1.0] (float) 
    omega_relative_limit: sets max variation in omega (float, typically 0.000200 (200 ppm)) 
    freq_error: bit rate error as a fraction 
    float: 

В принципе, вы можете полностью настроить параметры восстановления синхронизации и FM демодулятор, содержащейся в иерархическом блоке.

Теперь, очевидно, это не сработало для вас так далеко! Я думаю, что вы должны идти вперед и воссоздать иерархический поток в GRC графике:

Чтение того же источника, вы найдете

self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self) 

, что означает:

Как иерархического блока, который является gfsk_demod ,

  • подключить его входной порт на вход fmdemod,
  • подключения fmdemod на входе clock_recovery, а затем
  • вывести выходной сигнал блока восстановления часов и преобразовать его в дискретные числа (используя slicer).

Несколько строк в исходном коде вы найдете, как они параметризуются.

Я предлагаю вам сначала подать в свой сигнал RX на «запас» Квадратурный демод блок. Математически это будет принимать входной сигнал и преобразовывать его в свою фазовую скорость (т. Е. «Мгновенную частоту» каждого образца, выраженную как кратную частоте дискретизации). Визуализируйте вывод с помощью рамы/времени! Правильно ли это выглядит, т. Е. Вы видите переменные «высокие» и «низкие» значения в форме грубо гауссовского импульса?

Если это так, скопируйте Muller & блок восстановления часов Mueller в GRC (или замените его новым, блестящим восстановлением часов PFB, который намного лучше работает с реальными сигналами); действительно ли результат выглядит правильно?

Используйте «decimating FIR», чтобы уменьшить выходную мощность на samples_per_symbol; делает ли это по-прежнему ваш исходный бит-поток «мягкими» значениями? Если это так, двоичный фрагмент результата.

+0

@markus Я снова заглянул в источник gfsk.py, чтобы узнать, как блокируются параметры. Ваш последний комментарий, в котором предполагалось, что восстановление часов PFB лучше при работе с реальными сигналами, спасло день. После замены блока M & M на PFB мне удалось восстановить бит-поток. Параметры, которые я использовал для PFB, такие же, как те, которые используются в учебнике по учебным материалам GNU Radio Guided Tutorial # 7 (http://gnuradio.org/redmine/projects/gnuradio/wiki/Guided_Tutorial_PSK_Demodulation). Должна ли быть какая-либо модификация в случае, если я хочу получать пакетированные данные в отличие от непрерывного потока 101010? –

+0

@MosesBrowneMwakyanjala хорошо, пакетирование - это немного более высокоуровневая концепция.Я бы посоветовал вам взглянуть на gnuradio/examples/digital/ofdm/rx_ofdm.grc (возможно, в разделе/​​usr/share/(local)); это депакератор, соответствующий пакетизатору, определенному в tx_ofdm.grc. Это может дать вам представление о том, как создать свой де-пакетизатор для ваших данных. В принципе, ваш поток символов, вероятно, будет содержать преамбулу? Вы можете просто сопоставить это, а затем извлечь заголовок, содержащий длину пакета, и написать блок «передать только пакетную полезную нагрузку». –

 Смежные вопросы

  • Нет связанных вопросов^_^