Часть 2. Помехоустойчивое кодирование.

Часть 1. Моделирование систем автоматического управления в MATLAB.

 

Задание 1. ДИНАМИЧЕСКИЕ И ЧАСТОТНЫЕ ХАРАКТЕРИСТИКИ САУ.

Постановка задачи

В качестве объекта исследования выступают линейные (линеаризованные) динамические стационарные системы управления с одним входом и одним выходом. При этом модель одномерной САУ задана в виде комплексной передаточной функции, записанной как отношение полиномов

(формула)

 

1. Определить полюса и нули передаточной функции

(формула)

2. Записать дифференциальное уравнение, определяющее функционирование САУ.

3. Построить графики переходной и импульсно-переходной функции:

 

h(t), w(t).

4. Построить логарифмические частотные характеристики

 

L ().

5. Построить частотный годограф Найквиста

 

W(i), = [0, ].

6. Представить исходную систему в виде последовательного соединения типовых звеньев. Построить характеристики этих типовых звеньев.

 

Ход работы

 

Задана передаточная функция САУ

 

Найдём её динамические и частотные характеристики.

 

1. Создадим LTI-объект с именем w, для этого выполним:

>> w=tf([2 4],[1 3 5 4 3])

 

Transfer function:

 

2 s + 4

-----------------------------

s^4 + 3 s^3 + 5 s^2 + 4 s + 3

Найдем полюса и нули передаточной функции с использованием команд pole, zero:

>> pole(w)

ans =

-1.2762 + 1.0718i

-1.2762 - 1.0718i

-0.2238 + 1.0149i

-0.2238 - 1.0149i

 

>> zero(w)

ans =

-2

2. Построим переходную функцию командой step(w). Результат ее выполнения приведен на рис. 1.1:

Рис. 1.1. Переходная функция h(t).

Из графика переходной функции видно, что система стремится к устойчивому состоянию.

Построим импульсную переходную функцию командой impulse(w). Результат показан на рис. 1.2:

Рис. 1.2. Импульсная переходная функция.

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

3. Диаграмму Боде получим, используя команду bode(w) – рис. 1.3:

Рис. 1.3. Логарифмические частотные характеристики.

4. Определим частотный годограф Найквиста, выполнив команду nyquist(w) – рис. 1.4:

 

Рис. 1.4. Частотный годограф.

Годографом передаточной функции W(jw) называется кривая, прочерчиваемая концом вектора W(jw) =|W(jw)|ejj(w) на комплексной плоскости при измерении частоты w от 0 до бесконечности.

Замкнутая система управления устойчива, если годограф передаточной функции W(jw) разомкнутой системы не охватывает на комплексной плоскости точку c координатами (-1, j0).

Если годограф проходит через точку -1, то говорят, что система находится на границе устойчивости. В этом случае на некоторой частоте W(jw0)= -1 и в системе могут существовать незатухающие колебания частоты w0. В неустойчивых системах уровень сигнала x(t) будет нарастать со временем.

Из графика частотного годографа (АФЧХ) видно, что график (годограф) проходит через точку -1, следовательно, система находится на границе устойчивости.

Аналогичные результаты (рис. 1.5) можно получить, используя команду ltiview(w), с соответствующими настройками в меню «Plot Configuration»:

Рис. 1.5. LTI-viewer.

Каждая из построенных характеристик полностью и однозначно определяет рассматриваемую систему управления.

 

Задание 2 ОПИСАНИЕ СИСТЕМ В ПРОСТРАНСТВЕ СОСТОЯНИЙ.

 

Постановка задачи

Даны математические модели трех систем и структурная схема, представляющая собой соединение этих систем. Необходимо:

– получить модель результирующей системы в пространстве состояний,

– исследовать наблюдаемость и управляемость трех подсистем в отдельности и их соединения в соответствии со схемой.

 

 

 

1. Создадим матрицы первой системы:

>> A1=[5 -3; 2 1]

 

A1 =

 

5 -3

2 1

 

>> B1=[1 3;3 -1]

 

B1 =

 

1 3

3 -1

 

>> C1=[1 2;2 -1]

 

C1 =

 

1 2

2 -1

2. Создавая, аналогично, матрицы двух других систем создадим ss-объекты:

>> s1=ss(A1, B1, C1, 0)

 

a =

x1 x2

x1 5 -3

x2 2 1

 

b =

u1 u2

x1 1 3

x2 3 -1

 

c =

x1 x2

y1 1 2

y2 2 -1

 

d =

u1 u2

y1 0 0

y2 0 0

 

Continuous-time model.

 

>> A2=[1 0;-1 2]

 

A2 =

 

1 0

-1 2

 

>> B2=[3;-4]

 

B2 =

 

-4

 

>> C2=[5 -2;2 3]

 

C2 =

 

5 -2

2 3

 

>> s2=ss (A2, B2, C2, 0)

 

a =

x1 x2

x1 1 0

x2 -1 2

 

b =

u1

x1 3

x2 -4

 

c =

x1 x2

y1 5 -2

y2 2 3

 

d =

u1

y1 0

y2 0

 

Continuous-time model.

 

>> A3=[1 2;3 2]

 

A3 =

 

1 2

3 2

 

>> B3=[1;-2]

 

B3 =

 

-2

>> C3=[-1 2]

 

C3 =

 

-1 2

 

>> s3=ss(A3,B3,C3,0)

 

a =

x1 x2

x1 1 2

x2 3 2

 

b =

u1

x1 1

x2 -2

 

c =

x1 x2

y1 -1 2

 

d =

u1

y1 0

 

Continuous-time model.

 

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

 

>> rank(ctrb(A1,B1))

 

ans =

 

 

>> rank(obsv(A1,C1))

 

ans =

 

 

>> rank(ctrb(A2,B2))

 

ans =

 

 

>> rank(obsv(A2,C2))

 

ans =

 

 

>> rank(ctrb(A3,B3))

 

ans =

 

 

>> rank(obsv(A3,C3))

 

ans =

 

Видно, что во всех случаях ранги матриц управляемости и наблюдаемости совпадают с размерностями пространства состояний.

4. Получим систему, определяемую соединением:

Для корректного использования функции connect введем дополнительную систему, передаточная функция которой равна 1.

 

>> s4=tf(1)

 

Transfer function:

 

>> sys=append(s1,s2,s3,s4)

 

a =

x1 x2 x3 x4 x5 x6

x1 5 -3 0 0 0 0

x2 2 1 0 0 0 0

x3 0 0 1 0 0 0

x4 0 0 -1 2 0 0

x5 0 0 0 0 1 2

x6 0 0 0 0 3 2

 

b =

u1 u2 u3 u4 u5

x1 1 3 0 0 0

x2 3 -1 0 0 0

x3 0 0 3 0 0

x4 0 0 -4 0 0

x5 0 0 0 1 0

x6 0 0 0 -2 0

 

c =

x1 x2 x3 x4 x5 x6

y1 1 2 0 0 0 0

y2 2 -1 0 0 0 0

y3 0 0 5 -2 0 0

y4 0 0 2 3 0 0

y5 0 0 0 0 -1 2

y6 0 0 0 0 0 0

 

d =

u1 u2 u3 u4 u5

y1 0 0 0 0 0

y2 0 0 0 0 0

y3 0 0 0 0 0

y4 0 0 0 0 0

y5 0 0 0 0 0

y6 0 0 0 0 1

 

Continuous-time model.

 

>> Q=[2 -4 6;3 2 0;4 1 3]

 

Q =

 

2 -4 6

3 2 0

4 1 3

 

>> in=[1 5]

 

in =

 

1 5

 

>> out=[5 4]

 

out =

 

5 4

 

>> s_com=connect(sys,Q,in,out)

 

a =

x1 x2 x3 x4 x5 x6

x1 5 -3 -6 -9 0 0

x2 2 1 2 3 0 0

x3 6 -3 1 0 0 0

x4 -8 4 -1 2 0 0

x5 1 2 5 -2 1 2

x6 -2 -4 -10 4 3 2

 

b =

u1 u2

x1 1 3

x2 3 -1

x3 0 0

x4 0 0

x5 0 0

x6 0 0

 

c =

x1 x2 x3 x4 x5 x6

y1 0 0 0 0 -1 2

y2 0 0 2 3 0 0

 

d =

u1 u2

y1 0 0

y2 0 0

 

Continuous-time model.

 

Обращаясь к данным объекта, можно получить матрицы А, В, С:

>> A=s_com.A

 

A =

 

5 -3 -6 -9 0 0

2 1 2 3 0 0

6 -3 1 0 0 0

-8 4 -1 2 0 0

1 2 5 -2 1 2

-2 -4 -10 4 3 2

 

>> B=s_com.B

 

B =

 

1 3

3 -1

0 0

0 0

0 0

0 0

 

>> C=s_com.C

 

C =

 

0 0 0 0 -1 2

0 0 2 3 0 0

 

5. Вычислим ранги матриц наблюдаемости и управляемости итоговой системы:

>> rank(ctrb(A,B))

 

ans =

 

 

>> rank(obsv(A,C))

 

ans =

 

 

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

 

 

Часть 2. Помехоустойчивое кодирование.

Задание 1. Выполнить моделирование кодека Хэмминга (11,15) без ошибок и с ошибками с кратностью T1=4, T2=5.

Задание 2. Выполнить моделирование кодека BCH (5,15) без ошибок и с ошибками с кратностью T1=4, T2=5.

Задание 3. Выполнить моделирование кодека Рида-Соломона RS(5,15) без ошибок и с ошибками с кратностью T1, T2.

Задание 4. Выполнить моделирование сверточного кодека 2/3 без ошибок и с ошибками с кратностью T1, T2.

 

Задание 1. Выполнить моделирование кодека Хэмминга (11,15) без ошибок и с ошибками с кратностью T1=4, T2=5

Рисунок 2.1. Имитационная модель кодека Хэмминга

Источник данных, генератор случайных двоичных чисел – Bernoulli Binary-Integer, вырабатывающий случайные биты. Выход генератора делаем в виде кадра из K=11 отсчетов. В окне параметров блока задаем и вероятность нулей, равную 0,9.

Кодер Хэмминга – Hamming encoder. Он по сообщению K формирует передаваемый код V. В окне параметров блока задаем N=15.

Умножитель Gain. Он умножает выход кодера на вектор ошибки E из 0 и 1, имитирующий ошибки в канале связи (ошибка может получиться при компоненте E, равном 0). Вектор E должен содержать N компонент, которые вычислим функцией rot90(randerr(N,1,N-ER)). Получим вектор-строку из N равновероятных нулей и единиц, из которых N-ER равны 1.

Декодер Хэмминга – Hamming decoder. Для него зададим параметры, аналогичные кодеру.

Блоки Unbuffer преобразуют кадры в линейные последовательности, направляемые к виртуальному 4-входовому наблюдателю Scope.

Наблюдатель Scope позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer. Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. зададим имена: для передаваемого сообщения – Message_T, для передаваемого кода Code_T, для принятого кода – Code_R, для декодированного сообщения Message_R.

При моделировании с разными кратностями ошибок получим:

Рис.2.2. Моделирование кодека Хэмминга без ошибок, ER=0.

Рис.2.3.Моделирование кодека Хэмминга, ошибка кратности T1=ER=4.

Рис.2.4.Моделирование кодека Хэмминга, ошибка кратности T2=ER=5.

Задание 2. Выполнить моделирование кодека BCH (5,15) без ошибок и с ошибками с кратностью T1=4, T2=5

 

Рисунок 2.5. Имитационная модель кодека BCH

 

Источник данных, генератор случайных двоичных чисел – Bernoulli Binary-Integer, вырабатывающий случайные биты. Выход генератора делаем в виде кадра из K=5 отсчетов.

Кодер BCH – DCY encoder. Он по сообщению K формирует передаваемый код V. В окне параметров блока (Рисунок 5) зададим N=15, K=5.

Умножитель Gain. Он умножает выход кодера на вектор ошибки E из 0 и 1, имитирующий ошибки в канале связи (ошибка может получиться при компоненте E, равном 0). Вектор E должен содержать N компонент, которые вычислим функцией rot90(randerr(N,1,N-ER)). Получим вектор-строку из N равновероятных нулей и единиц, из которых N-ER равны 1.

Декодер BCH – BCH decoder. Для него нужно задать параметры, аналогичные кодеру. Декодер имеет два выхода: верхний декодированное сообщение, нижний – кратность исправленных ошибок.

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

Блоки Unbuffer преобразуют кадры в линейные последовательности, направляемые к виртуальному 2-входовому наблюдателю Scope.

Наблюдатель Scope позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer. Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. зададим имена: для сигнала сравнения – Compare, для передаваемого кода Code_T, для кратности исправленных ошибок – Error_T.

При моделировании с разными кратностями ошибок получим:

Рис.2.6. Моделирование кодека BCH (5,15) без ошибок, ER=0

Рис.2.7. Моделирование кодека BCH (5,15), ошибка кратности T1=ER=4

Рис.2.8. Моделирование кодека BCH (5,15), ошибка кратности T2=ER=5

 

Задание 3. Выполнить моделирование кодека Рида-Соломона RS(5,15) без оши-бок и с ошибками с кратностью T1, T2

 

Создаем модель в среде Simulink. В модель включаем:

Источник данных, генератор случайных целых чисел – Random-Integer, вырабатывающий числа в интервале от 0 до N-1. Выход генератора сделаем в виде кадра из K чисел.

Кодер Рида-Соломона – RS encoder. Он по сообщению K формирует передаваемый код из N символов.

Умножитель Gain. Он умножает выход кодера на вектор ошибки E из 0 и 1, имитирующий ошибки в канале связи (ошибка может получиться при компоненте E, равном 0). Вектор E должен содержать N компонент, которые вычислим функцией rot90(randerr(N,1,N-ER)). Получим вектор-строку из N равновероятных нулей и единиц, из которых N-ER равны 1.

Декодер Рида-Соломона – RS decoder, имеющий два выхода. На верхнем выходе из принятого кода R формируется декодированное сообщение, на нижний выход выводится кратность исправленных ошибок.

Сумматор Sum. В нем из декодированного сообщения вычитается исходное сообщение.

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

Наблюдатель Scope позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer.

 

Рис.2.9. Имитационная модель RS кодека

Для Random-Integer. Выбираем M=15 и число отсчетов в кадре F=5.

Для RS encoder и RS decoder. В нем задаем длины сообщения K=5 и кодового слова N=15. Соглашаемся с выбранным по умолчанию примитивным полиномом g(x)=1011, из которого автоматически вычисляется порождающий полином. Аналогично задаем те же параметры для блока RS decoder.

Для блока Gain. В поле Gain задаем для Gain формулу rot90(randerr(N,1,N-ER)). Функция randerr(N,1,N-ER) создает строку значений, а функция rot90 превращает ее в столбец.

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

Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. Для входа сигнала сравнения примем имя Compare, для входа кратности исправленной ошибки Error T.

После моделирования можно двойным щелчком по блоку Scope посмотреть результаты:

Рис.3.1. Моделирование кодека Рида-Соломона RS(5,15) без ошибок, Gain=rot90(randerr(15,1,15))

Рис.3.2. Моделирование кодека Рида-Соломона RS(5,15) ошибки есть, Gain=rot90(randerr(15,1,10))

Рис.3.3. Моделирование кодека Рида-Соломона RS(5,15) ошибки в есть, их кратность T2 может превысить исправляющую способность кода,при этом Gain=rot90(randerr(15,1,9))

Задание 4. Выполнить моделирование сверточного кодека 2/3 без ошибок и с ошибками с кратностью T1, T2

Создаем модель в среде Simulink:

 

Рис.3.4. Имитационная модель сверточного кодека

В модель включаем:

Источник данных, генератор случайных двоичных чисел – Bernoulli Binary-Integer, вырабатывающий случайные биты. Выход генератора сделаем в виде кадра из K=2 отсчетов.

Сверточный кодер – Convolution encoder. Он по сообщению из K=2 символов формирует передаваемый код V из N=3 символов. В окне параметров кодера зададим функцию генерации решетки poly2trellis([4 3],[4 5 17; 7 4 2])

 

Сверточный декодер – Convolution decoder. Он декодирует сообщение, используя алгоритм Витерби. В окне параметров блока повторяем решетку, выбираем декодирование с жестким решением (Hard Decision) и глубину отслеживания назад примерно 3·(K+N)

Блоки Unbuffer преобразуют кадры в линейные последовательности, направляемые к виртуальному 3-входовому наблюдателю Scope.

Наблюдатель Scope позволяет в общем масштабе времени наблюдать сигналы от блоков Buffer. Чтобы в графиках наблюдателя были заголовки, сделаем входам имена. Для этого двойным щелчком по линии входа вызовем окно ввода имени, в которое занесем имя. зададим имена: для передаваемого сообщения – Message_T, для передаваемого кода V_Code, для декодированного сообщения Message_R.

 

После моделирования можно двойным щелчком по блоку Scope посмотреть результаты:

Рис.3.5. Моделирование сверточного кодека 2/3

Декодированное сообщение совпадает с исходным. Есть сдвиг во времени.

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