50101 (Процес квантування сигналів по рівню)
Описание файла
Документ из архива "Процес квантування сигналів по рівню", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "контрольные работы и аттестации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "50101"
Текст из документа "50101"
Міністерство освіти і науки України
Національний авіаційний університет
Факультет комп’ютерних систем
Контрольна робота
з теорії інформації та кодування
Тема: Процес квантування сигналів по рівню
Виконала: студентка ФКС 306
Гуркіна Юлія
Прийняв: Русаков О.І.
Київ – 2010
Завдання 1
Проаналізувати роботу алгоритму порозрядного зважування та визначити можливі коди, час і похибку перетворення при слідуючих умовах:
-
кількість розрядів 5;
-
шаг квантування по рівню 0,25В;
-
τ=0,1 мкс;
-
рівень вхідного сигналу 4В;
Програмне виконання завдання
Програмно дане завдання реалізується за допомогою програми, написаною з допомогою пакту Borland C++ Builder6. Вихідний текст програми знаходиться в Додатку 1.
Розглянемо використання даної програми.
До початку роботи вікно програми має наступний вигляд:
В поле вводу "Кількість розрядів" вводимо кількість розрядів, що задані в умові даного завдання.
Аналогічно, в поля "Крок квантування по рівню", "Рівень вхідного сигналу" і "Час перетворення" також вводимо відповідні дані, задані в умові завдання.
В групі полів під назвою "Похибки", а саме в полях "Максимальна абсолютна", "Максимальна відносна", "Середньоквадратична відносна" і "Середньоквадратична абсолютна" в результаті виконання програмою обчислень записуються результати визначення відповідних похибок.
В полі "Можливі коди" в результаті роботи програми записуються можливі двійкові коди, визначені програмою для конкретних даних введених раніше.
В полі "Час перетворення" записується значення часу перетворення, що визначається програмою на основі введених попередньо даних.
Розглянемо роботу програми, при натисканні відповідних кнопок.
Кнопка "Виконати обчислення":
В результаті натискання даної кнопки виконуються обчислення похибок, генерація можливих кодів і обчислення часу перетворення для введених даних. Результати обчислень, як уже було зазначено вище, виводяться у відповідних полях: "Максимальна абсолютна", "Максимальна відносна", "Середньоквадратична відносна", "Середньоквадратична абсолютна", "Можливі коди" і "Час перетворення".
Кнопка "Побудувати графіки":
При натисканні кнопки "Побудувати графіки" в полі форми виникають графіки епюрів напруг для введених спочатку даних.
Кнопка "Очистити поля форми":
В результаті натискання даної кнопки вікно програми повертається в початковий стан, тобто стираються всі введені дані, всі результати обчислень і побудовані графіки.
Кнопка "Вихід":
При натисканні даної кнопки виконується завершення програми, тобто вікно програми закривається.
Завдання 2
Обгрунтувати структурну схему кодера та проаналізувати його роботу на прикладі генерації циклічного коректуючого коду при наступних умовах:
-
створюючий поліном Р(х)=х5+х3+х2+1;
-
інформаційна частина 1000001;
Виконання завдання
Програмно дане завдання реалізується за допомогою програми, написаною з допомогою пакту Borland C++ Builder6. Вихідний текст програми знаходиться в Додатку 2.
Розглянемо використання даної програми.
До початку роботи вікно програми має наступний вигляд:
В полі "Створюючий поліном" відмічаються відповідні складові частини створюючого поліному, в яких в даному випадку цифра біля Х означає степінь. Наприклад, запис Х5 означає х5.
Введений таким чином створюючий поліном записується у пам'ять комп’ютера і передається в поле запису "Створюючий поліном"
при натисканні кнопки "Записати", що знаходиться в тому ж полі, для введення створюючого поліному.
Наприклад, при записі поліному наступного вигляду:
у відповідному полі "Створюючий поліном" отримаємо наступний запис:
В полі "Інформаційна частина"
у вікно "Кількість розрядів"
вводимо число розрядів, з якого складається задана інформаційна частина.
У вікнах пронумерованих від "0" до "7" вводиться задана в умові інформаційна частина, де "0"-"7" - номери відповідних розрядів інформаційної частини, починаючи з молодшого.
При натисканні кнопки "Записати"
відбувається запис введеної інформаційної частини у пам'ять комп’ютера і у відповідне поле "Інформаційна частина":
Наприклад, при введенні інформаційної частини вигляду:
після натискання кнопки "Записати" у відповідному полі зявляється наступний запис:
Кнопка "Виконати обчислення":
В результаті натискання цієї кнопки у полях
з'являться проміжні результати обчислень програми, а в полях
з'являться остаточні результати обчислень, що вимагаються в програмі.
Наприклад, при введенні створюючого поліному і інформаційної частини таких, що були наведені в попередніх прикладах, після натискання кнопки "Виконати обчислення" матимемо у відповідних полях такі результати:
-
проміжні результати:
-
остаточні результати:
Кнопка "Очистити поля форми":
повертає форму у початковий стан, тобто стирає всі записані раніше дані:
Кнопка "Побудувати кодер"
При натисканні даної кнопки програма виконує побудову кодера заданої комбінації циклічного коду.
Наприклад, при введенні циклічного коду, що був наведений у попередніх прикладах, виконується побудова кодеру вигляду:
Кнопка "Вихід": завершує роботу програми.
Додаток 1
#include
#pragma hdrstop
#include "Unit1.h"
#include
#include
//---------------------------------------------------------------------------
#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 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)+ 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); x6=un; } if (uvh>un) ; if (uvh==un) mas[l]=1; if (uvh mas[l]=0; Label11->Caption = Label11->Caption + IntToStr(mas[l]) + " " ; l++; mas1[l1]=1; c1++; for (i=c1;i mas1[i]=0; if (l1==0) { un1=mas1[l1]*de*pow(2,n-c1); x11=un1; } if (l1==1) { un1=mas1[l1-1]*de*pow(2,n-c1+1)+mas1[l1]*de*pow(2,n-c1); x21=un1; } if (l1==2) { un1=mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x31=un1; } if (l1==3) { un1=mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x41=un1; } if (l1==4) { un1=mas1[l1-4]*de*pow(2,n-c1+4)+mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x51=un1; } if (l1==5) { un1=mas1[l1-5]*de*pow(2,n-c1+5)+mas1[l1-4]*de*pow(2,n-c1+4)+mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x61=un1; } if (uvh>un1) mas1[l1]=1; if (uvh==un1) mas1[l1]=0; if (uvh mas1[l1]=0; Label12->Caption = Label12->Caption + IntToStr(mas1[l1]) + " " ; l1++; } while (l!=n); float map=0; float mvp=0; float skap=0; float skvp=0; map=de/2; Edit5->Text=FloatToStrF(map,ffFixed,2,2); mvp=100/(pow(2,n+1)); Edit6->Text=FloatToStrF(mvp,ffFixed,2,2); skap=de/(pow(3,0.5)*2); Edit8->Text=FloatToStrF(skap,ffFixed,2,2); skvp=100/(pow(3,0.5)*pow(2,n+1)); Edit7->Text=FloatToStrF(skvp,ffFixed,2,2); float tp=0; tp=n*t; Label13->Caption=FloatToStrF(tp,ffFixed,2,2); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(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 mas[i]=0; if (l==0) { un=de*pow(2,n-c); x1=un*10; } if (l==1) { un=mas[l-1]*de*pow(2,n-c+1)+mas[l]*de*pow(2,n-c); x2=un*10; } 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*10; } 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*10; } 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*10; } 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)+ 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); x6=un*10; } if (uvh>un) ; if (uvh==un) mas[l]=1; if (uvh mas[l]=0; l++; mas1[l1]=1; c1++; for (i=c1;i mas1[i]=0; if (l1==0) { un1=mas1[l1]*de*pow(2,n-c1); x11=un1*10; } if (l1==1) { un1=mas1[l1-1]*de*pow(2,n-c1+1)+mas1[l1]*de*pow(2,n-c1); x21=un1*10; } if (l1==2) { un1=mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x31=un1*10; } if (l1==3) { un1=mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x41=un1*10; } if (l1==4) { un1=mas1[l1-4]*de*pow(2,n-c1+4)+mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x51=un1*10; } if (l1==5) { un1=mas1[l1-5]*de*pow(2,n-c1+5)+mas1[l1-4]*de*pow(2,n-c1+4)+mas1[l1-3]*de*pow(2,n-c1+3)+mas1[l1-2]*de*pow(2,n-c1+2)+mas1[l1-1]*de*pow(2,n-c1+1)+ mas1[l1]*de*pow(2,n-c1); x61=un1*10; } if (uvh>un1) mas1[l1]=1; if (uvh==un1) mas1[l1]=0; if (uvh mas1[l1]=0; l1++; } while (l!=n); float map=0; float mvp=0; float skap=0; float skvp=0; map=de/2; Edit5->Text=FloatToStrF(map,ffFixed,2,2); mvp=100/(pow(2,n+1)); Edit6->Text=FloatToStrF(mvp,ffFixed,2,2); skap=de/(pow(3,0.5)*2); Edit8->Text=FloatToStrF(skap,ffFixed,2,2); skvp=100/(pow(3,0.5)*pow(2,n+1)); Edit7->Text=FloatToStrF(skvp,ffFixed,2,2); Chart1->Visible=true; Chart2->Visible=true; if (n==1) { Series1->Add(x1,0,clRed); Series1->Add(x1,1,clRed); } if (n==2) { Series1->Add(x1,0,clRed); Series1->Add(x2,1,clRed); Series1->Add(x2,2,clRed); } if (n==3) { Series1->Add(x1,0,clRed); Series1->Add(x2,1,clRed); Series1->Add(x3,2,clRed); Series1->Add(x3,3,clRed); } if (n==4) { Series1->Add(x1,0,clRed); Series1->Add(x2,1,clRed); Series1->Add(x3,2,clRed); Series1->Add(x4,3,clRed); Series1->Add(x4,4,clRed); } if (n==5) { Series1->Add(x1,0,clRed); Series1->Add(x2,1,clRed); Series1->Add(x3,2,clRed); Series1->Add(x4,3,clRed); Series1->Add(x5,4,clRed); Series1->Add(x5,5,clRed); }