«Санкт-петербургский государственный университет телекоммуникаций им. Проф. М.А. Бонч-Бруевича»
Курсовая работа по программированию “Анализ сигнала на выходе электрической цепи”
Выполнил:
Капралов Савва,
студент группы ИКПИ-31.
Принял:
Преподаватель Козин С.В.
Санкт-Петербург, 2014 год.
Содержание
-
Цель работы
-
Описание работы
-
Анализ поставленной задачи
-
Структура программы
-
Тестирование программы
-
Заключение
-
Исходный код
Цель работы
Целью этой курсовой работы является получение навыков в разработке программного обеспечения на языке 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
Здесь описываются директивы препроцессора и глобальные определения, необходимые для работы программы – объявления функций и глобальных переменных.
Модуль main.сpp
Содержит объявления всех глобальных переменных, функцию 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, а также навыки отладки и тестирования программы. Так как программа имеет модульную структуру, легко осуществить ее возможное расширение. Например, возможно добавить графический интерфейс переписав меню, но не затрагивая остального кода; также программа может быть адаптирована под решение более сложной задачи путем расширения соответсвующих функций вычислений.
Использованная литература:
Б. Керниган, Д. Ритчи – «Язык программирования С»
Герберт Шилдт – «Полный справочник по С»