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

Изучение работы цифрового интерфейса, способ осуществления помехоустойчивого кодирования. Выбор среды программирования. Разработка структуры программного обеспечения и методики его тестирования. Создание алгоритмов работы имитатора цифрового канала связи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.09.2011
Размер файла 2,7 M

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

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

Плотность магнитного потока

в диапазоне частот 5 Гц - 2 кГц

250 нТл

в диапазоне частот 2 кГц - 400 кГц

25 нТл

Электростатический потенциал экрана видеомонитора

500 В

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

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

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

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

Таблица 5. - Допустимые значения уровней звукового давления в

октавных полосах частот и уровня звука, создаваемого ПЭВМ

Уровни звукового давления в октавных полосах со среднегеометрическими частотами

Уровни звука в дБА

31,5 Гц

63 Гц

125 Гц

250 Гц

500 Гц

1000 Гц

2000 Гц

4000 Гц

8000 Гц

86 дБ

71 дБ

61 дБ

54 дБ

49 дБ

45 дБ

42 дБ

40 дБ

38 дБ

50

Немаловажную роль в организации рабочих мест операторов компьютеров играют визуальные показатели мониторов, входящих в состав компьютерной системы. Допустимые визуальные параметры мониторов представлены в таблице 6.

Таблица 6. - Допустимые визуальные параметры устройств

отображения информации

Параметры

Допустимые значения

1

Яркость белого поля

Не менее 35 кд/м2

2

Неравномерность яркости рабочего поля

Не более ± 20%

3

Контрастность (для монохромного режима)

Не менее 3 : 1

4

Временная нестабильность изображения (непреднамеренное изменение во времени яркости изображения на экране дисплея)

Не должна фиксироваться

5

Пространственная нестабильность изображения (непреднамеренные изменения положения фрагментов изображения на экране)

Не более 2Ч10-4 L, где L - проектное расстояние наблюдения, мм

Для дисплеев на ЭЛТ частота обновления изображения должна быть не менее 75 Гц при всех режимах разрешения экрана, гарантируемых нормативной документацией на конкретный тип дисплея, и не менее 60 Гц для дисплеев на плоских дискретных экранах (жидкокристаллических, плазменных и т.п.).

4.3 Расчёт вентиляции

Задачей вентиляции является обеспечение чистоты воздуха и заданных метеорологических условий в производственных помещениях. Вентиляция достигается удалением загрязнённого или нагретого воздуха из помещений и подачей в него свежего воздуха [14].

По способу перемещения воздуха в помещении различают приточную, вытяжную, и приточно-вытяжную вентиляцию. По месту действия вентиляция разделяется на общеобменную и местную.

Так как в помещении вычислительного центра (ВЦ), где производится работа на ЭВМ, отсутствует выделение вредных веществ, то достаточно будет обеспечить приток воздуха в помещение. Установка приточной вентиляции (рисунок 34) состоит из следующих элементов: воздухозаборного устройства 1, воздуховодов 2, фильтров 3 для очистки забираемого воздуха от примесей, калорифера 4, центробежного вентилятора 5 и приточного устройства 6.

Рисунок 34. - Установка приточной вентиляции

4.3.1 Расчёт воздухообмена

Минимальный расход наружного воздуха определяется по формуле

, (29)

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

По формуле (29)

4.3.2 Расчёт гидравлического сопротивления вентиляционной сети

Общий расход приточного воздуха м3/с. Температура атмосферного воздуха Температура воздуха в помещении Материал воздуховодов - кровельная проолифленная сталь.

Давление газа при рабочих условиях в сечении рассчитывается по формуле

, (30)

где - плотность сухого газа при нормальном давлении, кг/м3.

Для сухого газа при давлении 101,325 кПа объёмный расход вычисляется по формуле

, (31)

где - объёмный расход газа при нормальных условиях, м3/с.

Первый элемент сети - приточная шахта.

При нормальных условиях плотность воздуха принимается равной 1,2930 кг/м3

По формуле (30) кг/м3. Объёмный расход определяется по формуле (31) м3/с.

Принимая скорость движения воздуха в канале при нормальных условиях в диапазоне 4-5 м/с, можно приближённо определить сечение воздуховода из уравнения расхода воздуха

,

откуда м2,

что соответствует диаметрам круглых воздуховодов.

м.

Ближайший, находящийся в этом диапазоне диаметр круглого воздуховода мм, что соответствует площади 0,078 м2 и скорости

м/с, м/с.

Коэффициент кинематической вязкости воздуха м2/с при

Динамическое давление

Па.

Число Рейнольдса

.

Коэффициент местных потерь для шахты при .

Суммарный коэффициент потерь

,

так как для шахты .

Потери давления на первом элементе (шахте)

Па.

Второй элемент сети - прямой участок.

Имеющиеся данные

м3/с; ; кг/м3;

м2/с; м/с; Па;

; , мм.

Для кровельной проолифленной стали абсолютная шероховатость мм.

Относительная шероховатость .

Коэффициент линейного сопротивления

.

.

Потери давления на втором участке

Па.

Третий элемент сети - колено.

Имеющиеся данные

м3/с; ; кг/м3;

м2/с; м/с; Па;

; , мм.

Суммарный коэффициент потерь на третьем элементе

,

где , , .

Потери давления на третьем участке

Па.

Четвёртый элемент сети - прямой участок.

Рассчитывается аналогично второму с учётом того что длина мм.

.

Потери давления на четвёртом участке

Па.

Пятый элемент сети - калорифер.

Для трёхрядного калорифера потери давления

Па.

Шестой элемент сети - внезапное сужение.

После калорифера температура Соотношение площадей поперечного сечения воздуховодов и калорифера .

Объёмный расход воздуха в воздуховодах по формуле (31)

м3/с.

Плотность воздуха по формуле (30) кг/м3.

Коэффициент кинематической вязкости

м2/с.

Средняя скорость по сечению воздуховода

м/с.

Динамическое давление

Па.

Число Рейнольдса

.

Коэффициент местных потерь (внезапное сужение потока) рассчитывается по формуле

,

потери на трение учитываются в следующем элементе сети.

.

Потери давления на шестом участке

Па.

Седьмой элемент сети - прямой участок.

Имеющиеся данные

м3/с; ; кг/м3;

м2/с; м/с; Па;

; ;

Коэффициент потерь на данном участке

.

Потери давления на седьмом участке

Па.

Восьмой элемент - пирамидальный диффузор (прямоугольного сечения).

Геометрические соотношения диффузора

м; м; м2; м2; ; ;

Имеющиеся данные

м3/с; ; кг/м3;

м2/с;

Скорость на входе диффузора

м/с.

Число Рейнольдса

.

Динамическое давление

Па.

Коэффициент сопротивления определяют пренебрегая потерями от трения, . Для и угла раскрытия .

Потери давления на восьмом участке

Па.

Девятый элемент сети - прямой участок подключён к выходу диффузора, поэтому скорость, динамическое давление и число Рейнольдса определяются по параметрам этого участка.

м; м2; м;

Расход, температура, плотность воздуха и кинематическая вязкость остаются неизменными.

Скорость на участке

м/с.

Динамическое давление

Па.

Число Рейнольдса

Относительная шероховатость .

Коэффициент линейного сопротивления

.

.

Потери давления на девятом участке

Па.

Общие потери сети

Па.

4.3.3 Выбор вентилятора и электродвигателя

Необходимая производительность Полное давление Па. Для данной вентиляционной сети приемлемым является вентилятор типа 06-300 3,2 (рисунок 35). Рабочему режиму соответствует точка А. По этой точке находится скорость вращения 160 рад/с, что соответствует об/мин, и (КПД).

Установочная мощность электродвигателя для вентилятора рассчитывается по формуле

, (32)

где - мощность двигателя, Вт; - расход воздуха, м3/с; - полные потери в вентиляционной сети; - КПД вентилятора; - КПД привода; - коэффициент запаса.

При непосредственной установке колеса вентилятора на валу двигателя . Коэффициент запаса примем равным .

По формуле (32) Вт.

По требуемым данным приемлемым является электродвигатель АО2-11-4.

Рисунок 35. - Характеристика вентилятора 06-300 №3,2.

4.4 Пожарная профилактика

Выбор и расчёт необходимого количества огнетушителей в защищаемом помещении или на объекте производится в зависимости от их огнетушащей способности, предельной площади, а также класса пожара горючих веществ и материалов. Помещения с вычислительной техникой можно отнести к категории Д (пониженная пожароопасная). Пожары в таких помещениях связаны с горением электрического оборудования, поэтому можно определить класс Е пожара (пожары, связанные с горением электроустановок).

Выбор типа огнетушителя (передвижной или ручной) обусловлен размерами возможных очагов пожара. При значительных размерах необходимо использовать передвижные огнетушители.

Помещения категории Д могут не оснащаться огнетушителем, если их площадь не превышает 100 м2.

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

Нормы оснащения помещения ручными огнетушителями приведены в таблице 7.

Таблица 7. - Нормы оснащения помещения ручными огнетушителями

Категория помещения

Предельная защищаемая площадь, м2

Класс пожара

Хладоновые огнетушители вместимостью 2(3) л.

Углекислотные огнетушители вместимостью, л, массой огнетушащего вещества, кг

2

2

5(8)

3(5)

Г, Д

1800

Е

2

4

2

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

ЗАКЛЮЧЕНИЕ

В процессе выполнения дипломного проекта были разработан программный имитатор цифрового канала связи с применением помехоустойчивого кодирования. Была разработана структура и алгоритм работы ПО. Для разработки ПО выбрана среда разработки Borland Delphi 7, предоставляющая возможности визуальной разработки пользовательского интерфейса. Разработаны алгоритмы моделирующие работу блоков имитатора. Разработан графический интерфейс для отображения результатов работы и взаимодействия с пользователем. Для удобной работы нескольких пользователей, сохранения состояния ПО реализована подсистема авторизации пользователей. Для контроля выполненных действий в ПО реализовано протоколирование работы. В процессе создания ПО производилось его всестороннее тестирование и отладка, кроме того реализован тестовый режим, для проверки работы имитатора.

Разработанное ПО даёт возможность сымитировать работу всех блоков участвующих в передаче информации через канал связи. Начиная с генератора аналогового сигнала и заканчивая цифро-аналоговым преобразователем. С помощью ПО пользователь может ознакомиться с аналого-цифровым преобразованием аналоговой информации, с различными видами модуляции (амплитудная, частотная), различными видами помехоустойчивого кодирования (код Хэмминга, циклический код, проверка на чётность), с детектированием модулированного сигнал, с декодированием полученного кода и получением передаваемого сигнала после цифро-аналогового преобразования.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Олсон Г., Пиани Д. Цифровые системы автоматизации и управления. - СПб.: Невский Диалект, 2001. - 557 с.

2. Скляр Б. Цифровая связь. Теоретические основы и практическое применение. - 2-е изд., исп. - М.: Издательский дом "Вильямс", 2003. - 1104 с.

3. Крушный В.В. Основы теории информации и кодирования. - Снежинск: СГФТА, 2005.

4. Росс В.Н. Руководство по CRC-алгоритмам обнаружения ошибок. 1993. - http://www.ross.net/crc/download/crc_v3.txt.

5. Сергиенко А.Б. Цифровая обработка сигналов. - СПб.: Питер, 2002. - 608 с.

6. Невзоров В. База знаний Delphi. - http://www.drkb.ru/.

7. Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. - М., ДМК Пресс, 2000. - 432 с.

8. Поздняков А.М. Графика на языке Паскаль с элементами математики. http://graphinpas.narod.ru/

9. Мандел Т. Разработка пользовательского интерфейса. - М., ДМК Пресс, 2001. - 416 с.

10. Петрухин В.А., Лаврищева Е.М. Методы и средства инженерии программного обеспечения. Интернет-Университет Информационных Технологий. - http://www.intuit.ru/department/se/swebok.

11. Степанченко И. В. Методы тестирования программного обеспечения. - Волгоград: ВолгГТУ, 2006. - 74 с.

12. Корчагина Р.Л. Оценка экономической эффективности программных средств: Методические указания. - СПб.: Балт. гос. ун-т., 2005. - 19 с.

13. СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы: Утв. и введ. в действие постанов. Глав. гос. сан. врач. 03.06.03 №118.

14. Иванов Н.И., Фадин И.М. Безопасность жизнедеятельности. Коллективные средства защиты: Справ. пособие по дипломному проектированию. - 2-е изд., испр. и доп. - СПб.: Балт. гос. техн. ун-т., 2003. - 192 с.

ПРИЛОЖЕНИЕ

Программный код на Delphi основных функций программного обеспечения

Функция adc реализует аналого-цифровое преобразование. Входные параметры curdiscret - номер текущего дискрета. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function adc;

var

n_bit :Byte;

quant_levels:Int64;

n_level :Int64;

level_height:real;

min_signal :real;

max_signal :real;

discret :real;

period_dis :real;

begin

if curdiscret > adc_propertion.messagev then

begin

Result := false;

exit;

end;

quant_levels := Int64(1) shl adc_propertion.capacity;

period_dis := 1 / adc_propertion.dfrequency;

//дискретизация

discret := curdiscret * period_dis;

adc_res.discret := signal_propertion.signal(signal_propertion.amplitude,

signal_propertion.frequency, discret);

max_signal := signal_propertion.maxvalue;

min_signal := signal_propertion.minvalue;

level_height := (max_signal - min_signal) / (Int64(quant_levels));

// квантование

// оцифровывание

n_bit := adc_propertion.capacity;

n_level := Int64(1) shl (n_bit);

while ((adc_res.discret - min_signal) / level_height < Int64(n_level) - 1) or

((adc_res.discret - min_signal) / level_height > Int64(n_level)) do

begin

if (adc_res.discret - min_signal) / level_height < Int64(n_level) - 1 then

n_level := (Int64(n_level) xor (Int64(3) shl (n_bit - 1)))

else

n_level := (Int64(n_level) xor (Int64(1) shl (n_bit - 1)));

if n_bit > 0 then

n_bit := n_bit - 1

else

break;

end;

adc_res.level := Int64(n_level) - 1;

adc_savetofile;

Result := true;

end;

Функция evencoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму проверки чётности. Входные параметры: capacity - разрядность кода, приходящего с АЦП.

procedure evencoder;

var

n_bit :Cardinal;

begin

coders_res.evencode := adc_res.level shl 1;

for n_bit := 0 to capacity - 1 do

begin

coders_res.evencode := coders_res.evencode xor getbitfromint(adc_res.level, n_bit);

end;

coder_savetofile(1);

end;

Функция evendecoder осуществляет декодирование кода по алгоритму проверки чётности. Входные параметры: capacity - разрядность кода, code - декодируемый код.

procedure evendecoder;

var

n_bit :Cardinal;

begin

decoders_res.level := code shr 1;

decoders_res.end_error := 0;

decoders_res.full_error := 0;

decoders_res.error := False;

for n_bit := 0 to capacity - 1 do

begin

decoders_res.end_error := decoders_res.end_error xor getbitfromint(code, n_bit);

end;

if decoders_res.end_error > 0 then

begin

decoders_res.error := True;

decoders_res.full_error := decoders_res.end_error;

end;

decoder_savetofile();

end;

Функция hammcoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму Хэмминга 1-х. Входные параметры: capacity - разрядность кода, приходящего с АЦП.

procedure hammcoder;

var

i, k :Cardinal;

checkbit_count :Cardinal;

check_index :Cardinal;

n_bit :Cardinal;

check_byte :Cardinal;

begin

checkbit_count := coders_res.hcapacity - capacity;

k := 0;

i := 0;

check_index := 1;

check_byte := 0;

coders_res.hammcode := 0;

for n_bit := 0 to coders_res.hcapacity - 1 do

begin

if (n_bit = check_index - 1) then

begin

k := k + 1;

check_index := Int64(1) shl k;

end

else

begin

coders_res.hammcode := int64(coders_res.hammcode) or

(Int64(getbitfromint(adc_res.level, i)) shl n_bit);

i := i + 1;

if getbitfromint(coders_res.hammcode, n_bit) = 1 then

check_byte := check_byte xor (n_bit + 1);

end;

end;

check_index := 1;

k := 0;

for n_bit := 0 to checkbit_count - 1 do

begin

coders_res.hammcode := int64(coders_res.hammcode) or (Int64((check_byte shr k) and 1) shl (check_index - 1));

k := k + 1;

check_index := Int64(1) shl k;

end;

coder_savetofile(2);

end;

Функция hammdecoder осуществляет декодирование кода по алгоритму Хэмминга 1-х. Входные параметры: capacity - разрядность кода, code - декодируемый код, checkbit_count - количество проверочных бит.

procedure hammdecoder;

var

k :Cardinal;

check_index :Cardinal;

info_index :Cardinal;

n_bit :Cardinal;

right_code :Int64;

begin

decoders_res.end_error := 0;

decoders_res.full_error := 0;

decoders_res.error := False;

right_code := code;

decoders_res.level := 0;

for n_bit := 0 to capacity - 1 do

begin

decoders_res.full_error := decoders_res.full_error xor (getbitfromint(right_code, n_bit) * (n_bit + 1));

end;

if decoders_res.full_error > 0 then

decoders_res.error := True;

if decoders_res.full_error > capacity then

decoders_res.full_error := 0;

if (decoders_res.full_error > 0) then

invbitfromint(right_code, decoders_res.full_error - 1);

k := 0;

check_index := 1;

info_index := 0;

decoders_res.end_error := decoders_res.full_error;

for n_bit := 0 to capacity - 1 do

begin

if (n_bit = check_index - 1) then

begin

if decoders_res.end_error = check_index then

decoders_res.end_error := 0;

k := k + 1;

check_index := Int64(1) shl k;

end

else

begin

if decoders_res.end_error = n_bit + 1 then

decoders_res.end_error := info_index + 1;

decoders_res.level := int64(decoders_res.level) or

(Int64(getbitfromint(right_code, n_bit)) shl info_index);

inc(info_index);

end;

end;

decoder_savetofile();

end;

Функция xdiv осуществляет деление полиномов по модулю два. Входные параметры: P - делимое, G - делитель, Plen, Glen, длины полиномов. Возвращает остаток от деления по модулю два.

function xdiv;

var

Psh :Byte;

Gsh :Byte;

Pbit :Byte;

n_bit :Byte;

begin

Psh := max(Glen - Plen, -1) + 1;

Gsh := max(Plen - Glen, 1) - 1;

Pbit := Plen + Psh - 1;

P := Int64(P) shl Psh;

G := Int64(G) shl Gsh;

for n_bit := 1 to Psh do

begin

G := Int64(Int64(G) shl 1);

if (getbitfromint(G, Pbit) = 1) then

begin

G := Int64(G) xor P;

end;

end;

Result := Int64((Int64(G) shr (Gsh + Psh)));

end;

Функция wcrctail осуществляет составление таблицы для производящего полинома. Входные параметры: polinom - производящий полином.

procedure wcrctail;

var

polinomInt :Int64;

tail :Int64;

pollen :Byte;

n_bit :Byte;

begin

polinomInt := getintfrombin(getbinfromstr(polinom));

pollen := polinomcap(polinom);

assignfile(poltailf, combinepath(curuser.profdir, 2, [curuser.userl, curuser.crctailf]));

rewrite(poltailf);

for n_bit := 1 to 64 do

begin

tail := xdiv(polinomInt, Int64(1) shl (n_bit - 1), pollen, n_bit);

write(poltailf, tail);

end;

CloseFile(poltailf);

assignfile(poltailf, '');

end;

Функция crccoder осуществляет кодирование оцифрованного значения уровня с АЦП по алгоритму циклического кодирования 1-х. Входные параметры: capacity - разрядность кода, приходящего с АЦП, polinom - производящий полином.

procedure crccoder;

var

checkbit_count:Byte;

polinomInt :Int64;

messageInt :Int64;

pollen :Byte;

begin

checkbit_count := coders_res.ccapacity - capacity;

polinomInt := getintfrombin(getbinfromstr(polinom));

pollen := polinomcap(polinom);

messageInt := xdiv(polinomInt, adc_res.level shl checkbit_count,

pollen, coders_res.ccapacity);

coders_res.crccode := Int64(adc_res.level) shl checkbit_count;

coders_res.crccode := Int64(coders_res.crccode) or messageInt;

coder_savetofile(3);

end;

Функция crcdecoder осуществляет декодирование кода по алгоритму циклического кодирования 1-х. Входные параметры: capacity - разрядность кода, code - декодируемый код, checkbit_count - количество проверочных бит, polinom - производящий полином.

procedure crcdecoder;

var

polinomInt :Int64;

messageInt :Int64;

pollen :Byte;

begin

polinomInt := getintfrombin(getbinfromstr(polinom));

pollen := polinomcap(polinom);

decoders_res.error := False;

messageInt := xdiv(polinomInt, code, pollen, capacity);

if messageInt > 0 then

decoders_res.error := True;

decoders_res.full_error := rcrcdigit(messageInt, capacity);

decoders_res.level := code;

decoders_res.end_error := 0;

if (decoders_res.full_error > 0) then

begin

invbitfromint(decoders_res.level, decoders_res.full_error - 1);

decoders_res.end_error := decoders_res.full_error;

if decoders_res.end_error > checkbit_count then

decoders_res.end_error := decoders_res.end_error - checkbit_count

else

decoders_res.end_error := 0;

end;

decoders_res.level := decoders_res.level shr checkbit_count;

decoder_savetofile();

end;

Функция ampulation осуществляет амплитудную модуляцию битов. Входные параметры time - время которого вычисляется значение модулированного сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда модулированного сигнала, carrier - несущая частота, coder - тип кодирования, capacity - разрядность кода, приходящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function ampulation;

var

bitlen :real;

whole :Cardinal;

bit :byte;

begin

bitlen := 1 / speed;

whole := trunc(time / bitlen);

if mod_res.n_discret <> (whole div capacity) then

begin

mod_res.n_discret := whole div capacity;

if not coders.coder_readfromfile(mod_res.n_discret, coder) then

begin

Result := false;

exit;

end;

end;

bit := getbitfromint(code_res.code, capacity - whole mod capacity - 1);

mod_res.amplitude := bit * amplitude * sin(2 * PI * carrier * time);

Result := true;

end;

Функция nonulation реализует режим «без модуляции». Входные параметры time - время которого вычисляется значение сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда сигнала, coder - тип кодирования, capacity - разрядность кода, приходящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function nonulation;

var

bitlen :real;

whole :Cardinal;

bit :byte;

begin

bitlen := 1 / speed;

whole := trunc(time / bitlen);

if mod_res.n_discret <> (whole div capacity) then

begin

mod_res.n_discret := whole div capacity;

if not coders.coder_readfromfile(mod_res.n_discret, coder) then

begin

Result := false;

exit;

end;

end;

bit := getbitfromint(code_res.code, capacity - whole mod capacity - 1);

mod_res.amplitude := bit * amplitude;

Result := true;

end;

Функция frequlation осуществляет частотную модуляцию битов. Входные параметры time - время которого вычисляется значение модулированного сигнала, speed - скорость передачи в канале связи, amplitude - амплитуда модулированного сигнала, carrier1, carrier2- две частоты модуляции, coder - тип кодирования, capacity - разрядность кода, приходящего с кодера. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function frequlation;

var

bitlen :real;

whole :Cardinal;

bit :Byte;

begin

bitlen := 1 / speed;

whole := trunc(time / bitlen);

if mod_res.n_discret <> (whole div capacity) then

begin

mod_res.n_discret := whole div capacity;

if not coders.coder_readfromfile(mod_res.n_discret, coder) then

begin

Result := false;

exit;

end;

end;

bit := getbitfromint(code_res.code, capacity - whole mod capacity - 1);

if bit = 1 then

begin

mod_res.amplitude := amplitude * sin(2 * PI * carrier2 *

(time - gl.last_time) + gl.last_phase);

gl.last_phase := 2 * PI * carrier2 *

(time - gl.last_time) + gl.last_phase;

gl.last_time := time;

end else

begin

mod_res.amplitude := amplitude * sin(2 * PI * carrier1 *

(time - gl.last_time) + gl.last_phase);

gl.last_phase := 2 * PI * carrier1 *

(time - gl.last_time) + gl.last_phase;

gl.last_time := time;

end;

Result := true;

end;

Функция amdemod осуществляет детектирование амплитудно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала. osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq частота дискретизации, freq_cut - частота среза.

procedure amdemod;

begin

amdetect(isignal, N, osignal, tailcov, dfreq, freq_cut);

sumarr(osignal, length(tailcov2), tailcov2);

tailcov2 := Copy(tailcov);

amplifier(detecter_propertion.gain, osignal, N);

end;

Функция fmdemod осуществляет детектирование частотно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала. osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq частота дискретизации, freq_cut1, freq_cut2 - частоты модуляции.

procedure fmdemod;

begin

fmdetect(isignal, N, osignal, tailcov3, dfreq, freq_cut1, freq_cut2);

sumarr(osignal, min(length(tailcov4), N), tailcov4);

tailcov4 := Copy(tailcov3);

amdemod(osignal, osignal, N, dfreq, detecter_propertion.lpfdetectfreq);

end;

Функция detect осуществляет детектирование демодулированного сигнала. Входные параметры beforedetect - массив дискретов демодулированного сигнала, afterdetect - массив детектированных битов, detecttime - модельное время детектирования, detectlevel - уровень детектирования, bpsec - скорость передачи в канале, condunit - период дискретизации, st - текущее модельное время, capacity - разрядность кода, inv - инвертировать биты.

procedure detect;

var

t,

tperb :real;

N,

i,

j,

k :AlglibInteger;

begin

N := trunc(detecttime * bpsec);

t := detecttime - N / bpsec;

setlength(afterdetect, N);

st := st - t;

tperb := 1 / bpsec;

j := 0;

k := 0;

while j < N do

begin

afterdetect[j] := 0;

t := 0;

i := 0;

while t < tperb do

begin

if beforedetect[k] > detectlevel then

inc(afterdetect[j]);

inc(i);

inc(k);

t := t + condunit;

end;

if afterdetect[j] > 0.5 * i then

begin

if inv then

afterdetect[j] := 0

else

afterdetect[j] := 1;

end

else

begin

if inv then

afterdetect[j] := 1

else

afterdetect[j] := 0;

end;

detect_res.code := (Int64(detect_res.code) or (Int64(afterdetect[j]) shl (capacity - bcnt - 1)));

if bcnt = capacity - 1 then

begin

bcnt := 0;

detecter_savetofile;

decoder(detect_res.code);

detect_res.code := 0;

end else

inc(bcnt);

inc(j);

end;

end;

Функция demodcode осуществляет демодулирование и детектирование модулированного сигнала. Входные параметры detect_cnt - количество детектируемых, за одну итерацию битов, condunit -период дискретизации. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function demodcode;

var

beforedetect :TReal1DArray;

afterdetect :TInteger1DArray;

N,

n_discret :AlglibInteger;

readflag :boolean;

res2,

t :real;

inv :Boolean;

begin

modul_init;

t := 0;

N := detect_cnt;

if N * condunit < 1 / channel_propertion.speed then

N := ceil(1 / (channel_propertion.speed * condunit));

detecter_init;

detecter_deletefile;

SetLength(beforedetect, N);

while true do

begin

for n_discret := 0 to N - 1 do

begin

case modulator_propertion.nmodulator of

0: readflag := ampulation(t, channel_propertion.speed, modulator_propertion.mamplitude,

modulator_propertion.mfrequency,

coder_propertion.ncoder + 1, capacity);

1: readflag := frequlation(t, channel_propertion.speed, modulator_propertion.mamplitude,

modulator_propertion.mfrequency, modulator_propertion.mfrequency2,

coder_propertion.ncoder + 1, capacity);

2: readflag := nonulation(t, channel_propertion.speed, modulator_propertion.mamplitude,

coder_propertion.ncoder + 1, capacity);

else readflag := true;

end;

if readflag then

begin

res2 := white_noise(noise_propertion.mean, noise_propertion.stddev);

beforedetect[n_discret] := mod_res.amplitude + res2;

end

else

begin

N := n_discret;

break;

end;

t := t + condunit;

end;

if N = 0 then

break;

case modulator_propertion.nmodulator of

0:

begin

amdemod(beforedetect, beforedetect, N, 1 / condunit, detecter_propertion.lpfdetectfreq);

inv := false;

end;

1:

begin

fmdemod(beforedetect, beforedetect, N, 1 / condunit,

modulator_propertion.mfrequency, modulator_propertion.mfrequency2);

inv := modulator_propertion.mfrequency < modulator_propertion.mfrequency2;

end;

2:

begin

inv := false;

end

else

begin

inv := false

end;

end;

detect(beforedetect, afterdetect, condunit * N,

detecter_propertion.detectlevel * modulator_propertion.mamplitude,

channel_propertion.speed, condunit, t, capacity, inv);

if not readflag then

break;

end;

Result := readflag;

end;

Функция nlineartf осуществляет моделирование прохождение сигнала через нелинейный элемент. Входные параметры: isignal - массив дискретов входного сигнала, osignal - массив дискретов выходного сигнала, N - количество дискретов.

procedure nlineartf;

var

i :AlglibInteger;

begin

i := 0;

SetLength(osignal, N);

while i <= N - 1 do

begin

if (isignal[i] > svolt) then

osignal[i] := isignal[i] - svolt

else if (isignal[i] < -svolt) then

osignal[i] := -(isignal[i] + svolt)

else

osignal[i] := 0;

inc(i);

end;

end;

Функция amdetect осуществляет демодулирование амплитудно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq - частота дискретизации, freq_m - частота среза.

procedure amdetect;

begin

nlineartf(isignal, N, osignal, 0.2);

lowpassf(1.0, osignal, 2 * N - 1, osignal, dfreq, freq_m, 1);

tail := Copy(osignal, N, N - 1);

SetLength(osignal, N);

end;

Функция fmdetect осуществляет демодулирование частотно-модулированного сигнала. Входные параметры: isignal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq - частота дискретизации, freq_m1, freq_m2 - частоты модуляции.

procedure fmdetect;

begin

if (freq_m1 > freq_m2) then

lowpassf(1.0, isignal, 2 * N - 1, osignal, dfreq, (freq_m1 + freq_m2) / 2, 10)

else

lowpassf(1.0, isignal, 2 * N - 1, osignal, dfreq, (freq_m1 + freq_m2) / 2, 10);

tail := Copy(osignal, N, N - 1);

SetLength(osignal, N);

end;

Функция amplifier осуществляет усиление сигнала. Входные параметры: k - коэффициент усиления, signal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов.

procedure amplifier;

var j:AlglibInteger;

begin

j := 0;

while j < N do

begin

signal[j] := k * signal[j];

inc(j);

end;

end;

Функция lowpassf осуществляет цифровую фильтрацию сигнала. Тип фильтра - фильтр нижних частот. Входные параметры: isignal - массив дискретов модулированного сигнала, osignal - массив дискретов демодулированного сигнала, N - количество дискретов, dfreq - частота дискретизации, freq_cut - частота среза, order - порядок фильтра.

procedure lowpassf;

var

inputsignal :TReal1DArray;

i, j :AlglibInteger;

alpha :Real;

begin

i := 0;

alpha := exp(-2 * PI * freq_cut / dfreq);

inputsignal := Copy(isignal);

SetLength(osignal, N);

SetLength(inputsignal, N);

while i < order do

begin

j := 0;

while j < N do

begin

osignal[j] := (1 - alpha) * inputsignal[j];

if j > 0 then

osignal[j] := osignal[j] + alpha * osignal[j - 1];

inc(j);

end;

inputsignal := Copy(osignal);

inc(i);

end;

end;

Функция dac осуществляет цифро-аналоговое преобразование. Входные параметры: level - оцифрованный уровень.

procedure dac;

begin

dac_gl.dac_res.level := level;

dac_gl.dac_res.discret := (Int64(dac_gl.dac_res.level) + 1);

dac_gl.dac_res.discret := dac_gl.dac_res.discret *

dac_gl.level_height +

signal_propertion.minvalue - dac_gl.level_height / 2;

dac_savetofile;

end;

Функция logit осуществляет протоколирование работы ПО. Входные параметры: event_str - протоколируемое сообщение.

procedure logit;

var

sdate :string;

begin

sdate := FormatDateTime('dd.mm.yy hh:nn:ss', now);

Writeln(logfile, Format('%s >%s', [sdate, event_str]));

fflush(logfile);

end;

Функция logout осуществляет завершение работы ПО.

procedure logout;

begin

if blogin then

begin

with curuser do

begin

logit(Format('Пользователь%s закончил работу', [userl]));

if ReadIni(combinepath(cworkdir, 1, [proffile]), 'main', 'permanent') <> '1' then

FullRemoveDir(cworkdir, true, true, true);

closelogfile;

hashlog;

end;

blogin := False;

end;

end;

Функция truecrypt осуществляет шифрование MD5. Входные параметры: login - имя пользователя, passw - пароль пользователя, fit - тип шифруемой информации (файл, строка). Возвращаемое значение - MD5-строка.

function truecrypt;

const

spec :array[1..10] of char = '#!@~&$%?^*';

var

crypted :TMD5Digest;

crypto :TMD5Digest;

crypt1 :string;

crypt2 :string;

crypt3 :string;

i, n :LongInt;

begin

if fit then

crypto := MD5File(passw)

else

crypto := MD5String(passw);

crypted := MD5String(LowerCase(MD5DigestToStr(MD5String(login))) +

LowerCase(MD5DigestToStr(crypto)));

crypt1 := LowerCase(MD5DigestToStr(crypted));

crypt2 := LowerCase(MD5DigestToStr(crypto));

n := Length(crypt1);

crypt3 := '';

for i := 1 to n do

begin

if (ord(crypt2[i]) >= ord('0')) and (ord(crypt2[i]) <= ord('9')) then

crypt3 := crypt3 + spec[strtoint(crypt2[i]) + 1]

else if (ord(crypt2[i]) >= ord('a')) and (ord(crypt2[i]) <= ord('d')) then

crypt3 := crypt3 + UpperCase(crypt1[i])

else

crypt3 := crypt3 + crypt1[i];

end;

Result := MD5String(crypt3);

end;

Функция loginto осуществляет аутентификацию и авторизацию пользователя. Входные параметры: login - имя пользователя, passw - пароль пользователя. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function loginto;

var

fname :string;

userid :string;

begin

if not chkprofile(login) then

begin

Result := False;

exit;

end;

fname := combinepath(curuser.profdir, 2, [login, curuser.proffile]);

userid := ReadIni(fname, 'main', 'userid');

if MD5DigestCompare(md5fromstr(userid), truecrypt(login, passw)) then

begin

curuser.userl := login;

Result := True;

end else

Result := False;

blogin := Result;

end;

Функция newreg осуществляет создание нового пользователя. Входные параметры: login - имя пользователя, passw - пароль пользователя. Возвращаемое значение - удачное (true), неудачное (false) завершение операции.

function newreg;

var

fname :string;

begin

if chkprofile(login) then

begin

Result := False;

exit;

end;

if not CreateDir(combinepath(curuser.profdir, 1, [login])) then

begin

Result := False;

exit;

end;

fname := combinepath(curuser.profdir, 2, [login, curuser.proffile]);

WriteIni(fname, 'main', 'userid', MD5DigestToStr(truecrypt(login, passw)));

WriteIni(fname, 'graph', 'xywidth', '1');

Result := True;

end;

Функция draw_xy осуществляет рисование линии на графике. Входные параметры: x - координата по оси X, y - координата по оси Y. Возвращаемое значение 0 - удачное, 1 - неудачное завершение операции.

function TMGraph.draw_xy;

begin

with config do

begin

canvas.Pen.Width := xywidth;

if (npoint = 1) then

begin

xe_o := round(xen + (x - xn) / mx);

ye_o := round(yen - (y - yn) / my);

point(xe_o, ye_o);

end else

begin

xe := round(xen + (x - xn) / mx);

ye := round(yen - (y - yn) / my);

if ((xe = xe_o) and (ye = ye_o)) then

begin

Result := -1;

exit;

end;

line(xe_o, ye_o, xe, ye);

xe_o := xe;

ye_o := ye;

end;

npoint := npoint + 1;

end;

Result := 0;

end;

Функция draw_axis осуществляет рисование осей графика.

procedure TMGraph.draw_axis;

var

x, y :real;

xs,

ys :integer;

hx, hy :real;

i :integer;

xyst :string;

begin

with config do

begin

x:=xn;

hx:=(xk-xn)/(kdx-1);

y:=yn;

hy:=(yk-yn)/(kdy-1);

canvas.Pen.Width := 2;

rectangle(xen, yek, xek, yen);

xs := round (xen+(0-xn)/mx);

ys := round (yen-(0-yn)/my);

for i:=1 to kdx do

begin

xe := Round (xen+(x-xn)/mx);

line(xe, yen, xe, yen + 5);

str(x * kux:5:2, xyst);

canvas.TextOut(xe - 10, yen + dyen div 2, xyst);

x:= x + hx;

end;

for i:=1 to kdy do

begin

ye := Round (yen-(y-yn)/my);

line(xen, ye, xen - 5, ye);

Str(y * kuy:5:2, xyst);

canvas.TextOut(xen - dxen, ye - 6, xyst);

y:= y + hy;

end;

canvas.Pen.Width := 1;

end;

end;

Функция addbyte осуществляет добавление байта в таблицу. Входные параметры: row - строка таблицы, byte - добавляемый байт, color - цвет байта, gridnumber - номер таблицы.

procedure Tgridform.addbyte;

var

i :Integer;

begin

case gridnumber of

1:

for i := tables_propertion.cont1.size.colcount - 1 downto 0 do

begin

self.grid1.Cells[ tables_propertion.cont1.size.colcount - i, row + 1] :=

inttostr((byte shr i) and 1);

tables_propertion.cont1.cellscolor[

tables_propertion.cont1.size.colcount - i, row] := color;

end;

2:

for i := tables_propertion.cont2.size.colcount - 1 downto 0 do

begin

self.grid2.Cells[ tables_propertion.cont2.size.colcount - i, row + 1] :=

inttostr((byte shr i) and 1);

tables_propertion.cont2.cellscolor[

tables_propertion.cont2.size.colcount - i, row] := color;

end;

3:

for i := tables_propertion.cont3.size.colcount - 1 downto 0 do

begin

self.grid3.Cells[ tables_propertion.cont3.size.colcount - i, row + 1] :=

inttostr((byte shr i) and 1);

tables_propertion.cont3.cellscolor[

tables_propertion.cont3.size.colcount - i, row] := color;

end;

end;

end;

Функция sinus вычисляет значение гармонического сигнала при заданных параметрах в конкретный момент времени. Входные параметры: Amplitude - амплитуда, f - частота, t - текущие время. Возвращаемое значение - значение сигнала.

function sinus;

begin

Result := roundto(Amplitude * sin(2 * PI * f * t), -9);

end;

Функция rect вычисляет значение прямоугольного сигнала при заданных параметрах в конкретный момент времени. Входные параметры: Amplitude - амплитуда, tperiod - период, pulse_ratio - скважность, t - текущие время. Возвращаемое значение - значение сигнала.

function rect;

begin

if abs(realmod(t, signal_propertion.tperiod)) <

signal_propertion.tperiod / signal_propertion.pulse_ratio then

Result := Amplitude

else

Result := 0;

end;

Функция triangle вычисляет значение треугольного сигнала при заданных параметрах в конкретный момент времени. Входные параметры: Amplitude - амплитуда, f - частота, t - текущие время. Возвращаемое значение - значение сигнала.

function triangle;

begin

Result := roundto(Amplitude * (t * f - floor(t * f)), -9);

end;

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


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

  • Создание прикладного программного обеспечения для реализации интерфейса терминала по приему платежей за услуги связи. Анализ требований к программному обеспечению. Выбор языка программирования. Разработка интерфейса пользователя и проектной документации.

    дипломная работа [1,3 M], добавлен 18.06.2015

  • Анализ методов сверточного кодирования. Понятие канала связи и корректирующих кодов, характеристика автомата типа Мура. Особенности сверточного декодирования Витерби. Сущность разработки программного обеспечения системы кодирования сверточным кодом.

    дипломная работа [4,9 M], добавлен 11.03.2012

  • Современные методы цифрового сжатия. Классификация алгоритмов сжатия. Оцифровка аналогового сигнала. Алгоритм цифрового кодирования. Последовательное двойное сжатие. Чересстрочность и квантование. Сокращение цифрового потока. Профили, уровни формата MPEG.

    реферат [784,9 K], добавлен 22.01.2013

  • Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.

    отчет по практике [700,5 K], добавлен 24.11.2014

  • Разработка структуры базы данных сайта. Установка и настройка требуемого программного обеспечения. Анализ интерфейса программы. Создание формы обратной связи. Формирование дизайна, соответствующего требованиям заказчика. Выбор методики тестирования.

    дипломная работа [2,0 M], добавлен 22.03.2018

  • Разработка программного обеспечения для упрощения буквенно-цифрового ввода при невозможности использовать функционал стандартной буквенной клавиатуры. Классификация и установка драйверов. Выбор языка и среды программирования. Пользовательский интерфейс.

    курсовая работа [183,0 K], добавлен 12.03.2013

  • Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и выбор структур данных для ее хранения, разработка основных алгоритмов. Проектирование интерфейса пользователя. Выбор стратегии тестирования и разработка тестов.

    курсовая работа [332,3 K], добавлен 09.12.2014

  • Разработка программы для осуществления работы с файлами и их последующего помехоустойчивого кодирования-декодирования по методу Хемминга 15-11 в интерактивном режиме. Обзор языка С и его особенностей. Взаимодействие пользователя с программным интерфейсом.

    курсовая работа [145,5 K], добавлен 12.05.2013

  • Классификация методов шифрования информации и оценка надежности криптоалгоритмов. Определение вероятностных характеристик двоичного канала. Понятия помехоустойчивого кодирования. Прием сигналов с неопределенной фазой и прием кодограмм со стиранием.

    дипломная работа [822,0 K], добавлен 12.02.2014

  • Разработка программного обеспечения для работы с установкой "АСР уровня жидкости с применением ПЛК ОВЕН 150" и лабораторного практикума по изучению промышленного программируемого контроллера с использованием ПК и среды программирования Codesys 2.3.

    дипломная работа [4,6 M], добавлен 30.06.2012

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