Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






public partial class Form1 : Form






Шифрування даних циклічним кодом

Приклад програми для реалізації CRC(7, 3) з твірним поліномом 11101

Кодування

 

Декодування

Виправлення помилки

Якщо після ділення (у декодері) у регістрах a1, a2, a3, a4 є хоча б одна одиничка, значить при передачі послідовності була помилка. Для виправлення помилки застосовується таке правило: на вхід декодера подається стільки нулів поки у регістрі не з’явиться комбінація 1000 (у нашому випадку) тобто у регістрі a1=1 а всі інші =0; номер такту при якому з’явилась комбінація 1000 і є номером спотвореного біту. Після цього залишається лише інвертувати спотворений біт і видати користувачу послідовність.

Лістинг програми

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

Namespace lab_ZI

{

public partial class Form1: Form

{

const int K = 3; // k - кількість інформаційних бітів

const int R = 4; // r - кількість надлишкових бітів

static int N = K + R; // n - загальна кількість бітів

int[] numb = new int[K];

int[, ] arr = new int[2, R] { { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };

int[] mas = new int[N];

public Form1()

{

InitializeComponent();

}

private void button3_Click(object sender, EventArgs e) // Button < generic>

{

textBox1.Clear();

Random rand = new Random();

for (int i = 0; i < K; i++)

{

numb[i] = rand.Next(0, 2);

textBox1.Text += numb[i] + " \n";

}

for (int i = 0; i < 2; i++)

for (int j = 0; j < R; j++)

arr[i, j] = 0;

}

private void button2_Click(object sender, EventArgs e) // Button < coder>

{

for (int i = 0; i < 2; i++)

for (int j = 0; j < R; j++)

arr[i, j] = 0;

textBox2.Clear();

for (int i = 0; i < 3; i++)

{

arr[1, 0] = numb[i] ^ arr[0, 3];

textBox2.Text += arr[1, 0];

arr[1, 1] = arr[0, 0];

textBox2.Text += arr[1, 1];

arr[1, 2] = arr[1, 0] ^ arr[0, 1];

textBox2.Text += arr[1, 2];

arr[1, 3] = arr[1, 0] ^ arr[0, 2];

textBox2.Text += arr[1, 3];

arr = arr_copy(arr);

textBox2.Text += " \n";

}

}

int[, ] arr_copy(int[, ] arr)

{

for (int i = 0; i < 4; i++)

arr[0, i] = arr[1, i];

return arr;

}

private void button1_Click(object sender, EventArgs e) // Button < check>

{

label5.Text = " ";

for (int i = 0; i < 3; i++)

{

if (textBox3.Lines[i] == textBox2.Lines[i])

{

label5.Text += " OK!!! \n";

}

else label5.Text += " wrong \n";

}

}

private void button6_Click(object sender, EventArgs e) // Button < get data>

{

textBox4.Clear();

int j = 0;

for (int i = 0; i < K; i++)

{

textBox4.Text += numb[i] + " \n";

mas[j++] = numb[i];

}

for (int i = R - 1; i > = 0; i--)

{

textBox4.Text += arr[1, i] + " \n";

mas[j++] = arr[1, i];

}

}

private void button5_Click(object sender, EventArgs e) // Button < decoder>

{

int step = 0;

int zero = 0;

for (int i = 0; i < 2; i++)

for (int j = 0; j < R; j++)

arr[i, j] = 0;

textBox5.Clear();

for (int i = 0; i < N; i++)

{

arr[1, 0] = mas[i] ^ arr[0, 3];

textBox5.Text += arr[1, 0];

arr[1, 1] = arr[0, 0];

textBox5.Text += arr[1, 1];

arr[1, 2] = arr[0, 3] ^ arr[0, 1];

textBox5.Text += arr[1, 2];

arr[1, 3] = arr[0, 3] ^ arr[0, 2];

textBox5.Text += arr[1, 3];

arr = arr_copy(arr);

textBox5.Text += " \n";

}

//------------------------------------------------------------------------------

while (true)

{

if (arr[1, 0] == 0 & & arr[1, 1] == 0 & & arr[1, 2] == 0 & & arr[1, 3] == 0 & & step == 0)

{

label7.Text = " DATA CORRECT!!! \n";

break;

}

Else

{

step++;

arr[1, 0] = zero ^ arr[0, 3];

textBox5.Text += arr[1, 0];

arr[1, 1] = arr[0, 0];

textBox5.Text += arr[1, 1];

arr[1, 2] = arr[0, 3] ^ arr[0, 1];

textBox5.Text += arr[1, 2];

arr[1, 3] = arr[0, 3] ^ arr[0, 2];

textBox5.Text += arr[1, 3];

arr = arr_copy(arr);

textBox5.Text += " \n";

// textBox1.Text += zero + " \n";

if ((arr[1, 0] == 1 & & arr[1, 1] == 0 & & arr[1, 2] == 0 & & arr[1, 3] == 0) & & step! = 0)

{

label7.Text = " BUG IN " + step + " BIT";

if (mas[step - 1] == 0) mas[step - 1] = 1;

else mas[step - 1] = 0;

break;

}

}

}

label8.Text = " Message: ";

for (int i = 0; i < K; i++)

label8.Text += mas[i];

}

private void button4_Click(object sender, EventArgs e) // Button < bug>

{

Random rand = new Random();

int bit = rand.Next(0, N-1);

if (mas[bit] == 0) mas[bit] = 1;

else mas[bit] = 0;

label6.Text = " bug in " + (bit + 1) + " \n";

textBox5.Clear();

textBox4.Clear();

for (int i = 0; i < N; i++)

{

textBox4.Text += mas[i] + " \n";

}

}

}

}


Скріншоти:

Рис.1. Вікно програми з прикладом кодування та декодування повідомлення без помилки

Рис.2. Вікно програми з прикладом кодування та декодування повідомлення з помилкою

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.016 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал