РефератыИнформатикаРаРазложение сигнала в базисе Уолша

Разложение сигнала в базисе Уолша


Разложение сигнала в базисе Уолша


Пояснительная записка к курсовой работе по дисциплине "Прикладное программирование"


Разработал студент группы 96ПУ2 Cалимов Т.Р.


Пензенский государственный университет, Кафедра "АУИС"


Пенза 1998


Введение


В настоящее время индустрия производства компьютеров и программного обеспечения для них является одной из наиболее важных сфер экономики развитых стран. Ежегодно в мире продаются десятки миллионов компьютеров. Только в США объем продаж компьютеров составляет десятки миллионов долларов и постоянно продолжает расти.


В чем же причины такого стремительного роста индустрии персональных компьютеров и их сравнительная выгодность для многих деловых применений?


Простота использования, обеспеченная с помощью диалогового способа взаимодействия с компьютером.


Относительно высокие возможности по переработке информации, наличие программного обеспечения, а так же мощных систем для разработки нового программного обеспечения.


Язык С++ - универсальный язык общего назначения, область приложений которого - программирование систем в самом широком смысле. Кроме этого, С++ успешно используется как во многих приложениях, так и в мощных операционных системах. Реализация С++ осуществлена для машин в диапазоне от самых простых персональных компьютеров до самых мощных суперкомпьютеров и для всех операционных систем.


И потому в данном курсовом проекте необходимо применить язык программирования С++ , как наиболее подходящий для решения поставленной задачи.


Прикладное программирование


Задание на курсовую работу


Тема: разработка программы для разложения сигнала в базисе Уолша.


Исходные данные:


Программа должна выполнять следующие действия:


1) принять блок данных целого типа , первый элемент в файле указывает количество значений в файле (до 10000);


2) выделить кадр из 256 значений;


3) вычислить среднее арифметическое по формуле ;


4) удалить постоянную составляющую из значений кадра xi=xi - m;


5) разложить сигнал в базисе Уолша;


6) коэффициенты разложения сохранить в файле;


7) построить график сигнала;


8) построить график функции Уолша;


9) повторить пункты 2 - 8 до конца файла со смещением 256 значений;


Составить пояснительную записку по форме:


a) задание;


б) алгоритм;


в) программа;


г) контрольный пример;


д) описание работы программы.


1 Алгоритм работы программы


2 Текст программы


#include <conio.h>


#include <stdio.h>


#include <stdlib.h>


#include <graphics.h>


FILE *f; //Указатель на файл данных


FILE *out; //Указатель на выходной файл


int arr[256]; //Массив кадрa


int uolsh[512]; //Массив коэффициентов Уолша


int code, to_int; //Переменные для преобразования


int clk2, loop, clk1; //Переменные циклов


float sum; //Среднее арифметическое


float stepx, stepy; //Шаги графика по х и по y


int delta; //Смещение оси абсцисс


char ch[10]; //Для чтения строки файла


int gdriver = DETECT, gmode, errorcode; //Для инициализации графики


int del=40; //Смещение оси ординат


int max() { //Поиск максимального числа


int tmp; //Временная переменная


tmp=0;


for (clk2=0;clk2<256;clk2++)


if (tmp<abs(arr[clk2])) tmp=abs(arr[clk2]);


return tmp;


}


int ffread (FILE *filptr,char st[10]) {


int flg=0; //Флаг наличия ошибки


size_t err; //Определяет наличие ошибки


*st--;


do {


*st++;


err=fread (st,1,1,filptr);


if (err!=1) {


flg=1;


break;


}


} while (st[0]!='n');


st[0]=0;


return flg;


}


void main () {


clrscr();


if ((f = fopen("int.dat", "rt"))== NULL) {


fprintf(stderr, "Входной файл отсутствует.n");


exit (1);


}


if ((out = fopen("out.dat", "wt"))== NULL) {


fprintf(stderr, "Ошибка создания файла.n");


exit (1);


}


if (ffread (f,ch)==1) { //Чтение длины файла


fprintf(stderr, "Ошибка при чтении файла.n");


exit (1);


}


code=atoi(ch); //Преобразование строки в число


if (code<256) {


fprintf(stderr, "Длина меньше одного кадраn");


exit (1); //Длина меньше одного кадра


}


for (clk1=0;clk1<code/256;clk1++) {


clrscr ();


for (clk2=0;clk2<256;clk2++) { //Чтение одного кадра


if (ffread (f,ch)==1) { //Чтение данных из файла


fprintf(stderr, "Ошибка при чтении файла.n");


exit (1);


}


arr[clk2]=atoi (ch); //вычисление значения


}


//Вычисление среднего арифметического кадра


sum=0;


for (clk2=0;clk2<256;clk2++) sum+=arr[clk2];


printf ("Среднее значение амплитуды сигнала в кадре равно %fn",


sum/256);


//Удаление постоянной составляющей


printf ("Удаляем постоянную составляющую...n");


for (clk2=0;clk2<256;clk2++) arr[clk2]-=int(sum/256);


//Раскладываем сигнал в базисе Уолша


//Для разложения находим второй коэффициент


// 0 1/2


// C1=-U*ó (Q+1/2)dQ+U*ó (Q+1/2)dQ=U/4


// õ õ


// -1/2 0


//Для каждой пары значений


printf ("Раскладываем в базисе Уолша...n");


for (clk2=0;clk2<255;clk2++) {


uolsh[2*clk2]=(arr[clk2+1]-arr[clk2])/4+arr[clk2];


uolsh[2*clk2+1]=(arr[clk2+1]-arr[clk2])*3/4+arr[clk2];


fprintf (out,"%i ",uolsh[2*clk2]);


fprintf (out,"%i n",uolsh[2*clk2+1]);


}


printf ("Нажмите любую клавишуn");


getch();


initgraph(&gdriver, &gmode, "");


errorcode = graphresult();


if (errorcode != grOk)


{


printf("Ошибка инициализации графики: %sn",


grapherrormsg(errorcode));


printf("Нажмите любую клавишу для выхода n");


getch();


exit(1);


}


stepx=(getmaxx()-del)/256; //Вычисление шага по x


delta=(getmaxy()/2); //Смещение оси абсцисс


stepy=(float)delta/max(); //Вычисление шага по y


line (del,0,del,479); //Рисование осей координат


line (0,delta,639,delta);


outtextxy(0,delta+20,"0"); //Вывод обозначений осей


outtextxy(33,0,"Y");


outtextxy(500,delta+20,"номер значения");


moveto(del,delta-arr[1]*stepy);


setcolor(LIGHTBLUE);


for (clk2=0;clk2<256;clk2++) //Вывод графика


lineto (stepx*clk2+del,delta-stepy*arr[clk2]); //сигнала]


setcolor (WHITE);


outtextxy (100,0,"График сигнала");


outtextxy(100,10,"Нажмите любую клавишу для продолжения");


getch();


initgraph(&gdriver, &gmode, "");


line (del,0,del,479); //Рисование осей координат


line (0,delta,639,delta);


outtextxy(0,delta+20,"0"); //Вывод обозначений осей


outtextxy(33,0,"Y");


outtextxy(500,delta+20,"номер значения");


moveto(del,delta-uolsh[1]*stepy);


setcolor(LIGHTGREEN);


for (clk2=0;clk2<512;clk2++) //Вывод графика


lineto (stepx*clk2/2+del,delta-stepy*uolsh[clk2]); //функции Уолша


setcolor(WHITE);


outtextxy (100,0,"График функции Уолша");


outtextxy(100,10,"Нажмите любую клавишу для продолжения");


getch();


initgraph(&gdriver, &gmode, "");


line (del,0,del,479); //Рисование осей координат


line (0,delta,639,delta);


outtextxy(0,delta+20,"0"); //Вывод обозначений осей


outtextxy(33,0,"Y");


outtextxy(500,delta+20,"номер значения");


moveto(del,delta-arr[1]*stepy);


setcolor(LIGHTBLUE);


for (clk2=0;clk2<256;clk2++) //Вывод графика


lineto (stepx*clk2+del,delta-stepy*arr[clk2]); //сигнала


moveto(del,delta-uolsh[1]*stepy);


setcolor(LIGHTGREEN);


for (clk2=0;clk2<512;clk2++) //Вывод графика


lineto (stepx*clk2/2+del,delta-stepy*uolsh[clk2]); //функции Уолша


setcolor(WHITE);


for (clk2=1;clk2<9;clk2++) {


line (32*clk2*stepx+del,delta,32*clk2*stepx+del,delta+5);


itoa (32*clk2,ch,10); //Нанесение разметки


outtextxy(32*clk2*stepx+del,delta+10,ch); // на ось x


}


to_int=max()/4;


for (clk2=-3;clk2<4;clk2++) { //Нанесение разметки


if (clk2!=0) {


line (del,delta-stepy*to_int*clk2,del-5,delta-stepy*to_int*clk2);


itoa (to_int*clk2,ch,10);


outtextxy(0,delta-stepy*to_int*clk2,ch); //на ось y


}


}


outtextxy(100,0,"Нажмите любую клавишу для продолжения");


getch ();


closegraph();


printf("Следующий кадр :n");


}


clrscr ();


fclose (f);


fclose (out);


}


3 Контрольный пример


Файл out.dat:




















125 164


206 250


207 77


-15 -71


-20 138


129 -51


-141 -140


-79 42


37 -95


-125 -51


-58 -150


-152 -62


-42 -92


-76 6


-17 -147


-212 -212


-167 -75


28 142


167 101


31 -44


-25 89


68 -89


-142 -90


-75 -99


-135 -184


-212 -218


-159 -33


-12 -98


-148 -163


-130 -48


52 170


192 118


64 32


-42 -156


-134 26


27 -135


-131 39


131 147


70 -102


-199 -222


-128 84


98 -88


-161 -120


-12 162


223 169


117 67


-18 -138


-133 -3


18 -72


-124 -138


-155 -175


-83 121


144 -15


-35 86


94 -12


-100 -168


-113 65


109 17


14 101


157 181


159 89


101 197


143 -63


-163 -156


-61 122


152 27


20 134


99 -86


-186 -200


-192 -158


-151 -171


-142 -64


-23 -17


-37 -83


-86 -46


-62 -134


-70 131


215 181


170 184


120 -23


-100 -111


-82 -10


2 -46


-58 -34


-53 -118


-71 90


143 87


58 59


12 -85


-60 88


152 131


152 216


170 14


-54 -33


50 195


174 -16


-134 -181


-180 -129


-78 -28


36 113


144 128


45 -103


-71 141


171 17


-26 42


10 -124


-84 132


243 247


136 -92


-137 5


53 5


-14 -2


14 34


30 -1


-8 11


76 187


140 -68


-103 37


75 9


-25 -27


29 143


149 47


-23 -61


-115 -185


-171 -70


16 88


153 213


140 -67


-93 63


57 -113


-203 -213


-180 -103


-8 104


85 -69


-156 -176


-188 -190


-181 -157


-102 -16


60 126


185 237


183 21


1 125


108 -52


-50 114


211 240


223 157


147 194


180 104


22 -66


-51 70


162 226


262 270


192 26


-45 -20


-62 -172


-206 -162


-73 61


47 -117


-115 53


97 14


-45 -80


-74 -26


-49 -146


-170 -120


-23 120


205 232


228 192


168 156


64 -109


-186 -165


-126 -70


-46 -55


5 135


180 136


128 157


124 26


37 157


145 -1


-19 93


130 92


-3 -155


-202 -143


-129 -162


-112 22


67 21


0 5


48 128


81 -95


-74 148


167 -17


-92 -58


-88 -184


-151 11


42 -58


-125 -159


-178 -18

4


-96 86


194 228


136 -85


-169 -115


-74 -45


-38 -55


-15 83


139 153


132 76


89 173


116 -83


-131 -25


13 -19


-29 -16


-17 -33


-54 -80


-92 -87


-59 -9


17 17


8 -11


-63 -149


-80 144


147 -71


-191 -211


-116 96


146 33


-56 -120


-151 -147


-105 -27


11 8


33 89


77 -3


-90 -184


-149 17


106 118


94 33


-9 -31


-82 -162


-174 -118


-54 16


19 -49


-47 25


22 -56


-27 110


98 -64


-108 -30


-43 -147


-82 152


192 35


-5 74


95 55


5 -56


-87 -89


-123 -189


-104 132


232 194


190 221


145 -39


-80 24


-45 -155


-173 -97


-60 -62


-10 100


75 -87


-122 -30


-20 -96


-51 117


138 10


-92 -170


-209 -209


-145 -15


82 146


122 8


-6 84


73 -40


-61 12


-24 -171


-228 -193


-169 -155


-59 121


220 239


175 27


-96 -194


-213 -153


-91 -27


49 137


181 181


153 97


79 99


90 49


72 160


133 -11


-76 -62


-14 68


30 -128


-174 -105


2 147


224 232


237 239


236 224


203 173


133 83


19 -60


-35 95


106 -5


-84 -132


-142 -114


-61 15


82 139


182 210


162 36


33 157


163 50


-63 -176


-216 -181


-147 -114


-20 134


198 170


71 -97


-164 -128


-88 -44


-75 -184


-170 -31


67 123


70 -92


-155 -117


-126 -184


-212 -209


-193 -165


-54 141


239 239


199 116


39 -33


-1 137


184 138


116 120


34 -143


-165 -31


23 -5


29 127


185 203


196 162


86 -32


-20 122


115 -42


-134 -160


-169 -159


-62 124


161 49


-23 -57


-86 -112


-142 -178


-154 -70


-34 -46


-89 -162


-129 11


65 31


44 106


126 102


36 -73


-78 24


5 -136


-95 129


161 -1


-50 14


37 16


0 -10


-70 -180


-194 -110


-101 -168


-119 47


108 62


27 3


-65 -175


-170 -46


23 37


13 -51


-96 -123


-126 -104


-42 58


39 -102


-122 -20


4 -54


-95 -119


-147 -179


-179 -145


-109 -72


-6 89


109 51


44 88


127 161


84 -108


-153 -50


59 174


224 208


205 219


110 -122


-181 -63


26 86


27 -153


-148 42


75 -50


-86 -32


23 77


132 187


112 -94


-104 82


103 -41


-62 42


71 24


15 47


39 -11


-17 21


94 200


142 -83


-126 16


49 -27


-54 -30


5 53


70 54


30 -2


21 103


129 99


39 -51


-12 158


235 219


154 38


-12 5


64 164


153 28


-56 -100


-41 121


105 -93


-100 85


110 -28


-37 83


151 166


115 -3


-98 -168


-146 -30


-13 -97


-46 144


244 256


257 246


127 -99


-129 39


143 182


125 -29


-72 -2


-17 -117


-135 -71


-61 -107


-67 59


108 78


16 -78


-38 138


134 -52


-158 -184


-179 -143


-118 -104


-110 -136


-123 -69


-42 -44


-3 82


127 131


142 158


83 -85


-66 144


130 -110


-206 -156


-132 -134


-111 -61


17 123


122 10


-70 -119


-126 -89


-25 65


71 -9


-30 9


72 158


151 51


35 105


118 72


36 8


-63 -179


-126 96


199 181


121 19


-46 -74


-71 -37


6 59


83 76


58 30


-44 -164


-219 -207


-145 -31


16 -6


-13 -5


-18 -55


-100 -152


-128 -24


-24 -129


-170 -144


-126 -116


-99 -77


-66 -69


-15 97


153 149


76 -66


-155 -189


-148 -28


-20 -124


-141 -69


31 159


-32 59


41 -89


-142 -116


-54 46


87 69


27 -38


-40 24


94 171


95 -137


-224 -165


-105 -43


32 121


83 -83


-131 -59


-29 -42


-40 -20


21 83


94 51


22 8


-38 -116


-67 111


161 82


-18 -138


-196 -190


-135 -30


-39 -163


-178 -82


30 158


183 103


-7 -149


-155 -25


-1 -85


-37 145


154 -11


-67 -12


-25 -109


-83 53


73 -27


-118 -202


-240 -230


-225 -224


-181 -95


-61 -79


-45 45


55 -15


-45 -35


-37 -54


-46 -10


50 135


134 45


38 116


89 -44


-90 -48


-53 -107


-69 63


92 18


-63 -151


-162 -93


-31 25


17 -55


-32 88


124 73


89 173


117 -82


-83 115


179 109


31 -57


-35 99


113 6


-68 -108


-47 115


209 235


196 92


63 109


133 132


73 -44


-29 119


153 72


22 4


23 83


54 -66


-32 156


189 66


31 87


88 33


-58 -184


-235 -211


-109 72


70 -118


-215 -223


-203 -155


-47 119


214 238


202 104


31 -17


-66 -117


-57 117


173 111


40 -40


-115 -184


-148 -6


109 199


141 -66


-141 -83


-45 -27


23 104


101 13


30 156


119 -82


-150 -84


-91 -173


-135 23


55 -39


-21 111


83 -108


-110 78


69 -139


-174 -36


61 116


54 -128


-204 -174


-103 9


55 33


9 -17


-29 -24


-55 -124


-82 73


176 226


236 202


79 -135


-195 -101


-33 7


59 123


104 2


-24 26


80 136


160 152


127 87


57 39


7 -39


-30 34


-13 -171


-154 40


89 -9


-93 -164


-200 -202


-204 -208


-219 -238


-207 -124


-64 -27


-53 -143


-88 114


137 -19


-90 -74


-88 -134


-144 -117


-99 -91


-20 114


79 -129


-199 -131


-85 -60


-19 37


15 -87


-46 138


202 144


67 -27


-33 51


87 75


81 108


49 -98


-89 79


63 -137


-157 4


113 169


139 22


-87 -187


-209 -151


-30 154


247 249


218 151


48 -90


-143 -109


-95 -102


-29 126


148 35


-49 -103


-110 -70


-50 -50


-22 33


58 50


26 -16


-47 -68


-24 86


112 54


32 50


-16 -166


-173 -35


39 49


63 81


7 -160


-163 -1


118 194


168 36


25 135


139 36


50 182


149 -53


-150 -140


-152 -187


-101 107


139 -7


-57 -9


37 80


87 56


-13 -120


-149 -97


-16 95


167 201


215 209


124 -40


-124 -130


-60 88


118 30


1 33


82 146


79 -123


-188 -114


-43 27


98 170


206 203


165 93


-19 -173


-249 -245


-211 -147


-130 -160


-141 -71


-72 -146


-110 38


83 25


48 153


164 79


32 24


39 78


16 -148


-187 -101


-15 69


70 -13


-43 -17


13 47


84 125


164 200


222 230


238 248


180 34


30 168



После своей загрузки программа выдала следующую информацию:


Среднее значение амплитуды сигнала в кадре равно -20.375000


Удаляем постоянную составляющую...


Раскладываем в базисе Уолша...


Нажмите любую клавишу





Графики строились 3 раза т.к. на одном экране уменьшается 256 кадров.


4 Описание работы программы


Данная программа осуществляет разложения сигнала в базисе Уолша.


Разработанная программа выполняет следующие функции:


1) принять блок данных целого типа , первый элемент в файле указывает количество значений в файле;


2) выделить кадр из 256 значений;


3) вычислить среднее арифметическое по формуле ;


4) удалить постоянную составляющую из значений кадра xi=xi - m;


5) разложить сигнал в базисе Уолша;


6) коэффициенты разложения сохранить в файле;


7) построить график сигнала;


8) построить график функции Уолша;


9) повторить пункты 2 - 8 до конца файла со смещением 256 значений;


Разложение по системе функций Уолша осуществляется следующем способом:


Пусть необходимо апроксимировать сигнал треугольной формы.



Рис.1.


На рис.1 изображены сигнал треугольной формы и этот же сигнал , разложенный по системе функций Уолша.


На отрезке времени [-T/2,T/2] разлагаемый сигнал описывается функцией s(t) = U(t/T+1/2) (1).


Вычисляем коэффициенты обобщённого ряда Фурье:


(2)


(3)


При аппроксимации колебания треугольной формы двумя первыми членами ряда по системе функций Уолша получается приближённое представление ступенчатой формы.


Заключение


В курсовой работе решена задача разработки программы для разложения сигнала в базисе Уолша.


Разработан алгоритм решения поставленной задачи , составлена и отлажена программа на языке С++ , реализующая указанный алгоритм. С её помощью проведено тестирование прогрвммы , проанализированы полученные результаты. Анализ результатов показал , что поставленная задача успешно решена.


Список литературы


1. Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ. Киев: "ДиаСофт" , 1993.-296 с.,ил.


2 . Корриган Джон : С++ основы программирования: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Разложение сигнала в базисе Уолша

Слов:3612
Символов:30641
Размер:59.85 Кб.