Выполнения лабораторной работы на С#
Методы
кодирования цифровых сигналов.
1. Теория
Код MLT-3 (Multi-Level Transition-3) предполагает, что
при передаче нулевого битового интервала уровень сигнала не меняется, а при
передаче единицы – меняется на следующий уровень по такой цепочке: +U, 0, –U, 0, +U, 0, –U и т.д. Таким образом, максимальная частота смены уровней
получается вчетверо меньше скорости передачи в битах (при последовательности
сплошных единиц). Требуемая полоса пропускания оказывается меньше, чем при коде NRZ.
Все упомянутые в данном разделе коды
предусматривают непосредственную передачу в сеть цифровых двух- или
трехуровневых прямоугольных импульсов.
2. Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
string chislo;
int[] massivbit;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int flag1=1;///флаг достижения максимума
=1, если мы посередине, 0, если опускаться некуда, 2, если подниматься
некуда
int flag2=0;///флаг 2, отражает на сколько шагов можно опуститься вниз
chislo = textBox1.Text;///считали строку из текстбокса
string[] str = chislo.Split(new char[] { ' ', ',' });///разбиваем всю строку через пробел или ,
massivbit = new int[str.Length];//выделяем место под массив
try
{
for (int i = 0; i < str.Length; i++)
{
massivbit[i] = Convert.ToInt32(str[i]);///преобразуем строку в массив чисел
}
}
// поймать ошибку
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
int x1 = 16;//координаты первой точки
int y1 = 45;//
int x2 = 16;//координаты 2й
int y2 = 45;//
Graphics gr = pictureBox1.CreateGraphics();///создаем область для рисования
gr.Clear(this.BackColor);//очищаем область для рисования
Pen mySolidColorBrushzv = new Pen(Color.Blue, 3);//создали чем будем
рисовать
int a1 = 16;//координаты первой
точки
int b1 = 45;//
int a2 = 16;//координаты 2й
int b2 = 45;//
Graphics tt =
pictureBox1.CreateGraphics();///создаем область для рисования
Pen setka = new Pen(Color.Black, 21);
tt.DrawLine(setka, a1, b1, a2, b2);
int w = this.ClientSize.Width;//размеры
клиентской области
int h = this.ClientSize.Height;//размеры
клиентской области
int widthLines = 15;//Ширина
клетки
int heightLines = 15;//Высота
клетки
for (int i = 0; i < w; i += widthLines)
{
//Вертикальные линии
gr.DrawLine(new Pen(Brushes.BlueViolet), new Point(i + widthLines, 0), new Point(i + widthLines, h));
//Горизонтальные линии
gr.DrawLine(new Pen(Brushes.BlueViolet), new Point(0, i + heightLines), new Point(w, i + heightLines));
}
if (massivbit[0] == 1)
{
flag1++;
x2 = x2 + 15;
y2 = y2 - 15;
y1 = y2;
gr.DrawLine(mySolidColorBrushzv, x1, y1,
x2, y2); ///рисуем линию выше середины если 1я цифра=1
flag2=1;
}
else
{
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv,
x1, y1, x2, y2); ///рисуем линию посередине если 1я цифра=0
}
for (int i = 1; i < massivbit.Length; i++)///в цикле рисуем график для
остальных введеных чисел
{
x1 = x2;
y1 = y2;///записали координаты 2й точки
в 1ю, далее будем изменять координаты 2й
if (massivbit[i] == 1)///если =1
{
if (massivbit[i - 1] == 1)//проверяем каким было предыдущее число
{
if (flag2 != 1)///если мы не в самом верху
{
flag1++;
y2 = y2 - 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);////
x1 = x2;
y1 = y2;
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);////рисуем вверх и вправо
if(flag1==2)flag2=1;
}
else/// если мы вверху
{
flag1--;
y2 = y2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);///
x1 = x2;
y1 = y2;
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv,
x1, y1, x2, y2);///рисуем вниз и вправо
if(flag1==0)flag2=0;
}
}
else/// если пришел 0
{
if (flag2 != 0)///проверяем не внизу ли мы
{
flag1--;
y2 = y2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);////
x1 = x2;
y1 = y2;
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);///рисуем вниз и вправо
if (flag1 == 0) flag2 = 0;
}
else ///если внизу
{
flag1++;
y2 = y2 - 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);////
x1 = x2;
y1 = y2;
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);////рисуем вверх и вправо
if (flag1 == 2) flag2 = 1;
}
}
}
else///если пришел 0
{
x2 = x2 + 15;
gr.DrawLine(mySolidColorBrushzv, x1, y1, x2, y2);///просто сдвинемся вправо
}
}
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
Random exem = new Random();
string sn = " ";
textBox1.Text = Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
textBox1.Text += Convert.ToString(exem.Next(0, 2)) +
sn + Convert.ToString(exem.Next(0, 2)) +
sn;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
}
}
3.
Пример работы программы
Рисунок 1.
Вывод: при выполнении работы, был получен принцип кодирования
импульсов с помощью кода MLT-3.