|
Вопрос # 3 622/ вопрос открыт / |
|
Здравствуйте, ув. эксперты! В общем хочу написать программный демультиплексор потока Е3 - в четыре Е2. Задача заключается в следуещем:
- из локальной сети (пусть на адрес 192.168.1.10:14587) поступает этот битовый поток со скоростью 34 Мбит/с;
- необходимо последовательно отыскать в этом потоке синхрокомбинацию (например: 1111010000);
- после того как нашли синхру, начиная с 13-го бита идут биты потоков Е2 (в такой последовательности: 1,2,3,4,1,2,3,4,1,2,...) которые необходимо разделить на 4 потока и каждый поток записать в отдельный файл, либо направить в сетку на другие компы для последующей обработки;
- длина кадра (цикла) Е3 составляет 1536 бит (+/- 1 бит), после чего идет снова синхра, по которой нужно заново синхронизироваться с последующим демультиплексированием Е2...
Теперь вопросы:
- так как я раньше не работал с сеткой, с чего начать? Стоит ли заниматься самому программированием сокетов или можно взять уже готовые компоненты типа Indy?
- как програмно реализовать работу с битовым потоком в реальном масштабе времени? Возможно ли где-то в памяти организовать типа большого регистра сдвига и периодически его пополнять из буфера?
В общем, может у Вас есть какие-то мысли по этому поводу, ну или хотя бы укажите верный путь к реализации этой нелегкой задачи.
П.С.: для начала хотелось бы разобраться с обработкой битового потока записанного в обычный файл (не из сети), а потом приступать к освоению сетки.
Заранее благодарен.
 |
Вопрос задал: Терехин Саша (статус: Посетитель)
Вопрос отправлен: 5 января 2010, 23:38
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 7 января 2010, 14:05; участников в обсуждении: 3.
|
Death_Master (статус: Посетитель), 6 января 2010, 00:33 [#1]:
Разбрать можно, но если нужна быстрая обработка- советую изучить ассемблер (код можно вставлять и в делфи, но есть риск нестабильной работы)....
И ещё- если не секрет, расскажите зачем это нужно, может где-то уже есть готовый код для подобной обработки....
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
|
|
Терехин Саша (статус: Посетитель), 6 января 2010, 01:11 [#2]:
это моя дипломная работа (Технологии PDH - разработка программных средств демультиплексирования).
Таких программных реализаций я не нашел. Суть, заключается в том, что стоимость современного компьютера (на котором предполагается реализация программного демультеплексирования) намного ниже, чем стоимость аппаратного демультиплексора (на DSP-процессорах). Вот поэтому возникла такая необходимость написания таковой программы.Ну и плюс то, что комп можно очень гибко перестроить под другие задачи.
На счет ассемблера я тоже думал, но как там реализовать многоразрядный регистр сдвига (регистры процессора всего-то 32-х разрядные)?
Может, конечно и нужно обрабатывать порциями по 32 разряда, тогда как?
|
|
Death_Master (статус: Посетитель), 6 января 2010, 01:42 [#3]:
http://www.codenet.ru/progr/optimize/mmx.php
P.S. полностью "реального" времени не добиться, какие допустимы задержки при обработке? какой процессор планируется? нужна ли многопоточность?
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
|
|
Терехин Саша (статус: Посетитель), 6 января 2010, 12:00 [#4]:
Хорошо, пусть сначала будем работать с файлом, с сеткой подождем, отсюда и реальное время неважно.
Процессор - Intel Core 2 Duo E6550 2.33GHz (система 32-х разрядная).
Желательно, чтобы программа работала в отдельном потоке.
Кстати посмотрел ссылку, я так понял это можно использовать в ассемблерных вставках? Но опять же вопрос - как организовать регистр сдвига, да так чтобы после сдвига освободившиеся ячейки заполнялись не нулями или единицами, а следующими битами потока?
|
|
Вадим К (статус: Академик), 6 января 2010, 12:40 [#5]:
Настойчиво рекомендую забыть о декодировании под какой то операционной системой, только если работать на "голом железе". Виндовс не есть системой реального времени и возможны любые задержки.
Разработка реальной работающей программы для декодирования потока E3 на компьютере может быть на порядок дороже системы с аппаратной реализацией (тем более, что там уже есть готовые решение в виде микросхем).
Под виндовсом сетка не будет "успевать обрабатывать" с такой скоростью. Как минимум будет тормозить сетевая карта.
Все вышесказанное базируется не на просто чтении литературы, а на участии в разработке реального устройства для мультиплексирования каналов Е1 и Е2. И эти устройства реально работают.
И даже если Ваши расчеты покажут, что скорости хватит, не стоит забывать о таком параметре, как средние и максимальные задержи в обработке.
Но если хочется просто с файла, то тут думаю никаких абсолютно проблем. Читаем по байту до синхронбайта, а потом битовыми операциями разбираем. Тут проблем я вообще не вижу.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Терехин Саша (статус: Посетитель), 6 января 2010, 14:46 [#6]:
С сеткой понятно, я это и предполагал, что в реальном масштабе времени реализовать будет трудно, но думаю прогресс не стоит на месте, тем более что у меня сетевуха 1Гбитная, да и процессоры сейчас довольно таки мощные...
Да и ладно, с сеткой это у же второй вопрос.
Загвоздка заключается в том, что синхра может располагаться где угодно, т.е. не обязательно в файле она будет начинаться с первого бита первого байта. Она может начаться предположим с пятого бита 12-го байта и закончиться 6-м битом 13-го байта. Как быть в таком случае? Мое мнение такое - создать регистр сдвига, который бы последовательно сдвигал битовый поток на один бит, чтобы начало синхра как раз попала на первый бит первого байта.
|
|
Вадим К (статус: Академик), 6 января 2010, 18:28 [#7]:
Процессоры... не стоит надеятся на то, что мощность поможет. а гигабитная сетевая может быть реальной преградой (вон у Майкрософта были проблемы с гигабитной сетевой - звук заикался. а все потому что не верят, что их ось не есть осью реального времени).
Теперь с кодом. регистр сдвига? можно конечно. читаем кусками по 1-4 килобайта в промежуточный буфер (если читать с диска по одному байту - будет ужасно тормозить). а там по биту сдвигать и сравнивать. если вычитали 200 байт, а синхропоследовательности нет (это уже 1600 бит), то значит либо код плохой, либо в последовательности ошибки.
Сдвиг можно реализовывать прямо в коде - это shl и shr (сдвиг влево и вправо соответственно). использовать так
a := 1; //00000001
a := a shl 2; // 00000100
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Терехин Саша (статус: Посетитель), 7 января 2010, 14:05 [#8]:
Спасибо Вадим К, попробую.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|