Xreferat.com » Рефераты по информатике и программированию » Разложение сигнала в базисе Уолша

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

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

Разработал студент группы 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 -184

-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

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту

Похожие рефераты: