
- •Содержание
- •1 Основные сведения о циклических кодах 6
- •Введение
- •1 Основные сведения о циклических кодах
- •1.1 Определение и основные свойства циклических кодов
- •1.2 Построение кодовых последовательностей с использованием
- •1.3 Назначение и способы построения проверочной матрицы
- •1.4 Способ формирования кодовых последовательностей циклического кода с использованием образующего полинома
- •1.5 Способ построения кодовых последовательностей и определение параметров циклического кода с использованием корней образующего полинома
- •1.7 Мажоритарный алгоритм декодирования циклических кодов
- •2 Расчет параметров циклического кода
- •3 Разработка структурной схемы кодека
- •3.1 Разработка структурной схемы кодера
- •3.2 Разработка структурной схемы декодера
- •4 Разработка функциональной схемы
- •4.1 Разработка функциональной схемы кодера
- •4.2 Разработка функциональной схемы декодера
- •5 Программная реализация кодека
- •5.1 Выбор и обоснование языка программирования
- •5.2 Разработка блок-схемы кодирования циклического кода
- •5.3 Разработка блок-схемы декодирования циклического кода
- •5.4 Описание работы программной реализации кодера
- •5.5 Описание работы программной реализации декодера
- •Заключение
- •Литература
- •Приложение а Form2.H
- •Приложение б Form3.H
Заключение
В данном курсовом проекте рассмотрен алгоритм кодирования циклического кода с мажоритарным алгоритмом декодирования при формировании системы раздельных проверок, принципы построения структурных, функциональных схем кодека, а также принципы программной реализации кодека циклического кода.
Основным препятствием к широкому использованию линейных кодов, контролирующих многократные случайные и зависимые ошибки, являются большие временные и аппаратурные затраты на декодирование кодовых слов. Это связано с параллельным декодированием всего кодового слова, когда за один такт необходимо исправить ошибки во всем слове. Очевидно, что параллельное декодирование кодовых слов не требуется при последовательном приеме сообщений, характерном для большого числа каналов передачи информации. Применение последовательной обработки информации приводит к процедурам кодирования и декодирования, эффективным как с алгоритмической, так и с вычислительной точки зрения.
Преимуществом линейных, в частности систематических, кодов является то, что в кодере и декодере не нужно хранить большие таблицы всех кодовых комбинаций, а при декодировании не нужно производить большое количество сравнений.
Однако, для получения высокой верности связи следует применять коды достаточно большой длины. Применение систематического кода в общем случае, хотя и позволяет упростить декодирование по сравнению с табличным способом, все же при значениях n порядка нескольких десятков не решает задачу практической реализации.
Был предложен ряд кодов и способов декодирования, при которых сложность декодера растет не экспоненциально, а лишь как некоторая степень n. В классе линейных систематических двоичных кодов это - циклические коды. Циклические коды просты в реализации и при невысокой избыточности обладают хорошими свойствами обнаружения ошибок. Циклические коды получили очень широкое распространение как в технике связи, так и в компьютерных средствах хранения информации.
Литература
1. Курош А.Г. Курс высшей алгебры. – М.: Высш. шк.,1979
2. Мак-Вильямс Ф.Дж., Слоэн Н.Дж.А. Теория кодов, исправляющих ошибки: Пер с анг. – М.: Связь, 1979.
3. Блейхут Р. Теория и практика кодов, контролирующих ошибки: Пер с анг. /Под ред. К.Ш. Зигангирова. – М.: Мир,1987.
4. Касами Т., Токуда И., Ивадари Е. и др. Теория кодирования: Пер. с яп./Под ред. Б.С. Цыбакова и С.Н. Гелфанда. – М.: Мир, 1978.
5. Питерсон У., Уэлдон Э. Коды, исправляющие ошибки: Пер. с англ./Под ред. Р.Л. Добрушина и С.И. Самойленко. – М.: Мир, 1976.
6. Муттер В.М. Основы помехоустойчивой телепередачи информации. – Л.:Энергоатомиздат, 1980.
7. В.К. Конопелько, В.А. Липницкий, В.Д. Дворников и др. Теория прикладного кодирования. В 2 т. Т 2 – Мн.: БГУИР, 2004, - 398 с.
8. Герберт Шилдт. Искусство программирования на С++. – СПб.: БХВ-Петербург, 2005, - 49 6с.
9. Королев А.И. Коды и устройства помехоустойчивого кодирования информации. – Мн.:, 2002. – 286 с.
Приложение а Form2.H
#pragma once
#include "Form3.h"
namespace Kursovoi {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class Form2 : public System::Windows::Forms::Form
{
public:
Form2(void)
{
InitializeComponent();
}
protected:
~Form2()
{
if (components)
{
delete components;
}
}
protected:
private: System::Windows::Forms::Button^ button1;
private: System::Windows::Forms::TextBox^ textBox23;
private: System::Windows::Forms::TextBox^ textBox24;
private:
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form2::typeid));
this->button1 = (gcnew System::Windows::Forms::Button());
this->textBox23 = (gcnew System::Windows::Forms::TextBox());
this->textBox24 = (gcnew System::Windows::Forms::TextBox());
this->SuspendLayout();
this->button1->Location = System::Drawing::Point(38, 21);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(89, 38);
this-button1->TabIndex = 60;
this->button1->Text = L"Кодировать";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
this->textBox23->BackColor = System::Drawing::Color::Silver;
this->textBox23->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBox23->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->textBox23->ForeColor = System::Drawing::Color::Black;
this->textBox23->Location = System::Drawing::Point(330, 232);
this->textBox23->Name = L"textBox23";
this->textBox23->Size = System::Drawing::Size(126, 22);
this->textBox23->TabIndex = 61;
this->textBox24->BackColor = System::Drawing::Color::Silver;
this->textBox24->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
this->textBox24->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 9.75F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->textBox24->ForeColor = System::Drawing::Color::Black;
this->textBox24->Location = System::Drawing::Point(330, 269);
this->textBox24->Name = L"textBox24";
this->textBox24->ReadOnly = true;
this->textBox24->Size = System::Drawing::Size(126, 22);
this->textBox24->TabIndex = 62;
this->textBox24->TextChanged += gcnew System::EventHandler(this, &Form2::textBox24_TextChanged);
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->BackColor = System::Drawing::Color::White;
this->BackgroundImage = (cli::safe_cast<System::Drawing::Image^ >(resources->GetObject(L"$this.BackgroundImage")));
this->ClientSize = System::Drawing::Size(523, 319);
this->Controls->Add(this->textBox24);
this->Controls->Add(this->textBox23);
this->Controls->Add(this->button1);
this->ForeColor = System::Drawing::Color::Black;
this->Icon = (cli::safe_cast<System::Drawing::Icon^ >(resources->GetObject(L"$this.Icon")));
this->Name = L"Form2";
this->Text = L"Кодер циклического кода";
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) {
Form3^ form1 = gcnew Form3;
form1->Show();
}
private: System::Void label2_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
textBox24->Text="";
array<Char>^ w = textBox23->Text->ToCharArray();
int p[15]={0};
for(int i=0;i<7;i++)
{
if(w[i]=='1')
p[i]=1;
else
p[i]=0;
}
p[7]=(p[2]+p[3]+p[4])%2;
p[8]=(p[0]+p[1]+p[3]+p[7])%2;
p[9]=(p[1]+p[2]+p[4]+p[8])%2;
p[10]=(p[2]+p[3]+p[5]+p[9])%2;
p[11]=(p[3]+p[4]+p[6]+p[10])%2;
p[12]=(p[0]+p[5]+p[6]+p[8])%2;
p[13]=(p[5]+p[6]+p[8]+p[12])%2;
p[14]=(p[6]+p[7]+p[9]+p[13])%2;
for(int i=0;i<15;i++)
textBox24->Text+=System::Convert::ToString(p[i]);
}
private:System::Void textBox24_TextChanged(System::Object^sender,System::EventArgs^e) {
}
};
}