Реферат

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

Работа добавлена на сайт bukvasha.net: 2015-10-28

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

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 23.11.2024



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

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

Разработал студент группы 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 ("Среднее значение амплитуды сигнала в кадре равно %f\n",

                                      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("Ошибка инициализации графики: %s\n",

     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

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 с., ил.

Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/

1. Реферат на тему Арт терапия
2. Реферат Вміст нітратів у харчових продуктах
3. Реферат на тему Социальное страхование 2
4. Статья на тему Препятствия на пути к Евангелию
5. Контрольная работа Влияние мирового финансово-экономического кризиса на рынок туристических услуг
6. Реферат на тему Juidical Review Essay Research Paper In 1717
7. Контрольная работа Анализ методов экономической диагностики
8. Контрольная работа Контрольная работа по Сельскому хозяйству
9. Реферат на тему Новый базисный препарат для лечения ревматоидного артрита - Арава лефлуномид опыт многомесячного
10. Реферат Стратификация. Классовая структура общества