Программное обеспечение для расчета утечки звука из помещения

Уравнения, определяющие параметры звука. Методы защиты помещений от утечки акустической (речевой) информации. Расчет показателя защищенности акустической речевой информации. Технико-экономическое обоснование разработки данного программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 27.06.2012
Размер файла 906,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Оцениваем качества аналога и разработки по каждому i-му показателю качества по следующей шкале оценок

отлично;

хорошо;

удовлетворительно;

предельно допустимо;

неприемлемо.

Рассчитываем интегральные показатели качества и соответственно для аналога и разработки.

Определяем технико-экономическую эффективность аналога и разработки:

,

,

где , - интегральный стоимостной показатель аналога и разработки.

Определяем относительную технико-экономическую эффективность разработанного изделия:

.

где Ea, Ep-технико-экономическая эффективностьаналога и разработки.

Результаты сравнения представлены в таблице 13.

Таблица 13 - Оценка технико-экономической эффективности программного продукта

Параметр, оценка

Весовой

коэфф.

Аналог

Разработка

Ai a

kiAi a

Ai p

kiAi p

функциональные возможности

0,180

1

0,180

3

0,540

надежность

0,205

1

0,205

3

0,615

трудоемкость изготовления

0,205

4

0,820

3

0,615

удобство пользования

0,205

1

0,205

4

0,820

информативность

0,205

1

0,205

4

0,820

интегральный технический показатель, Q

1,615

3,41

интегральный стоимостный показатель, Sn

12 546

15 384

технико-экономическая эффективность, E

0,00013

0,00022

относительная технико-экономическая эффективность нового продукта,

1,7

6.6 Прогнозирование необходимых объемов производства

Тип производства данного программного продукта - мелкосерийное, так как пока планируется продать данный продукт 1 заказчику, в количестве 21 экземпляра.

Заключение

В ходе данного дипломного проекта было разработано программное обеспечение, позволяющее значительно упростить процесс обработки данных, полученных при проведении контрольных замеров в помещении проводимых для оценки уровня его (помещения) защищенности от утечки акустической (речевой) информации по техническим каналам. В основе программы лежит метод позволяющий определить численные значения словесной разборчивости речи Wв акустическом, виброакустическом и оптико-электронном каналах утечки информации, а также при непосредственном прослушивании речи без использования технических средств. В ходе работы было спроектировано две программы, одна из которых реализует расчет словесной разборчивости речи при представлении речевого сигнала семью октавными полосами, а вторая - 20-равноартикуляционными полосами. Данный программный продукт позволяет просмотреть все промежуточные результаты расчетов, а также осуществлять корректировку исходных данных после проведения расчетов.

Для написания программ использовался набор инструментов QtSDK, что позволяет скомпилировать и запустить программу как на ПЭВМ под управлением ОС Linux, так и в ОС семейства Windows.

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

Также, в данном дипломном проекте был проведен анализ безопасности и экологичности разработанного программного продукта.

Разработанные программные продукты переданы лаборатории ТСЗИ кафедры БИТ для их дальнейшего использования.

Список использованных источников

1 Акустика: справочник. Под ред. М. А. Сапожкова. - 2-е изд., перераб. и доп. - М.: Радио и связь, 1989. - 336 с.: ил.

2 Хорев А.А. Защита информации от утечки по техническим каналам. Часть 1. Технические каналы утечки информации: Учебное пособие.М.: Гостехкомиссия России, 1998. - 320 с.

3 БузовГ.А., Калинин С.В., Кондратьев А.В. Защита от утечки информации по техническим каналам : учебное пособие для вузов. - М.: Горячая линия-Телеком, 2005. - 416 с.

4 Техника для спецслужб [Электронный ресурс]// Официальный Интернет-сайт ООО “Техника для спецслужб”. - URL: http://www.t-ss.ru.index.htm (дата обращения: 10.03.2011)

5 ГОСТ Р 51624-00. Защита информации. Автоматизированные системы в защищенном исполнении. Общие требования.Руководство. - М.: Изд-во стандартов, 2000. - 11 с.

6 ГОСТ Р 51583-00. Защита информации. Порядок создания автоматизированных систем в защищенном исполнении. Общие положения.Руководство. - М.: Изд-во стандартов, 2000. - 12 с.

7 Евро-азиатская ассоциация [Электронный ресурс] // Официальный Интернет-сайт НТЦ “Евраас”. - URL: http://www.evraas.ru.index.htm/ (дата обращения: 11.03.2011)

8 Железняк В. К. Защита информации от утечки по техническим каналам: учебное пособие: ГУАП. - СПб., 2006. - 188 с.: ил.

9 Qt SDK [Электронный ресурс] // Официальный Интернет-сайт продукта Qt [англ.]. - URL: http://qt.nokia.com/ (дата обращения 30.01.2011)

10 ГОСТ Р 2.2.2006-05. Руководство по гигиенической оценке факторов рабочей среды и трудового процесса. Критерии и классификация условий труда. Руководство. - М.: Изд-во стандартов, 2005. - 137 с.

11 ГОСТ 12.1.005-88. Общие санитарно-гигиенические требования к воздуху рабочей зоны.- М.: Изд-во стандартов, 1988. - 46с.

12 СН 2.2.4/2.1.8.562-96. Шум на рабочих местах, в помещениях жилых, общественных зданий и на территории жилой застройки.- М.: Изд-во стандартов, 1997. - 37с.

13 СНиП 23-05-95. Естественное и искусственное освещение.- М.: Изд-во стандартов, 1995. - 71с.

14 СанПиН 2.2.2/2.2.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы.- М.: Изд-во стандартов, 2003. - 28с.

ПРИЛОЖЕНИЕ А

Спецификация программного обеспечения для расчета утечки звука из помещения

Обозначение

Наименование

Примечание

Документ

Описание программы

ПриложениеБ

Документ

Описание применения

Приложение В

Документ

Руководство оператора

Приложение Г

Документ

Руководство программиста

Приложение Д

Документ

Руководство системного программиста

Приложение Е

main.cpp

Расчет утечки звука из

помещения

Исходный код в

приложенииЖ

modeselect.h

Расчет утечки звука из

помещения(выбор уровня звука)

Исходный код в

приложенииЖ

modeselect.cpp

Расчет утечки звука из

помещения (выбор уровня звука)

Исходный код в

приложенииЖ

firstscreen7ch.h

Расчет утечки звука из

помещения (ввод данных)

Исходный код в

приложенииЖ

firstscreen7ch.cpp

Расчет утечки звука из

помещения (ввод данных)

Исходный код в

приложенииЖ

secondscreen7ch.h

Расчет утечки звука из

помещения (вывод результатов)

Исходный код в

приложенииЖ

secondscreen7ch.cpp

Расчет утечки звука из

помещения (вывод результатов)

Исходный код в

приложенииЖ

ПРИЛОЖЕНИЕ Б

Описание программы

Б.1 Общие сведения

Обозначение программы For7Ch, наименование - программа расчета акустической защищенности помещения. Функционирование программы возможно на ПЭВМ под управлением ОС семейства Windowsи ОС семейства Linux. Программа написана на языке C++, с использованием QtSDK. Для сборки требуется наличие в системе компилятора Mingw, gccи утилиты Qmake (поставляются вместе с QtSDK). Программа имеет зависимости от сторонних библиотек Qtс открытым кодом.

Б.2 Функциональное назначение

Программа предназначена для обработки результатов полученных в ходе контрольных замеров, проводимых при специальном исследовании помещения.

Б.3 Описание логической структуры

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

Алгоритм работы программы описан ниже. Первое окно программы предназначено для выбора исходных табличных данных, после осуществления выбора и нажатия кнопки “Next>>” происходит заполнение таблицы со справочными данными и отрисовка второго окна. Второе окно предназначено для просмотра табличных данных и ввода результатов замеров в специально предназначенную для этого таблицу. В программе также реализована возможность сохранения заполненной таблицы с результатами замеров для воспроизведения результатов расчета. Возможен возврат из окна ввода данных в окно выбора табличных данных. После нажатия кнопки “Next>>” второго окна производится обработка исходных данных, заполнение таблицы результатов расчетов третьего окна и его отрисовка. Из окна результатов расчетов возможен возврат к окну ввода данных для корректировки исходных данных.

Для корректной работы программы в ОС Windows необходимы: For7Ch.exe - исполняемы файл программы, libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll, 7ChInitial.bd - файл с исходными данными. libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll - динамические библиотеки.

Для перекомпиляции программы необходимы: modeselect.h, firstscreen7ch.h, secondscreen7ch.h, main.cpp, modeselect.cpp, firstscreen7ch.cpp, secondscreen7ch.cpp, SoundCalculation.pro. Список файлов программы предста-влен в таблице Б. 1.

Таблица Б.1 - Список файлов программы

Имя

Обязателен

Назначение

For7Ch.exe

Всегда

Основной исполняемый файл программы

7ChInitial.bd

Всегда

Исходные (табличные) данные для расчета

libgcc_s_dw2-1.dll

Всегда

Динамическая библиотека

mingwm10.dll

Всегда

Динамическая библиотека

QtCore4.dll

Всегда

Динамическая библиотека

QtGui4.dll

Всегда

Динамическая библиотека

SoundCalculation.pro

Для компиляции программы

Файл проекта Qt Creator

modeselect.h

Для компиляции программы

Заголовочный файл C++

firstscreen7ch.h

Для компиляции программы

Заголовочный файл C++

secondscreen7ch.h

Для компиляции программы

Заголовочный файл C++

main.cpp

Для компиляции программы

Исходный код программы

modeselect.cpp

Для компиляции программы

Исходный код программы

firstscreen7ch.cpp

Для компиляции программы

Исходный код программы

secondscreen7ch.cpp

Для компиляции программы

Исходный код программы

Б.4 Используемые технические средства

Для нормального функционирования программы необходимы минимальные конфигурации ПЭВМ, поддерживающие корректную работу ОС WindowsилиLinux. В комплект ПЭВМ обязательно должны входить следующие устройства: процессор, плату оперативной памяти, монитор, видеоадаптер (встроенный или отдельная плата), клавиатуру. Программа не имеет собственных требований к техническому уровню оснащения ПЭВМ.

Б.5 Вызов и загрузка

Запуск программыв ОС Windowsосуществляется с помощью двойного нажатия по значку программы (For7Ch). Для успешного запуска программы необходимо наличие в ее каталоге файла с табличными данными (7ChInitial.bd)и динамических библиотек (libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll). Объем программы вместе с библиотеками и исходными данными - 11.9 Мб.

Б.6 Входные данные

В качестве входных данных в программе используются табличные данные и данные, полученные в результате контрольных замеров. Табличные данные загружаются из файла 7ChInitial.bd. Данные, относящиеся к уровню речевого сигнала в помещении, хранятся непосредственно в исходном коде программы. Данные полученные при специальном исследовании вносятся в специальную таблицу, либо загружаются из заранее сохраненного файла.

Б.7 Выходные данные

Выходные данные программы представлены в виде таблицы и содержат результаты расчета со всеми промежуточными данными.

ПРИЛОЖЕНИЕ В

Описание применения

В.1 Назначение

Программа предназначена для обработки результатов полученных в ходе контрольных замеров, проводимых при специальном исследовании помещения. Целью внедрения данной программы является максимальная автоматизация процесса расчета утечки звука из помещения.Программа в автоматическом режиме заполняет таблицу со справочными материалами необходимыми для расчета, а также позволяет сохранять и загружать результаты контрольных замеров. Программа предоставляет возможность просмотра промежуточные результаты расчетов. Возможна корректировка исходных данных в случае ошибки оператора. Запуск программы возможен в ОС Linuxили Windows.

В.2 Условия применения

Для нормального функционирования программы необходимы минимальные конфигурации ПЭВМ, поддерживающие корректную работу ОС WindowsилиLinux. В комплект ПЭВМ обязательно должны входить следующие устройства: процессор, плату оперативной памяти, монитор, видеоадаптер (встроенный или отдельная плата), клавиатуру. Программа не имеет собственных требований к техническому уровню оснащения ПЭВМ.

Для функционирования программы необходима операционная система семейства Windowsили Linux.В ОС Linuxтребуется наличие графической среды пользователя на базе X11 (Gnome, KDE, LXDE, XFCE и др.) и библиотек Qt.

Также для успешного запуска программы необходимо наличие в ее каталоге файлов:libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll, 7ChInitial.bd. Объем программы вместе с библиотеками и исходными данными - 11.9 Мб.

В.3 Описание задачи

Задачей разработанной программы являетсяобработка результатов контрольных замеров, полученных в ходе специального исследования помещения. При этом программа должна обеспечить вывод всех промежуточных результатов расчета и предоставить возможность корректировки исходных данных. Дополнительной задачей является обеспечение запуска программы в ОС Windowsи Linux.

В.4 Входные и выходные данные

В качестве входных данных в программе используются табличные данные и данные, полученные в результате контрольных замеров. Табличные данные загружаются из файла 7ChInitial.bd. Данные, относящиеся к уровню речевого сигнала в помещении, хранятся непосредственно в исходном коде программы. Данные полученные при специальном исследовании вносятся в специальную таблицу, либо загружаются из заранее сохраненного файла.

Выходные данные программы представлены в виде таблицы и содержат результаты расчета со всеми промежуточными данными.

ПРИЛОЖЕНИЕ Г

Руководство оператора

Г.1 Назначение программы

Программа предназначена для обработки результатов полученных в ходе контрольных замеров, проводимых при специальном исследовании помещения.Программа в автоматическом режиме заполняет таблицу со справочными материалами необходимыми для расчета, а также позволяет сохранять и загружать результаты контрольных замеров. Программа предоставляет возможность просмотра промежуточные результаты расчетов. Возможна корректировка исходных данных в случае ошибки оператора.

Г.2 Условия выполнения программы

Для корректной работы программы требуются следующие компоненты:

- ПЭВМ стандартной комплектации (клавиатура, ЖМД, монитор, процессор, оперативная память);

- корректно установленная ОС Windowsили Linux;

- для ОС Linuxналичие графической среды пользователя на базе X11;

- исполняемый файл программы (“For7Ch”);

- наличиевпапкеспрограммойдинамическихбиблиотекlibgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll (дляОСWindows);

- наличиевпапкеспрограммойфайла 7ChInitial.bd.

Г.3 Выполнение программы

Выбор уровня речевого сигнала в помещении осуществляется из четырех вариантов и представлен на рисунке Г.1. После нажатия кнопки “Next>>” осуществляется переход на экран ввода исходных данных.

Окно ввода исходных данных представлено на рисунке Г.2. Для проведения расчета необходимо заполнить нижнюю таблицу (ввести значения Ziи Bni)или загрузить ее из ранее сохраненного файла (кнопка “Load…”) и нажать кнопку “Next>>”. Также из данного окна возможно сохранение таблицы со значениями Ziи Bni(кнопка “Save…”). Нажатие кнопки “<<Back” приводит к возврату к окну выбора уровня речевого сигнала в помещении.

Рисунок Г.1 - Окно выбора уровня речевого сигнала в помещении

Рисунок Г.2 - Окно ввода исходных данных

Окно результатов расчета предназначено для просмотра промежуточных данных и результатов расчета. Оно представлено на рисунке Г.3.

Рисунок Г.3 - Результаты расчета

ПРИЛОЖЕНИЕ Д

Руководство программиста

Д.1 Назначение и условия применения

Программа предназначена для обработки результатов полученных в ходе контрольных замеров, проводимых при специальном исследовании помещения.

Для корректной работы программы требуются следующие компоненты:

- ПЭВМ стандартной комплектации (клавиатура, ЖМД, монитор, процессор, оперативная память);

- корректно установленная ОС Windowsили Linux;

- для ОС Linuxналичие графической среды пользователя на базе X11;

- для ОС Linuxналичие установленных библиотек Qt;

- исполняемый файл программы (“For7Ch”);

- наличие в папке с программой динамических библиотек libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll (дляОСWindows);

- наличие в папке с программой файла 7ChInitial.bd.

Д.2 Характеристика программы

Данная программа предназначена для автоматизации процесса расчета числового значения словесной разборчивости. Основными характеристиками разработанной программы являются:

- загрузка и сохранение исходных данных;

- возможность корректировки исходных данных;

- возможность просмотра промежуточных данных расчета;

- возможность запуска программы как в ОС Windows, так и в ОС Linux.

Для контроля правильности выполнения программы, необходимо следить за сообщениями об ошибках, выдаваемыми программой. В случае вывода сообщения об ошибке рекомендуется проверить наличие в папке с программой необходимых для ее работы файлов (см. п. Д.1). В случае ошибки с заполнением табличных данных в ОС Linuxрекомендуется проверить наличие в папке загрузки по умолчанию (открывается при нажатии кнопки “Load…” второго окна) файла “7ChInitial.bd” и корректность установки библиотек Qt. В случае, если потребуется перекомпиляция программы, потребуется установка QtCreator + QtSDK (процесс установки описан в Д.6).

Д.3 Компоненты программы

Составные модули программы представлены ниже.

For7Ch (For7Ch.exe)

Основной исполняемый файл программы. Генерируется в системе при помощи QtCreator.

modeselect.h, firstscreen7ch.h, secondscreen7ch.h, main.cpp, modeselect.cpp, firstscreen7ch.cpp, secondscreen7ch.cpp, SoundCalculation.pro

Файлы с исходным кодом программы. Необходимы в случае запуска программы в системе, для которой не был заранее собран исполняемый файл, либо в случае сообщений об ошибках в работе программы. Исходный код представлен в Приложении Е.

7ChInitial.bd

Файл с исходными (табличными) данными программы

libgcc_s_dw2-1.dll, mingwm10.dll, QtCore4.dll, QtGui4.dll

Динамические библиотеки, необходимые для корректного запуска программы в ОС Windows.

Д.4 Входные и выходные данные

Входные и выходные данные программы описаны в Приложении В.

Д.5 Сообщения

Сообщения об ошибках (выводятся в отдельном окне):

1. “Don'tload7ChInitial.bd” - проверьте наличие файла 7ChInitial.bd

2. “Запуск программы невозможен, так как на компьютере отсутствует *.dll. Попробуйте переустановить программу.”(ОСWindows) - проверьте наличие в папке с программой файла *.dll.

3. “Don'tsave” - не удалось сохранить таблицу с исходными данными (возможно, файл куда производилось сохранение защищен от записи, либо пользователь не имеет права на его создание/изменение) - попробуйте сохранить в другой файл или повысить права доступа.

Д.5 Установка QtCreator + QtSDK

В ОС Windowsпроцесс установки QtCreator + QtSDK ничем не отличается от установки любого другого приложения, поэтому не требует разъяснений.

В ОС Linuxдля установки QtCreator + QtSDK достаточно набрать в терминале sudoapt-getinstallqtcreator.

Другим вариантом установки для ОС Linux является следующая последовательность действий (данный вариант предпочтительней в случае установки QtCreator + QtSDKна несколько машин):

1. скачатьQtSDKforLinux/X11 с сайта http://qt.nokia.com;

2. перейти в папку со скачанным файлом (в консолиcd<путь_к_файлу>);

3. набрать в консолиsudochmod u+x <имя_скачанного_файла>;

4. набрать в консоли./<имя_скачанного_файла>;

5. ответить на вопросы инсталлятора;

6. установить необходимые библиотеки (sudoapt-getinstalllibglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-devlibgl-dev libglu-dev).

Примечание: libgl-dev libglu-dev - необязательны, если не предполагается разработка приложений использующих библиотеку OpenGL.

ПРИЛОЖЕНИЕ Е

Руководство системного программиста

Е.1 Общие сведения

Обозначение программы For7Ch, наименование - программа расчета акустической защищенности помещения. Функционирование программы возможно на ПЭВМ под управлением ОС семейства Windowsи ОС семейства Linux. Программа написана на языке C++, с использованием QtSDK. Для сборки требуется наличие в системе компилятора Mingw, gccи утилиты Qmake (поставляются вместе с QtSDK). Программа имеет зависимости от сторонних библиотек Qtс открытым кодом.

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

Программа состоит из исполняемого файла, динамических библиотек и файла с табличными данными.

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

Связи с другими программами отсутствуют.

Е.3 Настройка программы

Разработанная программа не нуждается в дополнительной настройке и способна корректно исполняться в том виде, в котором поставляется.

Е.4 Проверка программы

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

Е.5 Дополнительные возможности

Дополнительные возможности в данной программе отсутствуют.

Е.6 Сообщения системному программисту

Сообщения об ошибках (выводятся в отдельном окне):

4. “Don'tload7ChInitial.bd” - проверьте наличие файла 7ChInitial.bd

5. “Запуск программы невозможен, так как на компьютере отсутствует *.dll. Попробуйте переустановить программу.”(ОСWindows) - проверьте наличие в папке с программой файла *.dll.

ПРИЛОЖЕНИЕ Ж

Исходный код программы

Листинг 1 - Содержимое файла main.cpp

// Целью данного программного кода является инициализация и вывод на экран стартового окна программы

#include <QApplication>

#include "modeselect.h"

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

ModeSelect *modeSelect = new ModeSelect;

modeSelect->show();

return app.exec();

}

Листинг 2 - Содержимоефайла modeselect.h

// Заголовочныйфайлдляmodeselect.cpp

#ifndef MODESELECT_H

#define MODESELECT_H

#include <QDialog>

#include <QtGui>

#include “firstscreen7ch.h”

class ModeSelect : public Qdialog

{

Q_OBJECT

public:

ModeSelect();

FirstScren7ChFill *firstScreen;

QradioButton *soundLevel1;

QradioButton *soundLevel2;

QradioButton *soundLevel3;

QradioButton *soundLevel4;

QVBoxLayout *soundLevelLayout;

QgroupBox *soundLevel;

private:

QpushButton *startButton;

QpushButton *closeButton;

QHBoxLayout *buttonsLayout;

QVBoxLayout *mainLayout;

private slots:

//float setLs();

};

#endif // MODESELECT_H

Листинг 3 - Содержимоефайлаmodeselect.cpp

// Целью данного программного кода является создание окна для выбора уровня речевого сигнала в //помещении и заполнение таблицы со справочными данными в соответствии с выбором

#include <QtGui>

#include <modeselect.h>

#include <firstscreen7ch.h>

ModeSelect::ModeSelect()

{

firstScreen = new FirstScren7ChFill;

soundLevel1 = new QRadioButton(tr("Low level of speech (64 dB)"));

soundLevel2 = new QRadioButton(tr("Medium level of speech (70 dB)"));

soundLevel3 = new QRadioButton(tr("High level of speech (76 dB)"));

soundLevel4 = new QRadioButton(tr("Technicaly increased level of speech (84 dB)"));

soundLevelLayout = new QVBoxLayout;

soundLevelLayout->addWidget(soundLevel1);

soundLevelLayout->addWidget(soundLevel2);

soundLevelLayout->addWidget(soundLevel3);

soundLevelLayout->addWidget(soundLevel4);

soundLevel1->setChecked(true);

connect(soundLevel1, SIGNAL(clicked()), firstScreen, SLOT(setLs1()));

connect(soundLevel2, SIGNAL(clicked()), firstScreen, SLOT(setLs2()));

connect(soundLevel3, SIGNAL(clicked()), firstScreen, SLOT(setLs3()));

connect(soundLevel4, SIGNAL(clicked()), firstScreen, SLOT(setLs4()));

soundLevel = new QGroupBox;

soundLevel->setTitle("Level of sound");

soundLevel->setLayout(soundLevelLayout);;

startButton = new QPushButton(tr("Next >>"));

closeButton = new QPushButton(tr("Exit"));

buttonsLayout = new QHBoxLayout;

buttonsLayout->addWidget(startButton);

buttonsLayout->addWidget(closeButton);

mainLayout = new QVBoxLayout;

mainLayout->addWidget(soundLevel);

mainLayout->addLayout(buttonsLayout);

setLayout(mainLayout);

connect(closeButton, SIGNAL(clicked()), firstScreen->secondScreen, SLOT(close()));

connect(closeButton, SIGNAL(clicked()), firstScreen, SLOT(close()));

connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));

connect(startButton, SIGNAL(clicked()), firstScreen, SLOT(show()));

setWindowTitle(tr("Welcome!!!"));

}

Листинг 4 - Содержимоефайла firstscreen7ch.h

// Заголовочныйфайлдля firstscreen7ch.cpp

#ifndef FIRSTSCREEN7CH_H

#define FIRSTSCREEN7CH_H

#include <QDialog>

#include <QtGui>

#include "secondscreen7ch.h"

class FirstScren7ChFill : public QDialog

{

Q_OBJECT

public:

FirstScren7ChFill();

SecondScren7ChFill *secondScreen;

float* floatLs;

private:

QTableWidget *secondTable;

QTableWidget *firstTable;

QTableWidgetItem *Ls;

QPushButton *saveButton;

QPushButton *loadButton;

QPushButton *backButton;

QPushButton *startCalculation;

QString curFile;

float Kp;

bool saveFile(const QString &fileName);

public slots:

void setLs1();

void setLs2();

void setLs3();

void setLs4();

private slots:

bool save();

bool saveAs();

void load();

bool loadFile(QTableWidget *table, const QString &fileName);

void clearTable();

void calcKp();

void calcW();

};

#endif // FIRSTSCREEN7CH_H

Листинг 5 - Содержимоефайла firstscreen7ch.cpp

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

#include <QtGui>

#include <math.h>

#include <firstscreen7ch.h>

#include "secondscreen7ch.h"

float e = 2.71828;

FirstScren7ChFill::FirstScren7ChFill()

{

secondScreen = new SecondScren7ChFill;

firstTable = new QTableWidget;

firstTable->setRowCount(7);

firstTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

firstTable->setColumnCount(5);

firstTable->verticalHeader()->setResizeMode(QHeaderView::Stretch);

firstTable->setWordWrap(true);

firstTable->setEditTriggers(0);

QStringList firstLabels;

firstLabels<<tr("Border of band \nf1 - f2, Hz")<<tr("Medium frequ-\nency Fcp, Hz")<<tr("Bandwidth \ndf, Hz")

<<tr("Spectral level of\nsignal Bpi")<<tr("Articulatory para-\nmeters of speech");

firstTable->setHorizontalHeaderLabels(firstLabels);

QString fileName = "7ChInitial.bd";

loadFile(firstTable, fileName);

secondTable = new QTableWidget;

secondTable->setRowCount(2);

secondTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

secondTable->setColumnCount(7);

secondTable->verticalHeader()->setResizeMode(QHeaderView::Stretch);

secondTable->setMaximumHeight(80);

QStringList secondLabels;

secondLabels<<tr("Zi, dB")<<tr("Bni, dB");

secondTable->setVerticalHeaderLabels(secondLabels);

for(int row=0; row!=secondTable->rowCount(); ++row){

for (int column=0; column!=secondTable->columnCount(); ++column){

QTableWidgetItem *item = new QTableWidgetItem(tr(" "));

secondTable->setItem(row, column, item);

}

}

saveButton = new QPushButton(tr("Save..."));

loadButton = new QPushButton(tr("Load..."));

backButton = new QPushButton(tr("<< Back"));

startCalculation = new QPushButton(tr("Next >>"));

QHBoxLayout *buttonsLayout = new QHBoxLayout;

buttonsLayout->addWidget(saveButton);

buttonsLayout->addWidget(loadButton);

buttonsLayout->addWidget(backButton);

buttonsLayout->addWidget(startCalculation);

QVBoxLayout *mainLayout = new QVBoxLayout;

mainLayout->addWidget(firstTable);

mainLayout->addWidget(secondTable);

mainLayout->addLayout(buttonsLayout);

setLayout(mainLayout);

connect(saveButton, SIGNAL(clicked()), this, SLOT(save()));

connect(loadButton, SIGNAL(clicked()), this, SLOT(load()));

connect(backButton, SIGNAL(clicked()), this, SLOT(clearTable()));

connect(backButton, SIGNAL(clicked()), this, SLOT(close()));

connect(startCalculation, SIGNAL(clicked()), this, SLOT(calcKp()));

connect(startCalculation, SIGNAL(clicked()), secondScreen, SLOT(show()));

resize(650,350);

setWindowTitle(tr("Base"));

}

void FirstScren7ChFill::setLs1()

{

float floatLs[7] = {35.6, 36.2, 34.5, 27.0, 18.5, 10.5, 4.5};

for(int row=0; row!=firstTable->rowCount(); ++row) {

Ls = new QTableWidgetItem;

Ls->setText(QString::number(floatLs[row]));

firstTable->setItem(row, 3, Ls);

}

}

void FirstScren7ChFill::setLs2()

{

float floatLs [7] = {41.6, 42.2, 40.5, 33.0, 24.5, 16.6, 10.5};

for(int row=0; row!=firstTable->rowCount(); ++row) {

Ls = new QTableWidgetItem;

Ls->setText(QString::number(floatLs[row]));

firstTable->setItem(row, 3, Ls);

}

}

void FirstScren7ChFill::setLs3()

{

float floatLs [7] = {47.6, 48.2, 46.5, 39.0, 30.5, 22.6, 16.5};

for(int row=0; row!=firstTable->rowCount(); ++row) {

Ls = new QTableWidgetItem;

Ls->setText(QString::number(floatLs[row]));

firstTable->setItem(row, 3, Ls);

}

}

void FirstScren7ChFill::setLs4()

{

float floatLs [7] = {55.6, 56.2, 54.5, 47.0, 38.5, 30.6, 24.5};

for(int row=0; row!=firstTable->rowCount(); ++row) {

Ls = new QTableWidgetItem;

Ls->setText(QString::number(floatLs[row]));

firstTable->setItem(row, 3, Ls);

}

}

bool FirstScren7ChFill::save()

{

if (curFile.isEmpty()) {

return saveAs();

} else {

return saveFile(curFile);

}

}

bool FirstScren7ChFill::saveAs()

{

QString fileName = QFileDialog::getSaveFileName(this);

if (fileName.isEmpty())

return false;

return saveFile(fileName);

}

bool FirstScren7ChFill::saveFile(const QString &fileName)

{

QFile file(fileName);

if (!file.open(QIODevice::WriteOnly)){

QMessageBox notSaved;

notSaved.setText(tr("Don't save"));

notSaved.exec();

return false;

}

QDataStream out(&file);

out.setVersion(QDataStream::Qt_4_1);

QApplication::setOverrideCursor(Qt::WaitCursor);

for(int row=0; row!=secondTable->rowCount(); ++row){

for(int column=0; column!=secondTable->columnCount(); ++column){

QString str;

str = secondTable->item(row, column)->text();

if(!str.isEmpty())

out<<int(row)<<int(column)<<str;

}

}

QApplication::restoreOverrideCursor();

return true;

}

void FirstScren7ChFill::load()

{

QString fileName = QFileDialog::getOpenFileName(this);

if (!fileName.isEmpty())

loadFile(secondTable, fileName);

}

bool FirstScren7ChFill::loadFile(QTableWidget *table, const QString &fileName)

{

QFile file(fileName);

if(!file.open(QIODevice::ReadOnly)) {

QMessageBox notLoaded;

notLoaded.setText(tr("Don't load"));

notLoaded.exec();

return false;

}

QDataStream in(&file);

in.setVersion(QDataStream::Qt_4_1);

int row;

int column;

QString str;

QTableWidgetItem *item;

QApplication::setOverrideCursor(Qt::WaitCursor);

while(!in.atEnd()) {

item = new QTableWidgetItem();

in>>row>>column>>str;

item->setText(str);

table->setItem(row, column, item);

}

QApplication::restoreOverrideCursor();

return true;

}

void FirstScren7ChFill::clearTable()

{

for(int row=0; row!=secondTable->rowCount(); ++row){

for(int column=0; column!=secondTable->columnCount(); ++column){

secondTable->item(row, column)->setText(" ");

}

}

}

void FirstScren7ChFill::calcKp()

{

Kp = 0;

for(int column = 0; column!=secondScreen->firstTable->columnCount(); column++) {

float Ei;

float Kpi;

float razn;

float fsr;

float w;

Ei = firstTable->item(column,3)->text().toFloat() - secondTable->item(0,column)->text().toFloat() -

secondTable->item(1,column)->text().toFloat();

razn = Ei - firstTable->item(column, 4)->text().toFloat();

fsr = sqrt(firstTable->item(column,2)->text().toFloat()*2*firstTable->item(column,2)->text().toFloat());

if (razn <= 0) {

float verh;

float niz;

float stepen;

stepen = -0.0043*pow((razn+27.3),2.0);

verh = 0.78 + 5.46*pow(e,stepen);

niz = 1 + pow(10.0,-razn/10);

Kpi = verh/niz;

}

if(fsr <= 400) {

float fn;

float fv;

fn = firstTable->item(column,2)->text().toFloat();

fn = 2.57*pow(10.0,-8.0)*pow(fn,2.4);

fv = firstTable->item(column,2)->text().toFloat();

fv = 2.57*pow(10.0,-8.0)*pow(2*fv,2.4);

w = fv - fn;

}

else {

float stepen;

float fn;

float fv;

stepen = pow(10.0, -4.0)*pow(firstTable->item(column,2)->text().toFloat(),1.18);

fn = 1 - 1.074*pow(e, - stepen);

stepen = pow(10.0, -4.0)*pow(2*firstTable->item(column,2)->text().toFloat(),1.18);

fv = 1 - 1.074*pow(e, - stepen);

w = fv - fn;

}

Kp = Kp + Kpi*w;

QTableWidgetItem *item1 = new QTableWidgetItem;

QTableWidgetItem *item2 = new QTableWidgetItem;

QTableWidgetItem *item3 = new QTableWidgetItem;

QTableWidgetItem *item4 = new QTableWidgetItem;

item1->setText(QString::number(Ei));

item2->setText(QString::number(fsr));

item3->setText(QString::number(Kpi));

item4->setText(QString::number(w));

secondScreen->firstTable->setItem(0,column,item1);

secondScreen->firstTable->setItem(1,column,item2);

secondScreen->firstTable->setItem(2,column,item3);

secondScreen->firstTable->setItem(3,column,item4);

}

secondScreen->Kp->setText("Kp = " + QString::number(Kp));

calcW();

}

void FirstScren7ChFill::calcW()

{

float S;

float WotS;

float stepen;

float WotKp;

if(Kp < 0.15)

S = 4*pow(Kp,1.43);

if(Kp >= 0.15 && Kp < 0.7)

S = 1.1*(1 - 1.17*pow(e,-2.9*Kp));

if(Kp >= 0.7)

S = 1.01*(1 - 9.1*pow(e,-6.9*Kp));

secondScreen->S->setText("S = " + QString::number(S));

stepen = -6.15*S/(1+S);

WotS = 1.05*(1 - pow(e, stepen));

secondScreen->WotS->setText("W(S) = " + QString::number(WotS));

if(Kp < 0.15)

WotKp = 1.54*pow(Kp, 0.25)*(1 - pow(e, -11*Kp));

if(Kp >= 0.15){

stepen = -11*Kp/(1 + 0.7*Kp);

WotKp = 1 - pow(e, stepen);

}

secondScreen->WotKp->setText("W(Kp) = " + QString::number(WotKp));

}

Листинг 6 - Содержимоефайла secondscreen7ch.h

// Заголовочныйфайлдля secondscreen7ch.cpp

#ifndef SECONDSCREEN7CH_H

#define SECONDSCREEN7CH_H

#include <QDialog>

#include <QtGui>

class SecondScren7ChFill : public QDialog

{

Q_OBJECT

public:

SecondScren7ChFill();

QTableWidget *firstTable;

QLabel *Kp;

QLabel *S;

QLabel *WotS;

QLabel *WotKp;

private:

QVBoxLayout *mainLayout;

};

#endif // SECONDSCREEN7CH_H

Листинг 7 - Содержимоефайла secondscreen7ch.cpp

// Целью данного программного кода является вывод результатов расчета в виде таблицы на экран

#include <QtGui>

#include <secondscreen7ch.h>

SecondScren7ChFill::SecondScren7ChFill()

{

firstTable = new QTableWidget;

firstTable->setRowCount(4);

firstTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

firstTable->setColumnCount(7);

firstTable->verticalHeader()->setResizeMode(QHeaderView::Stretch);

firstTable->setEditTriggers(0);

for(int row=0; row!=firstTable->rowCount(); ++row) {

firstTable->setRowHeight(row,21);

}

for(int column=0; column!=firstTable->columnCount(); ++column) {

firstTable->setColumnWidth(column,100);

}

QStringList firstLabels;

firstLabels<<"Ei, dB"<<"fcpi, Hz"<<"Kpi, dB"<<"w";

firstTable->setVerticalHeaderLabels(firstLabels);

Kp = new QLabel;

S = new QLabel;

WotS = new QLabel;

WotKp = new QLabel;

mainLayout = new QVBoxLayout;

mainLayout->addWidget(firstTable);

mainLayout->addWidget(Kp);

mainLayout->addWidget(S);

mainLayout->addWidget(WotS);

mainLayout->addWidget(WotKp);

setLayout(mainLayout);

resize(750,240);

setWindowTitle(tr("Calculation results"));

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.