Интернет Вещей На Русском Языке. Многоканальная Мощность Физического Уровня Базовой Станции Openunb

OpenUNB - продолжим! Итак, мы сгенерировали сигнал OpenUNB согласно проекту стандарта (исходники находятся на сайте).

Гитхаб ).

Сигнал вышел в эфир, показав нам на устройстве свои прелести.

Теперь нам нужно преобразовать его в цифровую форму, отделить от других возможных сигналов и от шума, определить по частоте и времени.

У группы ни много ни мало, а 1000 каналов.

Чудеса цифровой обработки сигналов! И вы удивитесь тому, что простая железа они могут быть достигнуты.



Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB

Напомню, что OpenUNB предполагает односторонняя связь .

(Кстати, по данным опроса, около 40 процентов проголосовавших согласились с таким подходом.

) То есть базовая станция (БС) - простой приемник .

Это значительно упрощает нам жизнь — нам не нужны дорогие SDR и инструменты обработки для реализации минимального набора OpenUNB. Нам достаточно копейки RTL-SDR и компьютера типа Raspberry.

Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB

Итак, подберем сладкую парочку: RTL-SDR и Raspberry. Также берем голову в руки и пишем код приемника.

Приемник должен обнаружить все пакеты соответствующего формата в диапазоне OpenUNB, демодулировать их, декодировать и проверить на наличие ошибок.

Формально это работа физический уровень OpenUNB заканчивается.

Сегодня мы сосредоточимся на первых двух этапах обработки: обнаружении и демодуляции пакетов OpenUNB. Полоса OpenUNB имеет 1000 номинальных каналов в полосе пропускания 100 кГц.

(Однако позже мы увидим, что на практике приходится резать как минимум вдвое больше каналов.

) Пакет излучается на одном частотном канале с модуляцией ДБПСК с частотой 100 Гц .

Мы не получим только один канал, это никому не нужно.

Во-первых, в стандарте предусмотрена возможность повторов на разных частотах для повышения чувствительности.

Во-вторых, неточность опорных генераторов оконечных устройств (ОУ) в температурном диапазоне их работы все же приводит к миграции частоты передачи в пределах нескольких частотных каналов при приеме БС.

Придет время, и устройств Интернета вещей станет много, поэтому БС нового стандарта должна быть спроектирована так, чтобы принимать сразу множество датчиков.

Поэтому сразу делаем детекцию во всей полосе.

Сначала необходимо разделить полосу приема 100 кГц на элементарные полосы, соответствующие полосе сигнала.

Теоретически полоса пропускания сигнала составляет 100 Гц.

Проверим это, используя спектр излучаемого сигнала.



Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB

Мы видим, что на самом деле полоса немного меньше.

На основе этих измерений задаются требования к амплитудно-частотной характеристике (АЧХ) фильтра первичной селективности (ПСФ) и рассчитывается его импульсная характеристика (ИК).

Получается 12500 коэффициентов IC со следующим типом АЧХ.



Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB



Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB

Фактически при задании требований к АЧХ ФОС в такой многоканальной системе приходится идти на очень серьезный компромисс.

С одной стороны, мы не должны уменьшать энергию полезного сигнала; мы должны поддерживать полосу FOS достаточно широкой, чтобы большая часть энергии попадала в фильтр.

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

Эта тема может быть даже предметом не инженерных, а научных исследований.

Стандарты систем передачи иногда определяют маску частотной характеристики приемника, чтобы инженеры не занимались наукой.

Мы сейчас сосредоточимся на том, что имеем, оставив эту оптимизацию на потом, еще и потому, что позже вы увидите, что эту полосу нужно будет немного увеличить по другим причинам.

С точки зрения вычислительной эффективности (помните, мы хотим использовать очень недорогое оборудование и нужно экономить), нам необходимо фильтровать полосу приема "быстрый" методы.

Вам нужно сделать так называемое фильтр-гребень используя быстрое преобразование Фурье (БПФ).

Здесь я приведу лишь схему обработки, а подробности вы можете посмотреть в Интернет или в моем статья об этой теме.



Интернет вещей на русском языке.
</p><p>
 Многоканальная мощность физического уровня базовой станции OpenUNB

Определимся с частотой дискретизации на выходе гребенки; это соответствует символической скорости – 100 Гц.

Теперь нам нужно определить сетку частот банка фильтров.

Если бы оконечные устройства излучали точно настроенный сигнал, то нам пришлось бы делать гребенку с шагом частоты 100 Гц.

Поскольку частота сигналов ОУ мигрирует более чем по одному каналу, надо предположить, что частота приема будет любой.

Тогда требование к частотной сетке установит в тракте приема следующий блок - детектор пакетов .

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

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

Мало того, вы можете разветвить код получателя на Гитхаб и внедрите и протестируйте это сами (к счастью, оборудование стоит недорого и может даже быть у вас под рукой), а затем расскажите всем.

Это будет действительно круто! Только не забудьте держать код открытым, это Открыть УНБ.

Рассмотрим практически приемлемый вариант детектора пакетов.

Основываясь на опыте нескольких разработок в области UNB, экономически эффективным методом реализации детектора пакетов является детектор на трудные решения .

И на данном этапе мы не будем изобретать велосипед. Целью детектора является поиск преамбул одновременно во всей полосе приема.

Длина преамбулы составляет 32 бита.

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

Например, если шаг нашей гребенки равен 50 Гц, а частота дискретизации из гребенки равна 100 Гц, то в секунду будет происходить 200 000 (двести тысяч) проверок преамбулы.

Напомню, что мы все-таки хотим определить шаг гребенки исходя из характеристик детектора.

Оценки показывают, что в этом варианте качество детектора не сильно пострадает при расстройке сигнала от центра фильтра на 25(?) Гц.

Эта оценка проверена на практике.

Теперь мы можем считать гребенчатую сетку частотой 50 Гц достаточной.

Только нам еще нужно увеличить полосу пропускания ФОС на 25 Гц, чтобы не терять энергию сигнала при максимальных расстройках.

Всё, фильтрация окончена.

Код умножения на IM выглядит так:

  
  
  
   

for (unsigned int ch=0; ch < numOfChannels; ch++) { float iC = 0.0; float qC = 0.0; for (int j=0; j < BL_125K_to_100/numOfChannels; j++) { iC += dataIn[i + ch + j*numOfChannels][0] * B_125K_to_100[ch + j*numOfChannels]; qC += dataIn[i + ch + j*numOfChannels][1] * B_125K_to_100[ch + j*numOfChannels]; } fftw_in[ch][0] = iC; fftw_in[ch][1] = qC; }

Библиотека БПФ используется:

fftwf_execute(fftw_p);

Теперь нам нужно выбрать количество ошибок в преамбуле, что мы считаем приемлемым.

Это значение необходимо выбрать таким, чтобы помехоустойчивость преамбулы была примерно равна помехоустойчивости остальной части пакета.

Исходя из опыта, количество допустимых ошибок в преамбуле выбрано равным трем.

Считается, что при таком количестве ошибок в преамбуле соотношение сигнал/шум будет таким, что количество ошибок в остальной части пакета позволит последующим этапам обработки исправить их и выдать верифицированный пакет. Код детектора:

corr1[ch] = q1[ch]*q2[ch] + i1[ch]*i2[ch]; corr[ch] = (corr[ch] >> 1) | ((corr1[ch] > 0 ? 1:0) << 31); const uint32_t prea = 0x97157A6F; int err1 = bitDif(corr[ch], prea);

Следует еще раз отметить, что все эти эмпирически принятые решения могут быть обоснованно оспорены вами.

Мы внимательно выслушаем и внедрим в код все лучшие изменения.

В этом вся суть открытость ОпенУНБ.

Как только преамбула обнаружена, считается, что существует некоторая вероятность того, что пакет был принят на этом частотном канале в это время.

Чтобы подтвердить или опровергнуть это гипотеза , нужный сегмент сигнала подвергается процедуре демодуляции в мягкие решения , которые поступают в декодер корректирующего кода, а затем в блок проверки контрольной суммы пакета.

Если контрольная сумма пакета совпадает, гипотеза о том, что пакет был получен, считается истинной и пакет отправляется на криптографическую обработку.

Формирование мягких решений по символам пока осуществляется упрощенно:

std::vector<float> data; for (int i=1; i< pp->data.size(); i++) { float corr; corr = pp->data[i - 1].

real() * pp->data[i].

real() + pp->data[i - 1].

imag() * pp->data[i].

imag(); }

На этом детектор пакетов И демодулятор заказываются.

Подведем итог.

Мы примерно оценили и опробовали на практике технические решения для первоначального приема OpenUNB на простом железе.

Гребенка должна быть с шагом 50 Гц, основной селективный фильтр должен иметь полосу пропускания 100 Гц.

Код детектора пакетов реализован, протестирован на таблице в работе, в том числе с низкими SNR, и находится в стадии разработки.

Гитхаб .

Полевые испытания еще впереди.

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

Хочу выразить огромную благодарность нашему главному программисту за проделанную работу - защита 137 .

Он ответит на все вопросы по коду.

По поводу обработки сигналов спросите меня.

Теги: #Беспроводные технологии #iot #Разработка для Интернета вещей #Интернет вещей #raspberry #Разработка систем связи #стандарты связи #интернет вещей #rtl-sdr #dsp #OpenUNB

Вместе с данным постом часто просматривают: