четверг, 28 марта 2013 г.

Пример 1

Выполнения лабораторной работы на С#


Методы кодирования цифровых сигналов.
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.