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

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

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

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

©2007—2016 Пуск!by | По вопросам сотрудничества обращайтесь в contextus@mail.ru