Esempio n. 1
0
        /// <summary>
        /// Кодирует полученное сообщение.
        /// </summary>
        /// <param name="ourMessage">Кодируемое слово</param>
        /// <returns>Код</returns>
        public int[] Encode(int[] ourMessage)
        {
            BaseMatrix A = new BaseMatrix(ourMessage);
            BaseMatrix C = MyStatics.Multiplication(A, generatingMatrix);;

            return(C.Matrix[0]);
        }
Esempio n. 2
0
        /// <summary>
        /// Создает код на основе полученной матрицы, устонавливая его основные параметры.
        /// </summary>
        /// <param name="generatingMatrix">Порождающая матрица</param>
        /// <param name="line">Система уравнений, порождающая код</param>
        public Code(SolutionsMatrix generatingMatrix, string[] line)
        {
            if (generatingMatrix.Matrix.Count < generatingMatrix.Matrix[0].Length)
            {
                throw new CodeGeneratingException("Система имеет недостаточно решений для генерации кода.");
            }

            this.generatingMatrix = generatingMatrix;
            systemOfEquations     = line;
            allCodeWords          = new BaseMatrix();
            for (int possibleCodeNumber = 0; possibleCodeNumber < Math.Pow(2, K); possibleCodeNumber++)
            {
                int[]      intArrayPossibleCodeNumber = MyStatics.ToBinaryIntArray(possibleCodeNumber, K);
                BaseMatrix vectorPossibleCodeNumber   = new BaseMatrix();
                for (int i = 0; i < K; i++)
                {
                    int[] nextLine = { intArrayPossibleCodeNumber[i] };
                    vectorPossibleCodeNumber.Matrix.Add(nextLine);
                }
                BaseMatrix vectorPossibleCode = MyStatics.Multiplication(vectorPossibleCodeNumber, generatingMatrix);
                allCodeWords.Matrix.Add(vectorPossibleCode.Matrix[0]);
            }

            this.t = (MyStatics.FindMinDistance(AllCodeWords) - 1) / 2;
        }