![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| s0uz |
|
|||
|
Unregistered |
В системе передачи цифровой информации передается речь в цифровом виде. Речевые пакеты передаются через два транзитных канала, буферизируясь в накопителях перед каждым каналом.
Время передачи пакета по каналу составляет 6мс. Пакеты поступают через 7+-3 мс. Пакеты передававшиеся более 11мс, на выходи системы уничтожаются, так как их появление в декодере значительно снизит качество передаваемой речи. Уничтожение более 30% пакетов не допустимо. При достижении такого уровня система за счет ресурсов ускоряет передачу до 5мс на канал. При снижении уровня система за счет ресурсов ускоряет передачу до 5мс на канал. При снижения уровня до приемлемого происходит отключение ресурсов. Смоделировать 11с работы системы. Определить частоту уничтожения пакетов и частоту подключения ресурса ==================== очень надо, ХЕЛП МИ!!... |
|||
|
||||
| s0uz |
|
|||
|
Unregistered |
желательно с коментариями и пояснением.....
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ну всю ж задачу невозможно описать сразу или выдать исходники Давай будем делиться идеями просто через каждую миллисекунду по RND с той вероятностью, что там сказана моделируй появление пакетов. Ну и следи за уровнем передачи. Сам понимаешь, что сразу код не написать... Может, что поконкретнее ещё подкину... |
|||
|
||||
| s0uz |
|
|||
|
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 |
|
|||
|
Unregistered |
программисты хреновы)
за столько времени сам разобрался. всем спасибо, все свободны |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |