{"id":2228,"date":"2008-09-27T02:28:31","date_gmt":"2008-09-27T02:28:31","guid":{"rendered":"http:\/\/192.168.0.71:9090\/?p=1853"},"modified":"2008-09-27T02:28:31","modified_gmt":"2008-09-27T02:28:31","slug":"%ea%b3%b5%eb%b6%80%ec%a4%91-80211-simulation","status":"publish","type":"post","link":"https:\/\/talsu.net\/?p=2228","title":{"rendered":"[\uacf5\ubd80\uc911] 802.11 simulation"},"content":{"rendered":"<p>main.cpp<br \/>\nUsage : \uc2e4\ud589\ud30c\uc77c\uba85 [Node\uc218] [EndTime] [\uc0dd\uc131\ud560 \ub370\uc774\ud130\ud30c\uc77c \uc774\ub984]<\/p>\n<pre class=\"lang:c++ decode:true\">#include <iostream>\n#include <stdlib.h>\n#include <math.h>\n#include <time.h>\n\n#define ENDTIME 100000000\n#define FILENAME \"data.txt\"\n\n#define M 5 \/\/ maximum number of retransmissions\n#define CWmin 32 \/\/ initial contention window\n\/* System Parameters *\/\n#define SLOT_TIME 20 \/\/ microsecond\n#define SIFS 10 \/\/ u sec\n#define DIFS 50 \/\/ u sec\n\/\/#define AIFS 30  \/\/ u sec\n#define MAC_H 72 \/\/ MAC header\n#define PHY_H 192 \/\/ PHY header\n#define PAYLOAD 8000\/\/ 8000 bits of payload\n#define RTS_FRAME (PHY_H + 160) \/\/RTS frame length\n#define CTS_FRAME (PHY_H + 112) \/\/ 304 us CTS frame length\n#define ACK_FRAME (PHY_H + 112) \/\/ 304 us ACK frame length\n#define T_DATA (PHY_H + MAC_H + PAYLOAD)\n#define aPHY_RX_START_Delay 192\n#define CTS_TIMEOUT ((SIFS)+(SLOT_TIME)+(aPHY_RX_START_Delay))\n#define T_SUC_BASIC (T_DATA + SIFS + ACK_FRAME + DIFS)\n#define T_COL_BASIC (T_DATA + SIFS + DIFS)\n#define T_SUC_DCF (RTS_FRAME + SIFS + CTS_FRAME + SIFS + T_DATA + SIFS + ACK_FRAME + DIFS)\n#define T_COL_DCF (RTS_FRAME + SIFS + CTS_TIMEOUT + EIFS + DIFS)\n#define EIFS ((SLOT_TIME)+(DIFS)+(ACK_FRAME))\n\nusing namespace ::std;\n\nclass Node {\n\tint collisionCounter;\n\tint transCounter;\n\tint backOffCounter;\n\n\tint uniform(int min, int max) {\n\t\tunsigned int r = (unsigned int) rand();\n\t\tunsigned int maxValue = (RAND_MAX+(unsigned int) 1) \/ (max - min + 1)\n\t\t\t\t- 1;\n\n\t\tif (r > maxValue)\n\t\t\treturn uniform(min, max);\n\t\telse\n\t\t\treturn (int) r % (max - min + 1);\n\t}\n\npublic:\n\n\tNode() {\n\t\tcollisionCounter = 0;\n\t\ttransCounter = 0;\n\t\tbackOffCounter = 0;\n\t}\n\tint getBackOffCounter() {\n\t\treturn backOffCounter;\n\t}\n\tvoid setBackOffCounter() {\n\t\tbackOffCounter = (int) uniform(0, (int) (pow((double) 2,\n\t\t\t\t(double) collisionCounter) * 32) - 1);\n\t}\n\tvoid decreaseBackOffCounter() {\n\t\tbackOffCounter--;\n\t}\n\tvoid setCollisionCounter() {\n\t\tif (collisionCounter > M) {\n\t\t\tcollisionCounter = 0;\n\t\t} else {\n\t\t\tcollisionCounter++;\n\t\t}\n\t}\n\tvoid resetCollisionCounter() {\n\t\tcollisionCounter = 0;\n\t\ttransCounter++;\n\t}\n\tdouble transRate(int term) {\n\t\treturn transCounter \/ (double) term;\n\t}\n\tvoid resetTransRate() {\n\t\ttransCounter = 0;\n\t}\n\n};\n\nint main(int argc, char* argv[]) {\n\tint NODES = 0;\n\tchar cNODES[20];\n\tint END = ENDTIME;\n\tchar cEND[20];\n\tchar* filename = FILENAME;\n\n\tswitch (argc) {\n\tcase 1:\n\t\tcout << \"usage : \" << argv[0] << \" [NODES] [ENDTIME] [FILENAME]\"\n\t\t\t\t<< endl;\n\t\tcout << \"Number of Node = \";\n\t\tcin >> cNODES;\n\t\tbreak;\n\tcase 4:\n\t\tfilename = argv[3];\n\tcase 3:\n\t\tEND = atoi(argv[2]);\n\tcase 2:\n\t\tstrcpy(cNODES, argv[1]);\n\t\tbreak;\n\tdefault:\n\t\tcout << \"usage : \" << argv[0] << \" [NODES] [ENDTIME] [FILENAME]\"\n\t\t\t\t<< endl;\n\t\treturn 0;\n\t}\n\n\t\/*if (argc == 1){\n\t cout<<\"usage : \"<<argv[0]<<\" [NODES] [ENDTIME] [FILENAME]\"<<endl;\n\t cout<<\"Number of Node = \";\tcin>>cNODES;\n\t }else if(argc == 2){\n\t strcpy(cNODES,argv[1]);\n\t }else if(argc == 3){\n\t strcpy(cNODES,argv[1]);\n\t END = atoi(argv[2]);\n\t }else if(argc == 4){\n\t strcpy(cNODES,argv[1]);\n\t END = atoi(argv[2]);\n\t filename = argv[3];\n\t }else{\n\t cout<<\"usage : \"<<argv[0]<<\" [NODES] [ENDTIME] [FILENAME]\"<<endl;\n\t return 0;\n\t }*\/\n\n\tNODES = atoi(cNODES);\n\tsprintf(cEND, \"%d\", END);\n\n\tFILE* dataFile = fopen(filename, \"wt\");\n\n\tint t = 0, trans = 0, collision = 0, wait = 0;\n\tint collisionCheck = 0, collisionIndex = 0;\n\n\tNode* n = new Node[NODES];\n\n\tsrand((int) time(NULL));\n\n\twhile (t < END) {\n\t\tfor (int i = 0; i < NODES; i++) {\n\t\t\tif (n[i].getBackOffCounter() == 0) {\n\t\t\t\tcollisionCheck++;\n\t\t\t\tcollisionIndex = i;\n\t\t\t}\n\t\t}\n\n\t\tif (collisionCheck > 1) { \/\/collision\n\t\t\tt += T_COL_DCF;\n\t\t\tcollision++;\n\t\t\tfor (int i = 0; i < NODES; i++) {\n\t\t\t\tif (n[i].getBackOffCounter() == 0) {\n\t\t\t\t\tn[i].setBackOffCounter();\n\t\t\t\t\tn[i].setCollisionCounter();\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (collisionCheck == 1) { \/\/trans\n\t\t\tt += T_SUC_DCF;\n\t\t\ttrans++;\n\t\t\tn[collisionIndex].resetCollisionCounter();\n\t\t\tn[collisionIndex].setBackOffCounter();\n\t\t\tfprintf(dataFile, \"%dt\", collisionIndex);\n\n\t\t} else if (collisionCheck == 0) { \/\/wait\n\t\t\tt += SLOT_TIME;\n\t\t\twait++;\n\t\t\tfor (int i = 0; i < NODES; i++)\n\t\t\t\tn[i].decreaseBackOffCounter();\n\n\t\t}\n\t\tcollisionCheck = 0;\n\n\t}\n\t\/\/\tprintf(\"n--------------------------------------------------------------------------n\");\n\tcout << \"trans = \" << trans << \"    collision = \" << collision\n\t\t\t<< \"    wait = \" << wait << \"\tend time = \" << END << endl;\n\tcout << \"TransTime\/EndTime = \" << trans * PAYLOAD \/ (double) END << endl;\n\tcout << \"Data saved : \" << filename << endl;\n\tfclose(dataFile);\n\n\tdelete[] n;\n\n\treturn 0;\n}\n\n\/*\n\n *\/<\/pre>\n<p>jainsIndex.cpp<br \/>\n\uc704\uc5d0\uc11c \"%dt\"\ub85c \uc800\uc7a5\ub41c \ub370\uc774\ud130 \ud30c\uc77c\uc744 \ubd88\ub7ec 1\ubd80\ud130 \uc785\ub825\ud55c \uc708\ub3c4\uc6b0 \uc0ac\uc774\uc988 \uae4c\uc9c0 JainsIndex\uacf5\uc2dd\uc744 \uc801\uc6a9\ud558\uc5ec F\ub97c \ucd94\ucd9c \ud55c\ub2e4.<\/p>\n<pre class=\"lang:c++ decode:true\">#include <iostream>\n#include <stdlib.h>\n\nusing namespace ::std;\ndouble jainsIndex(int nodes, int dataSize, int* datas, int windowSize);\n\nint main(int argc, char*argv[]) {\n\n\tint dataSize = 0;\n\tint itemp = 0;\n\tint nodes = 0;\n\tint windowSize = 100;\n\tchar* sourceFileName = \"data.txt\";\n\tswitch (argc) {\n\tcase 1:\n\t\tbreak;\n\tcase 3:\n\t\tsourceFileName = argv[2];\n\tcase 2:\n\t\twindowSize = atoi(argv[1]);\n\t\tbreak;\n\tdefault:\n\t\tcout << \"Usage : \" << argv[0] << \" [EndWindowSize] [SourceDataFile]\" << endl;\n\t\treturn 0;\n\t}\n\tFILE* countDataSize = fopen(sourceFileName, \"rt\");\n\tFILE* temp = fopen(\"result.txt\", \"wt\");\n\twhile (1) {\n\t\tif (fscanf(countDataSize, \"%dt\", &#038;itemp) == -1)\n\t\t\tbreak;\n\t\tif (nodes < itemp)\n\t\t\tnodes = itemp;\n\t\tfprintf(temp, \"%dt\", itemp);\n\t\tdataSize++;\n\t}\n\tfclose(countDataSize);\n\tfclose(temp);\n\n\tint* datas = new int[dataSize];\n\n\tFILE* data = fopen(\"data.txt\", \"rt\");\n\tfor (int i = 0; 1; i++) {\n\t\tif (fscanf(data, \"%dt\", &#038;itemp) == -1)\n\t\t\tbreak;\n\t\tdatas[i] = itemp;\n\t}\n\tfclose(data);\n\ttemp = fopen(\"result.txt\", \"wt\");\n\n\tfor (int i = 2; i <= windowSize; i++) {\n\t\tcout << \"WindowSize \" << i << \" = \" << (double) jainsIndex(nodes + 1,\n\t\t\t\tdataSize, datas, i) << endl;\n\t\tfprintf(temp, \"%dt%lfn\", i, (double) jainsIndex(nodes + 1, dataSize,\n\t\t\t\tdatas, i));\n\t}\n\tfclose(temp);\n\tif (argc != 2)\n\t\tcout << \"Usage : \" << argv[0] << \" \" << \"[EndWindowSize]\" << endl;\n\tdelete[] datas;\n\n\treturn 0;\n}\n\ndouble jainsIndex(int nodes, int dataSize, int* datas, int windowSize) {\n\tdouble* r = new double[nodes];\n\tdouble sum = 0.0, squareSum = 0.0;\n\tdouble sumF = 0.0;\n\tfor (int i = 0; i < dataSize; i++) { \/\/\ub370\uc774\ud130\ub97c \uc21c\ud68c \ud558\uba74\uc11c\n\t\tr[datas[i]] += 1 \/ (double) windowSize; \/\/\ub370\uc774\ud130 \uac12\uc5d0 \ud574\ub2f9\ud558\ub294 r[]\uc744 1\/\uc708\ub3c4\uc6b0 \uc0ac\uc774\uc988 \ub9cc\ud07c \uc99d\uac00\n\n\t\tif (i % windowSize == windowSize - 1) { \/\/r\uc758 \ub9c8\uc9c0\ub9c9 \uc6d0\uc18c\uc5d0 \uae30\ub85d \ud558\uace0 \ub09c\ub4a4\n\t\t\tfor (int j = 0; j < nodes; j++) { \/\/r\uc744 \uc21c\ud68c \ud558\uba74\n\t\t\t\tsquareSum += (r[j] * r[j]); \/\/\uc81c\uacf1\uc758\ud569\n\t\t\t\tr[j] = 0; \/\/\ud560\uc77c\uc744 \ud558\uc600\uc73c\ub2c8 \ucd08\uae30\ud654 \ud558\uace0.\n\t\t\t}\n\t\t\tsumF += 1 \/ (nodes * squareSum); \/\/F\uc758 \ud569\n\t\t\tsum = 0;\n\t\t\tsquareSum = 0;\n\t\t}\n\t}\n\tdelete[] r;\n\n\treturn sumF \/ (dataSize \/ windowSize); \/\/F\uc758 \ud3c9\uade0\uc744 \ub9ac\ud134\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>main.cpp Usage : \uc2e4\ud589\ud30c\uc77c\uba85 [Node\uc218] [EndTime] [\uc0dd\uc131\ud560 \ub370\uc774\ud130\ud30c\uc77c \uc774\ub984] #include #include #include #include #define ENDTIME 100000000 #define FILENAME &#8220;data.txt&#8221; #define M 5 \/\/ maximum number of retransmissions #define CWmin 32 \/\/ initial contention window \/* System Parameters *\/ #define SLOT_TIME 20 \/\/ microsecond #define SIFS 10 \/\/ u sec #define DIFS 50 \/\/ u sec [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[15],"tags":[],"class_list":["post-2228","post","type-post","status-publish","format-standard","hentry","category-my-work-ing"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pXV5a-zW","_links":{"self":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts\/2228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2228"}],"version-history":[{"count":0,"href":"https:\/\/talsu.net\/index.php?rest_route=\/wp\/v2\/posts\/2228\/revisions"}],"wp:attachment":[{"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/talsu.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}