Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
public partial class Form1 : FormСтр 1 из 4Следующая ⇒
Шифрування даних циклічним кодом Приклад програми для реалізації 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. Вікно програми з прикладом кодування та декодування повідомлення з помилкою
|