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

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




































Главная

Программирование, компьютеры и кибернетика
Разработка прикладного протокола передачи речи в реальном времени

Функция протокола и структура пакета разрабатываемого протокола. Длина полей заголовка. Расчет длины буфера на приеме в зависимости от длины пакета и допустимой задержки. Алгоритмы обработки данных на приеме и передаче. Программная реализация протокола.


посмотреть текст работы


скачать работу можно здесь


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


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

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


Алгоритмы работы функций в виде блок-схем
1. Разработать структуру протокола согласно функциям (см. табл.1):
1.1. Определить функции протокола и структуру пакета разрабатываемого протокола;
1.2. Описать поля заголовка разрабатываемого протокола, рассчитать необходимую длину полей заголовка;
1.3. Рассчитать необходимую длину буфера на приеме в зависимости от длины пакета и максимально допустимой задержки.
2. Разработать алгоритмы обработки данных на приеме и передаче и представить их блок-схемы.
3. Разработать программную реализацию протокола:
3.1. Описать разработанные функции, их назначение и структуру;
3.2. Скомпилировать файл , протестировать на реальной сети.
значение поля дополнительной информации
Поле данных в пакетах имеет фиксированный размер и содержит строго определенную длительность аудиоданных. Для выполнения этого условия необходимо использовать голосовой кодек с постоянной скоростью кодирования речевого сигнала.
В программе используется кодек, реализующий импульсно-кодовую модуляцию с параметрами:
На приемнике создается циклический буфер (джиттер-буфер). В этот буфер помещаются принимаемые аудиоданные. Через определенные промежутки времени, равные длительности воспроизведения одной ячейки буфера, из него считывается новый блок данных и воспроизводится. Между записью блока и его отправкой на воспроизведение вносится задержка. Величина этой задержки должна обеспечивать подавление эффекта джиттера. В таком случае даже если пришедшие из сети пакеты записываются в буфер через случайные моменты времени, воспроизводятся эти данные через равные промежутки времени.
Так как для передачи трафика используется протокол транспортного уровня UDP, пакеты могут передаваться по сети от источника к получателю по разным маршрутам. В некоторых случаях это может приводить к тому, что пакеты будут приходить не только через разные промежутки времени, но и в неправильном порядке. Чтобы предусмотреть такие ситуации в структуру пакета нужно ввести поле с номером пакета.
При передаче пакеты нумеруются по заданному модулю, а на приеме анализируется номер принятого пакета. Если приходит пакет, номер которого меньше или равен номеру предыдущего пакета, то такой пакет отбрасывается, иначе - отправляется на воспроизведение.
Помимо этого, в структуру пакета можно ввести и другие дополнительные поля для расширения функциональности протокола. Как уже отмечалось выше, в этом варианте в качестве дополнительного поля используется имя отправителя, которое задается на передающей стороне.
В каждом пакете необходимо передавать его номер, имя отправителя и непосредственно аудиоданные.
Рис.1.3 Формат пакета приложения передачи речи в реальном времени
Под название кодека выделяется 8 байт, под номер пакета - 4 байта (одна переменная целого типа (int)). Для поля аудиоданных необходимо выделить 128 байт.
Формат пакета задаётся структурой Sound:
Здесь символьные массивы CodecName и SoundData содержат соответственно информацию полей названия кодека и аудиоданных.
Размер строки названия кодека и аудиоданных задаётся через константы NAMESIZE и BUFFERLEN, что сделано для удобства использования этих параметров в других частях программы.
Целочисленная переменная countSend содержит информацию поля номера пакета.
При размере поля аудиоданных 128 байт при кодировании сигнала 8-битными отсчетами с частотой 8 кГц получаем длительность звучания одного блока аудиоданных = 128*(1/8000) =0.016c = 16 мс.
Зная объем памяти, выделяемый под переменные каждого типа можно определить размер пакета. На переменные типа int выделяется по 4 байта, на переменные типа char - по одному байту. В итоге размер заголовка вместе с полем аудио данных составит: 8*1+4*1+128=140 байт. Размер пакета с учетом заголовков транспортного, сетевого и канального уровней составит:140+42=182 байта.
Между записью блока и его отправкой на воспроизведение вносится задержка, величина которой должна обеспечивать подавление эффекта джиттера. В этом случае даже если пришедшие из сети пакеты записываются в буфер через случайные моменты времени, а воспроизводятся через равные, если выбрать размер буфера около 100 мс, то проявление эффекта джиттера маловероятно, а вносимая задержка для вещательного типа трафика не критична.
В этом случае размер джиттер-буфера должен быть 6*8=48 байт (6 ячеек по 16 мс, 96мс). В этом случае суммарная задержка, вносимая пакетизацией и джиттер-буфером, составит 16+16*6=112 мс.
Рис.2. Функция записи принятых аудиоданных в циклический буфер int myAudioInput::In(char* Buf)
Рис.3. Функция создания и настройки сокета void myAudioInput::initSocket()
Рис.4. Функция формирования и передачи пакетов void myAudioInput::SendRecord()
Рис.5. Функция приёма пакетов int myAudioInput::readPendingDatagrams()
MainWindow::MainWindow(QWidget *parent) :
this->myinputaudio.CodecLineEdit = ui->CodecLineEdit;
this->myinputaudio.RcvPckLineEdit = ui->RcvPckLineEdit;
this->myinputaudio.SendPktLineEdit = ui->SndPktlineEdit;
this->myinputaudio.stateLabel = ui->stateLabel;
this->mRcvThread.ptr_mAudioInput = &myinputaudio;
this->myinputaudio.Timer2Play = this->mRcvThread.Timer2Play;
this->myinputaudio.StateStoped = &StateStoped;
this->mRcvThread.StateStoped = &StateStoped;
this->myinputaudio.SingleshotActive = &SingleshotActive;
this->mRcvThread.SingleshotActive = &SingleshotActive;
this->myinputaudio.tohost.setAddress(ui->DstlineEdit->text());
qDebug("MainWindow Desctructor done!");
void MainWindow::on_pushButton_clicked()
{ui->stateLabel->setText("Ошибка! Введите адрес приемника!");
void MainWindow::on_pushButton_2_clicked()
void MainWindow::on_DstlineEdit_editingFinished()
if (StateStoped) myinputaudio.tohost.setAddress(ui->DstlineEdit->text());
Timer2Play->setTimerType(Qt::PreciseTimer);
bool *ptrStateStoped = StateStoped;
ptr_mAudioInput->readPendingDatagrams();
void RcvThread::ConnectSingleShot()
connect(Timer2Play,SIGNAL(timeout()),
this->ptr_mAudioInput,SLOT(startTimer2()));
////////////////////////////////////
#define PKTDELAY 16 //delay between sending packets in ms milliseconds
#define FREQPCM 0.000125 //frequncy of pcm codec // 1/8000
#define BUFFERLEN 128 // size of jitterbuffer in bytes , i choose 128byte // (PKTDELAY/FREQPCM)/1000
#define PLAYDELAY 80 //delay between playing rcvd packet in ms // PKTDELAY*JITTERLEN-PKTDELAY
// считается 96-16 = 80, так как мы используем два таймера. один запускает 80мс
// после чего запускается основной таймер2 на 16мс. так как воспроизводим только после 2 таймера,
class myAudioInput : public QObject
explicit myAudioInput(QObject *parent = 0);
QAudioOutput *audio; // need to cut to audioOutput class
void handleStateChanged(QAudio::State newState);
void SendRecord(); //made it public
void playSoundPkt(); //play sound block from jitterbuffer
void InitPlay(); //need to cut to audiOutput class
void OuthandleStateChanged(QAudio::State newState);
QAudioFormat format; //need to copy yo audioOutput class
QByteArray *datagram; //for receiveng
char jitterQueue[JITTERLEN][BUFFERLEN];
uchar fst; //pointer to first packet in jitterqueuw
uchar lst; //pointer to last packet in jitterqueue
void socketStateHandle(QAbstractSocket::SocketState);
//////////////////////////////////////
myAudioInput::myAudioInput(QObject *parent) :
m_input = 0; // iodevice initialize 0
m_udpSocket = new QUdpSocket(this);
Timer1Snd->setTimerType(Qt::PreciseTimer);
strcpy(mSound.CodecName,CODECNAME);
connect(Timer1Snd,SIGNAL(timeout()),this,SLOT(SendRecord());
connect(m_udpSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),
this,SLOT(socketStateHandle(QAbstractSocket::SocketState)));
// Set up the desired format, for example:
format.setByteOrder(QAudioFormat::BigEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice();
if (!info.isFormatSupported(format)) {
qDebug() << "Default format not supported, trying to use the nearest.";
format = info.nearestFormat(format);
qDebug()<<"device input name"<state();
qDebug()<<"buffersize ="<bufferSize();
qDebug() << "OutbytesFree = " << audio->bytesFree()
<< ", " << "OutelapsedUSecs = " << audio->elapsedUSecs()
<< ", " << "OutprocessedUSecs = "<< audio->processedUSecs();
qDebug("MyAudioInput Destructor done");
if (myaudio->state()!=QAudio::StoppedState) return; //check that audio is stopped
out_input = audio->start(); //start receive and playing packets
m_input = myaudio->start(); //start transmitter and recording
Timer1Snd->start(16); //timer for 32ms for reading from microphone and sending
void myAudioInput::handleStateChanged(QAudio::State newState)
if (myaudio->error() != QAudio::NoError) {
qDebug() << "bytesReady = " << myaudio->bytesReady()
<< ", " << "elapsedUSecs = " <elapsedUSecs()
<< ", " << "processedUSecs = "<processedUSecs();
qDebug()<<"fst="<isActive() && *SingleshotActive==false)
memcpy(PlayBuf,jitterQueue[(fst+1)%JITTERLEN],BUFFERLEN);
qint64 l= out_input->write(PlayBuf,BUFFERLEN);
connect(Timer2Play,SIGNAL(timeout()),this,SLOT(playSoundPkt()));
///////////////////////////////////////
1. Симонина О. А., Глазунов А. С., Четвертухин В. Г. Сети ЭВМ и телекоммуникации: методические указания к курсовому проектированию (спец. 202000, 220400) / СПбГУТ. СПб, 2004.
2. Остерлох, Хизер. TCP/IP. Семейство протоколов передачи данных в сетях компьютеров / Пер. с англ. М.: ДиаСофтЮП, 2002.
3. Камер, Дуглас Э. Сети TCP/IP. Принципы, протоколы и структура / Пер. с англ. М.: Издательский дом «Вильямс», 2003. Т.1.
4. Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы. СПб: Питер, 2002.
5. Гольдштейн Б.С., Пинчук А.В., Суховицкий А.Л. IP-Телефония. М.: Радио и связь, 2001.
6. Пол А. Объектно-ориентированное программирование на C++ /Пер с англ СПб: Невский диалект - Издательство БИНОМ, 1999.
7. Штерн В. Основы C++: Методы программной инженерии. М.: Лори, 2003.
Определение IP-протокола, передающего пакеты между сетями без установления соединений. Структура заголовка IP-пакета. Инициализация TCP-соединения, его этапы. Реализация IP на маршрутизаторе. Протокол надежной доставки сообщений ТСР, его сегменты. контрольная работа [86,1 K], добавлен 09.11.2014
Общие сведения о протоколе передачи данных FTP. Технические процессы осуществления соединения с помощью протокола FTP. Программное обеспечение для осуществления соединения с помощью протокола FTP. Некоторые проблемы FTP-серверов. Команды FTP протокола. реферат [766,6 K], добавлен 07.11.2008
Описание основных типов станций протокола HDLC. Нормальный, асинхронный и сбалансированный режимы работы станции в состоянии передачи информации. Методы управления потоком данных. Формат и содержание информационного и управляющего полей протокола HDLC. лабораторная работа [77,1 K], добавлен 02.10.2013
Физический уровень протокола CAN. Скорость передачи и длина сети. Канальный уровень протокола CAN. Рецессивные и доминантные биты. Функциональная схема сети стандарта CAN. Методы обнаружения ошибок. Основные характеристики сети. Протоколы высокого уровня. реферат [464,4 K], добавлен 17.05.2013
Описания сетевых протоколов прикладного уровня, позволяющих производить удалённое управление операционной системой. Основные характеристики протокола CMIP. Изучение особенностей Telnet, сетевого протокола для реализации текстового интерфейса по сети. реферат [47,0 K], добавлен 24.01.2014
Уровни архитектуры IP-телефонии. Особенности передачи речевой информации по IP–сетям. Влияние операционной системы. Количество передаваемых в пакете кадров. Взаимодействие модулей УШ и модуля протокола RTP. Информация конфигурации и контроля модуля УШ. отчет по практике [128,4 K], добавлен 22.07.2012
Разработка и использование протокола маршрутизации RIP в небольших и сравнительно однородных сетях. Причины неустойчивой работы по протоколу, их устранение. Применения протокола Hello для обнаружения соседей и установления с ними отношений смежности. курсовая работа [264,0 K], добавлен 06.06.2009
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Разработка прикладного протокола передачи речи в реальном времени курсовая работа. Программирование, компьютеры и кибернетика.
Руководство И Лидерство В Менеджменте Курсовая Работа
Kazakhstan Реферат На Английском
Реферат: Лекции 3
Расчет Сцепления Курсовая Работа
Курсовая работа: Проектирование предприятий по производству игристых вин
Реферат: «Интенсификация обучения иностранному языку с использованием компьютерных технологий»
Реферат: Центробежные насосы 2
Курсовая работа по теме Автоматизация решения задачи на находжение матрицы в составе другой матрицы
Доклад по теме Медитация как инструмент педагогики
Реферат по теме Теоретические направления поведения потребителей
Информационные Революции Реферат По Информатике
Реферат по теме Особенности управления персоналом в России
Доклад по теме Угроза здоровью нации
Докторская Диссертация Под Ключ С Защитой
Реферат На Тему Болезни Системы Кровообращения
Реферат Уздечка Языка
Практическая Работа Списки Поиск И Замена
Реферат: Финансовые риски и методы их оценки.
Сочинение Вариант 4 Цыбулько 2022
Курсовая работа: Особенности пьезоэлектрического эффекта
Типы совместной деятельности по Л.И. Уманскому - Менеджмент и трудовые отношения реферат
Товароведение и экспертиза консервов мясных для детского питания - Маркетинг, реклама и торговля курсовая работа
Марксистская теория права - Государство и право курсовая работа


Report Page