commsrc.pn

Создайте объект генератора последовательности PN

Синтаксис

h = commsrc.pn
h = commsrc.pn(property1,value1,...)

Описание

h = commsrc.pn создает объект генератора последовательности PN по умолчанию h и эквивалентен следующему:

H = commsrc.pn('GenPoly',       [1 0 0 0 0 1 1], ...
              'InitialStates', [0 0 0 0 0 1],   ...
              'CurrentStates', [0 0 0 0 0 1],   ...
              'Mask',          [0 0 0 0 0 1],   ...
              'NumBitsOut',    1)

или

H = commsrc.pn('GenPoly',       [1 0 0 0 0 1 1], ...
              'InitialStates', [0 0 0 0 0 1],   ...
              'CurrentStates', [0 0 0 0 0 1],   ...
              'Shift',         0,               ...
              'NumBitsOut',    1)

h = commsrc.pn(property1,value1,...) создает объект генератора последовательности PN, h, со свойствами, которые вы задаете как пары свойства/значения.

Свойства

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

СвойствоОписание
GenPolyВекторный массив полинома генератора битов; должен быть порядок убывания
InitialStatesВекторный массив (с продолжительностью порядка полинома генератора) начальных значений сдвигового регистра (в битах)
CurrentStatesВекторный массив (с продолжительностью порядка полинома генератора) существующих значений сдвигового регистра (в битах)
NumBitsOutКоличество битов, чтобы вывести при каждом вызове метода generate
Mask или Shift

Вектор маски двоичного файла, который 0 и 1 значение используется, чтобы задать, какие биты состояния сдвигового регистра являются XORed, чтобы произвести получившееся выходное битовое значение.

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

Значения свойств 'GenPoly' задают связи сдвигового регистра. Введите эти значения или как бинарный вектор или как вектор экспонент ненулевых условий полинома генератора в порядке убывания степеней. Для бинарного векторного представления первые и последние элементы вектора должны быть 1. Для упорядоченного убыванию полиномиального представления последний элемент вектора должен быть 0. Для получения дополнительной информации и примеры, смотрите раздел LFSR SSRG Details этой страницы.

Методы

Генератор последовательности PN оборудован следующими методами.

сгенерировать

Сгенерируйте [NumBitsOut x 1] значения генератора последовательности PN

сброс

Установите значения CurrentStates к значениям InitialStates

getshift

Получите фактическое или эквивалентное значение свойства Shift

getmask

Получите фактическое или эквивалентное значение свойства Mask

копия

Сделайте независимую копию объекта commsrc.pn

disp

Отобразите свойства объекта генератора последовательности PN

Побочные эффекты установки определенных свойств

Установка свойства GenPoly

Каждый раз, когда это свойство установлено, оно сбросит целый объект. В дополнение к изменению полиномиальных значений 'CurrentStates', 'InitialStates' и 'Mask' будут установлены в их значения по умолчанию ('NumBitsOut' останется то же самое), и никакие предупреждения не будут выданы.

Установка свойства InitialStates

Каждый раз, когда это свойство установлено, оно также установит 'CurrentStates' на новую установку 'InitialStates'.

Детали LFSR SSRG

Метод generate производит последовательность псевдослучайного шума (PN) с помощью линейного сдвигового регистра обратной связи (LFSR). LFSR реализован с помощью простого генератора сдвигового регистра (SSRG или Фибоначчи) настройка, как показано ниже.

Все регистры r в генераторе обновляют свои значения на каждом временном шаге согласно значению входящей стрелки к сдвиговому регистру. Сумматоры выполняют сложение по модулю 2. Сдвиговый регистр описан свойством 'GenPoly' (полином генератора), который является примитивным бинарным полиномом в z, grzr+gr-1zr-1+gr-2zr-2 +... +g0. Содействующий GK равняется 1, если существует связь от регистра kth, как маркировано в предыдущей схеме, к сумматору. Ведущий термин gr и постоянный термин g0 свойства 'GenPoly' должны быть 1, потому что полином должен быть примитивным.

Можно задать параметр Generator polynomial с помощью любого из этих форматов:

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

  • Вектор, содержащий экспоненты z для ненулевых условий полинома в порядке убывания степеней. Последней записью должен быть 0.

Например, [1 0 0 0 0 0 1 0 1] и [8 2 0] представляют тот же полином, p (z) = z8 + z2 + 1.

Параметр Initial states является вектором, задающим начальные значения регистров. Параметр Initial states должен удовлетворить эти критерии:

  • Все элементы вектора Initial states должны быть двоичными числами.

  • Длина вектора Initial states должна равняться степени полинома генератора.

    Примечание

    По крайней мере один элемент вектора Initial states должен быть ненулевым для блока, чтобы сгенерировать ненулевую последовательность. Таким образом, начальное состояние по крайней мере одного из регистров должно быть ненулевым.

Например, следующая таблица указывает на два набора значений параметров, которые соответствуют полиному генератора p (z) = z8 + z2 + 1.

КоличествоПример 1Пример 2
Generator polynomial   g1 = [1 0 0 0 0 0 1 0 1]   g2 = [8 2 0]
Степень полинома генератора 8, который является length(g1)-1 8
Initial states [1 0 0 0 0 0 1 0] [1 0 0 0 0 0 1 0] 

Output mask vector (or scalar shift value) переключает отправную точку выходной последовательности. С настройкой по умолчанию для этого параметра приезжает единственная связь, стрелка маркировала m0, который соответствует сдвигу 0. Параметр описан более подробно ниже.

Можно переключить отправную точку последовательности PN с Output mask vector (or scalar shift value). Можно задать параметр любым из двух способов:

  • Целое число, представляющее длину сдвига

  • Бинарный вектор, названный вектором маски, длина которого равна степени полинома генератора

Различие между выводом блока, когда вы устанавливаете Output mask vector (or scalar shift value) на 0, по сравнению с положительным целым числом d, показывают в следующей таблице.

T = 0 T = 1 T = 2 ... T = d T = d+1
Shift = 0 x0 x1 x2 ... xd xd+1
Shift = d xd xd+1 xd+2 ... x2d x2d+1

Также можно установить Output mask vector (or scalar shift value) на бинарный вектор, соответствуя полиному в z, mr-1zr-1 + mr-2zr-2 +... + m1z + m0, степени в большей части r-1. Соответствие вектора маски сдвигу d является вектором, который представляет m (z) = zd g по модулю (z), где g (z) является полиномом генератора. Например, если степень полинома генератора равняется 4, то вектором маски, соответствующим d = 2, является [0 1 0 0], который представляет полином m (z) = z2. Предыдущая принципиальная схема показывает, как Output mask vector (or scalar shift value) реализован, когда вы задаете его как вектор маски. Настройкой по умолчанию для Output mask vector (or scalar shift value) является 0. Можно вычислить вектор маски использование функции Communications Toolbox™ shift2mask.

Последовательности максимальной длины

Если вы хотите сгенерировать последовательность максимальной возможной длины для фиксированной степени, r, полинома генератора, можно установить Generator polynomial на значение из следующей таблицы. См. Proakis, Джона Г., Цифровую связь, Третий выпуск, Нью-Йорк, Макгроу Хилла, 1995 для получения дополнительной информации о настройках сдвигового регистра, которые представляют эти полиномы.

rПолином генератораrПолином генератора
2 [2 1 0] 21 [21 19 0]
3 [3 2 0] 22 [22 21 0]
4 [4 3 0] 23 [23 18 0]
5 [5 3 0] 24 [24 23 22 17 0]
6 [6 5 0] 25 [25 22 0]
7 [7 6 0] 26 [26 25 24 20 0]
8 [8 6 5 4 0] 27 [27 26 25 22 0]
9 [9 5 0] 28 [28 25 0]
10 [10 7 0] 29 [29 27 0]
11 [11 9 0] 30 [30 29 28 7 0]
12 [12 11 8 6 0] 31 [31 28 0]
13 [13 12 10 9 0] 32 [32 31 30 10 0]
14 [14 13 8 4 0] 33 [33 20 0]
15 [15 14 0] 34 [34 15 14 1 0]
16 [16 15 13 4 0] 35 [35 2 0]
17 [17 14 0] 36 [36 11 0]
18 [18 11 0] 37 [37 12 10 2 0]
19 [19 18 17 14 0] 38 [38 6 5 1 0]
20 [20 17 0] 39 [39 8 0]
40 [40 5 4 3 0] 47 [47 14 0]
41 [41 3 0] 48 [48 28 27 1 0]
42 [42 23 22 1 0] 49 [49 9 0]
43 [43 6 4 3 0] 50 [50 4 3 2 0]
44 [44 6 5 2 0] 51 [51 6 3 1 0]
45 [45 4 3 1 0] 52 [52 3 0]
46 [46 21 10 1 0] 53 [53 6 2 1 0]

Примеры

свернуть все

Настройте генератор последовательности PN. Задайте полином в бинарном векторном формате или экспоненциальном векторном формате.

Эта фигура задает генератор последовательности PN с полиномом генератора p(z)=z6+z+1.

Задайте этот генератор последовательности PN можно следующим образом:

h1 = commsrc.pn('GenPoly', [1 0 0 0 0 1 1], 'Mask', [1 1 0 1 0 1]);
h2 = commsrc.pn('GenPoly', [1 0 0 0 0 1 1], 'Shift', 22);
mask2shift ([1 0 0 0 0 1 1],[1 1 0 1 0 1])
ans = 22

Также можно ввести GenPoly как экспоненты z для ненулевых условий полинома в порядке убывания степеней:

h = commsrc.pn('GenPoly', [6 1 0], 'Mask', [1 1 0 1 0 1])
h = 
          GenPoly: [1 0 0 0 0 1 1]
    InitialStates: [0 0 0 0 0 1]
    CurrentStates: [0 0 0 0 0 1]
             Mask: [1 1 0 1 0 1]
       NumBitsOut: 1

Обычно commsrc.pn используется, чтобы вывести псевдослучайные потоки данных.

Создайте объект PN.

h = commsrc.pn('Shift',0);

Выведите 10 битов PN.

set(h,'NumBitsOut',10);
generate(h)
ans = 10×1

     1
     0
     0
     0
     0
     0
     1
     0
     0
     0

Выведите еще 10 битов PN.

generate(h)
ans = 10×1

     0
     1
     1
     0
     0
     0
     1
     0
     1
     0

Сбросьте объект к начальным значениям состояния сдвигового регистра.

reset(h);

Выведите 4 бита PN.

set(h,'NumBitsOut',4);
generate(h)
ans = 4×1

     1
     0
     0
     0

Когда объект commsrc.pn копируется, его состояния также копируются. Последующие выходные параметры от скопированного объекта, вероятно, будут отличаться от начальных выходных параметров от исходного объекта.

Создайте объект PN и выведите последовательность от него.

h = commsrc.pn('Shift', 0);
set(h, 'NumBitsOut', 5);
generate(h)
ans = 5×1

     1
     0
     0
     0
     0

Сделайте копию h. Сгенерируйте последовательность от скопированного объекта. Поскольку копия была сделана после состояния измененного h начальная последовательность, сгенерированная g, отличается от начальной последовательности, сгенерированной от h.

g=copy(h);
generate(g)
ans = 5×1

     0
     1
     0
     0
     0

Но если g сбрасывается, он генерирует ту же последовательность, которую сгенерировал h.

reset(g);
generate(g)
ans = 5×1

     1
     0
     0
     0
     0

Смотрите также

|

Представленный в R2009a