Документация Engee
Notebook

Скремблер

Скремблер (англ. scramble – шифровать, перемешивать) – программное или аппаратное устройство (алгоритм), выполняющее скремблирование, то есть обратимое преобразование цифрового потока без изменения скорости передачи с целью получения свойств случайной последовательности. В данном примере реализовано скремблирование с «псевдослучайной бинарной последовательностью» (Pseudo Random Binary Sequence, PRBS). Эта последовательность вычисляется благодаря LFSR длины 15, заданной ассоциированным многочленом 1+ x^14 + x^15 и начальным значением 100101010000000. Также ниже представлен рисунок описания формулы работы генератора псевдослучайной последовательности.

image.png

Далее рассмотрим реализованную схему скремблирования и дескремблирования. Она и битовое сравнение работы данного алгоритма показаны на рисунке ниже.

image_2.png

Запустим данную модель при помощи описанной нами функции запуска и сохраним результаты битовой ошибки.

In [ ]:
function run_model(name_model)
    Path = string(@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    return model_output
end

run_model("Scrambler_descrambler")
Building...
Progress 100%
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "Error Rate Calculation.Out" => 1001×2 DataFrame…
  "Selector.1"                 => 1001×2 DataFrame

Проанализируем сохранённые значения. BER равен нулю на протяжении 1001 шага.

In [ ]:
# Считывание из simout сохранённых сигналов
BER = simout["Scrambler_descrambler/Error Rate Calculation.Out"];
BER = collect(BER)
BER[end-3:end,:]
Out[0]:

4 rows × 2 columns

timevalue
AnyAny
19.97[0.0, 0.0, 998.0]
29.98[0.0, 0.0, 999.0]
39.99[0.0, 0.0, 1000.0]
410.0[0.0, 0.0, 1001.0]

Вывод

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

Блоки, использованные в примере