Міністерство освіти і науки України
Національний авіаційний університет
Факультет комп’ютерних систем
Контрольна робота
з теорії інформації та кодування
Тема: Процес квантування сигналів по рівню
Виконала: студентка ФКС 306
Гуркіна Юлія
Прийняв: Русаков О.І.
Київ – 2010
Завдання 1
Проаналізувати роботу алгоритму порозрядного зважування та визначити можливі коди, час і похибку перетворення при слідуючих умовах:
- кількість розрядів 5;
- шаг квантування по рівню 0,25В;
- τ=0,1 мкс;
- рівень вхідного сигналу 4В;
Програмне виконання завдання
Програмно дане завдання реалізується за допомогою програми, написаною з допомогою пакту BorlandC++ Builder6. Вихідний текст програми знаходиться в Додатку 1.
Розглянемо використання даної програми.
До початку роботи вікно програми має наступний вигляд:
В поле вводу "Кількість розрядів" вводимо кількість розрядів, що задані в умові даного завдання.
Аналогічно, в поля "Крок квантування по рівню", "Рівень вхідного сигналу" і "Час перетворення" також вводимо відповідні дані, задані в умові завдання.
В групі полів під назвою "Похибки", а саме в полях "Максимальна абсолютна", "Максимальна відносна", "Середньоквадратична відносна" і "Середньоквадратична абсолютна" в результаті виконання програмою обчислень записуються результати визначення відповідних похибок.
В полі "Можливі коди" в результаті роботи програми записуються можливі двійкові коди, визначені програмою для конкретних даних введених раніше.
В полі "Час перетворення" записується значення часу перетворення, що визначається програмою на основі введених попередньо даних.
Розглянемо роботу програми, при натисканні відповідних кнопок.
Кнопка "Виконати обчислення":
В результаті натискання даної кнопки виконуються обчислення похибок, генерація можливих кодів і обчислення часу перетворення для введених даних. Результати обчислень, як уже було зазначено вище, виводяться у відповідних полях: "Максимальна абсолютна", "Максимальна відносна", "Середньоквадратична відносна", "Середньоквадратична абсолютна", "Можливі коди" і "Час перетворення".
Кнопка "Побудувати графіки":
При натисканні кнопки "Побудувати графіки" в полі форми виникають графіки епюрів напруг для введених спочатку даних.
Кнопка "Очистити поля форми":
В результаті натискання даної кнопки вікно програми повертається в початковий стан, тобто стираються всі введені дані, всі результати обчислень і побудовані графіки.
Кнопка "Вихід":
При натисканні даної кнопки виконується завершення програми, тобто вікно програми закривається.
Завдання 2
Обгрунтувати структурну схему кодера та проаналізувати його роботу на прикладі генерації циклічного коректуючого коду при наступних умовах:
- створюючий поліном Р(х)=х5+х3+х2+1;
- інформаційна частина 1000001;
Виконання завдання
Програмно дане завдання реалізується за допомогою програми, написаною з допомогою пакту BorlandC++ Builder6. Вихідний текст програми знаходиться в Додатку 2.
Розглянемо використання даної програми.
До початку роботи вікно програми має наступний вигляд:
В полі "Створюючий поліном" відмічаються відповідні складові частини створюючого поліному, в яких в даному випадку цифра біля Х означає степінь. Наприклад, запис Х5 означає х5.
Введений таким чином створюючий поліном записується у пам'ять комп’ютера і передається в поле запису "Створюючий поліном"
при натисканні кнопки "Записати", що знаходиться в тому ж полі, для введення створюючого поліному.
Наприклад, при записі поліному наступного вигляду:
у відповідному полі "Створюючий поліном" отримаємо наступний запис:
В полі "Інформаційна частина"
у вікно "Кількість розрядів"
вводимо число розрядів, з якого складається задана інформаційна частина.
У вікнах пронумерованих від "0" до "7" вводиться задана в умові інформаційна частина, де "0"-"7" - номери відповідних розрядів інформаційної частини, починаючи з молодшого.
При натисканні кнопки "Записати"
відбувається запис введеної інформаційної частини у пам'ять комп’ютера і у відповідне поле "Інформаційна частина":
Наприклад, при введенні інформаційної частини вигляду:
після натискання кнопки "Записати" у відповідному полі зявляється наступний запис:
Кнопка "Виконати обчислення":
В результаті натискання цієї кнопки у полях
з'являться проміжні результати обчислень програми, а в полях
з'являться остаточні результати обчислень, що вимагаються в програмі.
Наприклад, при введенні створюючого поліному і інформаційної частини таких, що були наведені в попередніх прикладах, після натискання кнопки "Виконати обчислення" матимемо у відповідних полях такі результати:
- проміжні результати:
- остаточні результати:
Кнопка "Очистити поля форми":
повертає форму у початковий стан, тобто стирає всі записані раніше дані:
Кнопка "Побудувати кодер"
При натисканні даної кнопки програма виконує побудову кодера заданої комбінації циклічного коду.
Наприклад, при введенні циклічного коду, що був наведений у попередніх прикладах, виконується побудова кодеру вигляду:
Кнопка "Вихід": завершує роботу програми.
Додаток 1
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text=" ";
Edit2->Text=" ";
Edit3->Text=" ";
Edit4->Text=" ";
Edit5->Text=" ";
Edit6->Text=" ";
Edit7->Text=" ";
Edit8->Text=" ";
Label11->Caption=" ";
Label12->Caption=" ";
Label13->Caption=" ";
Series1->Clear();
Series2->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
float n=StrToFloat(Edit1->Text);
float de=StrToFloat(Edit2->Text);
float t=StrToFloat(Edit4->Text);
float uvh=StrToFloat(Edit3->Text);
int i;
int l=0, l1=0;
int c=0, c1=0;
int mas1[10];
int mas[10];
float un=0;
float un1=0;
float add=0;
int x1=0;
int x2,x3,x4,x5,x6;
int x21,x31,x41,x51,x61,x11;
do
{
mas[l]=1;
c++;
for (i=c;i<n;i++)
mas[i]=0;
if (l==0)
{
un=de*pow(2,n-c);
x1=un;
}
if (l==1)
{
un=mas[l-1]*de*pow(2,n-c+1)+mas[l]*de*pow(2,n-c);
x2=un;
}
if (l==2)
{
un=mas[l-2]*de*pow(2,n-c+2)+mas[l-1]*de*pow(2,n-c+1)+mas[l]*de*pow(2,n-c);
x3=un;
}
if (l==3)
{
un=mas[l-3]*de*pow(2,n-c+3)+mas[l-2]*de*pow(2,n-c+2)+mas[l-1]*de*pow(2,n-c+1)+
mas[l]*de*pow(2,n-c);
x4=un;
}
if (l==4)
{
un=mas[l-4]*de*pow(2,n-c+4)+mas[l-3]*de*pow(2,n-c+3)+
mas[l-2]*de*pow(2,n-c+2)+mas[l-1]*de*pow(2,n-c+1)+mas[l]*de*pow(2,n-c);
x5=un;
}
if (l==5)
{
un=mas[l-5]*de*pow(2,n-c+5)+mas[l-4]*de*pow(2,n-c+4)+mas[l-3]*de*pow(2,n-c+3)+