Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_progr_final.docx
Скачиваний:
15
Добавлен:
15.03.2015
Размер:
79.56 Кб
Скачать

«Санкт-петербургский государственный университет телекоммуникаций им. Проф. М.А. Бонч-Бруевича»

Курсовая работа по программированию “Анализ сигнала на выходе электрической цепи”

Выполнил:

Капралов Савва,

студент группы ИКПИ-31.

Принял:

Преподаватель Козин С.В.

Санкт-Петербург, 2014 год.

Содержание

  1. Цель работы

  2. Описание работы

  3. Анализ поставленной задачи

  4. Структура программы

  5. Тестирование программы

  6. Заключение

  7. Исходный код

Цель работы

Целью этой курсовой работы является получение навыков в разработке программного обеспечения на языке C, а также анализ и решение поставленной задачи и обоснование выбранных методов реализации программы.

Описание задачи:

Имеется электрическая цепь, на вход которой подаётся определённый сигнал Uвх. Необходимо по заданному входному сигналу определить сигнал на выходе цепи ( Uвых )

Входной сигнал задаётся на временном отрезке в соответствии с графиком:

Рабочий набор:

T нач = 0

t кон = 20

t1 = 10

a = 50В

b = 0.75 1/c

c = 5 1/c

Сигнал на выходе формируется в соответствии с передаточной характеристикой:

Рабочий набор:

U1 = 20 В

U2 = 100 В

Также требуется рассчитать длительность переднего фронта входного и выходного сигнала .

Анализ поставленной задачи

Рассмотрим график входного сигнала. Он описывается данной функцией:

На промежутке от t нач до t1: Uvx(t) =

На промежутке от t 1 до t кон: Uvx(t) =

Выходной сигнал описан функцией, которая зависит от входного сигнала:

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

Uвых(Uвх) = U1 / U2 * Uвх

Вторая формула:

Uвых(Uвх) = U2

Таким образом, можно ввести систему уравнений для выходного сигнала:

Uвых ( Uвх ) = U1 / U2 * Uвх при Uвх < U1

Uвых( Uвх ) = U2, при Uвх > U1

Таким образом, график функции Uвых(Uвх(t)) будет выглядеть вот так:

Разработка структуры программы

Программа разбита на функции, выполняющие свои задачи. Функции будут сгруппированы в модули, решающие схожие задачи. Возможны раличные вариант организации структуры – программа может состоять из единственного файла, но гораздо целесообразнее разбить ее на модули. Разбиение на модули может происходить по-разному, но исходя из задач программы, в которые входит, помимо вычислений, и работа с файлами, как для ввода, так и для вывода данных, были выделены главный модуль, являющийся связующим звеном и содержащий меню программы, модуль, отвечающий за вычисления и модуль, отвечающий за работу с файлами. Роль массивов в реализации функций программы существенна –эта структура данных, представляющая собой набор элементов одного типа, позволяет нам с легкостью хранить и обращаться к данным программы независимо от их объема. Программа состоит из следующих модулей:

Заголовочный файл mainheader.h

Здесь описываются директивы препроцессора и глобальные определения, необходимые для работы программы – объявления функций и глобальных переменных.

Модуль mainpp

Содержит объявления всех глобальных переменных, функцию main() а также функции input_data() и display_data()

Глобальные переменные:

Массивы времени, входных и выходных данных double time[N];

double Uvx[N];

double Uvix[N];

Переменные рабочего набора

double t_begin = 0, t_end = 20, t_1 = 10;

double a = 50, b = 0.75, c = 5;

double U1 = 20, U2 = 100;

Функция main() является главной связующей между всеми модулями и функциями программы. В ней объявляются массивы данных и переменные рабочего набора и содержится главный цикл, который выполняется до тех пор, пока пользователь не выберет опцию выхода.

void Input_data() – функция, позволяющая ввести рабочие данные.

void display_data() – функция, выводящая на экран массивы времени, входного и выходного напряжения в виде таблицы.

Модуль calc.cpp

В этом модуле содержатся все функции вычислений.

void form_time() – функция, формирующая массив времени

void form_Uvx() – функция, формирующая массив входных данных

void form_Uvix() – функция, формирующая массив выходных данных

void getfront( double arr[N], frontside side ) – рассчитывает и выводит на экран тип и длительность указанного в переменной side фронта, где side – enumeration, принимающий значения LEFT и RIGHT

Модуль file_io.cpp

void read_data() – читает набор данных из файла data.txt

void write_data() – записывает в файл data.txt рабочие данные и массивы времени, входного и выходного напряжения в виде таблицы.

void output_arrays() – выводит массивы времени, входного и выходного напряжения в виде таблицы.в файлы array_time.txt, array_Uvx.txt и array_Uvix.txt в формате, удобном для чтения в программе Maxima.

Тестирование программы

Тесты, подтверждающие правильность работы программы. Рассчёты сделаны в wxMaxima.

Большой сигнал (а = 50)

time

Uvx

Uvx Maxima

Uvix

Uvix Maxima

0

0.00000

0

0.00000

0

2

38.84349

38.843

100.00000

100

4

47.51065

47.511

100.00000

100

6

49.44455

49.445

100.00000

100

8

49.87606

49.876

100.00000

100

10

49.97235

49.972

100.00000

100

12

0.00227

0.00227

0.01135

0.0113

14

0.00000

1.03055*10^-7

0.00000

5.15274*10^-7

16

0.00000

4.67878*10^-12

0.00000

2.33939*10^-11

18

0.00000

2.12417*10^-16

0.00000

1.06209*10^-15

20

0.00000

9.64375*10^-21

0.00000

4.82187*10^-20

Малый сигнал (а = 0.75)

Time

Uvx

UvxMaxima

Uvix

UvixMaxima

0

0

0

0

0

2

0.5826524

0.583

2.9132619

2.9133

4

0.7126597

0.713

3.5632985

3.5633

6

0.7416683

0.742

3.7083413

3.7083

8

0.7481409

0.748

3.7407047

3.7407

10

0.7495852

0.75

3.7479259

3.7479

12

0.0000340

3.40457*10^-5

0.0001702

1.70229*10^-4

14

0.0000000

1.54582*10^-9

0.0000000

7.72911*10^-9

16

0.0000000

7.01817*10^-14

0.0000000

3.50909*10^-13

18

0.0000000

3.18626*10^-18

0.0000000

1.59313*10^-17

20

0.0000000

1.44656*10^-22

0.0000000

7.23281*10^-22

Заключение

Поставленная задача успешно проанализированна и решена, получены навыки разработки программного обеспечения на языке C, а также навыки отладки и тестирования программы. Так как программа имеет модульную структуру, легко осуществить ее возможное расширение. Например, возможно добавить графический интерфейс переписав меню, но не затрагивая остального кода; также программа может быть адаптирована под решение более сложной задачи путем расширения соответсвующих функций вычислений.

Использованная литература:

Б. Керниган, Д. Ритчи – «Язык программирования С»

Герберт Шилдт – «Полный справочник по С»

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]