Главная Рефераты по геополитике Рефераты по государству и праву Рефераты по гражданскому праву и процессу Рефераты по делопроизводству Рефераты по кредитованию Рефераты по естествознанию Рефераты по истории техники Рефераты по журналистике Рефераты по зоологии Рефераты по инвестициям Рефераты по информатике Исторические личности Рефераты по кибернетике Рефераты по коммуникации и связи Рефераты по косметологии Рефераты по криминалистике Рефераты по криминологии Рефераты по науке и технике Рефераты по кулинарии Рефераты по культурологии Рефераты по зарубежной литературе Рефераты по логике Рефераты по логистике Рефераты по маркетингу Рефераты по международному публичному праву Рефераты по международному частному праву Рефераты по международным отношениям Рефераты по культуре и искусству Рефераты по менеджменту Рефераты по металлургии Рефераты по муниципальному праву Рефераты по налогообложению Рефераты по оккультизму и уфологии Рефераты по педагогике Рефераты по политологии Рефераты по праву Биографии Рефераты по предпринимательству Рефераты по психологии Рефераты по радиоэлектронике Рефераты по риторике Рефераты по социологии Рефераты по статистике Рефераты по страхованию Рефераты по строительству Рефераты по схемотехнике Рефераты по таможенной системе Сочинения по литературе и русскому языку Рефераты по теории государства и права Рефераты по теории организации Рефераты по теплотехнике Рефераты по технологии Рефераты по товароведению Рефераты по транспорту Рефераты по трудовому праву Рефераты по туризму Рефераты по уголовному праву и процессу Рефераты по управлению |
Реферат: Разложение сигнала в базисе УолшаРеферат: Разложение сигнала в базисе УолшаПояснительная записка к курсовой работе по дисциплине "Прикладное программирование" Разработал студент группы 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:
После своей загрузки программа выдала следующую информацию: Среднее значение амплитуды сигнала в кадре равно -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 с., ил. |
|
||||||||||||||||
|