Вам нужна дипломная работа?
Интересует Информатика?
Оставьте заявку
на Дипломную работу
Получите бесплатную
консультацию по
написанию
Сделайте заказ и
скачайте
результат на сайте
1
2
3

разработка и исследование эффективности канального протокола с многомерным исправлением стираний

  • 47 страниц
  • 2 источника
  • Добавлена 20.07.2015
5 390 руб. 7 700 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Работа на тему разработка и исследование эффективности канального протокола с многомерным исправлением стираний
Фрагмент для ознакомления

Некоторые канальные блоки могут быть не приняты и/или быть с ошибками Массив строится по номерам принятых кодограмм.Выбор программных средствДля реализации программы были выбраны следующие компонентыОперационная система Windows 7. Данная операционная система хорошо зарекомендовала себя как быстрая, надежная, устойчивая система. Благодаря этим качествам система получила широкое (более 45% по данным OpenStat) распространение на российском рынке.. Среда разработки – PyScripter. Данная среда разработки позволяет использовать гибкие настройки. создавать удобные графические инструменты.Язык программирования – Python 3.3.Разработка клиентской части системыПри разработке клиентской части программы, за основу был взята открытая реализация протокола HDLC , и произведен его анализ. Рассмотрим входные параметры функции кодирования/* HDLCPacketEncoderFunction :* * InputParameters: * ================= * p_hdlc : HDLCcodechandle * inp : Input packet data * i_size : size of the input packet (# of octets) * out : HDLC encoded data (min alloc size must be HDLC_PKT_MAXLEN) * { = open flag(s) + zero-bit inserted data + CRC16 + closing flag(s) } * o_cap : Output buffer capacity. It must be >= ( i_size + 4 ) * 1.2 * * Returns: * ======== * Negative number on error else # of output octets.*/int HDLC_encode ( hdlc_chan_t *p_hdlc, const UINT8 inp[ ], int i_size, UINT8 out[ ], int o_cap ){hdlctrans_t *hdlct = &p_hdlc->hdlct;int i;if ( i_size > HDLC_PKT_MAXLEN ){return -1; //ERROR: packet too large!!!}hdlctrans_start ( hdlct );for ( i = 0; i < i_size; i++ ){hdlctrans_packetbyte ( hdlct, inp[ i ] );}hdlctrans_end ( hdlct );i = 0;while ( !hdlc_buf_empty ( hdlct->out_buf ) ){if ( i < o_cap )out[ i++ ] = hdlc_buf_get ( hdlct->out_buf );elsereturn -2; //ERROR: output buffer capacity overflow!}return i;}Разработка серверной части системы/* HDLC Packet Decoder Function : * * Input Parameters: * ================= * p_hdlc : HDLC codec handle * inp : Input packet data { = open flag(s) + zero-bit inserted data + CRC16 + closing flag(s) } * i_size : size of the input packet (# of octets) * * Return : * ======== * # of packets extracted. If no packetrs detected then 0 returns. */int HDLC_decode ( hdlc_chan_t *p_hdlc, const UINT8 inp[ ], int i_size ){int retval = 0;hdlcrec_t *hdlcr = &p_hdlc->hdlcr;hdlc_buf_t *hdlcr_obuf;hdlcr_obuf = hdlcr->out_buf;while ( i_size-- ){hdlcr->flags.val = 0; //zero-out all HDLC flags (user must clear these flags!)hdlcrec_proc_octet ( hdlcr, *inp++ ); //process the next octetwhile ( !hdlc_buf_empty ( hdlcr_obuf ) ){UINT16 data = hdlc_buf_get ( hdlcr_obuf );if ( data & HDLCREC_MASK_MIDDLEBYTE ){if ( p_hdlc->r_pi >= 1 && p_hdlc->r_pi < HDLC_PKT_MAXLEN - 1 ){p_hdlc->r_packet [ p_hdlc->r_pi++ ] = LOBYTE ( data );}elsep_hdlc->r_pi = 0;}elseif ( data & HDLCREC_MASK_FIRSTBYTE ){p_hdlc->r_packet [ 0 ] = LOBYTE ( data );p_hdlc->r_pi = 1;}elseif ( data & HDLCREC_MASK_LASTBYTE ){if ( p_hdlc->r_pi >= 1 && p_hdlc->r_pi < HDLC_PKT_MAXLEN - 1 ){hdlc_packet_t *new_packet;p_hdlc->r_packet [ p_hdlc->r_pi++ ] = LOBYTE ( data );if ( ( new_packet = (hdlc_packet_t *) malloc ( sizeof ( hdlc_packet_t ) + p_hdlc->r_pi - 1 ) ) != NULL ){memcpy ( new_packet->data, p_hdlc->r_packet, new_packet->size = p_hdlc->r_pi );DQUE_Push ( (DQUE_Handle) &p_hdlc->rec_buf, (DQUE_Elem*) new_packet );retval++; //detected one more packet!}}p_hdlc->r_pi = 0;}else/*if ( data & ( HDLCREC_MASK_BITERROR | HDLCREC_MASK_CRCERROR | HDLCREC_MASK_ABORT ) )*/{p_hdlc->r_pi = 0;}}}return retval;}Разработка алгоритма и модуля многомерного исправления стиранийРазработка алгоритма. Алгоритм многомерного исправления стираний предпологает следующую теоретическую основу. Рассматривается система передачи данных. Передваемая в канал цифровая последовательность формируется следующим образом. Информационное сообщение длинною Lбит разбивается на пакеты, длинною mинформационных бит, выровненных по 8 кратной позиции (байт). Последовательность пакетов разбивается на rсерии пакетов по kпакетов. Т.е. L = m*k*r. К каждому пакету добавляются биты служебной информации из s бит (бит контроля четности, контрольные CRCсуммы и пр.). В совокупности формуируются канальные блоки длинны n = m+s. После передачи серии из kканальных блоков формируется пакет первого типа. В нем на месте информационных бит стоят проверочные биты, определяемые как сумма по модулю два горизонтальной строки бит куба данных (см рис)Второй тип контрольных пакетов похож на первый за тем исключением, что в сумме по модулю два учувствуют биты, расположенные в столбце бит информационного куба. Таким образом количетсво передаваемой информации увеличивается и имеет длину Lкб= (m+s)(k+1)(r+l), а количество канальных блоков NКб = (k+l)(r+l).Сторона, принявшая информационную последовательность строит трехмерный массив в соотв. с форматом переданных данных. Формат передаваемых данных.Столбцом называется последовательность бит с одинаковыми номерами, принадлежащих одинаковым кодовым блокам различных серий. Строкой в этом массиве называется последовательность бит с одинаковыми номерами, принадлежащих различным кодовым блокам одной серии. Т.к. часть информации может быть принята с ошибками, рассмотрим алгоритм восстановления стираний. Вместо непринятых бит записываются единицы.Определяется массив весов принятых бит. Его формат аналогичен формату принятых данных. Всем битам массива весов присваивается веса, равные нулю. Проверяются все контрольные суммы канальных блоков. Всем битам, в канальных блоках с правильной контрольной суммой присваивается вес 1.Вычисляется кол-во бит, весом 1 в принятом сообщени на i-той итерации. Определяются разности Di = L-ni и Ni – ni-1-niЕсли D = 0, то осуществляем переход к п. 11. Если обнаруживается неравенство D != 0 и Ni != 0, то переходим к .п . 7. Если D != 0 и Ni = 0, то принимающая сторона выдает получателю служебное сообщение о неправильном приеме информационного пакета данных. Находясь в дуплексно канале приемная сторона высылает отправителю квитанцию с запросом повторной передачи данных. Перехоод к п. 12.Отыскиваются все строки, в которых присутствует только один бит с весом 0, а остальные имеют вес, равный 1.Биту с весом 0 присваивается значение, равное сумме всех остальных бит в строке по модулю 3, и вес, равны 1.Отыскиваются все столбцы, в которых присутствует только один бит с весом 0, а остальные имеют вес, равный 1.Биту с весом 0 присваивается значение, равное сумме всех остальных бит в столбце по модулю 2, и вес, равны 1.Выдача получателю сообщения. В дуплексном канале принимающая сторона посылает квитанцию передающей стороне о подтверждении приема информации. Конец алгоритма. Разработка алгоритма производилась следующим образом.Подключение внешних библиотек. import numpy as npimport crc16Библиотека NumPy позволяет использовать математические функции задания того или иного распределения. В частности задать Пуассоновский поток ошибок. ##Получение распределения Пуассона s = np.random.poisson(50, 100)Т.к. информация считывается побайтно, необходимо предусмотреть функцию разбиения информации на биты. ##Извлечение из байта битовdef b_bits(f): for b in f: for i in range(8): yield (b >> i) & 1Зададим некоторый пробный файлfin = open("C:\\Users\\user\\Downloads\\README.txt", "rb")Считываем информацию из файла:while True: buf = fin.read(read_buf )#read_buf = 64## buf = fin.read(1024) if len(buf) == 0: breakРасширение массива g по границе куба g1=list(b_bits(buf)) g.extend(g1)sk = len_g//(read_buf*8)if len_g%(read_buf*8) > 1: sk+=1delta = len_g - sk*read_buf*8g.extend([0]*delta)Зададим основную матрицу информационного куба:Matrix = [[[0 for x in range(l)] for x in range(p)]for x in range(k)]И перенесем в него считанные значенияfor e in range (k): for w in range (p): for q in range (l): Matrix[e][w][q] = g[e*k+w*p+q]Здесь мы получили нормальную матрицу, с байтами разложенными по битам и можем считать данные в любую сторону.Создадим массивы битов четности и заполним горизонтальную матрицы.Matrix_h=[[0 for x in range(l)] for xorMask in range (k)]Matrix_v=[[0 for x in range(l)] for xorMask in range (p)]for e in range (k): for q in range (l): parity_bit=0 for w in range (p): parity_bit = parity_bit ^ Matrix[e][w][q] Matrix_h[e][q] = parity_bitТеперь вертикальную.for w in range (p): for q in range (l): parity_bit=0 for e in range (k): parity_bit = parity_bit ^ Matrix[e][w][q] Matrix_v[w][q] = parity_bitДля автоматизированного тестирования необходимо передавать функции параметры моделирования. Для этого подключаем модуль sys.import sys, getoptdefmain(argv):Зададим параметры «по умолчанию» и произведем разбор входных аргументов. l=64 p=64 z=64 t = 1 #poisson err=150 lam=1024 try: opts, args = getopt.getopt(argv,"hl:p:z:e:a:",["errors=","type=","lambda="]) except getopt.GetoptError: print ('See README file') sys.exit(2) for opt, arg in opts: if opt == '-h': print ('test.py -l <integer L> -p <integer P> -z <integer Z> -e <Errors> -a <Poisson Lambda>') sys.exit() elif opt in ("-l"): l = int(arg) elif opt in ("-p"): p = int(arg) elif opt in ("-z"): z = int(arg) elif opt in ("-e", "--errors"): err = int(arg) elif opt in ("-a", "--lambda"): lam = int(arg) elif opt in ("-t", "--type"): t = int(arg) elif opt in ("-q"): lam = int(arg) elif opt in ("-w"): lam = int(arg) ## elif opt in ("-o", "--ofile"): ## outputfile = arg# print ('l, p, z', l,p,z, sep= ' ')# print ('Errors = ', err, ' Lambda = ', lam)Задание Пуассоновского потока с заданными параметрами. s = np.random.poisson(lam, err)Сделаем защиту, в для случая, если данные выходят за пределы информационного сообщения. for i in range(len(s)): while s[i] >= (l*p*z): s[i] -= (l*p*z)Извлечение по модулю l+p ss = divmod(s[i],p*l) ss = list(ss) ss[1] = list(divmod(ss[1],l)) sss =[] sss.append(ss[0]) sss.extend(ss[1]) ## print (s[i], ' = ', sss) Matrix_1[sss[0]][sss[1]][sss[2]] = 5Началопроверкисборки start_s = 0 for k in range (z): for j in range (p): for i in range (l): if Matrix_1[k][j][i] == 5: ## print ('*', end = " ")# имитатор ошибки start_s += 1 start_z = 0 word_failed = 0 for j in range (p): for i in range (l): for k in range (z): if Matrix_1[k][j][i] == 5: ## print ('*', end = " ") start_z += 1 ## else: ## print ('.', end = " ") # print(Matrix_1[i][j], end=" ") if start_z > 0 : word_failed +=1 ## print () ## print()Начинаем процедуру восстановления for f in range(4): for k in range(z): for i in range (l): v=0 pos=0 for j in range (p): if Matrix_1[k][j][i] == 5: v+=1 pos = j if v==1: Matrix_1[k][pos][i] = restore(k,i,pos)for i in range (p): v=0 pos=0 for j in range (l): if Matrix_1[k][i][j] == 5: v+=1 pos = j if v==1: Matrix_1[k][i][pos] = restore(k,i,pos)Проверимрезультатыработы. Если раскомментировать строки вывода, то можно получить и наглядную распечатку в программе:finish_s=0 for k in range (z): for j in range (p): for i in range (l): if Matrix_1[k][j][i] == 5: ## print ('*', end = " ") finish_s += 1 ## else: ## print ('.', end = " ") # print(Matrix_1[i][j], end=" ") ## print () ## print() ##print("start_s = ",start_s) ##print("finish_s = ",finish_s) success=( (start_s-finish_s) / start_s)*100 print(success, end = ' ')Рассмотрим количество информации, верно переданной пакетами информации. ##print ('z bytes') finish_z = 0 word_received = 0 for j in range (p): for i in range (l): for k in range (z): if Matrix_1[k][j][i] == 5: ## print ('*', end = " ") finish_z += 1 ## else: ## print ('.', end = " ") # print(Matrix_1[i][j], end=" ") if finish_z > 0 : word_received += 1 ## print () ## print() ##print("word_failed = ",word_failed) ##print("word_received = ",word_received) ##success= ( (word_failed - (word_failed - word_received)) / word_failed)*100 success = ((word_failed - word_received) / word_failed) * 100## print("successful words = ",success) print(success)Оценка результатов работыОписание метода тестированияДля накопления статистики использовался скрипт #!/bin/bashfor l in 16 24; do for p in 16 24; do for z in 16 24; do for e in 10 100; do for a in 200; do echo 'new test ' $l $p $z $e $a >> output.txt for n in $(seq 1 10); do #echo $n >> output.txt# echo python3 ./new_hope.py -l $l -p $p -z $z -e $e -a $a >> output.txt donedone done done donedoneС различными входными переменными.В обще сложности было произведено более 300 000 моделируемых последовательностей.Описание стенда тестированияДля тестирования была выбрана машина под управлением ОС Linux Ubuntu. Объем ОЗУ составил 4Gb. Центральный процессор Intel Core i5 2.8 c 4 ядрами, без поддержки технологии Hyper Threading.Результаты восстановления информацииДля примера взят случай моделирования ошибки Гильберта при матрице 128*128*64, с количеством ошибок 40, лямбдой 5000Как видно из графиков, даже не значительное понижения общего уровня невосстановления информации приводит к драматическому падению производительности. Итоги тестированияПри рассмотрении информационного куда 128*128*64 бит, проблемы с приемом начались при количестве ошибочных 48 и более битах.Суммарное кол-во экспериментов – более 300 000.Организационно-экономическая частьЗаключениеВ работе выполнена поставленная задача. Разраобтан алгоритм проверки эффективности использовия в системы с многомерным стиранием.На основе проверочного тестирования выявлены характерные участки и поведенческие особенности результатов работы алгоритма.Показано, что при увеличении кол-ва ошибок на некоторую величину, приводит к значительному общему снижения производительности системы.ЛитератураГалкин В. А., Григорьев Ю. А. Телекоммуникации и Сети. — М.: МГТУ им. Н. Э. Баумана, 2003. С. 608. ISBN 5-7038-1961-XОлифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. 3-е изд. — СПб.: Питер, 2006.

 Галкин В. А., Григорьев Ю. А. Телекоммуникации и Сети. — М.: МГТУ им. Н. Э. Баумана, 2003. С. 608. ISBN 5-7038-1961-X
 Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. 3-е изд. — СПб.: Питер, 2006.

Исследование влияния канального эффекта в шпуре на скорость и полноту детонации заряда ВВ















ИССЛЕДОВАНИЕ ВЛИЯНИЯ канального ЭФФЕКТА В ШПУРЕ НА СКОРОСТЬ И полноту ДЕТОНАЦИИ ЗАРЯДА BB


К. Н. Лабинский, С. А. Калякин

Донецкий национальный технический университет ул Артема, 58, 83000, , Донецк, Украина. E-mail: [email protected]

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

Ключевые слова: Скорость детонации, ударной волны, ионизационные датчики, коэффициент заряжания шпура, каналов эффект.

Введение

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

Анализ литературных источников показал, что, если есть расхождение между стенкой шпура и зарядом ВВ может снизить возможность детонации и полноты детонации заряда через так называемый канал эффект, впервые установленный в меня эксперименты, проведенные Т. Урбански в конце 20-х годов прошлого века. Канальный эффект изучался многими исследователями по всему миру. Были установлены сущность канала эффект и механизм влияния на полноту детонации шпурового заряда ВВ. В работах МакНИИ установлено, что проявление канал эффект наблюдается в шпурах в пуст от 0,1 до 3 диаметров заряда ВВ, расположенных в шпурах. Самый мощный канал эффект проявляется в пространство между стенкой шпура и энергии, которые варьируются от 6 до 16 мм и Продуктов детонации ВВ, просторные пустые, как косому поршню, производят опережающую детонационный лицо ВВ ударной волны, что обгон детонационную волну влияет на еще не сдетонировавшую часть платы. Когда это произойдет уплотнение заряда ВВ впереди фронта детонации. Тем не менее, можно предположить, что именно этот штамп BB нагрузки приводит к неполной детонации. Ряд ученых считает, что затухание детонации происходит в результате возникновения вакуума связано с отрицательной фазе ударной волны, которая десенсибилизирует воздуха запуска BB-их сжатия, которые в зоне разрежения разброс в КС расширения. Это приводит к снижению скорости детонации ВВ и, наконец, на них амортизации. В этом смысле полноту детонации зарядов ВВ в шпурах многие CC отличается и определяется в основном их детонационной способности, т. е. скорости детонации. Таким образом, исследование влияния канального эффекта на скорость детонации заряда BB, это очень важно, так как позволит уточнить механизм канала эффект и установить параметры, которые определяют полноту детонации ВВ в шпурах.

Узнать стоимость работы