Часть 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
Декодированное сообщение совпадает с исходным. Есть сдвиг во времени.
В ходе работы по помехоустойчивому кодированию мы промоделировали четыре типа кодеков, для каждого из которых провели определение (детектирование) ошибок и их коррекцию, например, изменяя ошибку кратности.