Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите реализовать задачу!! на любом языке, желательно на C или С++ 
:(
    Опции темы
s0uz
Дата 28.8.2004, 13:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В системе передачи цифровой информации передается речь в цифровом виде. Речевые пакеты передаются через два транзитных канала, буферизируясь в накопителях перед каждым каналом.
Время передачи пакета по каналу составляет 6мс. Пакеты поступают через 7+-3 мс.
Пакеты передававшиеся более 11мс, на выходи системы уничтожаются, так как их появление в декодере значительно снизит качество передаваемой речи.
Уничтожение более 30% пакетов не допустимо. При достижении такого уровня система за счет ресурсов ускоряет передачу до 5мс на канал. При снижении уровня система за счет ресурсов ускоряет передачу до 5мс на канал. При снижения уровня до приемлемого происходит отключение ресурсов.
Смоделировать 11с работы системы. Определить частоту уничтожения пакетов и частоту подключения ресурса

====================
очень надо, ХЕЛП МИ!!...
  Вверх
s0uz
Дата 28.8.2004, 13:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











желательно с коментариями и пояснением..... sample.gif
  Вверх
JackYF
Дата 28.8.2004, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



smile.gif
Ну всю ж задачу невозможно описать сразу или выдать исходники cool.gif
Давай будем делиться идеями просто через каждую миллисекунду по RND с той вероятностью, что там сказана моделируй появление пакетов. Ну и следи за уровнем передачи.

Сам понимаешь, что сразу код не написать...

Может, что поконкретнее ещё подкину...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
s0uz
Дата 29.8.2004, 01:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











как покороче?
===========

#include <stdio.h>
#include <stdlib.h>

#define RND_INIT 0x123
#define MAX_TIME 11000 // 11s
#define MAX_BUFFER 4096 // 4K buffer

#define NORMAL_TRANSFEER 6
#define FAST_TRANSFEER 5

#define RESERVE_CHECK_PACKETS 30 // reserve statistics calculate on this count of packets
#define RESERVE_THRESHOLD 0.3f // 30% packet loss for reserve activation

#define TRANSFEER_TIMEOUT 22 // timeoutin ms

// (0; max)
int rand(int max)
{
return(rand()*max/RAND_MAX);
}

// - Buffer operations -----
class buffer
{
protected:
int size;
int packet_times[MAX_BUFFER];
public:
void push(int time)
{
if (size>=MAX_BUFFER)
exit(-1); // buffer overflow
packet_times[size++]=time;
};

int top()
{
if (size<1)
return(-1);
return(packet_times[0]);
};

int pop()
{
if (size<1)
return(-1);
int tmp=packet_times[0];
int i;
for (i=1; i<size; i++)
packet_times[i-1]=packet_times[i];
size--;
return(tmp);
};

int getsize()
{
return(size);
}

int count_above(int timeout)
{
int i, j;

for (i=0, j=0; i<size; i++)
if (packet_times[i]>=timeout)
j++;
return(j);
}

void dump()
{
int i, j;

for (i=0, j=0; i<size; i++)
{
printf("%i) %ims\n", i, packet_times[i]);
if (packet_times[i]>=22) j++;
}
printf("drop packets: %i\n", j);
}

buffer() {size=0;};
~buffer() {};
};

// - Channel operations -----
class channel
{
protected:
int old_packet_time;
int packet_time;
int push_time;
int transfeer_time;
public:

int ready(int time)
{
if (packet_time==-1)
return(1);
if (time>=push_time+transfeer_time)
return(1);
return(0);
};

void push(int time, int new_packet_time)
{
packet_time=new_packet_time;
push_time=time;
};

int pop()
{
old_packet_time=packet_time;
return(packet_time);
}

void switch_fast() {transfeer_time=FAST_TRANSFEER;};
void switch_normal() {transfeer_time=NORMAL_TRANSFEER;};
int resource_active()
{
if (transfeer_time==FAST_TRANSFEER)
return(1);
return(0);
};

channel()
{
packet_time=-1;
push_time=0;
switch_normal();
};

~channel() {};
};

//
// Scheme:
//
// ch1 ch2
// A --------> B --------> C
// bufferA bufferB bufferC (fictive - receive processing)
//

void main()
{
srand(RND_INIT);

int time;
int transfeered=0, dropped=0, average_sum=0, gen=0, resource_active_time=0;
// Initialize buffers
buffer bufferA, bufferB, bufferC;
// Initialize channels (-1 == empty)
channel ch1, ch2;

for (time=0; time<MAX_TIME; time++)
{
if (time==gen) // packet generation...
{
// generate new packet
int tmp=7+(3-rand(7)); // next packet
if (gen>0) // skip 'first' packet (time==0)
bufferA.push(time); // push packet into bufferA
gen+=tmp;
}

// channel1 ready to transfeer data
if (ch1.ready(time))
{
int packet=ch1.pop(); // get tranfeered packet

ch1.push(time, bufferA.pop()); // put new packet (-1 if empty)

if (packet!=-1)
bufferB.push(packet);
}

// channel2 ready to transfeer data
if (ch2.ready(time))
{
int packet=ch2.pop(); // get tranfeered packet

ch2.push(time, bufferB.pop()); // put new packet (-1 if empty)

if (packet!=-1)
{
int ready_time=time-packet;

transfeered++;
if (ready_time>TRANSFEER_TIMEOUT)
dropped++;
//
average_sum+=ready_time;
//printf("#%i(%i) %ims\n", transfeered, dropped, ready_time);
//
bufferC.push(ready_time); // change packet time to transfeer time
if (bufferC.getsize()>RESERVE_CHECK_PACKETS)
bufferC.pop(); // remove execees packet from statistics
if (bufferC.getsize()==RESERVE_CHECK_PACKETS) // check statistics
{
if ((float)bufferC.count_above(TRANSFEER_TIMEOUT)/(float)RESERVE_CHECK_PACKETS>=
RESERVE_THRESHOLD)
{
// enable resources
ch1.switch_fast();
ch2.switch_fast();
}
else
{
// disable resources
ch1.switch_normal();
ch2.switch_normal();
}
}
}
}
if (ch1.resource_active())
resource_active_time++;
}

printf("Statistics\n-----\n");
printf("modelling time: %ims\n", time);
printf("normal transfeer/resource transfeer: %ims/%ims\n", NORMAL_TRANSFEER, FAST_TRANSFEER);
printf("resource transfeer threshold: %3.2f%%\n", (RESERVE_THRESHOLD)*100);
printf("transfeer timeout: %ims\n", TRANSFEER_TIMEOUT);
printf("packets transfeered: %i\n", transfeered);
printf("packet loss: %i (%3.2f%%)\n", dropped, (float)dropped/(float)transfeered*100);
printf("average time: %3.2fms\n", (float)average_sum/(float)transfeered);
printf("resource usage time: %ims (%3.2f%%)\n", resource_active_time,(float)resource_active_time/(float)time*100);
}
  Вверх
s0uz
Дата 4.9.2004, 16:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

всем спасибо, все свободны
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.