Читайте также: |
|
8.1. Коды Рида-Соломона
Коды Рида-Соломона (Reed-Solomon code, R-S code) — это недвоичные циклические коды, символы которых представляют собой /n-битовые последовательности, где т — положительное целое число, большее 1. Коды Рида-Соломона (п, к) определены на /я-битовых символах при всех п и к, для которых
0<к<п< 2т + 2, (8.1)
те к — число информационных битов, подлежащих кодированию, а п — число кодовых символов в кодируемом блоке. Для большинства сверточных кодов Рида-Соломона (п, к)
(п, к) = (2т - 1, 2m - 1 - 2t), (8.2)
где t — количество ошибочных битов в символе, которые может исправить код, а и - k = 2t — число контрольных символов. Расширенный код Рида-Соломона можно получить при п = 2т или п = 2т+1, но не более того.
Код Рида-Соломона обладает наибольшим минимальным расстоянием, возможным для линейного кода с одинаковой длиной входных и выходных блоков кодера. Для недвоичных кодов расстояние между двумя кодовыми словами определяется (по аналогии с расстоянием Хэмминга) как число символов, которыми отличаются последовательности. Для кодов Рида-Соломона минимальное расстояние определяется следующим образом [1]:
dma = n-k+l. (8.3)
Код, который исправляет все искаженные символы, содержащие ошибку в t или меньшем числе бит, где t приведено в уравнении (6.44), можно выразить следующим образом:
^min 1 | н | п-к |
Здесь Ы означает наибольшее целое, не превышающее х. Из уравнения (8.4) видно, что коды Рида-Соломона, исправляющие t символьных ошибок, требуют не более 21 контрольных символов. Из уравнения (8.4) следует, что декодер имеет п-к “используемых” избыточных символов, количество которых вдвое превышает количество исправляемых ошибок. Для каждой ошибки один избыточный символ используется для обнаружения ошибки и один — для определения правильного значения.
Способность кода к коррекции стираний выражается следующим образом:
p = dmm-l = n-k. (8.5)
Возможность одновременной коррекции ошибок и стираний можно выразить как требование
2а + у < dmn <п- к. (8.6)
Здесь а — число символьных моделей ошибки, которые можно исправить, а у — количество комбинаций символьных стираний, которые могут быть исправлены. Преимущества недвоичных кодов, подобных кодам Рида-Соломона, можно увидеть в следующем сравнении. Рассмотрим двоичный код (и, к) = (7, 3). Полное пространство
л-кортежей содержит 2" = 27 = 128 и-кортежей, из которых 2* = 23 = 8 (или 1/16 часть всех и-кортежей) являются кодовыми словами. Затем рассмотрим недвоичный код (и, к) - (7, 3), где каждый символ состоит из т = 3 бит. Пространство и-кортежей содержит Тт = 221 = 2 097 152 и-кортежа, из которых 2tm = 29 = 512 (или 1/4096 часть всех и-кортежей) являются кодовыми словами. Если операции производятся над недвоичными символами, каждый из которых образован т битами, то только незначительная часть (т.е. 2tm из большого числа 2"”) возможных и-кортежей является кодовыми словами. Эта часть уменьшается с ростом т. Здесь важным является то, что если в качестве кодовых слов используется незначительная часть пространства и-кортежей, то можно достичь большего daш.
Любой линейный код дает возможность исправить и - к комбинаций символьных стираний, если все и -к стертых символов приходятся на контрольные символы. Однако коды Рвда-Соломона имеют замечательное свойство, выражающееся в том, что они могут исправить любой набор и - к символов стираний в блоке. Можно сконструировать коды с любой избыточностью. Впрочем, с увеличением избыточности растет сложность ее высокоскоростной реализации. Поэтому наиболее привлекательные коды Рвда-Соломона обладают высокой степенью кодирования (низкой избыточностью).
8.1.1. Вероятность появления ошибок для кодов Рида-Соломона
Коды Рида-Соломона чрезвычайно эффективны для исправления пакетов ошибок, т.е. они оказываются эффективными в каналах с памятью. Также они хорошо зарекомендовали себя в каналах с большим набором входных символов. Особенностью кода Рида-Соломона является то, что к коду длины и можно добавить два информационных символа, не уменьшая при этом минимального расстояния. Такой расширенный код имеет длину и + 2 и то же количество символов контроля четности, что и исходный код. Из уравнения (6.46) вероятность появления ошибки в декодированном символе, РЕ, можно записать через вероятность появления ошибки в канальном символе, р [2].
Ре-
Здесь t — количество ошибочных битов в символе, которые может исправить код, а символы содержат т битов каждый.
Для некоторых типов модуляции вероятность битовой ошибки можно ограничить сверху вероятностью символьной ошибки. Для модуляции MFSK с М = 2т связь Рв и РЕ выражается формулой (4.112)
р 'jm-1
Ls_ = ±. (8.8)
PF 2m -1
На рис. 8.1 показана зависимость Рв от вероятности появления ошибки в канальном символе р, полученная из уравнений (8.7) и (8.8) для различных ортогональных 32-ричных кодов Рида-Соломона с возможностью коррекции t ошибочных бит в символе и и = 31 (тридцать один 5-битовый символ в кодовом блоке). На рис. 8.2 показана зависимость Рв от E,JN0 для таких систем кодирования при ис
пользовании модуляции MFSK и некогерентной демодуляции в канале AWGN [2]. Для кодов Рида-Соломона вероятность появления ошибок является убывающей степенной функцией длины блока, п, а сложность декодирования пропорциональна небольшой степени длины блока [I]. Иногда коды Рида-Соломона применяются в каскадных схемах. В таких системах внутренний сверточный декодер сначала осуществляет некоторую защиту от ошибок за счет мягкой схемы решений на выходе демодулятора; затем сверточный декодер передает данные, оформленные согласно жесткой схеме, на внешний декодер Рида-Соломона, что снижает вероятность появления ошибок. В разделах 8.2.3 и 8.3 мы рассмотрим каскадное декодирование и декодирование Рида-Соломона на примере системы цифровой записи данных на аудиокомпакт-дисках (compact disc — CD).
Вероятность ошибочного приема канального символа, р Рис. 8.1. Зависимость Рв от р для различных ортогональных 32-ричных кодов Рида-Соломона с возможностью коррекции t бит в символе и п — 31. (Перепечатано с разрешения автора из Data Communications, Network, and Systems, ed. Thomas C. Bartee, Howard W. Sams Company, Indianapolis, Ind., 1985, p. 311. Ранее публиковалось в J. P. Odenwalder, Error Control Coding Handbook, M/A-COM LINKABIT, Inc., San Diego, Calif., July, 15, 1976, p. 91.) |
3,5 4,0 4,5 5,0 5,5 6,0 6,5 7,0 Еь/Nо (ДБ)
Рис. 8.2. Зависимость Рв от Et/N0 для различных ортогональных кодов Рида-Соломона с возможностью коррекции t бит в символе и п = 31, при 32-ричной модуляции MFSK в канале AWGN. (Перепечатано с разрешения автора из Data Communications, Network, and Systems, ed. Thomas C. Bartee, Howard W. Sams Company, Indianapolis, Ind.,
1985, p. 312. Ранее публиковалось в J. P. Odenwalder, Error Control Coding Handbook, M/A-COM LINKAB1T, Inc., San Diego, Calif., July, 15, 1976, p. 92.)
8.1.2. Почему коды Рида-Соломона эффективны при борьбе с импульсными помехами
Давайте рассмотрим код (п, к) = (255,247), в котором каждый символ состоит из т = 8 бит (такие символы принято называть байтами). Поскольку n-k-S, из уравнения (8.4) можно видеть, что этот код может исправлять любые 4-символьные ошибки в блоке длиной до 255. Пусть блок длительностью 25 бит в ходе передачи поражается помехами, как показано на рис. 8.3. В этом примере пакет шума, который попадает на 25 последовательных битов, исказит точно 4 символа. Декодер для кода (255, 247) исправит любые 4-символьные ошибки без учета характера повреждений, причиненных символу. Другими словами, если декодер исправляет байт (заменяет неправильный правильным), то ошибка может быть вызвана искажением одного или всех восьми битов. Поэтому, если символ неправильный, он может бьггь искажен на всех двоичных позициях. Это дает коду Рида-Соломона огромное преимущество при наличии импульсных помех по сравнению с двоичными кодами (даже при использовании в двоичном коде чередования). В этом примере, если наблюдается 25- битовая случайная помеха, ясно, что искаженными могут оказаться более чем 4 символа (искаженными могут оказаться до 25 символов). Конечно, исправление такого числа ошибок окажется вне возможностей кода (255, 247).
8.1.3. Рабочие характеристики кода Рида-Соломона как функция размера, избыточности и степени кодирования
Для того чтобы код успешно противостоял шумовым эффектам, длительность помех должна составлять относительно небольшой процент от количества кодовых слов. Чтобы быть уверенным, что так будет большую часть времени, принятый шум необходимо усреднить за большой промежуток времени, что снизит эффект от неожиданной или необычной полосы плохого приема. Следовательно, можно предвидеть, что код с коррекцией ошибок будет более эффективен (повысится надежность передачи) при увеличении размера передаваемого блока, что делает код Рида-Соломона более привлекательным, если желательна большая длина блока [3]. Это можно оценить по семейству кривых, показанному на рис. 8.4, где степень кодирования взята равной 7/8, при этом длина блока возрастает с п = 32 символов (при т = 5 бит на символ) до п = 256 символов (при т = 8 бит на символ). Таким образом, размер блока возрастает с 160 бит до 2048 бит.
25-битовый пакет шума
Норма Искажен Искажен Искажен Искажен Норма Рис. 8.3. Блок данных, искаженный 25 -битовым пакетом ошибок |
Вероятность появления случайной ошибки в бите Рис. 8.4. Характеристики декодера Рида-Соломона как функция размера символов (степень кодирования = 7/8) |
По мере увеличения избыточности кода (и снижения его степени кодирования), сложность реализации этого кода повышается (особенно для высокоскоростных устройств). При этом для систем связи реального времени должна увеличиться ширина полосы пропускания. Увеличение избыточности, например увеличение размера символа, приводит к уменьшению вероятности появления битовых ошибок, как можно видеть на рис. 8.5, где кодовая длина п равна постоянному значению 64 при снижении числа символов данных с к = 60 до к = 4 (избыточность возрастает с 4 до 60 символов).
ю-°
0) н £
О 2 О §
§ ю-5
л m m s ы О
s
О 1Q-10 СЕ £
X ф m СЕ
о
| to-«
О X
На рис. 8.5 показана передаточная функция (выходная вероятность появления битовой ошибки, зависящая от входной вероятности появления символьной ошибки) гипотетических декодеров. Поскольку здесь не имеется в виду определенная система или канал (лишь вход-выход декодера), можно заключить, что надежность передачи является монотонной функцией избыточности и будет неуклонно возрастать с приближением степени кодирования к нулю. Однако это не так, если отношение EJNa фиксировано. По мере изменения степени кодирования кода от максимального значения до минимального (от 0 до 1), интересно было бы понаблюдать за эффектами, показанными на рис. 8.6. Здесь кривые рабочих характеристик показаны при модуляции BPSK и кодах (31, к) для разных типов каналов. На рис. 8.6 показаны системы связи реального времени, в которых за кодирование с коррекцией ошибок приходится платить расширением полосы пропускания, пропорциональным величине, равной обратной степени кодирования. Приведенные кривые показывают четкий оптимум степени кодирования, минимизирующий требуемое значение £,//V0 [4]. Для гауссова канала оптимальное значение степени кодирования находится где-то между 0,6 и 0,7, для канала с райсовским замиранием — около 0,5 (с отношением мощности прямого сигнала к мощности отраженного К = 7 дБ) и 0,3 — для канала с релеевским замиранием. (Каналы с замиранием будут рассматриваться в главе 15.) Почему здесь как при очень высоких степенях кодирования (малой избыточности), так и при очень низких (значительной избыточности)
наблюдается ухудшение вероятности ошибки? Для высоких степеней кодирования это легко объяснить, сравнивая высокие степени кодирования с оптимальной степенью кодирования. Любой код в целом обеспечивает все преимущества кодирования; следовательно, как только степень кодирования приближается к единице (нет кодирования), система проигрывает в надежности передачи. Ухудшение характеристик при низких степенях кодирования является более тонким вопросом, поскольку когда E,JNQ фиксировано работает два механизма. Один механизм направлен на снижение вероятности появления ошибок, другой повышает ее. Механизм, снижающий вероятность появления ошибки, — это кодирование; чем больше избыточность, тем больше возможности кода в коррекции ошибок. Механизм, повышающий эту вероятность, — это снижение энергии, приходящейся на канальный символ (по сравнению с информационным символом), что следует из увеличения избыточности, вызывающей быструю передачу сигналов (в системах связи реального времени). Уменьшенная энергия канального символа вынуждает демодулятор совершать больше ошибок. В конечном счете второй механизм подавляет первый, поэтому очень низкие степени кодирования вызывают ухудшение характеристик кода.
---- Декодирование с исправлением ошибок ---- Декодирование с исправлением ошибок/стираний О 0,2 0,4 0,6 0,8 1 Степень кодирования Рис. 8.6. Характеристики декодера Ри- да-Соломона (31, к) как функция степени кодирования (модуляция BPSK) |
Давайте попробуем подтвердить зависимость вероятности появления ошибок от степени кодирования, показанную на рис. 8.6, с помощью кривых, изображенных на рис. 8.2. Непосредственно сравнить рисунки не удастся, поскольку на рис. 8.6 применяется модуляция BPSK, а на рис. 8.2 — 32-ричная модуляция MFSK. Однако, пожалуй, нам удастся показать, что зависимость характеристик кода Рида-Соломона от его степени кодирования
выглядит одинаково как при BPSK, так и при MFSK. На рис. 8.2 вероятность появления ошибки в канале AWGN снижается при увеличении способности кода t к коррекции символьных ошибок с t = 1 до t = 4; случаи t = 1 и t = 4 относятся к кодам (31, 29) и (31, 23) со степенями кодирования 0,94 и 0,74. Хотя при f = 8, что отвечает коду (31,15) со степенью кодирования 0,48, достоверность передачи Рв = 10~5 достигается при примерно на 0,5 дБ большем отношении E,JN0, по сравнению со случаем г = 4. Из рис. 8.2 можно сделать вывод, что если нарисовать график зависимости достоверности передачи от степени кодирования кода, то кривая будет иметь вид, подобный приведенному на рис. 8.6. Заметим, что это утверждение нельзя получить из рис. 8.1, поскольку там представлена передаточная функция декодера, которая несет в себе сведения о канале и демодуляции. Поэтому из двух механизмов, работающих в канале, передаточная функция (рис. 8.1) представляет только выгоды, которые проявляются на входе/выходе декодера, и ничего не говорит о потерях энергии канального символа как функции низкой степени кодирования. В разделе 9.7.7 будет более подробно рассказано о выборе кода в соответствии с типом модуляции.
8.1.4. Конечные поля
Для понимания принципов кодирования и декодирования недвоичных кодов, таких как коды Рида-Соломона, нужно сделать экскурс в понятие конечных полей, известных как поля Галуа (Galois fields — GF). Для любого простого числа р существует конечное поле, которое обозначается GF(р) и содержит р элементов. Понятие GF(р) можно обобщить на поле из рт элементов, именуемое полем расширения GF(р); это поле обозначается GF(pm), где т — положительное целое число. Заметим, что GF(рт) содержит в качестве подмножества все элементы GF(p). Символы из поля расширения GF(2m) используются при построении кодов Рида-Соломона.
Двоичное поле GF(2) является подполем поля расширения GF(2m), точно так же как поле вещественных чисел является подполем поля комплексных чисел. Кроме чисел 0 и 1, в поле расширения существуют дополнительные однозначные элементы, которые будут представлены новым символом а. Каждый ненулевой элемент в GF(2m) можно представить как степень а. Бесконечное множество элементов, F, образуется из стартового множества {0,1, а} и генерируется дополнительными элементами путем последовательного умножения последней записи на а.
F={0, 1,а, сх2.................... ос',...} = {0, а0, а1, а2,..., ос',...}
Для вычисления из F конечного множества элементов GF(2m) на F нужно наложить условия: оно может содержать только 2т элемента и быть замкнутым относительно операции умножения. Условие замыкания множества элементов поля по отношению к операции умножения имеет вид нередуцируемого полинома
или, что то же самое,
(8.10)
С помощью полиномиального ограничения любой элемент со степенью, большей или равной 2т~1, можно следующим образом понизить до элемента со степенью, меньшей 2т -1:
Таким образом, как показано ниже, уравнение (8.10) можно использовать для формирования конечной последовательности F* из бесконечной последовательности F.
F* = {0,1,а,а2,...,a2"-2,a2,"-1,a2”,...} = (g ^
= {0,а0,а1,а2,...,а2 -2,а°,а1,а2,...}
Следовательно, из уравнения (8.12) можно видеть, что элементы конечного поля GF(2m) даются следующим выражением:
GF(2m) = {0, а0,а1,<х2,...,а2'"-2}. (8.13)
8.1.4.1. Операция сложения в поле расширения GF(2m)
Каждый из 2т элементов конечного поля GF(2m) можно представить как отдельный полином степени т - 1 или меньше. Степенью полинома называется степень члена максимального порядка. Обозначим каждый ненулевой элемент GF(2m) полиномом а,(X), в котором по крайней мере т коэффициентов а,(Х) ненулевые. Для i — 0, 1, 2,..., 2т -2,
<х, = а,(Х) = а,о +a, iX + а,2^ + •■■ + *. (8.14)
Рассмотрим случай т-3, в котором конечное поле обозначается GF(23). На рис. 8.7 показано отображение семи элементов {а,} и нулевого элемента в слагаемые базисных элементов {Х°, X1, X2}, описываемых уравнением (8.14). Поскольку из уравнения (8.10) а° = а7, в этом поле имеется семь ненулевых элементов или всего восемь элементов. Каждая строка на рис. 8.7 содержит последовательность двоичных величин, представляющих коэффициенты а, 0, а,, и а, 2 из уравнения (8.14). Одним из преимуществ использования элементов {ос*} поля расширения, вместо двоичных элементов, является компактность записи, что оказывается удобным при математическом описании процессов недвоичного кодирования и декодирования. Сложение двух элементов конечного поля, следовательно, определяется как суммирование по модулю 2 всех коэффициентов при элементах одинаковых степеней.
а, + а; = (а, 0 +а; о) + (а,л + а;,)Х +... + (а, + а; т_i)Xm 1 (8.15)
8.1.4.2. Описание конечного поля с помощью примитивного полинома
Класс полиномов, называемых примитивными полиномами, интересует нас, поскольку такие объекты определяют конечные поля GF(2m), которые, в свою очередь, нужны для описания кодов Рида-Соломона. Следующее утверждение является необходимым и достаточным условием примитивности полинома. Нередуцируемый полином f(X) порядка т будет примитивным, если наименьшим положительным целым числом п, для которого X" + 1 делится наДХ), будет п = 2т - 1. Заметим, что нередуцируемый полином — это такой полином, который нельзя представить в виде произведения полиномов меньшего порядка; делимость А на В означает, что А делится на В с
нулевым остатком и ненулевым частным. Обычно полином записывают в порядке возрастания степеней. Иногда более удобным является обратный формат записи (например, при выполнении полиномиального деления).
Образующие
элементы
Х° X1 X2
0 0 0 0
э
л а0 1 0 0
е 1
м а
е а2 н
Т а3 1 1 0
Ы
4 0 1 1 1 1 1
Л а6 1 0 1 Я
1 О о
Рис. 8.7. Отображение элементов поля в базисные элементы GF(8) с помощью f(X) = 1 + Х + X3
Пример 8.1. Проверка полинома на примитивность
Основываясь на предыдущем определении примитивного полинома, укажите, какие из следующих нередуцируемых полиномов будут примитивными.
а) 1+Х + Х4
б) l+X + X^X' + X4
Решение
а) Мы можем проверить этот полином порядка т = 4, определив, будет ли он делителем
X" + 1 = Х(2 _l) +1 = X15 +1 для значений п из диапазона 1 < п < 15. Нетрудно убедиться, что X15 + 1 делится на 1 +Х + Х4 (см. раздел 6.8.1), и после повторения вычислений можно проверить, что при любых значениях п из диапазона 1 < п < 15 полином X" + 1 не делится на 1 + X + X4. Следовательно, 1+Х + Х4 является примитивным полиномом.
б) Легко проверить, что полином является делителем Xn + 1. Проверив, делится ли X” + 1 на 1 + X + X2 + X3 + X4, для значений п, меньших 15, можно также видеть, что указанный полином является делителем X5 + 1. Следовательно, несмотря на то что полином 1+Х + Х2 + Х3 + Х4 является неприводимым, он не будет примитивным.
8.1.4.3. Поле расширения GF(23)
Рассмотрим пример, в котором будут задействованы примитивный полином и конечное поле, которое он определяет. В табл. 8.1 содержатся примеры некоторых примитивных полиномов. Мы выберем первый из указанных там полиномов, ДХ) = 1 + X + X3, который определяет конечное поле GF(2m), где степень полинома т = 3. Таким образом, в поле, определяемом полиномом ДХ), имеется 2т - 23 = 8 элементов. Поиск корней полинома ДХ) — это поиск таких значений X, при которых ДХ) = 0. Привычные нам двоичные элементы 0 и 1 не подходят полиномуДХ) = 1 + Х + Х3 (они не являются корнями),
поскольку Д1) = 1 и ДО) = 1 (в рамках операций по модулю 2). Кроме того, основная теорема алгебры утверждает, что полином порядка т должен иметь в точности т корней. Следовательно, в этом примере выражение ДХ) = 0 должно иметь 3 корня. Возникает определенная проблема, поскольку 3 корня не лежат в том же конечном поле, что и коэффициенты ДХ). А если они находятся где-то еще, то, наверняка, в поле расширения GF(23). Пусть а, элемент поля расширения, определяется как корень полинома ДХ). Следовательно, можно записать следующее:
Дос) = 0 1 + а + а3 = О а3 = -1 - а
Поскольку при операциях над двоичным полем +1 следующим образом:
а3 = 1 + а.
Таблица 8.1. Некоторые примитивные полиномы
|
Таким образом, а3 представляется в виде взвешенной суммы всех a-членов более низкого порядка. Фактически так можно представить все степени а. Например, рассмотрим следующее:
а4 = а- а3 = а- (1 + а) = а + а2. (8.18,а)
А теперь взглянем на следующий случай:
а5 = а- а4 = а- (а + а2) = а2 + а3. (8.18,6)
Из уравнений (8.17) и (8.18) получаем следующее:
а5=1+а + а2. (8.18,в)
Используя уравнение (8.18,в), получаем следующее:
а6 = а ■ а5 = а • (1 + а + а2) = а + а2 + а3 = 1 + а2. (8.18,г)
А теперь из уравнения (8.18,г) вычисляем
Заметьте, что а7 = а0 и, следовательно, восемью элементами конечного поля GF(23) будут
{О, а0, а1, а2, а3, а4, а5, а6}. (8.19)
Отображение элементов поля в базисные элементы, которое описывается уравнением (8.14), можно проиллюстрировать с помощью схемы линейного регистра сдвига с обратной связью (linear feedback shift register — LFSR) (рис. 8.8). Схема генерирует (при т = 3) 2т-1 ненулевых элементов поля и, таким образом, обобщает процедуры, описанные в уравнениях (8.17)—(8.19). Следует отметить, что показанная на рис. 8.8 обратная связь соответствует коэффициентам полинома ДХ) = 1 + X + X3, как и в случае двоичных циклических кодов (см. раздел 6.7.5). Пусть вначале схема находится в некотором состоянии, например 100; при выполнении правого сдвига на один такт можно убедиться, что каждый из элементов поля (за исключением нулевого), показанных на рис. 8.7, циклически будет появляться в разрядах регистра сдвига. На данном конечном поле GF(23) можно определить две арифметические операции — сложение и умножение. В табл. 8.2 показана операция сложения, а в табл. 8.3 — операция умножения, но только для ненулевых элементов. Правила суммирования следуют из уравнений (8.17) и (8.18,д); и их можно доказать, обратившись к рис. 8.7, поскольку сумму двух элементов поля можно рассчитать путем сложения (по модулю 2) соответствующих коэффициентов их базисных элементов. Правила умножения, указанные в табл. 8.3, следуют из обычной процедуры, в которой произведение элементов поля вычисляется путем сложения по модулю (2т -1) их показателей степеней или, для данного случая, по модулю 7.
х° х1 х2 х3 Рис. 8.8. Отображение элементов поля в базисные элементы можно представить с помощью схемы линейного регистра сдвига с обратной связью (linear feedback shift register — LFSR), построенного на примитивном полиноме |
Таблица 8.2. Таблица сложения для GF(8) при/(Х) = 1 +Х + Х1
|
Дата добавления: 2015-10-28; просмотров: 79 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Основы теории принятая статистических решений 1051 38 страница | | | Основы теории принятая статистических решений 1051 40 страница |