pax_global_header00006660000000000000000000000064144111672550014520gustar00rootroot0000000000000052 comment=db1c21c086fba4065ab5388a9d21a0c8d0d99f69 codec2-0.0~git20230330.db1c21c/000077500000000000000000000000001441116725500153535ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/.github/000077500000000000000000000000001441116725500167135ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/.github/workflows/000077500000000000000000000000001441116725500207505ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/.github/workflows/make.yml000066400000000000000000000005231441116725500224100ustar00rootroot00000000000000name: Make on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install packages shell: bash run: | sudo apt-get update sudo apt-get install octave octave-common octave-signal liboctave-dev - name: Make CML shell: bash run: make codec2-0.0~git20230330.db1c21c/CmlStartup.m000066400000000000000000000033411441116725500176300ustar00rootroot00000000000000% CmlStartup % % Initializes the Coded Modulation Library % % Last updated Sep. 9, 2007 % determine the version of matlab version version_text = version; if ( str2num( version_text(1) ) > 6) save_flag = '-v6'; else save_flag = '-mat'; end % determine the home directory cml_home = pwd; if ispc % setup the path addpath( strcat( cml_home, '\mex'), ... strcat( cml_home, '\mat'), ... strcat( cml_home, '\matalt' ), ... %strcat( cml_home, '\mexhelp'), ... strcat( cml_home, '\demos' ), ... strcat( cml_home, '\scenarios'), ... strcat( cml_home, '\localscenarios'),... strcat( cml_home, '\data\interleavers'), ... strcat( cml_home, '\data\ldpc'), ... strcat( cml_home, '\data\tables'), ... strcat( cml_home, '\data\bandwidth') ); % if CML grid is installed if exist( '.\grid\mat' ) addpath( strcat( cml_home, '\grid\mat' ) ); end % save the home directory save_directory = strcat( cml_home, '\scenarios\CmlHome.mat' ); else % setup the path addpath( strcat( cml_home, '/mex'), ... strcat( cml_home, '/mat'), ... strcat( cml_home, '/matalt' ), ... strcat( cml_home, '/demos' ), ... strcat( cml_home, '/scenarios'), ... strcat( cml_home, '/data/interleavers'), ... strcat( cml_home, '/data/tables'), ... strcat( cml_home, '/data/bandwidth') ); % if CML grid is installed if exist( './grid/mat' ) addpath( strcat( cml_home, '/grid/mat' ) ); end % save the home directory save_directory = strcat( cml_home, '/scenarios/CmlHome.mat' ); end save( save_directory, save_flag, 'cml_home' ); codec2-0.0~git20230330.db1c21c/Makefile000066400000000000000000000002571441116725500170170ustar00rootroot00000000000000mex/%.mex: source/%.cpp octave-cli -qf --eval "mex -v -output $@ $<" SRCS = $(wildcard source/*.cpp) MEXS = ${SRCS:source%.cpp=mex%.mex} all: $(MEXS) clean: rm -f $(MEXS) codec2-0.0~git20230330.db1c21c/README.md000066400000000000000000000006341441116725500166350ustar00rootroot00000000000000# Coded Modulation Library for codec2 The [CML library](http://www.iterativesolutions.com/Matlab.htm) is a set of Matlab/Octave functions, written in C but callable by Matlab/Octave. They are used by the codec2 project to support LDPC Octave simulations. The codec2 project specific changes in this repo include: 1. Building without warnings or errors. 2. Support for OSX and Ubuntu. Building: ``` $ make ``` codec2-0.0~git20230330.db1c21c/data/000077500000000000000000000000001441116725500162645ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/data/bandwidth/000077500000000000000000000000001441116725500202305ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/data/bandwidth/BW99percent.mat000066400000000000000000000111061441116725500230050ustar00rootroot00000000000000MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed May 31 08:09:52 2006 IMx=LSQǯ@bZ`+ ,oXt1&[!&\\`qibb$@B@Nu3͗8s;71f~Иƴy'_̷{AwJ)J_(J_+J_J/GJ?*F_ŷX .TFW>} ޏ?Y u,3n}D3yְ}uQ}x<`&oavlS`L62QϼItsk71$l{)㜰7t4Sq)؏;mX}9 yI^ i%.Ix ab}R˺.\O3VX;a?zg BYHX4 i/AFrt$,TTGEzQG%z eʐt2=УB Ϸ{򜫼=jѣN:=hУAJ? |܎||||||||XW@TY-r3A7* ɬmElmhCpVQQ1ge C1bQZ$H.Pb 3{S$l{ޝ Fݴ^89<@x M#Iװ! i޽$`CXQ 3A9w@F^zqW2K W aN{=p8r(xIrр9@%Tp|JΧWy}~>VlXP~O5]q(5@Xv~-pk3w贚_$<9zΣ<8Σ贡9ϜgΣh<9&^&&^fΣh"+,aFÆ1d~&G^ ݟ@qKmp6pyn3ܑT n'<^2|LZ1F.kOֳ<6@zGmh'i >ڰ~b#1%Ƕ{Ӈ5CYlzWM3do<⺨4i_z+hn6n/f8 9c*e={Omڠxiz;x.<6IdҔ:gs;pe%yK;MB𹃶äT§p(p )H'g~'][ &]\+25R$M;X|;X~Gu0]Ϸt+"K'kUӛU'P.@lwqݬϢ0= ~0y>Z[\u}!y@k!2XQR|Wv Vtl(3C={qD;}OrԸYB_szҞ_Ť`5PE* Rӟ|DH/BK[B$МMG}+5/uE8jYYD/V[Ts)pЋVvfJ [f1XYd8u. S͉0Upn+mka%ijΩ$0mߙ%Mx6 ]EO[[ڠ@v]vPJaVR)d&m`~ '*5Ez- OdkI%7Kڤ;\@{|W<ћ NNy,Qr`lzVq#q4UɷE85fڛoz)%így#F(t jXY;pGE_V={"*9o3]UI{) nW}hTBqxXgq}EK/,3LkuܫgNO^9R]N:L*UBQ#A &lJmUa/@XvGi:23IWҶΘ OѶu\Św@g4xkK^"2'J$iFLOhWnX6{7+Si PS;F~Ŧ ^}4]{0P.{Q&dB^ͺ7TgٟZtC1OMfVo2c|Lxb<7xn1^]!<"YcQHnn<*ƦnIŨދblZ!ƊGNώ=ZKak$U;>\ r#ޔUko_d_;uBKۻi[CYeBF!d1{؉Lvd/{\L}*B߼JވP/ln ƷGfVLbJ]XuZPȻsʸ*ݎ*x*vq#U_5Lۭѱ}5#5qtFMg.(@ Ѽj# m6UI͟vK}vMq,= uTٸȺbtVW21v5 Sk}*~Ș/g1M;~]O RW6@&# ^uqa~OYe!^yɻXBtj4e%Fl\1拟ݺ6j9_%?fo⧊ы0=2ixƿ xkS, qn֥^3CCxZlB5HaLs 1dV9hT+-s-p}s,꓇X #wM\v[WqFVfL+R؊6֨SRk:5+/1R٠yBc%y-6^Ndg){Rɶ8e⠰R8ӳSm,X g.[Ɇ> sO+/ݘ+E"Ɲv\J!{AotMPŌSO ȬPGh⩻LGk#Zkh=LE@(FU2m](>Y\G-y1&p*te 5#%Nќb њLPܪxlפfH{)8NW:ςHÂ.0Xč@q ŵ/Enw2}l4SP.dp\1(-;IzY;0=s@l툉1PHjNaQ^!DBəW9΢H/N\1\Dž uʅ q'$nHpІ!;'C|,'N Nty7,#v<#]޷|3 @ ƥxp|zZGI۷hƥv(L3ˁxG~pwFi>S=qA2f`!+Kj?/7^_72ŝy1HC<߾ٹ YۛOfz>v{co~|H|0]Abɏ7?~MdmП_4S&^U #H^ZqIgoF>tNƒECHgu(y.@5 )Y'}WX|/+kyjr a}=?{4 EBPMn/|wr þĶq >fC wqII|ߕAL Yƙ0zliPZ3EvHmցdN.g}h_"=Oq?'a@v_?2Oj3 0 ) load( filename ) end Mtotal = length( sim_M_vec ); htotal = length( sim_h_vec ); % update the BwMatrix with new entries BwMatrixCount = size( BwMatrix, 1 ); for m_count=1:Mtotal for h_count=1:htotal % see if this entry already exists in the database M_values = find( BwMatrix(:,1) == sim_M_vec( m_count ) ); h_values = find( abs(BwMatrix(:,2) - sim_h_vec( h_count ) ) < epsilon); Matching_row = min( intersect( M_values, h_values ) ); if ( length( Matching_row ) ) % row exists fprintf( 'An entry exists of M = %d and h = %f\n', sim_M_vec(m_count), sim_h_vec(h_count) ); else % need to make a new row in the matrix BwMatrixCount = BwMatrixCount + 1; BwMatrix( BwMatrixCount, : ) = [ sim_M_vec( m_count ) sim_h_vec( h_count ) -1 ]; end end end % Sort the Matrix maxM = max( BwMatrix(:,1) ); BwMatrixSorted = []; for mu_count = 1:log2( maxM ) M = 2^mu_count; M_values = find( BwMatrix(:,1) == M ); TempMatrix = BwMatrix( M_values, : ); [temp,sort_index] = sort( TempMatrix(:,2) ); BwMatrixSorted = [BwMatrixSorted TempMatrix(sort_index,:) ]; end BwMatrix = BwMatrixSorted; % compute each entry for ( BwMatrixCount = 1:length( BwMatrix ) ) if ( BwMatrix( BwMatrixCount, 3 ) <= 0 ) % entry has not been computed yet M = BwMatrix(BwMatrixCount,1); h = BwMatrix(BwMatrixCount,2); fprintf( 'Calculating M=%d and h=%f\n', M, h ); if (h>0.99) % need logic to handle h as it approaches 1. else % approximate the integral as a summation power = 0.5*specfun(0,M,h)*precision; % only take half the power at f=0 PSDcounter = 1; while ( 2*power <= percent ) f = precision*PSDcounter; power = power + specfun( f, M, h )*precision; PSDcounter = PSDcounter + 1; end BwMatrix(BwMatrixCount,3) = 2*(f-precision); end save( filename, 'BwMatrix' ); end end codec2-0.0~git20230330.db1c21c/data/bandwidth/specfun.m000066400000000000000000000006311441116725500220510ustar00rootroot00000000000000function y = specfun(x,M,h) fei = sin(pi*M*h)/M/sin(pi*h); y=0; for n =1 : M y = y + 1/M * (sinc( x - 0.5*( 2*n -1-M)*h)).^2; for m = 1:M alpha(n,m) = pi*h*( m+ n-1-M); B = (cos( 2*pi*x - alpha(n,m) ) - fei*cos( alpha(n,m)) )./( 1+ fei^2 - 2*fei*cos(2*pi*x)); y = y + 2/M/M * (sinc( x - 0.5*( 2*n -1-M)*h)).*(sinc( x - 0.5*( 2*m -1-M)*h)).*B; end end codec2-0.0~git20230330.db1c21c/data/interleavers/000077500000000000000000000000001441116725500207675ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/data/interleavers/imap1146000066400000000000000000000110141441116725500221510ustar00rootroot000000000000003 1051 527 285 769 131 655 401 935 83 1115 591 365 865 205 719 465 975 6 1078 542 314 770 134 670 418 910 102 1142 606 346 834 218 734 482 990 9 1041 557 279 771 137 685 435 949 121 1105 621 327 867 231 749 499 1005 12 1068 572 308 772 140 700 388 924 76 1132 636 372 836 244 764 452 1020 15 1031 523 273 773 143 651 405 899 95 1095 587 353 869 193 715 469 971 18 1058 538 302 774 146 666 422 938 114 1122 602 334 838 206 730 486 986 21 1085 553 267 775 149 681 439 913 69 617 379 871 219 745 503 1001 24 1048 568 296 776 152 696 392 952 88 1112 632 360 840 232 760 456 1016 27 1075 519 261 777 155 647 409 927 107 1139 583 341 873 245 711 473 967 30 1038 534 290 778 158 662 426 902 126 1102 598 322 842 194 726 490 982 33 1065 549 319 779 161 677 443 941 81 1129 613 367 875 207 741 507 997 36 1028 564 284 780 164 692 396 916 100 1092 628 348 844 220 756 460 1012 39 1055 515 313 781 167 643 413 955 119 1119 579 329 877 233 707 477 963 42 1082 530 278 782 170 658 430 930 74 594 374 846 246 722 494 978 45 1045 545 307 783 173 673 447 905 93 1109 609 355 879 195 737 511 993 48 1072 560 272 784 176 688 400 944 112 1136 624 336 848 208 752 464 1008 51 1035 575 301 785 179 703 417 919 67 1099 639 381 881 221 767 481 1023 54 1062 526 266 786 182 654 434 958 86 1126 590 362 850 234 718 498 974 57 1025 541 295 787 185 669 387 933 105 1089 605 343 883 247 733 451 989 60 1052 556 260 788 188 684 404 908 124 1116 620 324 852 196 748 468 1004 63 1079 571 289 789 191 699 421 947 79 1143 635 369 885 209 763 485 1019 2 1042 522 318 790 130 650 438 922 98 1106 586 350 854 222 714 502 970 5 1069 537 283 791 133 665 391 897 117 1133 601 331 887 235 729 455 985 8 1032 552 312 792 136 680 408 936 72 1096 616 376 856 248 744 472 1000 11 1059 567 277 793 139 695 425 911 91 1123 631 357 889 197 759 489 1015 14 1086 518 306 794 142 646 442 950 110 582 338 858 210 710 506 966 17 1049 533 271 795 145 661 395 925 65 1113 597 383 891 223 725 459 981 20 1076 548 300 796 148 676 412 900 84 1140 612 364 860 236 740 476 996 23 1039 563 265 797 151 691 429 939 103 1103 627 345 893 249 755 493 1011 26 1066 514 294 798 154 642 446 914 122 1130 578 326 862 198 706 510 962 29 1029 529 259 799 157 657 399 953 77 1093 593 371 895 211 721 463 977 32 1056 544 288 800 160 672 416 928 96 1120 608 352 864 224 736 480 992 35 1083 559 317 801 163 687 433 903 115 623 333 833 237 751 497 1007 38 1046 574 282 802 166 702 386 942 70 1110 638 378 866 250 766 450 1022 41 1073 525 311 803 169 653 403 917 89 1137 589 359 835 199 717 467 973 44 1036 540 276 804 172 668 420 956 108 1100 604 340 868 212 732 484 988 47 1063 555 305 805 175 683 437 931 127 1127 619 321 837 225 747 501 1003 50 1026 570 270 806 178 698 390 906 82 1090 634 366 870 238 762 454 1018 53 1053 521 299 807 181 649 407 945 101 1117 585 347 839 251 713 471 969 56 1080 536 264 808 184 664 424 920 120 1144 600 328 872 200 728 488 984 59 1043 551 293 809 187 679 441 959 75 1107 615 373 841 213 743 505 999 62 1070 566 258 810 190 694 394 934 94 1134 630 354 874 226 758 458 1014 1 1033 517 287 811 129 645 411 909 113 1097 581 335 843 239 709 475 965 4 1060 532 316 812 132 660 428 948 68 1124 596 380 876 252 724 492 980 7 1087 547 281 813 135 675 445 923 87 611 361 845 201 739 509 995 10 1050 562 310 814 138 690 398 898 106 1114 626 342 878 214 754 462 1010 13 1077 513 275 815 141 641 415 937 125 1141 577 323 847 227 705 479 961 16 1040 528 304 816 144 656 432 912 80 1104 592 368 880 240 720 496 976 19 1067 543 269 817 147 671 385 951 99 1131 607 349 849 253 735 449 991 22 1030 558 298 818 150 686 402 926 118 1094 622 330 882 202 750 466 1006 25 1057 573 263 819 153 701 419 901 73 1121 637 375 851 215 765 483 1021 28 1084 524 292 820 156 652 436 940 92 588 356 884 228 716 500 972 31 1047 539 257 821 159 667 389 915 111 1111 603 337 853 241 731 453 987 34 1074 554 286 822 162 682 406 954 66 1138 618 382 886 254 746 470 1002 37 1037 569 315 823 165 697 423 929 85 1101 633 363 855 203 761 487 1017 40 1064 520 280 824 168 648 440 904 104 1128 584 344 888 216 712 504 968 43 1027 535 309 825 171 663 393 943 123 1091 599 325 857 229 727 457 983 46 1054 550 274 826 174 678 410 918 78 1118 614 370 890 242 742 474 998 49 1081 565 303 827 177 693 427 957 97 1145 629 351 859 255 757 491 1013 52 1044 516 268 828 180 644 444 932 116 1108 580 332 892 204 708 508 964 55 1071 531 297 829 183 659 397 907 71 1135 595 377 861 217 723 461 979 58 1034 546 262 830 186 674 414 946 90 1098 610 358 894 230 738 478 994 61 1061 561 291 831 189 689 431 921 109 1125 625 339 863 243 753 495 1009 0 1024 512 256 768 128 640 384 896 64 1088 576 320 832 192 704 448 960 codec2-0.0~git20230330.db1c21c/data/interleavers/imap12282000066400000000000000000001721661441116725500222540ustar00rootroot0000000000000013 8527 4183 2063 10241 6477 1037 9217 5241 3073 11439 7589 1021 8919 4655 2855 10981 7083 1945 10115 5825 4085 12089 8169 26 8350 4270 2078 10242 6298 1050 9218 5362 3074 11614 7498 1018 9134 4702 2638 11210 6998 1842 9990 6018 4074 11890 8146 39 8685 4357 2093 10243 6631 1063 9219 5483 3075 11277 7407 1015 8837 4749 2933 10927 6913 1739 9865 5699 4063 12203 8123 52 8508 4444 2108 10244 6452 1076 9220 5604 3076 11452 7316 1012 9052 4796 2716 11156 6828 1636 9740 5892 4052 12004 8100 65 8331 4531 2123 10245 6273 1089 9221 5213 3077 11627 7225 1009 8755 4843 3011 10873 6743 2045 10127 6085 4041 11805 8077 78 8666 4106 2138 10246 6606 1102 9222 5334 3078 11290 7646 1006 8970 4890 2794 11102 6658 1942 10002 5766 4030 12118 8054 91 8489 4193 2153 10247 6427 1115 9223 5455 3079 11465 7555 1003 9185 4937 2577 10819 7085 1839 9877 5959 4019 11919 8031 104 8312 4280 2168 10248 6248 1128 9224 5576 3080 11640 7464 1000 8888 4984 2872 11048 7000 1736 9752 5640 4008 12232 8008 117 8647 4367 2183 10249 6581 1141 9225 5185 3081 11303 7373 997 9103 5031 2655 10765 6915 1633 10139 5833 3997 12033 7985 130 8470 4454 2198 10250 6402 1154 9226 5306 3082 11478 7282 994 8806 5078 2950 10994 6830 2042 10014 6026 3986 11834 7962 143 8293 4541 2213 10251 6223 1167 9227 5427 3083 11653 7191 991 9021 4613 2733 11223 6745 1939 9889 5707 3975 12147 7939 156 8628 4116 2228 10252 6556 1180 9228 5548 3084 11316 7612 988 8724 4660 3028 10940 6660 1836 9764 5900 3964 11948 7916 169 8451 4203 2243 10253 6377 1193 9229 5157 3085 11491 7521 985 8939 4707 2811 11169 7087 1733 10151 6093 3953 12261 7893 182 8274 4290 2258 10254 6198 1206 9230 5278 3086 11666 7430 982 9154 4754 2594 10886 7002 1630 10026 5774 3942 12062 7870 195 8609 4377 2273 10255 6531 1219 9231 5399 3087 11329 7339 979 8857 4801 2889 11115 6917 2039 9901 5967 3931 11863 7847 208 8432 4464 2288 10256 6352 1232 9232 5520 3088 11504 7248 976 9072 4848 2672 10832 6832 1936 9776 5648 3920 12176 7824 221 8255 4551 2303 10257 6173 1245 9233 5129 3089 11679 7669 973 8775 4895 2967 11061 6747 1833 10163 5841 3909 11977 7801 234 8590 4126 2318 10258 6506 1258 9234 5250 3090 11342 7578 970 8990 4942 2750 10778 6662 1730 10038 6034 3898 11778 7778 247 8413 4213 2333 10259 6327 1271 9235 5371 3091 11517 7487 967 9205 4989 3045 11007 7089 1627 9913 5715 3887 12091 7755 260 8236 4300 2348 10260 6148 1284 9236 5492 3092 11692 7396 964 8908 5036 2828 11236 7004 2036 9788 5908 3876 11892 7732 273 8571 4387 2363 10261 6481 1297 9237 5613 3093 11355 7305 961 9123 5083 2611 10953 6919 1933 10175 6101 3865 12205 7709 286 8394 4474 2378 10262 6302 1310 9238 5222 3094 11530 7214 958 8826 4618 2906 11182 6834 1830 10050 5782 3854 12006 7686 299 8217 4561 2393 10263 6635 1323 9239 5343 3095 11705 7635 955 9041 4665 2689 10899 6749 1727 9925 5975 3843 11807 8175 312 8552 4136 2408 10264 6456 1336 9240 5464 3096 11368 7544 952 8744 4712 2984 11128 6664 1624 9800 5656 3832 12120 8152 325 8375 4223 2423 10265 6277 1349 9241 5585 3097 11543 7453 949 8959 4759 2767 10845 7091 2033 10187 5849 3821 11921 8129 338 8198 4310 2438 10266 6610 1362 9242 5194 3098 11718 7362 946 9174 4806 3062 11074 7006 1930 10062 6042 3810 12234 8106 351 8533 4397 2453 10267 6431 1375 9243 5315 3099 11381 7271 943 8877 4853 2845 10791 6921 1827 9937 5723 3799 12035 8083 364 8356 4484 2468 10268 6252 1388 9244 5436 3100 11556 7180 940 9092 4900 2628 11020 6836 1724 9812 5916 3788 11836 8060 377 8691 4571 2483 10269 6585 1401 9245 5557 3101 11731 7601 937 8795 4947 2923 11249 6751 1621 10199 6109 3777 12149 8037 390 8514 4146 2498 10270 6406 1414 9246 5166 3102 11394 7510 934 9010 4994 2706 10966 6666 2030 10074 5790 3766 11950 8014 403 8337 4233 2513 10271 6227 1427 9247 5287 3103 11569 7419 931 8713 5041 3001 11195 7093 1927 9949 5983 3755 12263 7991 416 8672 4320 2528 10272 6560 1440 9248 5408 3104 11744 7328 928 8928 5088 2784 10912 7008 1824 9824 5664 3744 12064 7968 429 8495 4407 2543 10273 6381 1453 9249 5529 3105 11407 7237 925 9143 4623 2567 11141 6923 1721 10211 5857 3733 11865 7945 442 8318 4494 2558 10274 6202 1466 9250 5138 3106 11582 7658 922 8846 4670 2862 10858 6838 1618 10086 6050 3722 12178 7922 455 8653 4581 2061 10275 6535 1479 9251 5259 3107 11757 7567 919 9061 4717 2645 11087 6753 2027 9961 5731 3711 11979 7899 468 8476 4156 2076 10276 6356 1492 9252 5380 3108 11420 7476 916 8764 4764 2940 10804 6668 1924 9836 5924 3700 11780 7876 481 8299 4243 2091 10277 6177 1505 9253 5501 3109 11595 7385 913 8979 4811 2723 11033 7095 1821 10223 6117 3689 12093 7853 494 8634 4330 2106 10278 6510 1518 9254 5622 3110 11770 7294 910 9194 4858 3018 11262 7010 1718 10098 5798 3678 11894 7830 507 8457 4417 2121 10279 6331 1531 9255 5231 3111 11433 7203 907 8897 4905 2801 10979 6925 1615 9973 5991 3667 12207 7807 8 8280 4504 2136 10280 6152 1032 9256 5352 3112 11608 7624 904 9112 4952 2584 11208 6840 2024 9848 5672 3656 12008 7784 21 8615 4591 2151 10281 6485 1045 9257 5473 3113 11271 7533 901 8815 4999 2879 10925 6755 1921 10235 5865 3645 11809 7761 34 8438 4166 2166 10282 6306 1058 9258 5594 3114 11446 7442 898 9030 5046 2662 11154 6670 1818 10110 6058 3634 12122 7738 47 8261 4253 2181 10283 6639 1071 9259 5203 3115 11621 7351 895 8733 5093 2957 10871 7097 1715 9985 5739 3623 11923 7715 60 8596 4340 2196 10284 6460 1084 9260 5324 3116 11284 7260 892 8948 4628 2740 11100 7012 1612 9860 5932 3612 12236 7692 73 8419 4427 2211 10285 6281 1097 9261 5445 3117 11459 7169 889 9163 4675 3035 10817 6927 2021 9735 6125 3601 12037 8181 86 8242 4514 2226 10286 6614 1110 9262 5566 3118 11634 7590 886 8866 4722 2818 11046 6842 1918 10122 5806 3590 11838 8158 99 8577 4601 2241 10287 6435 1123 9263 5175 3119 11297 7499 883 9081 4769 2601 10763 6757 1815 9997 5999 4091 12151 8135 112 8400 4176 2256 10288 6256 1136 9264 5296 3120 11472 7408 880 8784 4816 2896 10992 6672 1712 9872 5680 4080 11952 8112 125 8223 4263 2271 10289 6589 1149 9265 5417 3121 11647 7317 877 8999 4863 2679 11221 7099 1609 9747 5873 4069 12265 8089 138 8558 4350 2286 10290 6410 1162 9266 5538 3122 11310 7226 874 9214 4910 2974 10938 7014 2018 10134 6066 4058 12066 8066 151 8381 4437 2301 10291 6231 1175 9267 5147 3123 11485 7647 871 8917 4957 2757 11167 6929 1915 10009 5747 4047 11867 8043 164 8204 4524 2316 10292 6564 1188 9268 5268 3124 11660 7556 868 9132 5004 3052 10884 6844 1812 9884 5940 4036 12180 8020 177 8539 4099 2331 10293 6385 1201 9269 5389 3125 11323 7465 865 8835 5051 2835 11113 6759 1709 9759 6133 4025 11981 7997 190 8362 4186 2346 10294 6206 1214 9270 5510 3126 11498 7374 862 9050 5098 2618 10830 6674 1606 10146 5814 4014 11782 7974 203 8697 4273 2361 10295 6539 1227 9271 5631 3127 11673 7283 859 8753 4633 2913 11059 7101 2015 10021 6007 4003 12095 7951 216 8520 4360 2376 10296 6360 1240 9272 5240 3128 11336 7192 856 8968 4680 2696 10776 7016 1912 9896 5688 3992 11896 7928 229 8343 4447 2391 10297 6181 1253 9273 5361 3129 11511 7613 853 9183 4727 2991 11005 6931 1809 9771 5881 3981 12209 7905 242 8678 4534 2406 10298 6514 1266 9274 5482 3130 11686 7522 850 8886 4774 2774 11234 6846 1706 10158 6074 3970 12010 7882 255 8501 4109 2421 10299 6335 1279 9275 5603 3131 11349 7431 847 9101 4821 3069 10951 6761 1603 10033 5755 3959 11811 7859 268 8324 4196 2436 10300 6156 1292 9276 5212 3132 11524 7340 844 8804 4868 2852 11180 6676 2012 9908 5948 3948 12124 7836 281 8659 4283 2451 10301 6489 1305 9277 5333 3133 11699 7249 841 9019 4915 2635 10897 7103 1909 9783 6141 3937 11925 7813 294 8482 4370 2466 10302 6310 1318 9278 5454 3134 11362 7670 838 8722 4962 2930 11126 7018 1806 10170 5822 3926 12238 7790 307 8305 4457 2481 10303 6643 1331 9279 5575 3135 11537 7579 835 8937 5009 2713 10843 6933 1703 10045 6015 3915 12039 7767 320 8640 4544 2496 10304 6464 1344 9280 5184 3136 11712 7488 832 9152 5056 3008 11072 6848 1600 9920 5696 3904 11840 7744 333 8463 4119 2511 10305 6285 1357 9281 5305 3137 11375 7397 829 8855 5103 2791 10789 6763 2009 9795 5889 3893 12153 7721 346 8286 4206 2526 10306 6618 1370 9282 5426 3138 11550 7306 826 9070 4638 2574 11018 6678 1906 10182 6082 3882 11954 7698 359 8621 4293 2541 10307 6439 1383 9283 5547 3139 11725 7215 823 8773 4685 2869 11247 7105 1803 10057 5763 3871 12267 8187 372 8444 4380 2556 10308 6260 1396 9284 5156 3140 11388 7636 820 8988 4732 2652 10964 7020 1700 9932 5956 3860 12068 8164 385 8267 4467 2059 10309 6593 1409 9285 5277 3141 11563 7545 817 9203 4779 2947 11193 6935 1597 9807 5637 3849 11869 8141 398 8602 4554 2074 10310 6414 1422 9286 5398 3142 11738 7454 814 8906 4826 2730 10910 6850 2006 10194 5830 3838 12182 8118 411 8425 4129 2089 10311 6235 1435 9287 5519 3143 11401 7363 811 9121 4873 3025 11139 6765 1903 10069 6023 3827 11983 8095 424 8248 4216 2104 10312 6568 1448 9288 5128 3144 11576 7272 808 8824 4920 2808 10856 6680 1800 9944 5704 3816 11784 8072 437 8583 4303 2119 10313 6389 1461 9289 5249 3145 11751 7181 805 9039 4967 2591 11085 7107 1697 9819 5897 3805 12097 8049 450 8406 4390 2134 10314 6210 1474 9290 5370 3146 11414 7602 802 8742 5014 2886 10802 7022 1594 10206 6090 3794 11898 8026 463 8229 4477 2149 10315 6543 1487 9291 5491 3147 11589 7511 799 8957 5061 2669 11031 6937 2003 10081 5771 3783 12211 8003 476 8564 4564 2164 10316 6364 1500 9292 5612 3148 11764 7420 796 9172 5108 2964 11260 6852 1900 9956 5964 3772 12012 7980 489 8387 4139 2179 10317 6185 1513 9293 5221 3149 11427 7329 793 8875 4643 2747 10977 6767 1797 9831 5645 3761 11813 7957 502 8210 4226 2194 10318 6518 1526 9294 5342 3150 11602 7238 790 9090 4690 3042 11206 6682 1694 10218 5838 3750 12126 7934 3 8545 4313 2209 10319 6339 1027 9295 5463 3151 11265 7659 787 8793 4737 2825 10923 7109 1591 10093 6031 3739 11927 7911 16 8368 4400 2224 10320 6160 1040 9296 5584 3152 11440 7568 784 9008 4784 2608 11152 7024 2000 9968 5712 3728 12240 7888 29 8703 4487 2239 10321 6493 1053 9297 5193 3153 11615 7477 781 8711 4831 2903 10869 6939 1897 9843 5905 3717 12041 7865 42 8526 4574 2254 10322 6314 1066 9298 5314 3154 11278 7386 778 8926 4878 2686 11098 6854 1794 10230 6098 3706 11842 7842 55 8349 4149 2269 10323 6647 1079 9299 5435 3155 11453 7295 775 9141 4925 2981 10815 6769 1691 10105 5779 3695 12155 7819 68 8684 4236 2284 10324 6468 1092 9300 5556 3156 11628 7204 772 8844 4972 2764 11044 6684 1588 9980 5972 3684 11956 7796 81 8507 4323 2299 10325 6289 1105 9301 5165 3157 11291 7625 769 9059 5019 3059 10761 7111 1997 9855 5653 3673 12269 7773 94 8330 4410 2314 10326 6622 1118 9302 5286 3158 11466 7534 766 8762 5066 2842 10990 7026 1894 9730 5846 3662 12070 7750 107 8665 4497 2329 10327 6443 1131 9303 5407 3159 11641 7443 763 8977 5113 2625 11219 6941 1791 10117 6039 3651 11871 7727 120 8488 4584 2344 10328 6264 1144 9304 5528 3160 11304 7352 760 9192 4648 2920 10936 6856 1688 9992 5720 3640 12184 7704 133 8311 4159 2359 10329 6597 1157 9305 5137 3161 11479 7261 757 8895 4695 2703 11165 6771 1585 9867 5913 3629 11985 7681 146 8646 4246 2374 10330 6418 1170 9306 5258 3162 11654 7170 754 9110 4742 2998 10882 6686 1994 9742 6106 3618 11786 8170 159 8469 4333 2389 10331 6239 1183 9307 5379 3163 11317 7591 751 8813 4789 2781 11111 7113 1891 10129 5787 3607 12099 8147 172 8292 4420 2404 10332 6572 1196 9308 5500 3164 11492 7500 748 9028 4836 2564 10828 7028 1788 10004 5980 3596 11900 8124 185 8627 4507 2419 10333 6393 1209 9309 5621 3165 11667 7409 745 8731 4883 2859 11057 6943 1685 9879 5661 3585 12213 8101 198 8450 4594 2434 10334 6214 1222 9310 5230 3166 11330 7318 742 8946 4930 2642 10774 6858 1582 9754 5854 4086 12014 8078 211 8273 4169 2449 10335 6547 1235 9311 5351 3167 11505 7227 739 9161 4977 2937 11003 6773 1991 10141 6047 4075 11815 8055 224 8608 4256 2464 10336 6368 1248 9312 5472 3168 11680 7648 736 8864 5024 2720 11232 6688 1888 10016 5728 4064 12128 8032 237 8431 4343 2479 10337 6189 1261 9313 5593 3169 11343 7557 733 9079 5071 3015 10949 7115 1785 9891 5921 4053 11929 8009 250 8254 4430 2494 10338 6522 1274 9314 5202 3170 11518 7466 730 8782 5118 2798 11178 7030 1682 9766 6114 4042 12242 7986 263 8589 4517 2509 10339 6343 1287 9315 5323 3171 11693 7375 727 8997 4653 2581 10895 6945 1579 10153 5795 4031 12043 7963 276 8412 4604 2524 10340 6164 1300 9316 5444 3172 11356 7284 724 9212 4700 2876 11124 6860 1988 10028 5988 4020 11844 7940 289 8235 4179 2539 10341 6497 1313 9317 5565 3173 11531 7193 721 8915 4747 2659 10841 6775 1885 9903 5669 4009 12157 7917 302 8570 4266 2554 10342 6318 1326 9318 5174 3174 11706 7614 718 9130 4794 2954 11070 6690 1782 9778 5862 3998 11958 7894 315 8393 4353 2057 10343 6651 1339 9319 5295 3175 11369 7523 715 8833 4841 2737 10787 7117 1679 10165 6055 3987 12271 7871 328 8216 4440 2072 10344 6472 1352 9320 5416 3176 11544 7432 712 9048 4888 3032 11016 7032 1576 10040 5736 3976 12072 7848 341 8551 4527 2087 10345 6293 1365 9321 5537 3177 11719 7341 709 8751 4935 2815 11245 6947 1985 9915 5929 3965 11873 7825 354 8374 4102 2102 10346 6626 1378 9322 5146 3178 11382 7250 706 8966 4982 2598 10962 6862 1882 9790 6122 3954 12186 7802 367 8197 4189 2117 10347 6447 1391 9323 5267 3179 11557 7671 703 9181 5029 2893 11191 6777 1779 10177 5803 3943 11987 7779 380 8532 4276 2132 10348 6268 1404 9324 5388 3180 11732 7580 700 8884 5076 2676 10908 6692 1676 10052 5996 3932 11788 7756 393 8355 4363 2147 10349 6601 1417 9325 5509 3181 11395 7489 697 9099 4611 2971 11137 7119 1573 9927 5677 3921 12101 7733 406 8690 4450 2162 10350 6422 1430 9326 5630 3182 11570 7398 694 8802 4658 2754 10854 7034 1982 9802 5870 3910 11902 7710 419 8513 4537 2177 10351 6243 1443 9327 5239 3183 11745 7307 691 9017 4705 3049 11083 6949 1879 10189 6063 3899 12215 7687 432 8336 4112 2192 10352 6576 1456 9328 5360 3184 11408 7216 688 8720 4752 2832 10800 6864 1776 10064 5744 3888 12016 8176 445 8671 4199 2207 10353 6397 1469 9329 5481 3185 11583 7637 685 8935 4799 2615 11029 6779 1673 9939 5937 3877 11817 8153 458 8494 4286 2222 10354 6218 1482 9330 5602 3186 11758 7546 682 9150 4846 2910 11258 6694 1570 9814 6130 3866 12130 8130 471 8317 4373 2237 10355 6551 1495 9331 5211 3187 11421 7455 679 8853 4893 2693 10975 7121 1979 10201 5811 3855 11931 8107 484 8652 4460 2252 10356 6372 1508 9332 5332 3188 11596 7364 676 9068 4940 2988 11204 7036 1876 10076 6004 3844 12244 8084 497 8475 4547 2267 10357 6193 1521 9333 5453 3189 11771 7273 673 8771 4987 2771 10921 6951 1773 9951 5685 3833 12045 8061 510 8298 4122 2282 10358 6526 1534 9334 5574 3190 11434 7182 670 8986 5034 3066 11150 6866 1670 9826 5878 3822 11846 8038 11 8633 4209 2297 10359 6347 1035 9335 5183 3191 11609 7603 667 9201 5081 2849 10867 6781 1567 10213 6071 3811 12159 8015 24 8456 4296 2312 10360 6168 1048 9336 5304 3192 11272 7512 664 8904 4616 2632 11096 6696 1976 10088 5752 3800 11960 7992 37 8279 4383 2327 10361 6501 1061 9337 5425 3193 11447 7421 661 9119 4663 2927 10813 7123 1873 9963 5945 3789 12273 7969 50 8614 4470 2342 10362 6322 1074 9338 5546 3194 11622 7330 658 8822 4710 2710 11042 7038 1770 9838 6138 3778 12074 7946 63 8437 4557 2357 10363 6655 1087 9339 5155 3195 11285 7239 655 9037 4757 3005 10759 6953 1667 10225 5819 3767 11875 7923 76 8260 4132 2372 10364 6476 1100 9340 5276 3196 11460 7660 652 8740 4804 2788 10988 6868 1564 10100 6012 3756 12188 7900 89 8595 4219 2387 10365 6297 1113 9341 5397 3197 11635 7569 649 8955 4851 2571 11217 6783 1973 9975 5693 3745 11989 7877 102 8418 4306 2402 10366 6630 1126 9342 5518 3198 11298 7478 646 9170 4898 2866 10934 6698 1870 9850 5886 3734 11790 7854 115 8241 4393 2417 10367 6451 1139 9343 5127 3199 11473 7387 643 8873 4945 2649 11163 7125 1767 10237 6079 3723 12103 7831 128 8576 4480 2432 10368 6272 1152 9344 5248 3200 11648 7296 640 9088 4992 2944 10880 7040 1664 10112 5760 3712 11904 7808 141 8399 4567 2447 10369 6605 1165 9345 5369 3201 11311 7205 637 8791 5039 2727 11109 6955 1561 9987 5953 3701 12217 7785 154 8222 4142 2462 10370 6426 1178 9346 5490 3202 11486 7626 634 9006 5086 3022 10826 6870 1970 9862 5634 3690 12018 7762 167 8557 4229 2477 10371 6247 1191 9347 5611 3203 11661 7535 631 8709 4621 2805 11055 6785 1867 9737 5827 3679 11819 7739 180 8380 4316 2492 10372 6580 1204 9348 5220 3204 11324 7444 628 8924 4668 2588 10772 6700 1764 10124 6020 3668 12132 7716 193 8203 4403 2507 10373 6401 1217 9349 5341 3205 11499 7353 625 9139 4715 2883 11001 7127 1661 9999 5701 3657 11933 7693 206 8538 4490 2522 10374 6222 1230 9350 5462 3206 11674 7262 622 8842 4762 2666 11230 7042 1558 9874 5894 3646 12246 8182 219 8361 4577 2537 10375 6555 1243 9351 5583 3207 11337 7171 619 9057 4809 2961 10947 6957 1967 9749 6087 3635 12047 8159 232 8696 4152 2552 10376 6376 1256 9352 5192 3208 11512 7592 616 8760 4856 2744 11176 6872 1864 10136 5768 3624 11848 8136 245 8519 4239 2055 10377 6197 1269 9353 5313 3209 11687 7501 613 8975 4903 3039 10893 6787 1761 10011 5961 3613 12161 8113 258 8342 4326 2070 10378 6530 1282 9354 5434 3210 11350 7410 610 9190 4950 2822 11122 6702 1658 9886 5642 3602 11962 8090 271 8677 4413 2085 10379 6351 1295 9355 5555 3211 11525 7319 607 8893 4997 2605 10839 7129 1555 9761 5835 3591 12275 8067 284 8500 4500 2100 10380 6172 1308 9356 5164 3212 11700 7228 604 9108 5044 2900 11068 7044 1964 10148 6028 4092 12076 8044 297 8323 4587 2115 10381 6505 1321 9357 5285 3213 11363 7649 601 8811 5091 2683 10785 6959 1861 10023 5709 4081 11877 8021 310 8658 4162 2130 10382 6326 1334 9358 5406 3214 11538 7558 598 9026 4626 2978 11014 6874 1758 9898 5902 4070 12190 7998 323 8481 4249 2145 10383 6147 1347 9359 5527 3215 11713 7467 595 8729 4673 2761 11243 6789 1655 9773 6095 4059 11991 7975 336 8304 4336 2160 10384 6480 1360 9360 5136 3216 11376 7376 592 8944 4720 3056 10960 6704 1552 10160 5776 4048 11792 7952 349 8639 4423 2175 10385 6301 1373 9361 5257 3217 11551 7285 589 9159 4767 2839 11189 7131 1961 10035 5969 4037 12105 7929 362 8462 4510 2190 10386 6634 1386 9362 5378 3218 11726 7194 586 8862 4814 2622 10906 7046 1858 9910 5650 4026 11906 7906 375 8285 4597 2205 10387 6455 1399 9363 5499 3219 11389 7615 583 9077 4861 2917 11135 6961 1755 9785 5843 4015 12219 7883 388 8620 4172 2220 10388 6276 1412 9364 5620 3220 11564 7524 580 8780 4908 2700 10852 6876 1652 10172 6036 4004 12020 7860 401 8443 4259 2235 10389 6609 1425 9365 5229 3221 11739 7433 577 8995 4955 2995 11081 6791 1549 10047 5717 3993 11821 7837 414 8266 4346 2250 10390 6430 1438 9366 5350 3222 11402 7342 574 9210 5002 2778 10798 6706 1958 9922 5910 3982 12134 7814 427 8601 4433 2265 10391 6251 1451 9367 5471 3223 11577 7251 571 8913 5049 2561 11027 7133 1855 9797 6103 3971 11935 7791 440 8424 4520 2280 10392 6584 1464 9368 5592 3224 11752 7672 568 9128 5096 2856 11256 7048 1752 10184 5784 3960 12248 7768 453 8247 4607 2295 10393 6405 1477 9369 5201 3225 11415 7581 565 8831 4631 2639 10973 6963 1649 10059 5977 3949 12049 7745 466 8582 4182 2310 10394 6226 1490 9370 5322 3226 11590 7490 562 9046 4678 2934 11202 6878 1546 9934 5658 3938 11850 7722 479 8405 4269 2325 10395 6559 1503 9371 5443 3227 11765 7399 559 8749 4725 2717 10919 6793 1955 9809 5851 3927 12163 7699 492 8228 4356 2340 10396 6380 1516 9372 5564 3228 11428 7308 556 8964 4772 3012 11148 6708 1852 10196 6044 3916 11964 8188 505 8563 4443 2355 10397 6201 1529 9373 5173 3229 11603 7217 553 9179 4819 2795 10865 7135 1749 10071 5725 3905 12277 8165 6 8386 4530 2370 10398 6534 1030 9374 5294 3230 11266 7638 550 8882 4866 2578 11094 7050 1646 9946 5918 3894 12078 8142 19 8209 4105 2385 10399 6355 1043 9375 5415 3231 11441 7547 547 9097 4913 2873 10811 6965 1543 9821 6111 3883 11879 8119 32 8544 4192 2400 10400 6176 1056 9376 5536 3232 11616 7456 544 8800 4960 2656 11040 6880 1952 10208 5792 3872 12192 8096 45 8367 4279 2415 10401 6509 1069 9377 5145 3233 11279 7365 541 9015 5007 2951 10757 6795 1849 10083 5985 3861 11993 8073 58 8702 4366 2430 10402 6330 1082 9378 5266 3234 11454 7274 538 8718 5054 2734 10986 6710 1746 9958 5666 3850 11794 8050 71 8525 4453 2445 10403 6151 1095 9379 5387 3235 11629 7183 535 8933 5101 3029 11215 7137 1643 9833 5859 3839 12107 8027 84 8348 4540 2460 10404 6484 1108 9380 5508 3236 11292 7604 532 9148 4636 2812 10932 7052 1540 10220 6052 3828 11908 8004 97 8683 4115 2475 10405 6305 1121 9381 5629 3237 11467 7513 529 8851 4683 2595 11161 6967 1949 10095 5733 3817 12221 7981 110 8506 4202 2490 10406 6638 1134 9382 5238 3238 11642 7422 526 9066 4730 2890 10878 6882 1846 9970 5926 3806 12022 7958 123 8329 4289 2505 10407 6459 1147 9383 5359 3239 11305 7331 523 8769 4777 2673 11107 6797 1743 9845 6119 3795 11823 7935 136 8664 4376 2520 10408 6280 1160 9384 5480 3240 11480 7240 520 8984 4824 2968 10824 6712 1640 10232 5800 3784 12136 7912 149 8487 4463 2535 10409 6613 1173 9385 5601 3241 11655 7661 517 9199 4871 2751 11053 7139 1537 10107 5993 3773 11937 7889 162 8310 4550 2550 10410 6434 1186 9386 5210 3242 11318 7570 514 8902 4918 3046 10770 7054 1946 9982 5674 3762 12250 7866 175 8645 4125 2053 10411 6255 1199 9387 5331 3243 11493 7479 1023 9117 4965 2829 10999 6969 1843 9857 5867 3751 12051 7843 188 8468 4212 2068 10412 6588 1212 9388 5452 3244 11668 7388 1020 8820 5012 2612 11228 6884 1740 9732 6060 3740 11852 7820 201 8291 4299 2083 10413 6409 1225 9389 5573 3245 11331 7297 1017 9035 5059 2907 10945 6799 1637 10119 5741 3729 12165 7797 214 8626 4386 2098 10414 6230 1238 9390 5182 3246 11506 7206 1014 8738 5106 2690 11174 6714 2046 9994 5934 3718 11966 7774 227 8449 4473 2113 10415 6563 1251 9391 5303 3247 11681 7627 1011 8953 4641 2985 10891 7141 1943 9869 6127 3707 12279 7751 240 8272 4560 2128 10416 6384 1264 9392 5424 3248 11344 7536 1008 9168 4688 2768 11120 7056 1840 9744 5808 3696 12080 7728 253 8607 4135 2143 10417 6205 1277 9393 5545 3249 11519 7445 1005 8871 4735 3063 10837 6971 1737 10131 6001 3685 11881 7705 266 8430 4222 2158 10418 6538 1290 9394 5154 3250 11694 7354 1002 9086 4782 2846 11066 6886 1634 10006 5682 3674 12194 7682 279 8253 4309 2173 10419 6359 1303 9395 5275 3251 11357 7263 999 8789 4829 2629 10783 6801 2043 9881 5875 3663 11995 8171 292 8588 4396 2188 10420 6180 1316 9396 5396 3252 11532 7172 996 9004 4876 2924 11012 6716 1940 9756 6068 3652 11796 8148 305 8411 4483 2203 10421 6513 1329 9397 5517 3253 11707 7593 993 8707 4923 2707 11241 7143 1837 10143 5749 3641 12109 8125 318 8234 4570 2218 10422 6334 1342 9398 5126 3254 11370 7502 990 8922 4970 3002 10958 7058 1734 10018 5942 3630 11910 8102 331 8569 4145 2233 10423 6155 1355 9399 5247 3255 11545 7411 987 9137 5017 2785 11187 6973 1631 9893 6135 3619 12223 8079 344 8392 4232 2248 10424 6488 1368 9400 5368 3256 11720 7320 984 8840 5064 2568 10904 6888 2040 9768 5816 3608 12024 8056 357 8215 4319 2263 10425 6309 1381 9401 5489 3257 11383 7229 981 9055 5111 2863 11133 6803 1937 10155 6009 3597 11825 8033 370 8550 4406 2278 10426 6642 1394 9402 5610 3258 11558 7650 978 8758 4646 2646 10850 6718 1834 10030 5690 3586 12138 8010 383 8373 4493 2293 10427 6463 1407 9403 5219 3259 11733 7559 975 8973 4693 2941 11079 7145 1731 9905 5883 4087 11939 7987 396 8196 4580 2308 10428 6284 1420 9404 5340 3260 11396 7468 972 9188 4740 2724 10796 7060 1628 9780 6076 4076 12252 7964 409 8531 4155 2323 10429 6617 1433 9405 5461 3261 11571 7377 969 8891 4787 3019 11025 6975 2037 10167 5757 4065 12053 7941 422 8354 4242 2338 10430 6438 1446 9406 5582 3262 11746 7286 966 9106 4834 2802 11254 6890 1934 10042 5950 4054 11854 7918 435 8689 4329 2353 10431 6259 1459 9407 5191 3263 11409 7195 963 8809 4881 2585 10971 6805 1831 9917 6143 4043 12167 7895 448 8512 4416 2368 10432 6592 1472 9408 5312 3264 11584 7616 960 9024 4928 2880 11200 6720 1728 9792 5824 4032 11968 7872 461 8335 4503 2383 10433 6413 1485 9409 5433 3265 11759 7525 957 8727 4975 2663 10917 7147 1625 10179 6017 4021 12281 7849 474 8670 4590 2398 10434 6234 1498 9410 5554 3266 11422 7434 954 8942 5022 2958 11146 7062 2034 10054 5698 4010 12082 7826 487 8493 4165 2413 10435 6567 1511 9411 5163 3267 11597 7343 951 9157 5069 2741 10863 6977 1931 9929 5891 3999 11883 7803 500 8316 4252 2428 10436 6388 1524 9412 5284 3268 11772 7252 948 8860 5116 3036 11092 6892 1828 9804 6084 3988 12196 7780 1 8651 4339 2443 10437 6209 1025 9413 5405 3269 11435 7673 945 9075 4651 2819 10809 6807 1725 10191 5765 3977 11997 7757 14 8474 4426 2458 10438 6542 1038 9414 5526 3270 11610 7582 942 8778 4698 2602 11038 6722 1622 10066 5958 3966 11798 7734 27 8297 4513 2473 10439 6363 1051 9415 5135 3271 11273 7491 939 8993 4745 2897 10755 7149 2031 9941 5639 3955 12111 7711 40 8632 4600 2488 10440 6184 1064 9416 5256 3272 11448 7400 936 9208 4792 2680 10984 7064 1928 9816 5832 3944 11912 7688 53 8455 4175 2503 10441 6517 1077 9417 5377 3273 11623 7309 933 8911 4839 2975 11213 6979 1825 10203 6025 3933 12225 8177 66 8278 4262 2518 10442 6338 1090 9418 5498 3274 11286 7218 930 9126 4886 2758 10930 6894 1722 10078 5706 3922 12026 8154 79 8613 4349 2533 10443 6159 1103 9419 5619 3275 11461 7639 927 8829 4933 3053 11159 6809 1619 9953 5899 3911 11827 8131 92 8436 4436 2548 10444 6492 1116 9420 5228 3276 11636 7548 924 9044 4980 2836 10876 6724 2028 9828 6092 3900 12140 8108 105 8259 4523 2051 10445 6313 1129 9421 5349 3277 11299 7457 921 8747 5027 2619 11105 7151 1925 10215 5773 3889 11941 8085 118 8594 4098 2066 10446 6646 1142 9422 5470 3278 11474 7366 918 8962 5074 2914 10822 7066 1822 10090 5966 3878 12254 8062 131 8417 4185 2081 10447 6467 1155 9423 5591 3279 11649 7275 915 9177 4609 2697 11051 6981 1719 9965 5647 3867 12055 8039 144 8240 4272 2096 10448 6288 1168 9424 5200 3280 11312 7184 912 8880 4656 2992 10768 6896 1616 9840 5840 3856 11856 8016 157 8575 4359 2111 10449 6621 1181 9425 5321 3281 11487 7605 909 9095 4703 2775 10997 6811 2025 10227 6033 3845 12169 7993 170 8398 4446 2126 10450 6442 1194 9426 5442 3282 11662 7514 906 8798 4750 3070 11226 6726 1922 10102 5714 3834 11970 7970 183 8221 4533 2141 10451 6263 1207 9427 5563 3283 11325 7423 903 9013 4797 2853 10943 7153 1819 9977 5907 3823 7947 196 8556 4108 2156 10452 6596 1220 9428 5172 3284 11500 7332 900 8716 4844 2636 11172 7068 1716 9852 6100 3812 12084 7924 209 8379 4195 2171 10453 6417 1233 9429 5293 3285 11675 7241 897 8931 4891 2931 10889 6983 1613 10239 5781 3801 11885 7901 222 8202 4282 2186 10454 6238 1246 9430 5414 3286 11338 7662 894 9146 4938 2714 11118 6898 2022 10114 5974 3790 12198 7878 235 8537 4369 2201 10455 6571 1259 9431 5535 3287 11513 7571 891 8849 4985 3009 10835 6813 1919 9989 5655 3779 11999 7855 248 8360 4456 2216 10456 6392 1272 9432 5144 3288 11688 7480 888 9064 5032 2792 11064 6728 1816 9864 5848 3768 11800 7832 261 8695 4543 2231 10457 6213 1285 9433 5265 3289 11351 7389 885 8767 5079 2575 10781 7155 1713 9739 6041 3757 12113 7809 274 8518 4118 2246 10458 6546 1298 9434 5386 3290 11526 7298 882 8982 4614 2870 11010 7070 1610 10126 5722 3746 11914 7786 287 8341 4205 2261 10459 6367 1311 9435 5507 3291 11701 7207 879 9197 4661 2653 11239 6985 2019 10001 5915 3735 12227 7763 300 8676 4292 2276 10460 6188 1324 9436 5628 3292 11364 7628 876 8900 4708 2948 10956 6900 1916 9876 6108 3724 12028 7740 313 8499 4379 2291 10461 6521 1337 9437 5237 3293 11539 7537 873 9115 4755 2731 11185 6815 1813 9751 5789 3713 11829 7717 326 8322 4466 2306 10462 6342 1350 9438 5358 3294 11714 7446 870 8818 4802 3026 10902 6730 1710 10138 5982 3702 12142 7694 339 8657 4553 2321 10463 6163 1363 9439 5479 3295 11377 7355 867 9033 4849 2809 11131 7157 1607 10013 5663 3691 11943 8183 352 8480 4128 2336 10464 6496 1376 9440 5600 3296 11552 7264 864 8736 4896 2592 10848 7072 2016 9888 5856 3680 12256 8160 365 8303 4215 2351 10465 6317 1389 9441 5209 3297 11727 7173 861 8951 4943 2887 11077 6987 1913 9763 6049 3669 12057 8137 378 8638 4302 2366 10466 6650 1402 9442 5330 3298 11390 7594 858 9166 4990 2670 10794 6902 1810 10150 5730 3658 11858 8114 391 8461 4389 2381 10467 6471 1415 9443 5451 3299 11565 7503 855 8869 5037 2965 11023 6817 1707 10025 5923 3647 12171 8091 404 8284 4476 2396 10468 6292 1428 9444 5572 3300 11740 7412 852 9084 5084 2748 11252 6732 1604 9900 6116 3636 11972 8068 417 8619 4563 2411 10469 6625 1441 9445 5181 3301 11403 7321 849 8787 4619 3043 10969 7159 2013 9775 5797 3625 8045 430 8442 4138 2426 10470 6446 1454 9446 5302 3302 11578 7230 846 9002 4666 2826 11198 7074 1910 10162 5990 3614 12086 8022 443 8265 4225 2441 10471 6267 1467 9447 5423 3303 11753 7651 843 8705 4713 2609 10915 6989 1807 10037 5671 3603 11887 7999 456 8600 4312 2456 10472 6600 1480 9448 5544 3304 11416 7560 840 8920 4760 2904 11144 6904 1704 9912 5864 3592 12200 7976 469 8423 4399 2471 10473 6421 1493 9449 5153 3305 11591 7469 837 9135 4807 2687 10861 6819 1601 9787 6057 4093 12001 7953 482 8246 4486 2486 10474 6242 1506 9450 5274 3306 11766 7378 834 8838 4854 2982 11090 6734 2010 10174 5738 4082 11802 7930 495 8581 4573 2501 10475 6575 1519 9451 5395 3307 11429 7287 831 9053 4901 2765 10807 7161 1907 10049 5931 4071 12115 7907 508 8404 4148 2516 10476 6396 1532 9452 5516 3308 11604 7196 828 8756 4948 3060 11036 7076 1804 9924 6124 4060 11916 7884 9 8227 4235 2531 10477 6217 1033 9453 5125 3309 11267 7617 825 8971 4995 2843 10753 6991 1701 9799 5805 4049 12229 7861 22 8562 4322 2546 10478 6550 1046 9454 5246 3310 11442 7526 822 9186 5042 2626 10982 6906 1598 10186 5998 4038 12030 7838 35 8385 4409 2049 10479 6371 1059 9455 5367 3311 11617 7435 819 8889 5089 2921 11211 6821 2007 10061 5679 4027 11831 7815 48 8208 4496 2064 10480 6192 1072 9456 5488 3312 11280 7344 816 9104 4624 2704 10928 6736 1904 9936 5872 4016 12144 7792 61 8543 4583 2079 10481 6525 1085 9457 5609 3313 11455 7253 813 8807 4671 2999 11157 7163 1801 9811 6065 4005 11945 7769 74 8366 4158 2094 10482 6346 1098 9458 5218 3314 11630 7674 810 9022 4718 2782 10874 7078 1698 10198 5746 3994 12258 7746 87 8701 4245 2109 10483 6167 1111 9459 5339 3315 11293 7583 807 8725 4765 2565 11103 6993 1595 10073 5939 3983 12059 7723 100 8524 4332 2124 10484 6500 1124 9460 5460 3316 11468 7492 804 8940 4812 2860 10820 6908 2004 9948 6132 3972 11860 7700 113 8347 4419 2139 10485 6321 1137 9461 5581 3317 11643 7401 801 9155 4859 2643 11049 6823 1901 9823 5813 3961 12173 8189 126 8682 4506 2154 10486 6654 1150 9462 5190 3318 11306 7310 798 8858 4906 2938 10766 6738 1798 10210 6006 3950 11974 8166 139 8505 4593 2169 10487 6475 1163 9463 5311 3319 11481 7219 795 9073 4953 2721 10995 7165 1695 10085 5687 3939 8143 152 8328 4168 2184 10488 6296 1176 9464 5432 3320 11656 7640 792 8776 5000 3016 11224 7080 1592 9960 5880 3928 12088 8120 165 8663 4255 2199 10489 6629 1189 9465 5553 3321 11319 7549 789 8991 5047 2799 10941 6995 2001 9835 6073 3917 11889 8097 178 8486 4342 2214 10490 6450 1202 9466 5162 3322 11494 7458 786 9206 5094 2582 11170 6910 1898 10222 5754 3906 12202 8074 191 8309 4429 2229 10491 6271 1215 9467 5283 3323 11669 7367 783 8909 4629 2877 10887 6825 1795 10097 5947 3895 12003 8051 204 8644 4516 2244 10492 6604 1228 9468 5404 3324 11332 7276 780 9124 4676 2660 11116 6740 1692 9972 6140 3884 11804 8028 217 8467 4603 2259 10493 6425 1241 9469 5525 3325 11507 7185 777 8827 4723 2955 10833 7167 1589 9847 5821 3873 12117 8005 230 8290 4178 2274 10494 6246 1254 9470 5134 3326 11682 7606 774 9042 4770 2738 11062 7082 1998 10234 6014 3862 11918 7982 243 8625 4265 2289 10495 6579 1267 9471 5255 3327 11345 7515 771 8745 4817 3033 10779 6997 1895 10109 5695 3851 12231 7959 256 8448 4352 2304 10496 6400 1280 9472 5376 3328 11520 7424 768 8960 4864 2816 11008 6912 1792 9984 5888 3840 12032 7936 269 8271 4439 2319 10497 6221 1293 9473 5497 3329 11695 7333 765 9175 4911 2599 11237 6827 1689 9859 6081 3829 11833 7913 282 8606 4526 2334 10498 6554 1306 9474 5618 3330 11358 7242 762 8878 4958 2894 10954 6742 1586 9734 5762 3818 12146 7890 295 8429 4101 2349 10499 6375 1319 9475 5227 3331 11533 7663 759 9093 5005 2677 11183 6657 1995 10121 5955 3807 11947 7867 308 8252 4188 2364 10500 6196 1332 9476 5348 3332 11708 7572 756 8796 5052 2972 10900 7084 1892 9996 5636 3796 12260 7844 321 8587 4275 2379 10501 6529 1345 9477 5469 3333 11371 7481 753 9011 5099 2755 11129 6999 1789 9871 5829 3785 12061 7821 334 8410 4362 2394 10502 6350 1358 9478 5590 3334 11546 7390 750 8714 4634 3050 10846 6914 1686 9746 6022 3774 11862 7798 347 8233 4449 2409 10503 6171 1371 9479 5199 3335 11721 7299 747 8929 4681 2833 11075 6829 1583 10133 5703 3763 12175 7775 360 8568 4536 2424 10504 6504 1384 9480 5320 3336 11384 7208 744 9144 4728 2616 10792 6744 1992 10008 5896 3752 11976 7752 373 8391 4111 2439 10505 6325 1397 9481 5441 3337 11559 7629 741 8847 4775 2911 11021 6659 1889 9883 6089 3741 11777 7729 386 8214 4198 2454 10506 6146 1410 9482 5562 3338 11734 7538 738 9062 4822 2694 11250 7086 1786 9758 5770 3730 12090 7706 399 8549 4285 2469 10507 6479 1423 9483 5171 3339 11397 7447 735 8765 4869 2989 10967 7001 1683 10145 5963 3719 11891 7683 412 8372 4372 2484 10508 6300 1436 9484 5292 3340 11572 7356 732 8980 4916 2772 11196 6916 1580 10020 5644 3708 12204 8172 425 8195 4459 2499 10509 6633 1449 9485 5413 3341 11747 7265 729 9195 4963 3067 10913 6831 1989 9895 5837 3697 12005 8149 438 8530 4546 2514 10510 6454 1462 9486 5534 3342 11410 7174 726 8898 5010 2850 11142 6746 1886 9770 6030 3686 11806 8126 451 8353 4121 2529 10511 6275 1475 9487 5143 3343 11585 7595 723 9113 5057 2633 10859 6661 1783 10157 5711 3675 12119 8103 464 8688 4208 2544 10512 6608 1488 9488 5264 3344 11760 7504 720 8816 5104 2928 11088 7088 1680 10032 5904 3664 11920 8080 477 8511 4295 2559 10513 6429 1501 9489 5385 3345 11423 7413 717 9031 4639 2711 10805 7003 1577 9907 6097 3653 12233 8057 490 8334 4382 2062 10514 6250 1514 9490 5506 3346 11598 7322 714 8734 4686 3006 11034 6918 1986 9782 5778 3642 12034 8034 503 8669 4469 2077 10515 6583 1527 9491 5627 3347 11773 7231 711 8949 4733 2789 11263 6833 1883 10169 5971 3631 11835 8011 4 8492 4556 2092 10516 6404 1028 9492 5236 3348 11436 7652 708 9164 4780 2572 10980 6748 1780 10044 5652 3620 12148 7988 17 8315 4131 2107 10517 6225 1041 9493 5357 3349 11611 7561 705 8867 4827 2867 11209 6663 1677 9919 5845 3609 11949 7965 30 8650 4218 2122 10518 6558 1054 9494 5478 3350 11274 7470 702 9082 4874 2650 10926 7090 1574 9794 6038 3598 12262 7942 43 8473 4305 2137 10519 6379 1067 9495 5599 3351 11449 7379 699 8785 4921 2945 11155 7005 1983 10181 5719 3587 12063 7919 56 8296 4392 2152 10520 6200 1080 9496 5208 3352 11624 7288 696 9000 4968 2728 10872 6920 1880 10056 5912 4088 11864 7896 69 8631 4479 2167 10521 6533 1093 9497 5329 3353 11287 7197 693 9215 5015 3023 11101 6835 1777 9931 6105 4077 12177 7873 82 8454 4566 2182 10522 6354 1106 9498 5450 3354 11462 7618 690 8918 5062 2806 10818 6750 1674 9806 5786 4066 11978 7850 95 8277 4141 2197 10523 6175 1119 9499 5571 3355 11637 7527 687 9133 5109 2589 11047 6665 1571 10193 5979 4055 11779 7827 108 8612 4228 2212 10524 6508 1132 9500 5180 3356 11300 7436 684 8836 4644 2884 10764 7092 1980 10068 5660 4044 12092 7804 121 8435 4315 2227 10525 6329 1145 9501 5301 3357 11475 7345 681 9051 4691 2667 10993 7007 1877 9943 5853 4033 11893 7781 134 8258 4402 2242 10526 6150 1158 9502 5422 3358 11650 7254 678 8754 4738 2962 11222 6922 1774 9818 6046 4022 12206 7758 147 8593 4489 2257 10527 6483 1171 9503 5543 3359 11313 7675 675 8969 4785 2745 10939 6837 1671 10205 5727 4011 12007 7735 160 8416 4576 2272 10528 6304 1184 9504 5152 3360 11488 7584 672 9184 4832 3040 11168 6752 1568 10080 5920 4000 11808 7712 173 8239 4151 2287 10529 6637 1197 9505 5273 3361 11663 7493 669 8887 4879 2823 10885 6667 1977 9955 6113 3989 12121 7689 186 8574 4238 2302 10530 6458 1210 9506 5394 3362 11326 7402 666 9102 4926 2606 11114 7094 1874 9830 5794 3978 11922 8178 199 8397 4325 2317 10531 6279 1223 9507 5515 3363 11501 7311 663 8805 4973 2901 10831 7009 1771 10217 5987 3967 12235 8155 212 8220 4412 2332 10532 6612 1236 9508 5124 3364 11676 7220 660 9020 5020 2684 11060 6924 1668 10092 5668 3956 12036 8132 225 8555 4499 2347 10533 6433 1249 9509 5245 3365 11339 7641 657 8723 5067 2979 10777 6839 1565 9967 5861 3945 11837 8109 238 8378 4586 2362 10534 6254 1262 9510 5366 3366 11514 7550 654 8938 5114 2762 11006 6754 1974 9842 6054 3934 12150 8086 251 8201 4161 2377 10535 6587 1275 9511 5487 3367 11689 7459 651 9153 4649 3057 11235 6669 1871 10229 5735 3923 11951 8063 264 8536 4248 2392 10536 6408 1288 9512 5608 3368 11352 7368 648 8856 4696 2840 10952 7096 1768 10104 5928 3912 12264 8040 277 8359 4335 2407 10537 6229 1301 9513 5217 3369 11527 7277 645 9071 4743 2623 11181 7011 1665 9979 6121 3901 12065 8017 290 8694 4422 2422 10538 6562 1314 9514 5338 3370 11702 7186 642 8774 4790 2918 10898 6926 1562 9854 5802 3890 11866 7994 303 8517 4509 2437 10539 6383 1327 9515 5459 3371 11365 7607 639 8989 4837 2701 11127 6841 1971 9729 5995 3879 12179 7971 316 8340 4596 2452 10540 6204 1340 9516 5580 3372 11540 7516 636 9204 4884 2996 10844 6756 1868 10116 5676 3868 11980 7948 329 8675 4171 2467 10541 6537 1353 9517 5189 3373 11715 7425 633 8907 4931 2779 11073 6671 1765 9991 5869 3857 11781 7925 342 8498 4258 2482 10542 6358 1366 9518 5310 3374 11378 7334 630 9122 4978 2562 10790 7098 1662 9866 6062 3846 12094 7902 355 8321 4345 2497 10543 6179 1379 9519 5431 3375 11553 7243 627 8825 5025 2857 11019 7013 1559 9741 5743 3835 11895 7879 368 8656 4432 2512 10544 6512 1392 9520 5552 3376 11728 7664 624 9040 5072 2640 11248 6928 1968 10128 5936 3824 12208 7856 381 8479 4519 2527 10545 6333 1405 9521 5161 3377 11391 7573 621 8743 5119 2935 10965 6843 1865 10003 6129 3813 12009 7833 394 8302 4606 2542 10546 6154 1418 9522 5282 3378 11566 7482 618 8958 4654 2718 11194 6758 1762 9878 5810 3802 11810 7810 407 8637 4181 2557 10547 6487 1431 9523 5403 3379 11741 7391 615 9173 4701 3013 10911 6673 1659 9753 6003 3791 12123 7787 420 8460 4268 2060 10548 6308 1444 9524 5524 3380 11404 7300 612 8876 4748 2796 11140 7100 1556 10140 5684 3780 11924 7764 433 8283 4355 2075 10549 6641 1457 9525 5133 3381 11579 7209 609 9091 4795 2579 10857 7015 1965 10015 5877 3769 12237 7741 446 8618 4442 2090 10550 6462 1470 9526 5254 3382 11754 7630 606 8794 4842 2874 11086 6930 1862 9890 6070 3758 12038 7718 459 8441 4529 2105 10551 6283 1483 9527 5375 3383 11417 7539 603 9009 4889 2657 10803 6845 1759 9765 5751 3747 11839 7695 472 8264 4104 2120 10552 6616 1496 9528 5496 3384 11592 7448 600 8712 4936 2952 11032 6760 1656 10152 5944 3736 12152 8184 485 8599 4191 2135 10553 6437 1509 9529 5617 3385 11767 7357 597 8927 4983 2735 11261 6675 1553 10027 6137 3725 11953 8161 498 8422 4278 2150 10554 6258 1522 9530 5226 3386 11430 7266 594 9142 5030 3030 10978 7102 1962 9902 5818 3714 12266 8138 511 8245 4365 2165 10555 6591 1535 9531 5347 3387 11605 7175 591 8845 5077 2813 11207 7017 1859 9777 6011 3703 12067 8115 12 8580 4452 2180 10556 6412 1036 9532 5468 3388 11268 7596 588 9060 4612 2596 10924 6932 1756 10164 5692 3692 11868 8092 25 8403 4539 2195 10557 6233 1049 9533 5589 3389 11443 7505 585 8763 4659 2891 11153 6847 1653 10039 5885 3681 12181 8069 38 8226 4114 2210 10558 6566 1062 9534 5198 3390 11618 7414 582 8978 4706 2674 10870 6762 1550 9914 6078 3670 11982 8046 51 8561 4201 2225 10559 6387 1075 9535 5319 3391 11281 7323 579 9193 4753 2969 11099 6677 1959 9789 5759 3659 11783 8023 64 8384 4288 2240 10560 6208 1088 9536 5440 3392 11456 7232 576 8896 4800 2752 10816 7104 1856 10176 5952 3648 12096 8000 77 8207 4375 2255 10561 6541 1101 9537 5561 3393 11631 7653 573 9111 4847 3047 11045 7019 1753 10051 5633 3637 11897 7977 90 8542 4462 2270 10562 6362 1114 9538 5170 3394 11294 7562 570 8814 4894 2830 10762 6934 1650 9926 5826 3626 12210 7954 103 8365 4549 2285 10563 6183 1127 9539 5291 3395 11469 7471 567 9029 4941 2613 10991 6849 1547 9801 6019 3615 12011 7931 116 8700 4124 2300 10564 6516 1140 9540 5412 3396 11644 7380 564 8732 4988 2908 11220 6764 1956 10188 5700 3604 11812 7908 129 8523 4211 2315 10565 6337 1153 9541 5533 3397 11307 7289 561 8947 5035 2691 10937 6679 1853 10063 5893 3593 12125 7885 142 8346 4298 2330 10566 6158 1166 9542 5142 3398 11482 7198 558 9162 5082 2986 11166 7106 1750 9938 6086 4094 11926 7862 155 8681 4385 2345 10567 6491 1179 9543 5263 3399 11657 7619 555 8865 4617 2769 10883 7021 1647 9813 5767 4083 12239 7839 168 8504 4472 2360 10568 6312 1192 9544 5384 3400 11320 7528 552 9080 4664 3064 11112 6936 1544 10200 5960 4072 12040 7816 181 8327 4559 2375 10569 6645 1205 9545 5505 3401 11495 7437 549 8783 4711 2847 10829 6851 1953 10075 5641 4061 11841 7793 194 8662 4134 2390 10570 6466 1218 9546 5626 3402 11670 7346 546 8998 4758 2630 11058 6766 1850 9950 5834 4050 12154 7770 207 8485 4221 2405 10571 6287 1231 9547 5235 3403 11333 7255 543 9213 4805 2925 10775 6681 1747 9825 6027 4039 11955 7747 220 8308 4308 2420 10572 6620 1244 9548 5356 3404 11508 7676 540 8916 4852 2708 11004 7108 1644 10212 5708 4028 12268 7724 233 8643 4395 2435 10573 6441 1257 9549 5477 3405 11683 7585 537 9131 4899 3003 11233 7023 1541 10087 5901 4017 12069 7701 246 8466 4482 2450 10574 6262 1270 9550 5598 3406 11346 7494 534 8834 4946 2786 10950 6938 1950 9962 6094 4006 11870 8190 259 8289 4569 2465 10575 6595 1283 9551 5207 3407 11521 7403 531 9049 4993 2569 11179 6853 1847 9837 5775 3995 12183 8167 272 8624 4144 2480 10576 6416 1296 9552 5328 3408 11696 7312 528 8752 5040 2864 10896 6768 1744 10224 5968 3984 11984 8144 285 8447 4231 2495 10577 6237 1309 9553 5449 3409 11359 7221 525 8967 5087 2647 11125 6683 1641 10099 5649 3973 11785 8121 298 8270 4318 2510 10578 6570 1322 9554 5570 3410 11534 7642 522 9182 4622 2942 10842 7110 1538 9974 5842 3962 12098 8098 311 8605 4405 2525 10579 6391 1335 9555 5179 3411 11709 7551 519 8885 4669 2725 11071 7025 1947 9849 6035 3951 11899 8075 324 8428 4492 2540 10580 6212 1348 9556 5300 3412 11372 7460 516 9100 4716 3020 10788 6940 1844 10236 5716 3940 12212 8052 337 8251 4579 2555 10581 6545 1361 9557 5421 3413 11547 7369 513 8803 4763 2803 11017 6855 1741 10111 5909 3929 12013 8029 350 8586 4154 2058 10582 6366 1374 9558 5542 3414 11722 7278 1022 9018 4810 2586 11246 6770 1638 9986 6102 3918 11814 8006 363 8409 4241 2073 10583 6187 1387 9559 5151 3415 11385 7187 1019 8721 4857 2881 10963 6685 2047 9861 5783 3907 12127 7983 376 8232 4328 2088 10584 6520 1400 9560 5272 3416 11560 7608 1016 8936 4904 2664 11192 7112 1944 9736 5976 3896 11928 7960 389 8567 4415 2103 10585 6341 1413 9561 5393 3417 11735 7517 1013 9151 4951 2959 10909 7027 1841 10123 5657 3885 12241 7937 402 8390 4502 2118 10586 6162 1426 9562 5514 3418 11398 7426 1010 8854 4998 2742 11138 6942 1738 9998 5850 3874 12042 7914 415 8213 4589 2133 10587 6495 1439 9563 5123 3419 11573 7335 1007 9069 5045 3037 10855 6857 1635 9873 6043 3863 11843 7891 428 8548 4164 2148 10588 6316 1452 9564 5244 3420 11748 7244 1004 8772 5092 2820 11084 6772 2044 9748 5724 3852 12156 7868 441 8371 4251 2163 10589 6649 1465 9565 5365 3421 11411 7665 1001 8987 4627 2603 10801 6687 1941 10135 5917 3841 11957 7845 454 8194 4338 2178 10590 6470 1478 9566 5486 3422 11586 7574 998 9202 4674 2898 11030 7114 1838 10010 6110 3830 12270 7822 467 8529 4425 2193 10591 6291 1491 9567 5607 3423 11761 7483 995 8905 4721 2681 11259 7029 1735 9885 5791 3819 12071 7799 480 8352 4512 2208 10592 6624 1504 9568 5216 3424 11424 7392 992 9120 4768 2976 10976 6944 1632 9760 5984 3808 11872 7776 493 8687 4599 2223 10593 6445 1517 9569 5337 3425 11599 7301 989 8823 4815 2759 11205 6859 2041 10147 5665 3797 12185 7753 506 8510 4174 2238 10594 6266 1530 9570 5458 3426 11774 7210 986 9038 4862 3054 10922 6774 1938 10022 5858 3786 11986 7730 7 8333 4261 2253 10595 6599 1031 9571 5579 3427 11437 7631 983 8741 4909 2837 11151 6689 1835 9897 6051 3775 11787 7707 20 8668 4348 2268 10596 6420 1044 9572 5188 3428 11612 7540 980 8956 4956 2620 10868 7116 1732 9772 5732 3764 12100 7684 33 8491 4435 2283 10597 6241 1057 9573 5309 3429 11275 7449 977 9171 5003 2915 11097 7031 1629 10159 5925 3753 11901 8173 46 8314 4522 2298 10598 6574 1070 9574 5430 3430 11450 7358 974 8874 5050 2698 10814 6946 2038 10034 6118 3742 12214 8150 59 8649 4097 2313 10599 6395 1083 9575 5551 3431 11625 7267 971 9089 5097 2993 11043 6861 1935 9909 5799 3731 12015 8127 72 8472 4184 2328 10600 6216 1096 9576 5160 3432 11288 7176 968 8792 4632 2776 10760 6776 1832 9784 5992 3720 11816 8104 85 8295 4271 2343 10601 6549 1109 9577 5281 3433 11463 7597 965 9007 4679 3071 10989 6691 1729 10171 5673 3709 12129 8081 98 8630 4358 2358 10602 6370 1122 9578 5402 3434 11638 7506 962 8710 4726 2854 11218 7118 1626 10046 5866 3698 11930 8058 111 8453 4445 2373 10603 6191 1135 9579 5523 3435 11301 7415 959 8925 4773 2637 10935 7033 2035 9921 6059 3687 12243 8035 124 8276 4532 2388 10604 6524 1148 9580 5132 3436 11476 7324 956 9140 4820 2932 11164 6948 1932 9796 5740 3676 12044 8012 137 8611 4107 2403 10605 6345 1161 9581 5253 3437 11651 7233 953 8843 4867 2715 10881 6863 1829 10183 5933 3665 11845 7989 150 8434 4194 2418 10606 6166 1174 9582 5374 3438 11314 7654 950 9058 4914 3010 11110 6778 1726 10058 6126 3654 12158 7966 163 8257 4281 2433 10607 6499 1187 9583 5495 3439 11489 7563 947 8761 4961 2793 10827 6693 1623 9933 5807 3643 11959 7943 176 8592 4368 2448 10608 6320 1200 9584 5616 3440 11664 7472 944 8976 5008 2576 11056 7120 2032 9808 6000 3632 12272 7920 189 8415 4455 2463 10609 6653 1213 9585 5225 3441 11327 7381 941 9191 5055 2871 10773 7035 1929 10195 5681 3621 12073 7897 202 8238 4542 2478 10610 6474 1226 9586 5346 3442 11502 7290 938 8894 5102 2654 11002 6950 1826 10070 5874 3610 11874 7874 215 8573 4117 2493 10611 6295 1239 9587 5467 3443 11677 7199 935 9109 4637 2949 11231 6865 1723 9945 6067 3599 12187 7851 228 8396 4204 2508 10612 6628 1252 9588 5588 3444 11340 7620 932 8812 4684 2732 10948 6780 1620 9820 5748 3588 11988 7828 241 8219 4291 2523 10613 6449 1265 9589 5197 3445 11515 7529 929 9027 4731 3027 11177 6695 2029 10207 5941 4089 11789 7805 254 8554 4378 2538 10614 6270 1278 9590 5318 3446 11690 7438 926 8730 4778 2810 10894 7122 1926 10082 6134 4078 12102 7782 267 8377 4465 2553 10615 6603 1291 9591 5439 3447 11353 7347 923 8945 4825 2593 11123 7037 1823 9957 5815 4067 11903 7759 280 8200 4552 2056 10616 6424 1304 9592 5560 3448 11528 7256 920 9160 4872 2888 10840 6952 1720 9832 6008 4056 12216 7736 293 8535 4127 2071 10617 6245 1317 9593 5169 3449 11703 7677 917 8863 4919 2671 11069 6867 1617 10219 5689 4045 12017 7713 306 8358 4214 2086 10618 6578 1330 9594 5290 3450 11366 7586 914 9078 4966 2966 10786 6782 2026 10094 5882 4034 11818 7690 319 8693 4301 2101 10619 6399 1343 9595 5411 3451 11541 7495 911 8781 5013 2749 11015 6697 1923 9969 6075 4023 12131 8179 332 8516 4388 2116 10620 6220 1356 9596 5532 3452 11716 7404 908 8996 5060 3044 11244 7124 1820 9844 5756 4012 11932 8156 345 8339 4475 2131 10621 6553 1369 9597 5141 3453 11379 7313 905 9211 5107 2827 10961 7039 1717 10231 5949 4001 12245 8133 358 8674 4562 2146 10622 6374 1382 9598 5262 3454 11554 7222 902 8914 4642 2610 11190 6954 1614 10106 6142 3990 12046 8110 371 8497 4137 2161 10623 6195 1395 9599 5383 3455 11729 7643 899 9129 4689 2905 10907 6869 2023 9981 5823 3979 11847 8087 384 8320 4224 2176 10624 6528 1408 9600 5504 3456 11392 7552 896 8832 4736 2688 11136 6784 1920 9856 6016 3968 12160 8064 397 8655 4311 2191 10625 6349 1421 9601 5625 3457 11567 7461 893 9047 4783 2983 10853 6699 1817 9731 5697 3957 11961 8041 410 8478 4398 2206 10626 6170 1434 9602 5234 3458 11742 7370 890 8750 4830 2766 11082 7126 1714 10118 5890 3946 12274 8018 423 8301 4485 2221 10627 6503 1447 9603 5355 3459 11405 7279 887 8965 4877 3061 10799 7041 1611 9993 6083 3935 12075 7995 436 8636 4572 2236 10628 6324 1460 9604 5476 3460 11580 7188 884 9180 4924 2844 11028 6956 2020 9868 5764 3924 11876 7972 449 8459 4147 2251 10629 6145 1473 9605 5597 3461 11755 7609 881 8883 4971 2627 11257 6871 1917 9743 5957 3913 12189 7949 462 8282 4234 2266 10630 6478 1486 9606 5206 3462 11418 7518 878 9098 5018 2922 10974 6786 1814 10130 5638 3902 11990 7926 475 8617 4321 2281 10631 6299 1499 9607 5327 3463 11593 7427 875 8801 5065 2705 11203 6701 1711 10005 5831 3891 11791 7903 488 8440 4408 2296 10632 6632 1512 9608 5448 3464 11768 7336 872 9016 5112 3000 10920 7128 1608 9880 6024 3880 12104 7880 501 8263 4495 2311 10633 6453 1525 9609 5569 3465 11431 7245 869 8719 4647 2783 11149 7043 2017 9755 5705 3869 11905 7857 2 8598 4582 2326 10634 6274 1026 9610 5178 3466 11606 7666 866 8934 4694 2566 10866 6958 1914 10142 5898 3858 12218 7834 15 8421 4157 2341 10635 6607 1039 9611 5299 3467 11269 7575 863 9149 4741 2861 11095 6873 1811 10017 6091 3847 12019 7811 28 8244 4244 2356 10636 6428 1052 9612 5420 3468 11444 7484 860 8852 4788 2644 10812 6788 1708 9892 5772 3836 11820 7788 41 8579 4331 2371 10637 6249 1065 9613 5541 3469 11619 7393 857 9067 4835 2939 11041 6703 1605 9767 5965 3825 12133 7765 54 8402 4418 2386 10638 6582 1078 9614 5150 3470 11282 7302 854 8770 4882 2722 10758 7130 2014 10154 5646 3814 11934 7742 67 8225 4505 2401 10639 6403 1091 9615 5271 3471 11457 7211 851 8985 4929 3017 10987 7045 1911 10029 5839 3803 12247 7719 80 8560 4592 2416 10640 6224 1104 9616 5392 3472 11632 7632 848 9200 4976 2800 11216 6960 1808 9904 6032 3792 12048 7696 93 8383 4167 2431 10641 6557 1117 9617 5513 3473 11295 7541 845 8903 5023 2583 10933 6875 1705 9779 5713 3781 11849 8185 106 8206 4254 2446 10642 6378 1130 9618 5122 3474 11470 7450 842 9118 5070 2878 11162 6790 1602 10166 5906 3770 12162 8162 119 8541 4341 2461 10643 6199 1143 9619 5243 3475 11645 7359 839 8821 5117 2661 10879 6705 2011 10041 6099 3759 11963 8139 132 8364 4428 2476 10644 6532 1156 9620 5364 3476 11308 7268 836 9036 4652 2956 11108 7132 1908 9916 5780 3748 12276 8116 145 8699 4515 2491 10645 6353 1169 9621 5485 3477 11483 7177 833 8739 4699 2739 10825 7047 1805 9791 5973 3737 12077 8093 158 8522 4602 2506 10646 6174 1182 9622 5606 3478 11658 7598 830 8954 4746 3034 11054 6962 1702 10178 5654 3726 11878 8070 171 8345 4177 2521 10647 6507 1195 9623 5215 3479 11321 7507 827 9169 4793 2817 10771 6877 1599 10053 5847 3715 12191 8047 184 8680 4264 2536 10648 6328 1208 9624 5336 3480 11496 7416 824 8872 4840 2600 11000 6792 2008 9928 6040 3704 11992 8024 197 8503 4351 2551 10649 6149 1221 9625 5457 3481 11671 7325 821 9087 4887 2895 11229 6707 1905 9803 5721 3693 11793 8001 210 8326 4438 2054 10650 6482 1234 9626 5578 3482 11334 7234 818 8790 4934 2678 10946 7134 1802 10190 5914 3682 12106 7978 223 8661 4525 2069 10651 6303 1247 9627 5187 3483 11509 7655 815 9005 4981 2973 11175 7049 1699 10065 6107 3671 11907 7955 236 8484 4100 2084 10652 6636 1260 9628 5308 3484 11684 7564 812 8708 5028 2756 10892 6964 1596 9940 5788 3660 12220 7932 249 8307 4187 2099 10653 6457 1273 9629 5429 3485 11347 7473 809 8923 5075 3051 11121 6879 2005 9815 5981 3649 12021 7909 262 8642 4274 2114 10654 6278 1286 9630 5550 3486 11522 7382 806 9138 4610 2834 10838 6794 1902 10202 5662 3638 11822 7886 275 8465 4361 2129 10655 6611 1299 9631 5159 3487 11697 7291 803 8841 4657 2617 11067 6709 1799 10077 5855 3627 12135 7863 288 8288 4448 2144 10656 6432 1312 9632 5280 3488 11360 7200 800 9056 4704 2912 10784 7136 1696 9952 6048 3616 11936 7840 301 8623 4535 2159 10657 6253 1325 9633 5401 3489 11535 7621 797 8759 4751 2695 11013 7051 1593 9827 5729 3605 12249 7817 314 8446 4110 2174 10658 6586 1338 9634 5522 3490 11710 7530 794 8974 4798 2990 11242 6966 2002 10214 5922 3594 12050 7794 327 8269 4197 2189 10659 6407 1351 9635 5131 3491 11373 7439 791 9189 4845 2773 10959 6881 1899 10089 6115 4095 11851 7771 340 8604 4284 2204 10660 6228 1364 9636 5252 3492 11548 7348 788 8892 4892 3068 11188 6796 1796 9964 5796 4084 12164 7748 353 8427 4371 2219 10661 6561 1377 9637 5373 3493 11723 7257 785 9107 4939 2851 10905 6711 1693 9839 5989 4073 11965 7725 366 8250 4458 2234 10662 6382 1390 9638 5494 3494 11386 7678 782 8810 4986 2634 11134 7138 1590 10226 5670 4062 12278 7702 379 8585 4545 2249 10663 6203 1403 9639 5615 3495 11561 7587 779 9025 5033 2929 10851 7053 1999 10101 5863 4051 12079 8191 392 8408 4120 2264 10664 6536 1416 9640 5224 3496 11736 7496 776 8728 5080 2712 11080 6968 1896 9976 6056 4040 11880 8168 405 8231 4207 2279 10665 6357 1429 9641 5345 3497 11399 7405 773 8943 4615 3007 10797 6883 1793 9851 5737 4029 12193 8145 418 8566 4294 2294 10666 6178 1442 9642 5466 3498 11574 7314 770 9158 4662 2790 11026 6798 1690 10238 5930 4018 11994 8122 431 8389 4381 2309 10667 6511 1455 9643 5587 3499 11749 7223 767 8861 4709 2573 11255 6713 1587 10113 6123 4007 11795 8099 444 8212 4468 2324 10668 6332 1468 9644 5196 3500 11412 7644 764 9076 4756 2868 10972 7140 1996 9988 5804 3996 12108 8076 457 8547 4555 2339 10669 6153 1481 9645 5317 3501 11587 7553 761 8779 4803 2651 11201 7055 1893 9863 5997 3985 11909 8053 470 8370 4130 2354 10670 6486 1494 9646 5438 3502 11762 7462 758 8994 4850 2946 10918 6970 1790 9738 5678 3974 12222 8030 483 8193 4217 2369 10671 6307 1507 9647 5559 3503 11425 7371 755 9209 4897 2729 11147 6885 1687 10125 5871 3963 12023 8007 496 8528 4304 2384 10672 6640 1520 9648 5168 3504 11600 7280 752 8912 4944 3024 10864 6800 1584 10000 6064 3952 11824 7984 509 8351 4391 2399 10673 6461 1533 9649 5289 3505 11775 7189 749 9127 4991 2807 11093 6715 1993 9875 5745 3941 12137 7961 10 8686 4478 2414 10674 6282 1034 9650 5410 3506 11438 7610 746 8830 5038 2590 10810 7142 1890 9750 5938 3930 11938 7938 23 8509 4565 2429 10675 6615 1047 9651 5531 3507 11613 7519 743 9045 5085 2885 11039 7057 1787 10137 6131 3919 12251 7915 36 8332 4140 2444 10676 6436 1060 9652 5140 3508 11276 7428 740 8748 4620 2668 10756 6972 1684 10012 5812 3908 12052 7892 49 8667 4227 2459 10677 6257 1073 9653 5261 3509 11451 7337 737 8963 4667 2963 10985 6887 1581 9887 6005 3897 11853 7869 62 8490 4314 2474 10678 6590 1086 9654 5382 3510 11626 7246 734 9178 4714 2746 11214 6802 1990 9762 5686 3886 12166 7846 75 8313 4401 2489 10679 6411 1099 9655 5503 3511 11289 7667 731 8881 4761 3041 10931 6717 1887 10149 5879 3875 11967 7823 88 8648 4488 2504 10680 6232 1112 9656 5624 3512 11464 7576 728 9096 4808 2824 11160 7144 1784 10024 6072 3864 12280 7800 101 8471 4575 2519 10681 6565 1125 9657 5233 3513 11639 7485 725 8799 4855 2607 10877 7059 1681 9899 5753 3853 12081 7777 114 8294 4150 2534 10682 6386 1138 9658 5354 3514 11302 7394 722 9014 4902 2902 11106 6974 1578 9774 5946 3842 11882 7754 127 8629 4237 2549 10683 6207 1151 9659 5475 3515 11477 7303 719 8717 4949 2685 10823 6889 1987 10161 6139 3831 12195 7731 140 8452 4324 2052 10684 6540 1164 9660 5596 3516 11652 7212 716 8932 4996 2980 11052 6804 1884 10036 5820 3820 11996 7708 153 8275 4411 2067 10685 6361 1177 9661 5205 3517 11315 7633 713 9147 5043 2763 10769 6719 1781 9911 6013 3809 11797 7685 166 8610 4498 2082 10686 6182 1190 9662 5326 3518 11490 7542 710 8850 5090 3058 10998 7146 1678 9786 5694 3798 12110 8174 179 8433 4585 2097 10687 6515 1203 9663 5447 3519 11665 7451 707 9065 4625 2841 11227 7061 1575 10173 5887 3787 11911 8151 192 8256 4160 2112 10688 6336 1216 9664 5568 3520 11328 7360 704 8768 4672 2624 10944 6976 1984 10048 6080 3776 12224 8128 205 8591 4247 2127 10689 6157 1229 9665 5177 3521 11503 7269 701 8983 4719 2919 11173 6891 1881 9923 5761 3765 12025 8105 218 8414 4334 2142 10690 6490 1242 9666 5298 3522 11678 7178 698 9198 4766 2702 10890 6806 1778 9798 5954 3754 11826 8082 231 8237 4421 2157 10691 6311 1255 9667 5419 3523 11341 7599 695 8901 4813 2997 11119 6721 1675 10185 5635 3743 12139 8059 244 8572 4508 2172 10692 6644 1268 9668 5540 3524 11516 7508 692 9116 4860 2780 10836 7148 1572 10060 5828 3732 11940 8036 257 8395 4595 2187 10693 6465 1281 9669 5149 3525 11691 7417 689 8819 4907 2563 11065 7063 1981 9935 6021 3721 12253 8013 270 8218 4170 2202 10694 6286 1294 9670 5270 3526 11354 7326 686 9034 4954 2858 10782 6978 1878 9810 5702 3710 12054 7990 283 8553 4257 2217 10695 6619 1307 9671 5391 3527 11529 7235 683 8737 5001 2641 11011 6893 1775 10197 5895 3699 11855 7967 296 8376 4344 2232 10696 6440 1320 9672 5512 3528 11704 7656 680 8952 5048 2936 11240 6808 1672 10072 6088 3688 12168 7944 309 8199 4431 2247 10697 6261 1333 9673 5121 3529 11367 7565 677 9167 5095 2719 10957 6723 1569 9947 5769 3677 11969 7921 322 8534 4518 2262 10698 6594 1346 9674 5242 3530 11542 7474 674 8870 4630 3014 11186 7150 1978 9822 5962 3666 7898 335 8357 4605 2277 10699 6415 1359 9675 5363 3531 11717 7383 671 9085 4677 2797 10903 7065 1875 10209 5643 3655 12083 7875 348 8692 4180 2292 10700 6236 1372 9676 5484 3532 11380 7292 668 8788 4724 2580 11132 6980 1772 10084 5836 3644 11884 7852 361 8515 4267 2307 10701 6569 1385 9677 5605 3533 11555 7201 665 9003 4771 2875 10849 6895 1669 9959 6029 3633 12197 7829 374 8338 4354 2322 10702 6390 1398 9678 5214 3534 11730 7622 662 8706 4818 2658 11078 6810 1566 9834 5710 3622 11998 7806 387 8673 4441 2337 10703 6211 1411 9679 5335 3535 11393 7531 659 8921 4865 2953 10795 6725 1975 10221 5903 3611 11799 7783 400 8496 4528 2352 10704 6544 1424 9680 5456 3536 11568 7440 656 9136 4912 2736 11024 7152 1872 10096 6096 3600 12112 7760 413 8319 4103 2367 10705 6365 1437 9681 5577 3537 11743 7349 653 8839 4959 3031 11253 7067 1769 9971 5777 3589 11913 7737 426 8654 4190 2382 10706 6186 1450 9682 5186 3538 11406 7258 650 9054 5006 2814 10970 6982 1666 9846 5970 4090 12226 7714 439 8477 4277 2397 10707 6519 1463 9683 5307 3539 11581 7679 647 8757 5053 2597 11199 6897 1563 10233 5651 4079 12027 7691 452 8300 4364 2412 10708 6340 1476 9684 5428 3540 11756 7588 644 8972 5100 2892 10916 6812 1972 10108 5844 4068 11828 8180 465 8635 4451 2427 10709 6161 1489 9685 5549 3541 11419 7497 641 9187 4635 2675 11145 6727 1869 9983 6037 4057 12141 8157 478 8458 4538 2442 10710 6494 1502 9686 5158 3542 11594 7406 638 8890 4682 2970 10862 7154 1766 9858 5718 4046 11942 8134 491 8281 4113 2457 10711 6315 1515 9687 5279 3543 11769 7315 635 9105 4729 2753 11091 7069 1663 9733 5911 4035 12255 8111 504 8616 4200 2472 10712 6648 1528 9688 5400 3544 11432 7224 632 8808 4776 3048 10808 6984 1560 10120 6104 4024 12056 8088 5 8439 4287 2487 10713 6469 1029 9689 5521 3545 11607 7645 629 9023 4823 2831 11037 6899 1969 9995 5785 4013 11857 8065 18 8262 4374 2502 10714 6290 1042 9690 5130 3546 11270 7554 626 8726 4870 2614 10754 6814 1866 9870 5978 4002 12170 8042 31 8597 4461 2517 10715 6623 1055 9691 5251 3547 11445 7463 623 8941 4917 2909 10983 6729 1763 9745 5659 3991 11971 8019 44 8420 4548 2532 10716 6444 1068 9692 5372 3548 11620 7372 620 9156 4964 2692 11212 7156 1660 10132 5852 3980 7996 57 8243 4123 2547 10717 6265 1081 9693 5493 3549 11283 7281 617 8859 5011 2987 10929 7071 1557 10007 6045 3969 12085 7973 70 8578 4210 2050 10718 6598 1094 9694 5614 3550 11458 7190 614 9074 5058 2770 11158 6986 1966 9882 5726 3958 11886 7950 83 8401 4297 2065 10719 6419 1107 9695 5223 3551 11633 7611 611 8777 5105 3065 10875 6901 1863 9757 5919 3947 12199 7927 96 8224 4384 2080 10720 6240 1120 9696 5344 3552 11296 7520 608 8992 4640 2848 11104 6816 1760 10144 6112 3936 12000 7904 109 8559 4471 2095 10721 6573 1133 9697 5465 3553 11471 7429 605 9207 4687 2631 10821 6731 1657 10019 5793 3925 11801 7881 122 8382 4558 2110 10722 6394 1146 9698 5586 3554 11646 7338 602 8910 4734 2926 11050 7158 1554 9894 5986 3914 12114 7858 135 8205 4133 2125 10723 6215 1159 9699 5195 3555 11309 7247 599 9125 4781 2709 10767 7073 1963 9769 5667 3903 11915 7835 148 8540 4220 2140 10724 6548 1172 9700 5316 3556 11484 7668 596 8828 4828 3004 10996 6988 1860 10156 5860 3892 12228 7812 161 8363 4307 2155 10725 6369 1185 9701 5437 3557 11659 7577 593 9043 4875 2787 11225 6903 1757 10031 6053 3881 12029 7789 174 8698 4394 2170 10726 6190 1198 9702 5558 3558 11322 7486 590 8746 4922 2570 10942 6818 1654 9906 5734 3870 11830 7766 187 8521 4481 2185 10727 6523 1211 9703 5167 3559 11497 7395 587 8961 4969 2865 11171 6733 1551 9781 5927 3859 12143 7743 200 8344 4568 2200 10728 6344 1224 9704 5288 3560 11672 7304 584 9176 5016 2648 10888 7160 1960 10168 6120 3848 11944 7720 213 8679 4143 2215 10729 6165 1237 9705 5409 3561 11335 7213 581 8879 5063 2943 11117 7075 1857 10043 5801 3837 12257 7697 226 8502 4230 2230 10730 6498 1250 9706 5530 3562 11510 7634 578 9094 5110 2726 10834 6990 1754 9918 5994 3826 12058 8186 239 8325 4317 2245 10731 6319 1263 9707 5139 3563 11685 7543 575 8797 4645 3021 11063 6905 1651 9793 5675 3815 11859 8163 252 8660 4404 2260 10732 6652 1276 9708 5260 3564 11348 7452 572 9012 4692 2804 10780 6820 1548 10180 5868 3804 12172 8140 265 8483 4491 2275 10733 6473 1289 9709 5381 3565 11523 7361 569 8715 4739 2587 11009 6735 1957 10055 6061 3793 11973 8117 278 8306 4578 2290 10734 6294 1302 9710 5502 3566 11698 7270 566 8930 4786 2882 11238 7162 1854 9930 5742 3782 8094 291 8641 4153 2305 10735 6627 1315 9711 5623 3567 11361 7179 563 9145 4833 2665 10955 7077 1751 9805 5935 3771 12087 8071 304 8464 4240 2320 10736 6448 1328 9712 5232 3568 11536 7600 560 8848 4880 2960 11184 6992 1648 10192 6128 3760 11888 8048 317 8287 4327 2335 10737 6269 1341 9713 5353 3569 11711 7509 557 9063 4927 2743 10901 6907 1545 10067 5809 3749 12201 8025 330 8622 4414 2350 10738 6602 1354 9714 5474 3570 11374 7418 554 8766 4974 3038 11130 6822 1954 9942 6002 3738 12002 8002 343 8445 4501 2365 10739 6423 1367 9715 5595 3571 11549 7327 551 8981 5021 2821 10847 6737 1851 9817 5683 3727 11803 7979 356 8268 4588 2380 10740 6244 1380 9716 5204 3572 11724 7236 548 9196 5068 2604 11076 7164 1748 10204 5876 3716 12116 7956 369 8603 4163 2395 10741 6577 1393 9717 5325 3573 11387 7657 545 8899 5115 2899 10793 7079 1645 10079 6069 3705 11917 7933 382 8426 4250 2410 10742 6398 1406 9718 5446 3574 11562 7566 542 9114 4650 2682 11022 6994 1542 9954 5750 3694 12230 7910 395 8249 4337 2425 10743 6219 1419 9719 5567 3575 11737 7475 539 8817 4697 2977 11251 6909 1951 9829 5943 3683 12031 7887 408 8584 4424 2440 10744 6552 1432 9720 5176 3576 11400 7384 536 9032 4744 2760 10968 6824 1848 10216 6136 3672 11832 7864 421 8407 4511 2455 10745 6373 1445 9721 5297 3577 11575 7293 533 8735 4791 3055 11197 6739 1745 10091 5817 3661 12145 7841 434 8230 4598 2470 10746 6194 1458 9722 5418 3578 11750 7202 530 8950 4838 2838 10914 7166 1642 9966 6010 3650 11946 7818 447 8565 4173 2485 10747 6527 1471 9723 5539 3579 11413 7623 527 9165 4885 2621 11143 7081 1539 9841 5691 3639 12259 7795 460 8388 4260 2500 10748 6348 1484 9724 5148 3580 11588 7532 524 8868 4932 2916 10860 6996 1948 10228 5884 3628 12060 7772 473 8211 4347 2515 10749 6169 1497 9725 5269 3581 11763 7441 521 9083 4979 2699 11089 6911 1845 10103 6077 3617 11861 7749 486 8546 4434 2530 10750 6502 1510 9726 5390 3582 11426 7350 518 8786 5026 2994 10806 6826 1742 9978 5758 3606 12174 7726 499 8369 4521 2545 10751 6323 1523 9727 5511 3583 11601 7259 515 9001 5073 2777 11035 6741 1639 9853 5951 3595 11975 7703 0 8192 4096 2048 10240 6144 1024 9216 5120 3072 11264 7168 512 8704 4608 2560 10752 6656 1536 9728 5632 3584 11776 7680 codec2-0.0~git20230330.db1c21c/data/interleavers/imap1530000066400000000000000000000146141441116725500221570ustar00rootroot000000000000003 1051 527 285 1285 769 131 1161 655 401 1413 935 83 1115 591 365 1349 865 205 1225 719 465 1477 975 6 1078 542 314 1290 770 134 1170 670 418 1418 910 102 1142 606 346 1354 834 218 1234 734 482 1482 990 9 1041 557 279 1295 771 137 1179 685 435 1423 949 121 1105 621 327 1359 867 231 1243 749 499 1487 1005 12 1068 572 308 1300 772 140 1188 700 388 1428 924 76 1132 636 372 1364 836 244 1252 764 452 1492 1020 15 1031 523 273 1305 773 143 1197 651 405 1433 899 95 1095 587 353 1369 869 193 1261 715 469 1497 971 18 1058 538 302 1310 774 146 1206 666 422 1438 938 114 1122 602 334 1374 838 206 1270 730 486 1502 986 21 1085 553 267 1315 775 149 1215 681 439 1443 913 69 1149 617 379 1379 871 219 1279 745 503 1507 1001 24 1048 568 296 1320 776 152 1160 696 392 1448 952 88 1112 632 360 1384 840 232 1224 760 456 1512 1016 27 1075 519 261 1325 777 155 1169 647 409 1453 927 107 1139 583 341 1389 873 245 1233 711 473 1517 967 30 1038 534 290 1330 778 158 1178 662 426 1458 902 126 1102 598 322 1394 842 194 1242 726 490 1522 982 33 1065 549 319 1335 779 161 1187 677 443 1463 941 81 1129 613 367 1399 875 207 1251 741 507 1527 997 36 1028 564 284 1340 780 164 1196 692 396 1468 916 100 1092 628 348 1404 844 220 1260 756 460 1012 39 1055 515 313 1281 781 167 1205 643 413 1409 955 119 1119 579 329 1345 877 233 1269 707 477 1473 963 42 1082 530 278 1286 782 170 1214 658 430 1414 930 74 1146 594 374 1350 846 246 1278 722 494 1478 978 45 1045 545 307 1291 783 173 1159 673 447 1419 905 93 1109 609 355 1355 879 195 1223 737 511 1483 993 48 1072 560 272 1296 784 176 1168 688 400 1424 944 112 1136 624 336 1360 848 208 1232 752 464 1488 1008 51 1035 575 301 1301 785 179 1177 703 417 1429 919 67 1099 639 381 1365 881 221 1241 767 481 1493 1023 54 1062 526 266 1306 786 182 1186 654 434 1434 958 86 1126 590 362 1370 850 234 1250 718 498 1498 974 57 1025 541 295 1311 787 185 1195 669 387 1439 933 105 1089 605 343 1375 883 247 1259 733 451 1503 989 60 1052 556 260 1316 788 188 1204 684 404 1444 908 124 1116 620 324 1380 852 196 1268 748 468 1508 1004 63 1079 571 289 1321 789 191 1213 699 421 1449 947 79 1143 635 369 1385 885 209 1277 763 485 1513 1019 2 1042 522 318 1326 790 130 1158 650 438 1454 922 98 1106 586 350 1390 854 222 1222 714 502 1518 970 5 1069 537 283 1331 791 133 1167 665 391 1459 897 117 1133 601 331 1395 887 235 1231 729 455 1523 985 8 1032 552 312 1336 792 136 1176 680 408 1464 936 72 1096 616 376 1400 856 248 1240 744 472 1528 1000 11 1059 567 277 1341 793 139 1185 695 425 1469 911 91 1123 631 357 1405 889 197 1249 759 489 1015 14 1086 518 306 1282 794 142 1194 646 442 1410 950 110 1150 582 338 1346 858 210 1258 710 506 1474 966 17 1049 533 271 1287 795 145 1203 661 395 1415 925 65 1113 597 383 1351 891 223 1267 725 459 1479 981 20 1076 548 300 1292 796 148 1212 676 412 1420 900 84 1140 612 364 1356 860 236 1276 740 476 1484 996 23 1039 563 265 1297 797 151 1157 691 429 1425 939 103 1103 627 345 1361 893 249 1221 755 493 1489 1011 26 1066 514 294 1302 798 154 1166 642 446 1430 914 122 1130 578 326 1366 862 198 1230 706 510 1494 962 29 1029 529 259 1307 799 157 1175 657 399 1435 953 77 1093 593 371 1371 895 211 1239 721 463 1499 977 32 1056 544 288 1312 800 160 1184 672 416 1440 928 96 1120 608 352 1376 864 224 1248 736 480 1504 992 35 1083 559 317 1317 801 163 1193 687 433 1445 903 115 1147 623 333 1381 833 237 1257 751 497 1509 1007 38 1046 574 282 1322 802 166 1202 702 386 1450 942 70 1110 638 378 1386 866 250 1266 766 450 1514 1022 41 1073 525 311 1327 803 169 1211 653 403 1455 917 89 1137 589 359 1391 835 199 1275 717 467 1519 973 44 1036 540 276 1332 804 172 1156 668 420 1460 956 108 1100 604 340 1396 868 212 1220 732 484 1524 988 47 1063 555 305 1337 805 175 1165 683 437 1465 931 127 1127 619 321 1401 837 225 1229 747 501 1529 1003 50 1026 570 270 1342 806 178 1174 698 390 1470 906 82 1090 634 366 1406 870 238 1238 762 454 1018 53 1053 521 299 1283 807 181 1183 649 407 1411 945 101 1117 585 347 1347 839 251 1247 713 471 1475 969 56 1080 536 264 1288 808 184 1192 664 424 1416 920 120 1144 600 328 1352 872 200 1256 728 488 1480 984 59 1043 551 293 1293 809 187 1201 679 441 1421 959 75 1107 615 373 1357 841 213 1265 743 505 1485 999 62 1070 566 258 1298 810 190 1210 694 394 1426 934 94 1134 630 354 1362 874 226 1274 758 458 1490 1014 1 1033 517 287 1303 811 129 1155 645 411 1431 909 113 1097 581 335 1367 843 239 1219 709 475 1495 965 4 1060 532 316 1308 812 132 1164 660 428 1436 948 68 1124 596 380 1372 876 252 1228 724 492 1500 980 7 1087 547 281 1313 813 135 1173 675 445 1441 923 87 1151 611 361 1377 845 201 1237 739 509 1505 995 10 1050 562 310 1318 814 138 1182 690 398 1446 898 106 1114 626 342 1382 878 214 1246 754 462 1510 1010 13 1077 513 275 1323 815 141 1191 641 415 1451 937 125 1141 577 323 1387 847 227 1255 705 479 1515 961 16 1040 528 304 1328 816 144 1200 656 432 1456 912 80 1104 592 368 1392 880 240 1264 720 496 1520 976 19 1067 543 269 1333 817 147 1209 671 385 1461 951 99 1131 607 349 1397 849 253 1273 735 449 1525 991 22 1030 558 298 1338 818 150 1154 686 402 1466 926 118 1094 622 330 1402 882 202 1218 750 466 1006 25 1057 573 263 1343 819 153 1163 701 419 1471 901 73 1121 637 375 1407 851 215 1227 765 483 1021 28 1084 524 292 1284 820 156 1172 652 436 1412 940 92 1148 588 356 1348 884 228 1236 716 500 1476 972 31 1047 539 257 1289 821 159 1181 667 389 1417 915 111 1111 603 337 1353 853 241 1245 731 453 1481 987 34 1074 554 286 1294 822 162 1190 682 406 1422 954 66 1138 618 382 1358 886 254 1254 746 470 1486 1002 37 1037 569 315 1299 823 165 1199 697 423 1427 929 85 1101 633 363 1363 855 203 1263 761 487 1491 1017 40 1064 520 280 1304 824 168 1208 648 440 1432 904 104 1128 584 344 1368 888 216 1272 712 504 1496 968 43 1027 535 309 1309 825 171 1153 663 393 1437 943 123 1091 599 325 1373 857 229 1217 727 457 1501 983 46 1054 550 274 1314 826 174 1162 678 410 1442 918 78 1118 614 370 1378 890 242 1226 742 474 1506 998 49 1081 565 303 1319 827 177 1171 693 427 1447 957 97 1145 629 351 1383 859 255 1235 757 491 1511 1013 52 1044 516 268 1324 828 180 1180 644 444 1452 932 116 1108 580 332 1388 892 204 1244 708 508 1516 964 55 1071 531 297 1329 829 183 1189 659 397 1457 907 71 1135 595 377 1393 861 217 1253 723 461 1521 979 58 1034 546 262 1334 830 186 1198 674 414 1462 946 90 1098 610 358 1398 894 230 1262 738 478 1526 994 61 1061 561 291 1339 831 189 1207 689 431 1467 921 109 1125 625 339 1403 863 243 1271 753 495 1009 0 1024 512 256 1280 768 128 1152 640 384 1408 896 64 1088 576 320 1344 832 192 1216 704 448 1472 960 codec2-0.0~git20230330.db1c21c/data/interleavers/imap20730000066400000000000000000003351661441116725500222520ustar00rootroot000000000000001 16733 8495 5069 13049 2501 18527 10481 6641 15105 1095 17965 9413 5529 13647 3749 20173 11577 7357 15435 2 17082 8798 5018 12786 2954 18622 10722 7138 14850 1166 17498 9610 5938 13982 3402 19866 11890 7546 15510 3 16407 9101 4967 20541 12523 2383 18717 10963 6611 14595 1237 18055 9807 5323 14317 4079 19559 12203 7735 15585 4 16756 8380 4916 13284 2836 18812 11204 7108 14340 1308 17588 10004 5732 13628 3732 20276 11492 7924 15660 5 17105 8683 4865 13021 2265 18907 10421 6581 15109 1379 18145 10201 6141 13963 3385 19969 11805 8113 15735 6 16430 8986 4814 20602 12758 2718 19002 10662 7078 14854 1450 17678 9374 5526 14298 4062 19662 12118 7278 15810 7 16779 8265 4763 12495 2147 19097 10903 6551 14599 1521 18235 9571 5935 13609 3715 20379 11407 7467 15885 8 17128 8568 4712 13256 2600 19192 11144 7048 14344 1592 17768 9768 5320 13944 3368 20072 11720 7656 15960 9 16453 8871 4661 20663 12993 3053 19287 10361 6521 15113 1663 18325 9965 5729 14279 4045 19765 12033 7845 16035 10 16802 9174 4610 12730 2482 19382 10602 7018 14858 1734 17858 10162 6138 13590 3698 19458 11322 8034 16110 11 17151 8453 4559 12467 2935 18453 10843 6491 14603 1805 18415 9335 5523 13925 3351 20175 11635 7199 16185 12 16476 8756 4508 20724 13228 2364 18548 11084 6988 14348 1876 17948 9532 5932 14260 4028 19868 11948 7388 16260 13 16825 9059 4457 12965 2817 18643 10301 6461 15117 1947 17481 9729 5317 13571 3681 19561 12261 7577 16335 14 17174 8338 4406 12702 2246 18738 10542 6958 14862 2018 18038 9926 5726 13906 3334 20278 11550 7766 15386 15 16499 8641 4355 12439 2699 18833 10783 6431 14607 1065 17571 10123 6135 14241 4011 19971 11863 7955 15461 16 16848 8944 4304 13200 2128 18928 11024 6928 14352 1136 18128 9296 5520 13552 3664 19664 12176 8144 15536 17 17197 8223 4253 12937 2581 19023 10241 6401 15121 1207 17661 9493 5929 13887 3317 20381 11465 7309 15611 18 16522 8526 4202 12674 3034 19118 10482 6898 14866 1278 18218 9690 5314 14222 3994 20074 11778 7498 15686 19 16871 8829 4151 20525 12411 2463 19213 10723 6371 14611 1349 17751 9887 5723 13533 3647 19767 12091 7687 15761 20 17220 9132 4100 13172 2916 19308 10964 6868 14356 1420 18308 10084 6132 13868 3300 19460 11380 7876 15836 21 16545 8411 5073 12909 2345 19403 11205 6341 15125 1491 17841 9257 5517 14203 3977 20177 11693 8065 15911 22 16894 8714 5022 20586 12646 2798 18474 10422 6838 14870 1562 18398 9454 5926 13514 3630 19870 12006 7230 15986 23 17243 9017 4971 12383 2227 18569 10663 6311 14615 1633 17931 9651 5311 13849 3283 19563 11295 7419 16061 24 16568 8296 4920 13144 2680 18664 10904 6808 14360 1704 17464 9848 5720 14184 3960 20280 11608 7608 16136 25 16917 8599 4869 20647 12881 2109 18759 11145 6281 15129 1775 18021 10045 6129 13495 3613 19973 11921 7797 16211 26 17266 8902 4818 12618 2562 18854 10362 6778 14874 1846 17554 9218 5514 13830 3266 19666 12234 7986 16286 27 16591 9205 4767 12355 3015 18949 10603 6251 14619 1917 18111 9415 5923 14165 3943 20383 11523 8175 16361 28 16940 8484 4716 20708 13116 2444 19044 10844 6748 14364 1988 17644 9612 5308 13476 3596 20076 11836 7340 15412 29 17289 8787 4665 12853 2897 19139 11085 6221 15133 1035 18201 9809 5717 13811 3249 19769 12149 7529 15487 30 16614 9090 4614 12590 2326 19234 10302 6718 14878 1106 17734 10006 6126 14146 3926 19462 11438 7718 15562 31 16963 8369 4563 12327 2779 19329 10543 6191 14623 1177 18291 10203 5511 13457 3579 20179 11751 7907 15637 32 17312 8672 4512 13088 2208 19424 10784 6688 14368 1248 17824 9376 5920 13792 3232 19872 12064 8096 15712 33 16637 8975 4461 12825 2661 18495 11025 6161 15137 1319 18381 9573 5305 14127 3909 19565 11353 7261 15787 34 16986 8254 4410 12562 2090 18590 10242 6658 14882 1390 17914 9770 5714 13438 3562 20282 11666 7450 15862 35 17335 8557 4359 20509 12299 2543 18685 10483 7155 14627 1461 17447 9967 6123 13773 3215 19975 11979 7639 15937 36 16660 8860 4308 13060 2996 18780 10724 6628 14372 1532 18004 10164 5508 14108 3892 19668 11268 7828 16012 37 17009 9163 4257 12797 2425 18875 10965 7125 15141 1603 17537 9337 5917 13419 3545 20385 11581 8017 16087 38 17358 8442 4206 20570 12534 2878 18970 11206 6598 14886 1674 18094 9534 5302 13754 3198 20078 11894 7182 16162 39 16683 8745 4155 13295 2307 19065 10423 7095 14631 1745 17627 9731 5711 14089 3875 19771 12207 7371 16237 40 17032 9048 4104 13032 2760 19160 10664 6568 14376 1816 18184 9928 6120 13400 3528 19464 11496 7560 16312 41 17381 8327 5077 20631 12769 2189 19255 10905 7065 15145 1887 17717 10125 5505 13735 3181 20181 11809 7749 15363 42 16706 8630 5026 12506 2642 19350 11146 6538 14890 1958 18274 9298 5914 14070 3858 19874 12122 7938 15438 43 17055 8933 4975 13267 2071 19445 10363 7035 14635 2029 17807 9495 5299 13381 3511 19567 11411 8127 15513 44 17404 8212 4924 20692 13004 2524 18516 10604 6508 14380 1076 18364 9692 5708 13716 3164 20284 11724 7292 15588 45 16729 8515 4873 12741 2977 18611 10845 7005 15149 1147 17897 9889 6117 14051 3841 19977 12037 7481 15663 46 17078 8818 4822 12478 2406 18706 11086 6478 14894 1218 17430 10086 5502 13362 3494 19670 11326 7670 15738 47 16403 9121 4771 13239 2859 18801 10303 6975 14639 1289 17987 9259 5911 13697 3147 20387 11639 7859 15813 48 16752 8400 4720 12976 2288 18896 10544 6448 14384 1360 17520 9456 5296 14032 3824 20080 11952 8048 15888 49 17101 8703 4669 12713 2741 18991 10785 6945 15153 1431 18077 9653 5705 13343 3477 19773 12265 7213 15963 50 16426 9006 4618 12450 2170 19086 11026 6418 14898 1502 17610 9850 6114 13678 3130 19466 11554 7402 16038 51 16775 8285 4567 20493 13211 2623 19181 10243 6915 14643 1573 18167 10047 5499 14013 3807 20183 11867 7591 16113 52 17124 8588 4516 12948 2052 19276 10484 6388 14388 1644 17700 9220 5908 13324 3460 19876 12180 7780 16188 53 16449 8891 4465 12685 2505 19371 10725 6885 15157 1715 18257 9417 5293 13659 3113 19569 11469 7969 16263 54 16798 9194 4414 20554 12422 2958 18442 10966 6358 14902 1786 17790 9614 5702 13994 3790 20286 11782 8158 16338 55 17147 8473 4363 13183 2387 18537 11207 6855 14647 1857 18347 9811 6111 14329 3443 19979 12095 7323 15389 56 16472 8776 4312 12920 2840 18632 10424 6328 14392 1928 17880 10008 5496 13640 3096 19672 11384 7512 15464 57 16821 9079 4261 20615 12657 2269 18727 10665 6825 15161 1999 17413 10205 5905 13975 3773 20389 11697 7701 15539 58 17170 8358 4210 12394 2722 18822 10906 6298 14906 1046 17970 9378 5290 14310 3426 20082 12010 7890 15614 59 16495 8661 4159 13155 2151 18917 11147 6795 14651 1117 17503 9575 5699 13621 3079 19775 11299 8079 15689 60 16844 8964 4108 20676 12892 2604 19012 10364 6268 14396 1188 18060 9772 6108 13956 3756 19468 11612 7244 15764 61 17193 8243 5081 12629 3057 19107 10605 6765 15165 1259 17593 9969 5493 14291 3409 20185 11925 7433 15839 62 16518 8546 5030 12366 2486 19202 10846 6238 14910 1330 18150 10166 5902 13602 4086 19878 12238 7622 15914 63 16867 8849 4979 13127 2939 19297 11087 6735 14655 1401 17683 9339 5287 13937 3739 19571 11527 7811 15989 64 17216 9152 4928 12864 2368 19392 10304 6208 14400 1472 18240 9536 5696 14272 3392 20288 11840 8000 16064 65 16541 8431 4877 12601 2821 18463 10545 6705 15169 1543 17773 9733 6105 13583 4069 19981 12153 8189 16139 66 16890 8734 4826 12338 2250 18558 10786 6178 14914 1614 18330 9930 5490 13918 3722 19674 11442 7354 16214 67 17239 9037 4775 13099 2703 18653 11027 6675 14659 1685 17863 10127 5899 14253 3375 20391 11755 7543 16289 68 16564 8316 4724 12836 2132 18748 10244 6148 14404 1756 18420 9300 5284 13564 4052 20084 12068 7732 16364 69 16913 8619 4673 12573 2585 18843 10485 6645 15173 1827 17953 9497 5693 13899 3705 19777 11357 7921 15415 70 17262 8922 4622 20538 12310 3038 18938 10726 7142 14918 1898 17486 9694 6102 14234 3358 19470 11670 8110 15490 71 16587 8201 4571 13071 2467 19033 10967 6615 14663 1969 18043 9891 5487 13545 4035 20187 11983 7275 15565 72 16936 8504 4520 12808 2920 19128 11208 7112 14408 2040 17576 10088 5896 13880 3688 19880 11272 7464 15640 73 17285 8807 4469 20599 12545 2349 19223 10425 6585 15177 1087 18133 9261 5281 14215 3341 19573 11585 7653 15715 74 16610 9110 4418 13306 2802 19318 10666 7082 14922 1158 17666 9458 5690 13526 4018 20290 11898 7842 15790 75 16959 8389 4367 13043 2231 19413 10907 6555 14667 1229 18223 9655 6099 13861 3671 19983 12211 8031 15865 76 17308 8692 4316 20660 12780 2684 18484 11148 7052 14412 1300 17756 9852 5484 14196 3324 19676 11500 7196 15940 77 16633 8995 4265 12517 2113 18579 10365 6525 15181 1371 18313 10049 5893 13507 4001 20393 11813 7385 16015 78 16982 8274 4214 13278 2566 18674 10606 7022 14926 1442 17846 9222 5278 13842 3654 20086 12126 7574 16090 79 17331 8577 4163 20721 13015 3019 18769 10847 6495 14671 1513 18403 9419 5687 14177 3307 19779 11415 7763 16165 80 16656 8880 4112 12752 2448 18864 11088 6992 14416 1584 17936 9616 6096 13488 3984 19472 11728 7952 16240 81 17005 9183 5085 12489 2901 18959 10305 6465 15185 1655 17469 9813 5481 13823 3637 20189 12041 8141 16315 82 17354 8462 5034 13250 2330 19054 10546 6962 14930 1726 18026 10010 5890 14158 3290 19882 11330 7306 15366 83 16679 8765 4983 12987 2783 19149 10787 6435 14675 1797 17559 10207 5275 13469 3967 19575 11643 7495 15441 84 17028 9068 4932 12724 2212 19244 11028 6932 14420 1868 18116 9380 5684 13804 3620 20292 11956 7684 15516 85 17377 8347 4881 12461 2665 19339 10245 6405 15189 1939 17649 9577 6093 14139 3273 19985 12269 7873 15591 86 16702 8650 4830 20522 13222 2094 19434 10486 6902 14934 2010 18206 9774 5478 13450 3950 19678 11558 8062 15666 87 17051 8953 4779 12959 2547 18505 10727 6375 14679 1057 17739 9971 5887 13785 3603 20395 11871 7227 15741 88 17400 8232 4728 12696 3000 18600 10968 6872 14424 1128 18296 10168 5272 14120 3256 20088 12184 7416 15816 89 16725 8535 4677 20583 12433 2429 18695 11209 6345 15193 1199 17829 9341 5681 13431 3933 19781 11473 7605 15891 90 17074 8838 4626 13194 2882 18790 10426 6842 14938 1270 18386 9538 6090 13766 3586 19474 11786 7794 15966 91 16399 9141 4575 12931 2311 18885 10667 6315 14683 1341 17919 9735 5475 14101 3239 20191 12099 7983 16041 92 16748 8420 4524 20644 12668 2764 18980 10908 6812 14428 1412 17452 9932 5884 13412 3916 19884 11388 8172 16116 93 17097 8723 4473 12405 2193 19075 11149 6285 15197 1483 18009 10129 5269 13747 3569 19577 11701 7337 16191 94 16422 9026 4422 13166 2646 19170 10366 6782 14942 1554 17542 9302 5678 14082 3222 20294 12014 7526 16266 95 16771 8305 4371 20705 12903 2075 19265 10607 6255 14687 1625 18099 9499 6087 13393 3899 19987 11303 7715 16341 96 17120 8608 4320 12640 2528 19360 10848 6752 14432 1696 17632 9696 5472 13728 3552 19680 11616 7904 15392 97 16445 8911 4269 12377 2981 19455 11089 6225 15201 1767 18189 9893 5881 14063 3205 20397 11929 8093 15467 98 16794 9214 4218 13138 2410 18526 10306 6722 14946 1838 17722 10090 5266 13374 3882 20090 12242 7258 15542 99 17143 8493 4167 12875 2863 18621 10547 6195 14691 1909 18279 9263 5675 13709 3535 19783 11531 7447 15617 100 16468 8796 4116 12612 2292 18716 10788 6692 14436 1980 17812 9460 6084 14044 3188 19476 11844 7636 15692 101 16817 9099 5089 12349 2745 18811 11029 6165 15205 1027 18369 9657 5469 13355 3865 20193 12157 7825 15767 102 17166 8378 5038 20506 13110 2174 18906 10246 6662 14950 1098 17902 9854 5878 13690 3518 19886 11446 8014 15842 103 16491 8681 4987 12847 2627 19001 10487 7159 14695 1169 17435 10051 5263 14025 3171 19579 11759 7179 15917 104 16840 8984 4936 12584 2056 19096 10728 6632 14440 1240 17992 9224 5672 13336 3848 20296 12072 7368 15992 105 17189 8263 4885 20567 12321 2509 19191 10969 7129 15209 1311 17525 9421 6081 13671 3501 19989 11361 7557 16067 106 16514 8566 4834 13082 2962 19286 11210 6602 14954 1382 18082 9618 5466 14006 3154 19682 11674 7746 16142 107 16863 8869 4783 12819 2391 19381 10427 7099 14699 1453 17615 9815 5875 13317 3831 20399 11987 7935 16217 108 17212 9172 4732 20628 12556 2844 18452 10668 6572 14444 1524 18172 10012 5260 13652 3484 20092 11276 8124 16292 109 16537 8451 4681 12293 2273 18547 10909 7069 15213 1595 17705 10209 5669 13987 3137 19785 11589 7289 16367 110 16886 8754 4630 13054 2726 18642 11150 6542 14958 1666 18262 9382 6078 14322 3814 19478 11902 7478 15418 111 17235 9057 4579 20689 12791 2155 18737 10367 7039 14703 1737 17795 9579 5463 13633 3467 20195 12215 7667 15493 112 16560 8336 4528 12528 2608 18832 10608 6512 14448 1808 18352 9776 5872 13968 3120 19888 11504 7856 15568 113 16909 8639 4477 13289 3061 18927 10849 7009 15217 1879 17885 9973 5257 14303 3797 19581 11817 8045 15643 114 17258 8942 4426 13026 2490 19022 11090 6482 14962 1950 17418 10170 5666 13614 3450 20298 12130 7210 15718 115 16583 8221 4375 12763 2943 19117 10307 6979 14707 2021 17975 9343 6075 13949 3103 19991 11419 7399 15793 116 16932 8524 4324 12500 2372 19212 10548 6452 14452 1068 17508 9540 5460 14284 3780 19684 11732 7588 15868 117 17281 8827 4273 13261 2825 19307 10789 6949 15221 1139 18065 9737 5869 13595 3433 20401 12045 7777 15943 118 16606 9130 4222 20490 12998 2254 19402 11030 6422 14966 1210 17598 9934 5254 13930 3086 20094 11334 7966 16018 119 16955 8409 4171 12735 2707 18473 10247 6919 14711 1281 18155 10131 5663 14265 3763 19787 11647 8155 16093 120 17304 8712 4120 12472 2136 18568 10488 6392 14456 1352 17688 9304 6072 13576 3416 19480 11960 7320 16168 121 16629 9015 5093 20551 13233 2589 18663 10729 6889 15225 1423 18245 9501 5457 13911 4093 20197 12273 7509 16243 122 16978 8294 5042 12970 3042 18758 10970 6362 14970 1494 17778 9698 5866 14246 3746 19890 11562 7698 16318 123 17327 8597 4991 12707 2471 18853 11211 6859 14715 1565 18335 9895 5251 13557 3399 19583 11875 7887 15369 124 16652 8900 4940 20612 12444 2924 18948 10428 6332 14460 1636 17868 10092 5660 13892 4076 20300 12188 8076 15444 125 17001 9203 4889 13205 2353 19043 10669 6829 15229 1707 18425 9265 6069 14227 3729 19993 11477 7241 15519 126 17350 8482 4838 12942 2806 19138 10910 6302 14974 1778 17958 9462 5454 13538 3382 19686 11790 7430 15594 127 16675 8785 4787 20673 12679 2235 19233 11151 6799 14719 1849 17491 9659 5863 13873 4059 20403 12103 7619 15669 128 17024 9088 4736 12416 2688 19328 10368 6272 14464 1920 18048 9856 5248 14208 3712 20096 11392 7808 15744 129 17373 8367 4685 13177 2117 19423 10609 6769 15233 1991 17581 10053 5657 13519 3365 19789 11705 7997 15819 130 16698 8670 4634 12914 2570 18494 10850 6242 14978 1038 18138 9226 6066 13854 4042 19482 12018 8186 15894 131 17047 8973 4583 12651 3023 18589 11091 6739 14723 1109 17671 9423 5451 14189 3695 20199 11307 7351 15969 132 17396 8252 4532 12388 2452 18684 10308 6212 14468 1180 18228 9620 5860 13500 3348 19892 11620 7540 16044 133 16721 8555 4481 13149 2905 18779 10549 6709 15237 1251 17761 9817 5245 13835 4025 19585 11933 7729 16119 134 17070 8858 4430 12886 2334 18874 10790 6182 14982 1322 18318 10014 5654 14170 3678 20302 12246 7918 16194 135 16395 9161 4379 12623 2787 18969 11031 6679 14727 1393 17851 10211 6063 13481 3331 19995 11535 8107 16269 136 16744 8440 4328 12360 2216 19064 10248 6152 14472 1464 18408 9384 5448 13816 4008 19688 11848 7272 16344 137 17093 8743 4277 20535 13121 2669 19159 10489 6649 15241 1535 17941 9581 5857 14151 3661 20405 12161 7461 15395 138 16418 9046 4226 12858 2098 19254 10730 7146 14986 1606 17474 9778 5242 13462 3314 20098 11450 7650 15470 139 16767 8325 4175 12595 2551 19349 10971 6619 14731 1677 18031 9975 5651 13797 3991 19791 11763 7839 15545 140 17116 8628 4124 20596 12332 3004 19444 11212 7116 14476 1748 17564 10172 6060 14132 3644 19484 12076 8028 15620 141 16441 8931 5097 13093 2433 18515 10429 6589 15245 1819 18121 9345 5445 13443 3297 20201 11365 7193 15695 142 16790 8210 5046 12830 2886 18610 10670 7086 14990 1890 17654 9542 5854 13778 3974 19894 11678 7382 15770 143 17139 8513 4995 20657 12567 2315 18705 10911 6559 14735 1961 18211 9739 5239 14113 3627 19587 11991 7571 15845 144 16464 8816 4944 12304 2768 18800 11152 7056 14480 2032 17744 9936 5648 13424 3280 20304 11280 7760 15920 145 16813 9119 4893 13065 2197 18895 10369 6529 15249 1079 18301 10133 6057 13759 3957 19997 11593 7949 15995 146 17162 8398 4842 20718 12802 2650 18990 10610 7026 14994 1150 17834 9306 5442 14094 3610 19690 11906 8138 16070 147 16487 8701 4791 12539 2079 19085 10851 6499 14739 1221 18391 9503 5851 13405 3263 20407 12219 7303 16145 148 16836 9004 4740 13300 2532 19180 11092 6996 14484 1292 17924 9700 5236 13740 3940 20100 11508 7492 16220 149 17185 8283 4689 13037 2985 19275 10309 6469 15253 1363 17457 9897 5645 14075 3593 19793 11821 7681 16295 150 16510 8586 4638 12774 2414 19370 10550 6966 14998 1434 18014 10094 6054 13386 3246 19486 12134 7870 16370 151 16859 8889 4587 12511 2867 18441 10791 6439 14743 1505 17547 9267 5439 13721 3923 20203 11423 8059 15421 152 17208 9192 4536 13272 2296 18536 11032 6936 14488 1576 18104 9464 5848 14056 3576 19896 11736 7224 15496 153 16533 8471 4485 20519 13009 2749 18631 10249 6409 15257 1647 17637 9661 5233 13367 3229 19589 12049 7413 15571 154 16882 8774 4434 12746 2178 18726 10490 6906 15002 1718 18194 9858 5642 13702 3906 20306 11338 7602 15646 155 17231 9077 4383 12483 2631 18821 10731 6379 14747 1789 17727 10055 6051 14037 3559 19999 11651 7791 15721 156 16556 8356 4332 20580 13244 2060 18916 10972 6876 14492 1860 18284 9228 5436 13348 3212 19692 11964 7980 15796 157 16905 8659 4281 12981 2513 19011 11213 6349 15261 1931 17817 9425 5845 13683 3889 20409 12277 8169 15871 158 17254 8962 4230 12718 2966 19106 10430 6846 15006 2002 18374 9622 5230 14018 3542 20102 11566 7334 15946 159 16579 8241 4179 20641 12455 2395 19201 10671 6319 14751 1049 17907 9819 5639 13329 3195 19795 11879 7523 16021 160 16928 8544 4128 13216 2848 19296 10912 6816 14496 1120 17440 10016 6048 13664 3872 19488 12192 7712 16096 161 17277 8847 5101 12953 2277 19391 11153 6289 15265 1191 17997 10213 5433 13999 3525 20205 11481 7901 16171 162 16602 9150 5050 20702 12690 2730 18462 10370 6786 15010 1262 17530 9386 5842 14334 3178 19898 11794 8090 16246 163 16951 8429 4999 12427 2159 18557 10611 6259 14755 1333 18087 9583 5227 13645 3855 19591 12107 7255 16321 164 17300 8732 4948 13188 2612 18652 10852 6756 14500 1404 17620 9780 5636 13980 3508 20308 11396 7444 15372 165 16625 9035 4897 12925 3065 18747 11093 6229 15269 1475 18177 9977 6045 14315 3161 20001 11709 7633 15447 166 16974 8314 4846 12662 2494 18842 10310 6726 15014 1546 17710 10174 5430 13626 3838 19694 12022 7822 15522 167 17323 8617 4795 12399 2947 18937 10551 6199 14759 1617 18267 9347 5839 13961 3491 20411 11311 8011 15597 168 16648 8920 4744 13160 2376 19032 10792 6696 14504 1688 17800 9544 5224 14296 3144 20104 11624 7176 15672 169 16997 8199 4693 20503 12897 2829 19127 11033 6169 15273 1759 18357 9741 5633 13607 3821 19797 11937 7365 15747 170 17346 8502 4642 12634 2258 19222 10250 6666 15018 1830 17890 9938 6042 13942 3474 19490 12250 7554 15822 171 16671 8805 4591 12371 2711 19317 10491 7163 14763 1901 17423 10135 5427 14277 3127 20207 11539 7743 15897 172 17020 9108 4540 20564 13132 2140 19412 10732 6636 14508 1972 17980 9308 5836 13588 3804 19900 11852 7932 15972 173 17369 8387 4489 12869 2593 18483 10973 7133 15277 2043 17513 9505 5221 13923 3457 19593 12165 8121 16047 174 16694 8690 4438 12606 3046 18578 11214 6606 15022 1090 18070 9702 5630 14258 3110 20310 11454 7286 16122 175 17043 8993 4387 20625 12343 2475 18673 10431 7103 14767 1161 17603 9899 6039 13569 3787 20003 11767 7475 16197 176 17392 8272 4336 13104 2928 18768 10672 6576 14512 1232 18160 10096 5424 13904 3440 19696 12080 7664 16272 177 16717 8575 4285 12841 2357 18863 10913 7073 15281 1303 17693 9269 5833 14239 3093 20413 11369 7853 16347 178 17066 8878 4234 20686 12578 2810 18958 11154 6546 15026 1374 18250 9466 5218 13550 3770 20106 11682 8042 15398 179 16391 9181 4183 12315 2239 19053 10371 7043 14771 1445 17783 9663 5627 13885 3423 19799 11995 7207 15473 180 16740 8460 4132 13076 2692 19148 10612 6516 14516 1516 18340 9860 6036 14220 3076 19492 11284 7396 15548 181 17089 8763 5105 12813 2121 19243 10853 7013 15285 1587 17873 10057 5421 13531 3753 20209 11597 7585 15623 182 16414 9066 5054 12550 2574 19338 11094 6486 15030 1658 18430 9230 5830 13866 3406 19902 11910 7774 15698 183 16763 8345 5003 13311 3027 19433 10311 6983 14775 1729 17963 9427 5215 14201 4083 19595 12223 7963 15773 184 17112 8648 4952 13048 2456 18504 10552 6456 14520 1800 17496 9624 5624 13512 3736 20312 11512 8152 15848 185 16437 8951 4901 20487 12785 2909 18599 10793 6953 15289 1871 18053 9821 6033 13847 3389 20005 11825 7317 15923 186 16786 8230 4850 12522 2338 18694 11034 6426 15034 1942 17586 10018 5418 14182 4066 19698 12138 7506 15998 187 17135 8533 4799 13283 2791 18789 10251 6923 14779 2013 18143 10215 5827 13493 3719 20415 11427 7695 16073 188 16460 8836 4748 20548 13020 2220 18884 10492 6396 14524 1060 17676 9388 5212 13828 3372 20108 11740 7884 16148 189 16809 9139 4697 12757 2673 18979 10733 6893 15293 1131 18233 9585 5621 14163 4049 19801 12053 8073 16223 190 17158 8418 4646 12494 2102 19074 10974 6366 15038 1202 17766 9782 6030 13474 3702 19494 11342 7238 16298 191 16483 8721 4595 20609 13255 2555 19169 11215 6863 14783 1273 18323 9979 5415 13809 3355 20211 11655 7427 16373 192 16832 9024 4544 12992 3008 19264 10432 6336 14528 1344 17856 10176 5824 14144 4032 19904 11968 7616 15424 193 17181 8303 4493 12729 2437 19359 10673 6833 15297 1415 18413 9349 5209 13455 3685 19597 12281 7805 15499 194 16506 8606 4442 20670 12466 2890 19454 10914 6306 15042 1486 17946 9546 5618 13790 3338 20314 11570 7994 15574 195 16855 8909 4391 13227 2319 18525 11155 6803 14787 1557 17479 9743 6027 14125 4015 20007 11883 8183 15649 196 17204 9212 4340 12964 2772 18620 10372 6276 14532 1628 18036 9940 5412 13436 3668 19700 12196 7348 15724 197 16529 8491 4289 12701 2201 18715 10613 6773 15301 1699 17569 10137 5821 13771 3321 20417 11485 7537 15799 198 16878 8794 4238 12438 2654 18810 10854 6246 15046 1770 18126 9310 5206 14106 3998 20110 11798 7726 15874 199 17227 9097 4187 13199 2083 18905 11095 6743 14791 1841 17659 9507 5615 13417 3651 19803 12111 7915 15949 200 16552 8376 4136 12936 2536 19000 10312 6216 14536 1912 18216 9704 6024 13752 3304 19496 11400 8104 16024 201 16901 8679 5109 12673 2989 19095 10553 6713 15305 1983 17749 9901 5409 14087 3981 20213 11713 7269 16099 202 17250 8982 5058 12410 2418 19190 10794 6186 15050 1030 18306 10098 5818 13398 3634 19906 12026 7458 16174 203 16575 8261 5007 13171 2871 19285 11035 6683 14795 1101 17839 9271 5203 13733 3287 19599 11315 7647 16249 204 16924 8564 4956 20532 12908 2300 19380 10252 6156 14540 1172 18396 9468 5612 14068 3964 20316 11628 7836 16324 205 17273 8867 4905 12645 2753 18451 10493 6653 15309 1243 17929 9665 6021 13379 3617 20009 11941 8025 15375 206 16598 9170 4854 12382 2182 18546 10734 7150 15054 1314 17462 9862 5406 13714 3270 19702 12254 7190 15450 207 16947 8449 4803 20593 13143 2635 18641 10975 6623 14799 1385 18019 10059 5815 14049 3947 20419 11543 7379 15525 208 17296 8752 4752 12880 2064 18736 11216 7120 14544 1456 17552 9232 5200 13360 3600 20112 11856 7568 15600 209 16621 9055 4701 12617 2517 18831 10433 6593 15313 1527 18109 9429 5609 13695 3253 19805 12169 7757 15675 210 16970 8334 4650 20654 12354 2970 18926 10674 7090 15058 1598 17642 9626 6018 14030 3930 19498 11458 7946 15750 211 17319 8637 4599 13115 2399 19021 10915 6563 14803 1669 18199 9823 5403 13341 3583 20215 11771 8135 15825 212 16644 8940 4548 12852 2852 19116 11156 7060 14548 1740 17732 10020 5812 13676 3236 19908 12084 7300 15900 213 16993 8219 4497 20715 12589 2281 19211 10373 6533 15317 1811 18289 10217 5197 14011 3913 19601 11373 7489 15975 214 17342 8522 4446 12326 2734 19306 10614 7030 15062 1882 17822 9390 5606 13322 3566 20318 11686 7678 16050 215 16667 8825 4395 13087 2163 19401 10855 6503 14807 1953 18379 9587 6015 13657 3219 20011 11999 7867 16125 216 17016 9128 4344 12824 2616 18472 11096 7000 14552 2024 17912 9784 5400 13992 3896 19704 11288 8056 16200 217 17365 8407 4293 12561 3069 18567 10313 6473 15321 1071 17445 9981 5809 14327 3549 20421 11601 7221 16275 218 16690 8710 4242 12298 2498 18662 10554 6970 15066 1142 18002 10178 5194 13638 3202 20114 11914 7410 16350 219 17039 9013 4191 13059 2951 18757 10795 6443 14811 1213 17535 9351 5603 13973 3879 19807 12227 7599 15401 220 17388 8292 4140 20516 12796 2380 18852 11036 6940 14556 1284 18092 9548 6012 14308 3532 19500 11516 7788 15476 221 16713 8595 5113 12533 2833 18947 10253 6413 15325 1355 17625 9745 5397 13619 3185 20217 11829 7977 15551 222 17062 8898 5062 13294 2262 19042 10494 6910 15070 1426 18182 9942 5806 13954 3862 19910 12142 8166 15626 223 16387 9201 5011 20577 13031 2715 19137 10735 6383 14815 1497 17715 10139 5191 14289 3515 19603 11431 7331 15701 224 16736 8480 4960 12768 2144 19232 10976 6880 14560 1568 18272 9312 5600 13600 3168 20320 11744 7520 15776 225 17085 8783 4909 12505 2597 19327 11217 6353 15329 1639 17805 9509 6009 13935 3845 20013 12057 7709 15851 226 16410 9086 4858 20638 13266 3050 19422 10434 6850 15074 1710 18362 9706 5394 14270 3498 19706 11346 7898 15926 227 16759 8365 4807 13003 2479 18493 10675 6323 14819 1781 17895 9903 5803 13581 3151 20423 11659 8087 16001 228 17108 8668 4756 12740 2932 18588 10916 6820 14564 1852 17428 10100 5188 13916 3828 20116 11972 7252 16076 229 16433 8971 4705 20699 12477 2361 18683 11157 6293 15333 1923 17985 9273 5597 14251 3481 19809 12285 7441 16151 230 16782 8250 4654 13238 2814 18778 10374 6790 15078 1994 17518 9470 6006 13562 3134 19502 11574 7630 16226 231 17131 8553 4603 12975 2243 18873 10615 6263 14823 1041 18075 9667 5391 13897 3811 20219 11887 7819 16301 232 16456 8856 4552 12712 2696 18968 10856 6760 14568 1112 17608 9864 5800 14232 3464 19912 12200 8008 16376 233 16805 9159 4501 12449 2125 19063 11097 6233 15337 1183 18165 10061 5185 13543 3117 19605 11489 7173 15427 234 17154 8438 4450 13210 2578 19158 10314 6730 15082 1254 17698 9234 5594 13878 3794 20322 11802 7362 15502 235 16479 8741 4399 12947 3031 19253 10555 6203 14827 1325 18255 9431 6003 14213 3447 20015 12115 7551 15577 236 16828 9044 4348 20500 12684 2460 19348 10796 6700 14572 1396 17788 9628 5388 13524 3100 19708 11404 7740 15652 237 17177 8323 4297 12421 2913 19443 11037 6173 15341 1467 18345 9825 5797 13859 3777 20425 11717 7929 15727 238 16502 8626 4246 13182 2342 18514 10254 6670 15086 1538 17878 10022 5182 14194 3430 20118 12030 8118 15802 239 16851 8929 4195 20561 12919 2795 18609 10495 7167 14831 1609 17411 10219 5591 13505 3083 19811 11319 7283 15877 240 17200 8208 4144 12656 2224 18704 10736 6640 14576 1680 17968 9392 6000 13840 3760 19504 11632 7472 15952 241 16525 8511 5117 12393 2677 18799 10977 7137 15345 1751 17501 9589 5385 14175 3413 20221 11945 7661 16027 242 16874 8814 5066 20622 13154 2106 18894 11218 6610 15090 1822 18058 9786 5794 13486 4090 19914 12258 7850 16102 243 17223 9117 5015 12891 2559 18989 10435 7107 14835 1893 17591 9983 5179 13821 3743 19607 11547 8039 16177 244 16548 8396 4964 12628 3012 19084 10676 6580 14580 1964 18148 10180 5588 14156 3396 20324 11860 7204 16252 245 16897 8699 4913 20683 12365 2441 19179 10917 7077 15349 2035 17681 9353 5997 13467 4073 20017 12173 7393 16327 246 17246 9002 4862 13126 2894 19274 11158 6550 15094 1082 18238 9550 5382 13802 3726 19710 11462 7582 15378 247 16571 8281 4811 12863 2323 19369 10375 7047 14839 1153 17771 9747 5791 14137 3379 20427 11775 7771 15453 248 16920 8584 4760 12600 2776 18440 10616 6520 14584 1224 18328 9944 5176 13448 4056 20120 12088 7960 15528 249 17269 8887 4709 12337 2205 18535 10857 7017 15353 1295 17861 10141 5585 13783 3709 19813 11377 8149 15603 250 16594 9190 4658 13098 2658 18630 11098 6490 15098 1366 18418 9314 5994 14118 3362 19506 11690 7314 15678 251 16943 8469 4607 12835 2087 18725 10315 6987 14843 1437 17951 9511 5379 13429 4039 20223 12003 7503 15753 252 17292 8772 4556 20484 12572 2540 18820 10556 6460 14588 1508 17484 9708 5788 13764 3692 19916 11292 7692 15828 253 16617 9075 4505 12309 2993 18915 10797 6957 15357 1579 18041 9905 5173 14099 3345 19609 11605 7881 15903 254 16966 8354 4454 13070 2422 19010 11038 6430 15102 1650 17574 10102 5582 13410 4022 20326 11918 8070 15978 255 17315 8657 4403 20545 12807 2875 19105 10255 6927 14847 1721 18131 9275 5991 13745 3675 20019 12231 7235 16053 256 16640 8960 4352 12544 2304 19200 10496 6400 14592 1792 17664 9472 5376 14080 3328 19712 11520 7424 16128 257 16989 8239 4301 13305 2757 19295 10737 6897 14337 1863 18221 9669 5785 13391 4005 20429 11833 7613 16203 258 17338 8542 4250 20606 13042 2186 19390 10978 6370 15106 1934 17754 9866 5170 13726 3658 20122 12146 7802 16278 259 16663 8845 4199 12779 2639 18461 11219 6867 14851 2005 18311 10063 5579 14061 3311 19815 11435 7991 16353 260 17012 9148 4148 12516 2068 18556 10436 6340 14596 1052 17844 9236 5988 13372 3988 19508 11748 8180 15404 261 17361 8427 4097 20667 13277 2521 18651 10677 6837 14341 1123 18401 9433 5373 13707 3641 20225 12061 7345 15479 262 16686 8730 5070 13014 2974 18746 10918 6310 15110 1194 17934 9630 5782 14042 3294 19918 11350 7534 15554 263 17035 9033 5019 12751 2403 18841 11159 6807 14855 1265 17467 9827 5167 13353 3971 19611 11663 7723 15629 264 17384 8312 4968 20728 12488 2856 18936 10376 6280 14600 1336 18024 10024 5576 13688 3624 20328 11976 7912 15704 265 16709 8615 4917 13249 2285 19031 10617 6777 14345 1407 17557 10221 5985 14023 3277 20021 11265 8101 15779 266 17058 8918 4866 12986 2738 19126 10858 6250 15114 1478 18114 9394 5370 13334 3954 19714 11578 7266 15854 267 17407 8197 4815 12723 2167 19221 11099 6747 14859 1549 17647 9591 5779 13669 3607 20431 11891 7455 15929 268 16732 8500 4764 12460 2620 19316 10316 6220 14604 1620 18204 9788 5164 14004 3260 20124 12204 7644 16004 269 17081 8803 4713 13221 2049 19411 10557 6717 14349 1691 17737 9985 5573 13315 3937 19817 11493 7833 16079 270 16406 9106 4662 12958 2502 18482 10798 6190 15118 1762 18294 10182 5982 13650 3590 19510 11806 8022 16154 271 16755 8385 4611 20529 12695 2955 18577 11039 6687 14863 1833 17827 9355 5367 13985 3243 20227 12119 7187 16229 272 17104 8688 4560 12432 2384 18672 10256 6160 14608 1904 18384 9552 5776 14320 3920 19920 11408 7376 16304 273 16429 8991 4509 13193 2837 18767 10497 6657 14353 1975 17917 9749 5161 13631 3573 19613 11721 7565 16379 274 16778 8270 4458 20590 12930 2266 18862 10738 7154 15122 2046 17450 9946 5570 13966 3226 20330 12034 7754 15430 275 17127 8573 4407 12667 2719 18957 10979 6627 14867 1093 18007 10143 5979 14301 3903 20023 11323 7943 15505 276 16452 8876 4356 12404 2148 19052 11220 7124 14612 1164 17540 9316 5364 13612 3556 19716 11636 8132 15580 277 16801 9179 4305 20651 13165 2601 19147 10437 6597 14357 1235 18097 9513 5773 13947 3209 20433 11949 7297 15655 278 17150 8458 4254 12902 3054 19242 10678 7094 15126 1306 17630 9710 5158 14282 3886 20126 12262 7486 15730 279 16475 8761 4203 12639 2483 19337 10919 6567 14871 1377 18187 9907 5567 13593 3539 19819 11551 7675 15805 280 16824 9064 4152 20712 12376 2936 19432 11160 7064 14616 1448 17720 10104 5976 13928 3192 19512 11864 7864 15880 281 17173 8343 4101 13137 2365 18503 10377 6537 14361 1519 18277 9277 5361 14263 3869 20229 12177 8053 15955 282 16498 8646 5074 12874 2818 18598 10618 7034 15130 1590 17810 9474 5770 13574 3522 19922 11466 7218 16030 283 16847 8949 5023 12611 2247 18693 10859 6507 14875 1661 18367 9671 5155 13909 3175 19615 11779 7407 16105 284 17196 8228 4972 12348 2700 18788 11100 7004 14620 1732 17900 9868 5564 14244 3852 20332 12092 7596 16180 285 16521 8531 4921 13109 2129 18883 10317 6477 14365 1803 17433 10065 5973 13555 3505 20025 11381 7785 16255 286 16870 8834 4870 12846 2582 18978 10558 6974 15134 1874 17990 9238 5358 13890 3158 19718 11694 7974 16330 287 17219 9137 4819 20513 12583 3035 19073 10799 6447 14879 1945 17523 9435 5767 14225 3835 20435 12007 8163 15381 288 16544 8416 4768 12320 2464 19168 11040 6944 14624 2016 18080 9632 5152 13536 3488 20128 11296 7328 15456 289 16893 8719 4717 13081 2917 19263 10257 6417 14369 1063 17613 9829 5561 13871 3141 19821 11609 7517 15531 290 17242 9022 4666 20574 12818 2346 19358 10498 6914 15138 1134 18170 10026 5970 14206 3818 19514 11922 7706 15606 291 16567 8301 4615 12555 2799 19453 10739 6387 14883 1205 17703 10223 5355 13517 3471 20231 12235 7895 15681 292 16916 8604 4564 12292 2228 18524 10980 6884 14628 1276 18260 9396 5764 13852 3124 19924 11524 8084 15756 293 17265 8907 4513 20635 13053 2681 18619 11221 6357 14373 1347 17793 9593 5149 14187 3801 19617 11837 7249 15831 294 16590 9210 4462 12790 2110 18714 10438 6854 15142 1418 18350 9790 5558 13498 3454 20334 12150 7438 15906 295 16939 8489 4411 12527 2563 18809 10679 6327 14887 1489 17883 9987 5967 13833 3107 20027 11439 7627 15981 296 17288 8792 4360 20696 13288 3016 18904 10920 6824 14632 1560 17416 10184 5352 14168 3784 19720 11752 7816 16056 297 16613 9095 4309 13025 2445 18999 11161 6297 14377 1631 17973 9357 5761 13479 3437 20437 12065 8005 16131 298 16962 8374 4258 12762 2898 19094 10378 6794 15146 1702 17506 9554 5146 13814 3090 20130 11354 7170 16206 299 17311 8677 4207 12499 2327 19189 10619 6267 14891 1773 18063 9751 5555 14149 3767 19823 11667 7359 16281 300 16636 8980 4156 13260 2780 19284 10860 6764 14636 1844 17596 9948 5964 13460 3420 19516 11980 7548 16356 301 16985 8259 4105 12997 2209 19379 11101 6237 14381 1915 18153 10145 5349 13795 3073 20233 11269 7737 15407 302 17334 8562 5078 12734 2662 18450 10318 6734 15150 1986 17686 9318 5758 14130 3750 19926 11582 7926 15482 303 16659 8865 5027 20497 12471 2091 18545 10559 6207 14895 1033 18243 9515 5143 13441 3403 19619 11895 8115 15557 304 17008 9168 4976 13232 2544 18640 10800 6704 14640 1104 17776 9712 5552 13776 4080 20336 12208 7280 15632 305 17357 8447 4925 12969 2997 18735 11041 6177 14385 1175 18333 9909 5961 14111 3733 20029 11497 7469 15707 306 16682 8750 4874 20558 12706 2426 18830 10258 6674 15154 1246 17866 10106 5346 13422 3386 19722 11810 7658 15782 307 17031 9053 4823 12443 2879 18925 10499 6147 14899 1317 18423 9279 5755 13757 4063 20439 12123 7847 15857 308 17380 8332 4772 13204 2308 19020 10740 6644 14644 1388 17956 9476 5140 14092 3716 20132 11412 8036 15932 309 16705 8635 4721 20619 12941 2761 19115 10981 7141 14389 1459 17489 9673 5549 13403 3369 19825 11725 7201 16007 310 17054 8938 4670 12678 2190 19210 11222 6614 15158 1530 18046 9870 5958 13738 4046 19518 12038 7390 16082 311 17403 8217 4619 12415 2643 19305 10439 7111 14903 1601 17579 10067 5343 14073 3699 20235 11327 7579 16157 312 16728 8520 4568 20680 13176 2072 19400 10680 6584 14648 1672 18136 9240 5752 13384 3352 19928 11640 7768 16232 313 17077 8823 4517 12913 2525 18471 10921 7081 14393 1743 17669 9437 5137 13719 4029 19621 11953 7957 16307 314 16402 9126 4466 12650 2978 18566 11162 6554 15162 1814 18226 9634 5546 14054 3682 20338 12266 8146 16382 315 16751 8405 4415 12387 2407 18661 10379 7051 14907 1885 17759 9831 5955 13365 3335 20031 11555 7311 15433 316 17100 8708 4364 13148 2860 18756 10620 6524 14652 1956 18316 10028 5340 13700 4012 19724 11868 7500 15508 317 16425 9011 4313 12885 2289 18851 10861 7021 14397 2027 17849 10225 5749 14035 3665 20441 12181 7689 15583 318 16774 8290 4262 12622 2742 18946 11102 6494 15166 1074 18406 9398 5134 13346 3318 20134 11470 7878 15658 319 17123 8593 4211 20481 12359 2171 19041 10319 6991 14911 1145 17939 9595 5543 13681 3995 19827 11783 8067 15733 320 16448 8896 4160 13120 2624 19136 10560 6464 14656 1216 17472 9792 5952 14016 3648 19520 12096 7232 15808 321 16797 9199 4109 12857 2053 19231 10801 6961 14401 1287 18029 9989 5337 13327 3301 20237 11385 7421 15883 322 17146 8478 5082 20542 12594 2506 19326 11042 6434 15170 1358 17562 10186 5746 13662 3978 19930 11698 7610 15958 323 16471 8781 5031 12331 2959 19421 10259 6931 14915 1429 18119 9359 5131 13997 3631 19623 12011 7799 16033 324 16820 9084 4980 13092 2388 18492 10500 6404 14660 1500 17652 9556 5540 14332 3284 20340 11300 7988 16108 325 17169 8363 4929 20603 12829 2841 18587 10741 6901 14405 1571 18209 9753 5949 13643 3961 20033 11613 8177 16183 326 16494 8666 4878 12566 2270 18682 10982 6374 15174 1642 17742 9950 5334 13978 3614 19726 11926 7342 16258 327 16843 8969 4827 12303 2723 18777 11223 6871 14919 1713 18299 10147 5743 14313 3267 20443 12239 7531 16333 328 17192 8248 4776 20664 13064 2152 18872 10440 6344 14664 1784 17832 9320 5128 13624 3944 20136 11528 7720 15384 329 16517 8551 4725 12801 2605 18967 10681 6841 14409 1855 18389 9517 5537 13959 3597 19829 11841 7909 15459 330 16866 8854 4674 12538 3058 19062 10922 6314 15178 1926 17922 9714 5946 14294 3250 19522 12154 8098 15534 331 17215 9157 4623 20725 13299 2487 19157 11163 6811 14923 1997 17455 9911 5331 13605 3927 20239 11443 7263 15609 332 16540 8436 4572 13036 2940 19252 10380 6284 14668 1044 18012 10108 5740 13940 3580 19932 11756 7452 15684 333 16889 8739 4521 12773 2369 19347 10621 6781 14413 1115 17545 9281 5125 14275 3233 19625 12069 7641 15759 334 17238 9042 4470 12510 2822 19442 10862 6254 15182 1186 18102 9478 5534 13586 3910 20342 11358 7830 15834 335 16563 8321 4419 13271 2251 18513 11103 6751 14927 1257 17635 9675 5943 13921 3563 20035 11671 8019 15909 336 16912 8624 4368 13008 2704 18608 10320 6224 14672 1328 18192 9872 5328 14256 3216 19728 11984 7184 15984 337 17261 8927 4317 12745 2133 18703 10561 6721 14417 1399 17725 10069 5737 13567 3893 20445 11273 7373 16059 338 16586 8206 4266 20526 12482 2586 18798 10802 6194 15186 1470 18282 9242 5122 13902 3546 20138 11586 7562 16134 339 16935 8509 4215 13243 3039 18893 11043 6691 14931 1541 17815 9439 5531 14237 3199 19831 11899 7751 16209 340 17284 8812 4164 12980 2468 18988 10260 6164 14676 1612 18372 9636 5940 13548 3876 19524 12212 7940 16284 341 16609 9115 4113 20587 12717 2921 19083 10501 6661 14421 1683 17905 9833 5325 13883 3529 20241 11501 8129 16359 342 16958 8394 5086 12454 2350 19178 10742 7158 15190 1754 17438 10030 5734 14218 3182 19934 11814 7294 15410 343 17307 8697 5035 13215 2803 19273 10983 6631 14935 1825 17995 10227 6143 13529 3859 19627 12127 7483 15485 344 16632 9000 4984 20648 12952 2232 19368 11224 7128 14680 1896 17528 9400 5528 13864 3512 20344 11416 7672 15560 345 16981 8279 4933 12689 2685 18439 10441 6601 14425 1967 18085 9597 5937 14199 3165 20037 11729 7861 15635 346 17330 8582 4882 12426 2114 18534 10682 7098 15194 2038 17618 9794 5322 13510 3842 19730 12042 8050 15710 347 16655 8885 4831 20709 13187 2567 18629 10923 6571 14939 1085 18175 9991 5731 13845 3495 20447 11331 7215 15785 348 17004 9188 4780 12924 3020 18724 11164 7068 14684 1156 17708 10188 6140 14180 3148 20140 11644 7404 15860 349 17353 8467 4729 12661 2449 18819 10381 6541 14429 1227 18265 9361 5525 13491 3825 19833 11957 7593 15935 350 16678 8770 4678 12398 2902 18914 10622 7038 15198 1298 17798 9558 5934 13826 3478 19526 12270 7782 16010 351 17027 9073 4627 13159 2331 19009 10863 6511 14943 1369 18355 9755 5319 14161 3131 20243 11559 7971 16085 352 17376 8352 4576 12896 2784 19104 11104 7008 14688 1440 17888 9952 5728 13472 3808 19936 11872 8160 16160 353 16701 8655 4525 12633 2213 19199 10321 6481 14433 1511 17421 10149 6137 13807 3461 19629 12185 7325 16235 354 17050 8958 4474 20510 12370 2666 19294 10562 6978 15202 1582 17978 9322 5522 14142 3114 20346 11474 7514 16310 355 17399 8237 4423 13131 2095 19389 10803 6451 14947 1653 17511 9519 5931 13453 3791 20039 11787 7703 15361 356 16724 8540 4372 12868 2548 18460 11044 6948 14692 1724 18068 9716 5316 13788 3444 19732 12100 7892 15436 357 17073 8843 4321 20571 12605 3001 18555 10261 6421 14437 1795 17601 9913 5725 14123 3097 20449 11389 8081 15511 358 16398 9146 4270 12342 2430 18650 10502 6918 15206 1866 18158 10110 6134 13434 3774 20142 11702 7246 15586 359 16747 8425 4219 13103 2883 18745 10743 6391 14951 1937 17691 9283 5519 13769 3427 19835 12015 7435 15661 360 17096 8728 4168 20632 12840 2312 18840 10984 6888 14696 2008 18248 9480 5928 14104 3080 19528 11304 7624 15736 361 16421 9031 4117 12577 2765 18935 11225 6361 14441 1055 17781 9677 5313 13415 3757 20245 11617 7813 15811 362 16770 8310 5090 12314 2194 19030 10442 6858 15210 1126 18338 9874 5722 13750 3410 19938 11930 8002 15886 363 17119 8613 5039 20693 13075 2647 19125 10683 6331 14955 1197 17871 10071 6131 14085 4087 19631 12243 8191 15961 364 16444 8916 4988 12812 2076 19220 10924 6828 14700 1268 18428 9244 5516 13396 3740 20348 11532 7356 16036 365 16793 8195 4937 12549 2529 19315 11165 6301 14445 1339 17961 9441 5925 13731 3393 20041 11845 7545 16111 366 17142 8498 4886 13310 2982 19410 10382 6798 15214 1410 17494 9638 5310 14066 4070 19734 12158 7734 16186 367 16467 8801 4835 13047 2411 18481 10623 6271 14959 1481 18051 9835 5719 13377 3723 20451 11447 7923 16261 368 16816 9104 4784 12784 2864 18576 10864 6768 14704 1552 17584 10032 6128 13712 3376 20144 11760 8112 16336 369 17165 8383 4733 12521 2293 18671 11105 6241 14449 1623 18141 10229 5513 14047 4053 19837 12073 7277 15387 370 16490 8686 4682 20494 13282 2746 18766 10322 6738 15218 1694 17674 9402 5922 13358 3706 19530 11362 7466 15462 371 16839 8989 4631 13019 2175 18861 10563 6211 14963 1765 18231 9599 5307 13693 3359 20247 11675 7655 15537 372 17188 8268 4580 12756 2628 18956 10804 6708 14708 1836 17764 9796 5716 14028 4036 19940 11988 7844 15612 373 16513 8571 4529 20555 12493 2057 19051 11045 6181 14453 1907 18321 9993 6125 13339 3689 19633 11277 8033 15687 374 16862 8874 4478 13254 2510 19146 10262 6678 15222 1978 17854 10190 5510 13674 3342 20350 11590 7198 15762 375 17211 9177 4427 12991 2963 19241 10503 6151 14967 1025 18411 9363 5919 14009 4019 20043 11903 7387 15837 376 16536 8456 4376 20616 12728 2392 19336 10744 6648 14712 1096 17944 9560 5304 13320 3672 19736 12216 7576 15912 377 16885 8759 4325 12465 2845 19431 10985 7145 14457 1167 17477 9757 5713 13655 3325 20453 11505 7765 15987 378 17234 9062 4274 13226 2274 18502 11226 6618 15226 1238 18034 9954 6122 13990 4002 20146 11818 7954 16062 379 16559 8341 4223 20677 12963 2727 18597 10443 7115 14971 1309 17567 10151 5507 14325 3655 19839 12131 8143 16137 380 16908 8644 4172 12700 2156 18692 10684 6588 14716 1380 18124 9324 5916 13636 3308 19532 11420 7308 16212 381 17257 8947 4121 12437 2609 18787 10925 7085 14461 1451 17657 9521 5301 13971 3985 20249 11733 7497 16287 382 16582 8226 5094 13198 3062 18882 11166 6558 15230 1522 18214 9718 5710 14306 3638 19942 12046 7686 16362 383 16931 8529 5043 12935 2491 18977 10383 7055 14975 1593 17747 9915 6119 13617 3291 19635 11335 7875 15413 384 17280 8832 4992 12672 2944 19072 10624 6528 14720 1664 18304 10112 5504 13952 3968 20352 11648 8064 15488 385 16605 9135 4941 12409 2373 19167 10865 7025 14465 1735 17837 9285 5913 14287 3621 20045 11961 7229 15563 386 16954 8414 4890 13170 2826 19262 11106 6498 15234 1806 18394 9482 5298 13598 3274 19738 12274 7418 15638 387 17303 8717 4839 12907 2255 19357 10323 6995 14979 1877 17927 9679 5707 13933 3951 20455 11563 7607 15713 388 16628 9020 4788 12644 2708 19452 10564 6468 14724 1948 17460 9876 6116 14268 3604 20148 11876 7796 15788 389 16977 8299 4737 20539 12381 2137 18523 10805 6965 14469 2019 18017 10073 5501 13579 3257 19841 12189 7985 15863 390 17326 8602 4686 13142 2590 18618 11046 6438 15238 1066 17550 9246 5910 13914 3934 19534 11478 8174 15938 391 16651 8905 4635 12879 3043 18713 10263 6935 14983 1137 18107 9443 5295 14249 3587 20251 11791 7339 16013 392 17000 9208 4584 20600 12616 2472 18808 10504 6408 14728 1208 17640 9640 5704 13560 3240 19944 12104 7528 16088 393 17349 8487 4533 12353 2925 18903 10745 6905 14473 1279 18197 9837 6113 13895 3917 19637 11393 7717 16163 394 16674 8790 4482 13114 2354 18998 10986 6378 15242 1350 17730 10034 5498 14230 3570 20354 11706 7906 16238 395 17023 9093 4431 20661 12851 2807 19093 11227 6875 14987 1421 18287 10231 5907 13541 3223 20047 12019 8095 16313 396 17372 8372 4380 12588 2236 19188 10444 6348 14732 1492 17820 9404 5292 13876 3900 19740 11308 7260 15364 397 16697 8675 4329 12325 2689 19283 10685 6845 14477 1563 18377 9601 5701 14211 3553 20457 11621 7449 15439 398 17046 8978 4278 20722 13086 2118 19378 10926 6318 15246 1634 17910 9798 6110 13522 3206 20150 11934 7638 15514 399 17395 8257 4227 12823 2571 18449 11167 6815 14991 1705 17443 9995 5495 13857 3883 19843 12247 7827 15589 400 16720 8560 4176 12560 3024 18544 10384 6288 14736 1776 18000 10192 5904 14192 3536 19536 11536 8016 15664 401 17069 8863 4125 12297 2453 18639 10625 6785 14481 1847 17533 9365 5289 13503 3189 20253 11849 7181 15739 402 16394 9166 5098 13058 2906 18734 10866 6258 15250 1918 18090 9562 5698 13838 3866 19946 12162 7370 15814 403 16743 8445 5047 12795 2335 18829 11107 6755 14995 1989 17623 9759 6107 14173 3519 19639 11451 7559 15889 404 17092 8748 4996 12532 2788 18924 10324 6228 14740 1036 18180 9956 5492 13484 3172 20356 11764 7748 15964 405 16417 9051 4945 20523 13293 2217 19019 10565 6725 14485 1107 17713 10153 5901 13819 3849 20049 12077 7937 16039 406 16766 8330 4894 13030 2670 19114 10806 6198 15254 1178 18270 9326 5286 14154 3502 19742 11366 8126 16114 407 17115 8633 4843 12767 2099 19209 11047 6695 14999 1249 17803 9523 5695 13465 3155 20459 11679 7291 16189 408 16440 8936 4792 20584 12504 2552 19304 10264 6168 14744 1320 18360 9720 6104 13800 3832 20152 11992 7480 16264 409 16789 8215 4741 13265 3005 19399 10505 6665 14489 1391 17893 9917 5489 14135 3485 19845 11281 7669 16339 410 17138 8518 4690 13002 2434 18470 10746 7162 15258 1462 17426 10114 5898 13446 3138 19538 11594 7858 15390 411 16463 8821 4639 20645 12739 2887 18565 10987 6635 15003 1533 17983 9287 5283 13781 3815 20255 11907 8047 15465 412 16812 9124 4588 12476 2316 18660 11228 7132 14748 1604 17516 9484 5692 14116 3468 19948 12220 7212 15540 413 17161 8403 4537 13237 2769 18755 10445 6605 14493 1675 18073 9681 6101 13427 3121 19641 11509 7401 15615 414 16486 8706 4486 20706 12974 2198 18850 10686 7102 15262 1746 17606 9878 5486 13762 3798 20358 11822 7590 15690 415 16835 9009 4435 12711 2651 18945 10927 6575 15007 1817 18163 10075 5895 14097 3451 20051 12135 7779 15765 416 17184 8288 4384 12448 2080 19040 11168 7072 14752 1888 17696 9248 5280 13408 3104 19744 11424 7968 15840 417 16509 8591 4333 13209 2533 19135 10385 6545 14497 1959 18253 9445 5689 13743 3781 20461 11737 8157 15915 418 16858 8894 4282 12946 2986 19230 10626 7042 15266 2030 17786 9642 6098 14078 3434 20154 12050 7322 15990 419 17207 9197 4231 12683 2415 19325 10867 6515 15011 1077 18343 9839 5483 13389 3087 19847 11339 7511 16065 420 16532 8476 4180 12420 2868 19420 11108 7012 14756 1148 17876 10036 5892 13724 3764 19540 11652 7700 16140 421 16881 8779 4129 20507 13181 2297 18491 10325 6485 14501 1219 17409 10233 5277 14059 3417 20257 11965 7889 16215 422 17230 9082 5102 12918 2750 18586 10566 6982 15270 1290 17966 9406 5686 13370 4094 19950 12278 8078 16290 423 16555 8361 5051 12655 2179 18681 10807 6455 15015 1361 17499 9603 6095 13705 3747 19643 11567 7243 16365 424 16904 8664 5000 20568 12392 2632 18776 11048 6952 14760 1432 18056 9800 5480 14040 3400 20360 11880 7432 15416 425 17253 8967 4949 13153 2061 18871 10265 6425 14505 1503 17589 9997 5889 13351 4077 20053 12193 7621 15491 426 16578 8246 4898 12890 2514 18966 10506 6922 15274 1574 18146 10194 5274 13686 3730 19746 11482 7810 15566 427 16927 8549 4847 20629 12627 2967 19061 10747 6395 15019 1645 17679 9367 5683 14021 3383 20463 11795 7999 15641 428 17276 8852 4796 12364 2396 19156 10988 6892 14764 1716 18236 9564 6092 13332 4060 20156 12108 8188 15716 429 16601 9155 4745 13125 2849 19251 11229 6365 14509 1787 17769 9761 5477 13667 3713 19849 11397 7353 15791 430 16950 8434 4694 20690 12862 2278 19346 10446 6862 15278 1858 18326 9958 5886 14002 3366 19542 11710 7542 15866 431 17299 8737 4643 12599 2731 19441 10687 6335 15023 1929 17859 10155 5271 13313 4043 20259 12023 7731 15941 432 16624 9040 4592 12336 2160 18512 10928 6832 14768 2000 18416 9328 5680 13648 3696 19952 11312 7920 16016 433 16973 8319 4541 13097 2613 18607 11169 6305 14513 1047 17949 9525 6089 13983 3349 19645 11625 8109 16091 434 17322 8622 4490 12834 3066 18702 10386 6802 15282 1118 17482 9722 5474 14318 4026 20362 11938 7274 16166 435 16647 8925 4439 12571 2495 18797 10627 6275 15027 1189 18039 9919 5883 13629 3679 20055 12251 7463 16241 436 16996 8204 4388 12308 2948 18892 10868 6772 14772 1260 17572 10116 5268 13964 3332 19748 11540 7652 16316 437 17345 8507 4337 20491 13069 2377 18987 11109 6245 14517 1331 18129 9289 5677 14299 4009 20465 11853 7841 15367 438 16670 8810 4286 12806 2830 19082 10326 6742 15286 1402 17662 9486 6086 13610 3662 20158 12166 8030 15442 439 17019 9113 4235 12543 2259 19177 10567 6215 15031 1473 18219 9683 5471 13945 3315 19851 11455 7195 15517 440 17368 8392 4184 20552 13304 2712 19272 10808 6712 14776 1544 17752 9880 5880 14280 3992 19544 11768 7384 15592 441 16693 8695 4133 13041 2141 19367 11049 6185 14521 1615 18309 10077 5265 13591 3645 20261 12081 7573 15667 442 17042 8998 5106 12778 2594 18438 10266 6682 15290 1686 17842 9250 5674 13926 3298 19954 11370 7762 15742 443 17391 8277 5055 20613 12515 3047 18533 10507 6155 15035 1757 18399 9447 6083 14261 3975 19647 11683 7951 15817 444 16716 8580 5004 13276 2476 18628 10748 6652 14780 1828 17932 9644 5468 13572 3628 20364 11996 8140 15892 445 17065 8883 4953 13013 2929 18723 10989 7149 14525 1899 17465 9841 5877 13907 3281 20057 11285 7305 15967 446 16390 9186 4902 20674 12750 2358 18818 11230 6622 15294 1970 18022 10038 5262 14242 3958 19750 11598 7494 16042 447 16739 8465 4851 12487 2811 18913 10447 7119 15039 2041 17555 10235 5671 13553 3611 20467 11911 7683 16117 448 17088 8768 4800 13248 2240 19008 10688 6592 14784 1088 18112 9408 6080 13888 3264 20160 12224 7872 16192 449 16413 9071 4749 12985 2693 19103 10929 7089 14529 1159 17645 9605 5465 14223 3941 19853 11513 8061 16267 450 16762 8350 4698 12722 2122 19198 11170 6562 15298 1230 18202 9802 5874 13534 3594 19546 11826 7226 16342 451 17111 8653 4647 12459 2575 19293 10387 7059 15043 1301 17735 9999 5259 13869 3247 20263 12139 7415 15393 452 16436 8956 4596 13220 3028 19388 10628 6532 14788 1372 18292 10196 5668 14204 3924 19956 11428 7604 15468 453 16785 8235 4545 12957 2457 18459 10869 7029 14533 1443 17825 9369 6077 13515 3577 19649 11741 7793 15543 454 17134 8538 4494 12694 2910 18554 11110 6502 15302 1514 18382 9566 5462 13850 3230 20366 12054 7982 15618 455 16459 8841 4443 12431 2339 18649 10327 6999 15047 1585 17915 9763 5871 14185 3907 20059 11343 8171 15693 456 16808 9144 4392 20536 13192 2792 18744 10568 6472 14792 1656 17448 9960 5256 13496 3560 19752 11656 7336 15768 457 17157 8423 4341 12929 2221 18839 10809 6969 14537 1727 18005 10157 5665 13831 3213 20469 11969 7525 15843 458 16482 8726 4290 12666 2674 18934 11050 6442 15306 1798 17538 9330 6074 14166 3890 20162 12282 7714 15918 459 16831 9029 4239 20597 12403 2103 19029 10267 6939 15051 1869 18095 9527 5459 13477 3543 19855 11571 7903 15993 460 17180 8308 4188 13164 2556 19124 10508 6412 14796 1940 17628 9724 5868 13812 3196 19548 11884 8092 16068 461 16505 8611 4137 12901 3009 19219 10749 6909 14541 2011 18185 9921 5253 14147 3873 20265 12197 7257 16143 462 16854 8914 5110 20658 12638 2438 19314 10990 6382 15310 1058 17718 10118 5662 13458 3526 19958 11486 7446 16218 463 17203 8193 5059 12375 2891 19409 11231 6879 15055 1129 18275 9291 6071 13793 3179 19651 11799 7635 16293 464 16528 8496 5008 13136 2320 18480 10448 6352 14800 1200 17808 9488 5456 14128 3856 20368 12112 7824 16368 465 16877 8799 4957 20719 12873 2773 18575 10689 6849 14545 1271 18365 9685 5865 13439 3509 20061 11401 8013 15419 466 17226 9102 4906 12610 2202 18670 10930 6322 15314 1342 17898 9882 5250 13774 3162 19754 11714 7178 15494 467 16551 8381 4855 12347 2655 18765 11171 6819 15059 1413 17431 10079 5659 14109 3839 20471 12027 7367 15569 468 16900 8684 4804 13108 2084 18860 10388 6292 14804 1484 17988 9252 6068 13420 3492 20164 11316 7556 15644 469 17249 8987 4753 12845 2537 18955 10629 6789 14549 1555 17521 9449 5453 13755 3145 19857 11629 7745 15719 470 16574 8266 4702 12582 2990 19050 10870 6262 15318 1626 18078 9646 5862 14090 3822 19550 11942 7934 15794 471 16923 8569 4651 12319 2419 19145 11111 6759 15063 1697 17611 9843 5247 13401 3475 20267 12255 8123 15869 472 17272 8872 4600 20520 13080 2872 19240 10328 6232 14808 1768 18168 10040 5656 13736 3128 19960 11544 7288 15944 473 16597 9175 4549 12817 2301 19335 10569 6729 14553 1839 17701 10237 6065 14071 3805 19653 11857 7477 16019 474 16946 8454 4498 12554 2754 19430 10810 6202 15322 1910 18258 9410 5450 13382 3458 20370 12170 7666 16094 475 17295 8757 4447 20581 12291 2183 18501 11051 6699 15067 1981 17791 9607 5859 13717 3111 20063 11459 7855 16169 476 16620 9060 4396 13052 2636 18596 10268 6172 14812 1028 18348 9804 5244 14052 3788 19756 11772 8044 16244 477 16969 8339 4345 12789 2065 18691 10509 6669 14557 1099 17881 10001 5653 13363 3441 20473 12085 7209 16319 478 17318 8642 4294 20642 12526 2518 18786 10750 7166 15326 1170 17414 10198 6062 13698 3094 20166 11374 7398 15370 479 16643 8945 4243 13287 2971 18881 10991 6639 15071 1241 17971 9371 5447 14033 3771 19859 11687 7587 15445 480 16992 8224 4192 13024 2400 18976 11232 7136 14816 1312 17504 9568 5856 13344 3424 19552 12000 7776 15520 481 17341 8527 4141 20703 12761 2853 19071 10449 6609 14561 1383 18061 9765 5241 13679 3077 20269 11289 7965 15595 482 16666 8830 5114 12498 2282 19166 10690 7106 15330 1454 17594 9962 5650 14014 3754 19962 11602 8154 15670 483 17015 9133 5063 13259 2735 19261 10931 6579 15075 1525 18151 10159 6059 13325 3407 19655 11915 7319 15745 484 17364 8412 5012 12996 2164 19356 11172 7076 14820 1596 17684 9332 5444 13660 4084 20372 12228 7508 15820 485 16689 8715 4961 12733 2617 19451 10389 6549 14565 1667 18241 9529 5853 13995 3737 20065 11517 7697 15895 486 17038 9018 4910 12470 3070 18522 10630 7046 15334 1738 17774 9726 5238 14330 3390 19758 11830 7886 15970 487 17387 8297 4859 13231 2499 18617 10871 6519 15079 1809 18331 9923 5647 13641 4067 20475 12143 8075 16045 488 16712 8600 4808 20504 12968 2952 18712 11112 7016 14824 1880 17864 10120 6056 13976 3720 20168 11432 7240 16120 489 17061 8903 4757 12705 2381 18807 10329 6489 14569 1951 18421 9293 5441 14311 3373 19861 11745 7429 16195 490 16386 9206 4706 12442 2834 18902 10570 6986 15338 2022 17954 9490 5850 13622 4050 19554 12058 7618 16270 491 16735 8485 4655 20565 13203 2263 18997 10811 6459 15083 1069 17487 9687 5235 13957 3703 20271 11347 7807 16345 492 17084 8788 4604 12940 2716 19092 11052 6956 14828 1140 18044 9884 5644 14292 3356 19964 11660 7996 15396 493 16409 9091 4553 12677 2145 19187 10269 6429 14573 1211 17577 10081 6053 13603 4033 19657 11973 8185 15471 494 16758 8370 4502 20626 12414 2598 19282 10510 6926 15342 1282 18134 9254 5438 13938 3686 20374 12286 7350 15546 495 17107 8673 4451 13175 3051 19377 10751 6399 15087 1353 17667 9451 5847 14273 3339 20067 11575 7539 15621 496 16432 8976 4400 12912 2480 18448 10992 6896 14832 1424 18224 9648 5232 13584 4016 19760 11888 7728 15696 497 16781 8255 4349 20687 12649 2933 18543 11233 6369 14577 1495 17757 9845 5641 13919 3669 20477 12201 7917 15771 498 17130 8558 4298 12386 2362 18638 10450 6866 15346 1566 18314 10042 6050 14254 3322 20170 11490 8106 15846 499 16455 8861 4247 13147 2815 18733 10691 6339 15091 1637 17847 10239 5435 13565 3999 19863 11803 7271 15921 500 16804 9164 4196 12884 2244 18828 10932 6836 14836 1708 18404 9412 5844 13900 3652 19556 12116 7460 15996 501 17153 8443 4145 12621 2697 18923 11173 6309 14581 1779 17937 9609 5229 14235 3305 20273 11405 7649 16071 502 16478 8746 5118 12358 2126 19018 10390 6806 15350 1850 17470 9806 5638 13546 3982 19966 11718 7838 16146 503 16827 9049 5067 13119 2579 19113 10631 6279 15095 1921 18027 10003 6047 13881 3635 19659 12031 8027 16221 504 17176 8328 5016 20488 12856 3032 19208 10872 6776 14840 1992 17560 10200 5432 14216 3288 20376 11320 7192 16296 505 16501 8631 4965 12593 2461 19303 11113 6249 14585 1039 18117 9373 5841 13527 3965 20069 11633 7381 16371 506 16850 8934 4914 12330 2914 19398 10330 6746 15354 1110 17650 9570 5226 13862 3618 19762 11946 7570 15422 507 17199 8213 4863 20549 13091 2343 18469 10571 6219 15099 1181 18207 9767 5635 14197 3271 20479 12259 7759 15497 508 16524 8516 4812 12828 2796 18564 10812 6716 14844 1252 17740 9964 6044 13508 3948 20172 11548 7948 15572 509 16873 8819 4761 12565 2225 18659 11053 6189 14589 1323 18297 10161 5429 13843 3601 19865 11861 8137 15647 510 17222 9122 4710 20610 12302 2678 18754 10270 6686 15358 1394 17830 9334 5838 14178 3254 19558 12174 7302 15722 511 16547 8401 4659 13063 2107 18849 10511 6159 15103 1465 18387 9531 5223 13489 3931 20275 11463 7491 15797 512 16896 8704 4608 12800 2560 18944 10752 6656 14848 1536 17920 9728 5632 13824 3584 19968 11776 7680 15872 513 17245 9007 4557 20671 12537 3013 19039 10993 7153 14593 1607 17453 9925 6041 14159 3237 19661 12089 7869 15947 514 16570 8286 4506 13298 2442 19134 11234 6626 14338 1678 18010 10122 5426 13470 3914 20378 11378 8058 16022 515 16919 8589 4455 13035 2895 19229 10451 7123 15107 1749 17543 9295 5835 13805 3567 20071 11691 7223 16097 516 17268 8892 4404 12772 2324 19324 10692 6596 14852 1820 18100 9492 5220 14140 3220 19764 12004 7412 16172 517 16593 9195 4353 12509 2777 19419 10933 7093 14597 1891 17633 9689 5629 13451 3897 19457 11293 7601 16247 518 16942 8474 4302 13270 2206 18490 11174 6566 14342 1962 18190 9886 6038 13786 3550 20174 11606 7790 16322 519 17291 8777 4251 13007 2659 18585 10391 7063 15111 2033 17723 10083 5423 14121 3203 19867 11919 7979 15373 520 16616 9080 4200 12744 2088 18680 10632 6536 14856 1080 18280 9256 5832 13432 3880 19560 12232 8168 15448 521 16965 8359 4149 12481 2541 18775 10873 7033 14601 1151 17813 9453 5217 13767 3533 20277 11521 7333 15523 522 17314 8662 4098 13242 2994 18870 11114 6506 14346 1222 18370 9650 5626 14102 3186 19970 11834 7522 15598 523 16639 8965 5071 20533 12979 2423 18965 10331 7003 15115 1293 17903 9847 6035 13413 3863 19663 12147 7711 15673 524 16988 8244 5020 12716 2876 19060 10572 6476 14860 1364 17436 10044 5420 13748 3516 20380 11436 7900 15748 525 17337 8547 4969 12453 2305 19155 10813 6973 14605 1435 17993 9217 5829 14083 3169 20073 11749 8089 15823 526 16662 8850 4918 20594 13214 2758 19250 11054 6446 14350 1506 17526 9414 5214 13394 3846 19766 12062 7254 15898 527 17011 9153 4867 12951 2187 19345 10271 6943 15119 1577 18083 9611 5623 13729 3499 19459 11351 7443 15973 528 17360 8432 4816 12688 2640 19440 10512 6416 14864 1648 17616 9808 6032 14064 3152 20176 11664 7632 16048 529 16685 8735 4765 20655 12425 2069 18511 10753 6913 14609 1719 18173 10005 5417 13375 3829 19869 11977 7821 16123 530 17034 9038 4714 13186 2522 18606 10994 6386 14354 1790 17706 10202 5826 13710 3482 19562 11266 8010 16198 531 17383 8317 4663 12923 2975 18701 11235 6883 15123 1861 18263 9375 5211 14045 3135 20279 11579 7175 16273 532 16708 8620 4612 20716 12660 2404 18796 10452 6356 14868 1932 17796 9572 5620 13356 3812 19972 11892 7364 16348 533 17057 8923 4561 12397 2857 18891 10693 6853 14613 2003 18353 9769 6029 13691 3465 19665 12205 7553 15399 534 17406 8202 4510 13158 2286 18986 10934 6326 14358 1050 17886 9966 5414 14026 3118 20382 11494 7742 15474 535 16731 8505 4459 12895 2739 19081 11175 6823 15127 1121 17419 10163 5823 13337 3795 20075 11807 7931 15549 536 17080 8808 4408 12632 2168 19176 10392 6296 14872 1192 17976 9336 5208 13672 3448 19768 12120 8120 15624 537 16405 9111 4357 12369 2621 19271 10633 6793 14617 1263 17509 9533 5617 14007 3101 19461 11409 7285 15699 538 16754 8390 4306 13130 2050 19366 10874 6266 14362 1334 18066 9730 6026 13318 3778 20178 11722 7474 15774 539 17103 8693 4255 20517 12867 2503 18437 11115 6763 15131 1405 17599 9927 5411 13653 3431 19871 12035 7663 15849 540 16428 8996 4204 12604 2956 18532 10332 6236 14876 1476 18156 10124 5820 13988 3084 19564 11324 7852 15924 541 16777 8275 4153 12341 2385 18627 10573 6733 14621 1547 17689 9297 5205 14323 3761 20281 11637 8041 15999 542 17126 8578 4102 20578 13102 2838 18722 10814 6206 14366 1618 18246 9494 5614 13634 3414 19974 11950 7206 16074 543 16451 8881 5075 12839 2267 18817 11055 6703 15135 1689 17779 9691 6023 13969 4091 19667 12263 7395 16149 544 16800 9184 5024 12576 2720 18912 10272 6176 14880 1760 18336 9888 5408 14304 3744 20384 11552 7584 16224 545 17149 8463 4973 20639 12313 2149 19007 10513 6673 14625 1831 17869 10085 5817 13615 3397 20077 11865 7773 16299 546 16474 8766 4922 13074 2602 19102 10754 6146 14370 1902 18426 9258 5202 13950 4074 19770 12178 7962 16374 547 16823 9069 4871 12811 3055 19197 10995 6643 15139 1973 17959 9455 5611 14285 3727 19463 11467 8151 15425 548 17172 8348 4820 20700 12548 2484 19292 11236 7140 14884 2044 17492 9652 6020 13596 3380 20180 11780 7316 15500 549 16497 8651 4769 13309 2937 19387 10453 6613 14629 1091 18049 9849 5405 13931 4057 19873 12093 7505 15575 550 16846 8954 4718 13046 2366 18458 10694 7110 14374 1162 17582 10046 5814 14266 3710 19566 11382 7694 15650 551 17195 8233 4667 12783 2819 18553 10935 6583 15143 1233 18139 9219 5199 13577 3363 20283 11695 7883 15725 552 16520 8536 4616 12520 2248 18648 11176 7080 14888 1304 17672 9416 5608 13912 4040 19976 12008 8072 15800 553 16869 8839 4565 13281 2701 18743 10393 6553 14633 1375 18229 9613 6017 14247 3693 19669 11297 7237 15875 554 17218 9142 4514 13018 2130 18838 10634 7050 14378 1446 17762 9810 5402 13558 3346 20386 11610 7426 15950 555 16543 8421 4463 20501 12755 2583 18933 10875 6523 15147 1517 18319 10007 5811 13893 4023 20079 11923 7615 16025 556 16892 8724 4412 12492 3036 19028 11116 7020 14892 1588 17852 10204 5196 14228 3676 19772 12236 7804 16100 557 17241 9027 4361 13253 2465 19123 10333 6493 14637 1659 18409 9377 5605 13539 3329 19465 11525 7993 16175 558 16566 8306 4310 20562 12990 2918 19218 10574 6990 14382 1730 17942 9574 6014 13874 4006 20182 11838 8182 16250 559 16915 8609 4259 12727 2347 19313 10815 6463 15151 1801 17475 9771 5399 14209 3659 19875 12151 7347 16325 560 17264 8912 4208 12464 2800 19408 11056 6960 14896 1872 18032 9968 5808 13520 3312 19568 11440 7536 15376 561 16589 9215 4157 20623 13225 2229 18479 10273 6433 14641 1943 17565 10165 5193 13855 3989 20285 11753 7725 15451 562 16938 8494 4106 12962 2682 18574 10514 6930 14386 2014 18122 9338 5602 14190 3642 19978 12066 7914 15526 563 17287 8797 5079 12699 2111 18669 10755 6403 15155 1061 17655 9535 6011 13501 3295 19671 11355 8103 15601 564 16612 9100 5028 20684 12436 2564 18764 10996 6900 14900 1132 18212 9732 5396 13836 3972 20388 11668 7268 15676 565 16961 8379 4977 13197 3017 18859 11237 6373 14645 1203 17745 9929 5805 14171 3625 20081 11981 7457 15751 566 17310 8682 4926 12934 2446 18954 10454 6870 14390 1274 18302 10126 5190 13482 3278 19774 11270 7646 15826 567 16635 8985 4875 12671 2899 19049 10695 6343 15159 1345 17835 9299 5599 13817 3955 19467 11583 7835 15901 568 16984 8264 4824 12408 2328 19144 10936 6840 14904 1416 18392 9496 6008 14152 3608 20184 11896 8024 15976 569 17333 8567 4773 13169 2781 19239 11177 6313 14649 1487 17925 9693 5393 13463 3261 19877 12209 7189 16051 570 16658 8870 4722 12906 2210 19334 10394 6810 14394 1558 17458 9890 5802 13798 3938 19570 11498 7378 16126 571 17007 9173 4671 20485 12643 2663 19429 10635 6283 15163 1629 18015 10087 5187 14133 3591 20287 11811 7567 16201 572 17356 8452 4620 12380 2092 18500 10876 6780 14908 1700 17548 9260 5596 13444 3244 19980 12124 7756 16276 573 16681 8755 4569 13141 2545 18595 11117 6253 14653 1771 18105 9457 6005 13779 3921 19673 11413 7945 16351 574 17030 9058 4518 20546 12878 2998 18690 10334 6750 14398 1842 17638 9654 5390 14114 3574 20390 11726 8134 15402 575 17379 8337 4467 12615 2427 18785 10575 6223 15167 1913 18195 9851 5799 13425 3227 20083 12039 7299 15477 576 16704 8640 4416 12352 2880 18880 10816 6720 14912 1984 17728 10048 5184 13760 3904 19776 11328 7488 15552 577 17053 8943 4365 20607 13113 2309 18975 11057 6193 14657 1031 18285 9221 5593 14095 3557 19469 11641 7677 15627 578 17402 8222 4314 12850 2762 19070 10274 6690 14402 1102 17818 9418 6002 13406 3210 20186 11954 7866 15702 579 16727 8525 4263 12587 2191 19165 10515 6163 15171 1173 18375 9615 5387 13741 3887 19879 12267 8055 15777 580 17076 8828 4212 20668 12324 2644 19260 10756 6660 14916 1244 17908 9812 5796 14076 3540 19572 11556 7220 15852 581 16401 9131 4161 13085 2073 19355 10997 7157 14661 1315 17441 10009 5181 13387 3193 20289 11869 7409 15927 582 16750 8410 4110 12822 2526 19450 11238 6630 14406 1386 17998 10206 5590 13722 3870 19982 12182 7598 16002 583 17099 8713 5083 20729 12559 2979 18521 10455 7127 15175 1457 17531 9379 5999 14057 3523 19675 11471 7787 16077 584 16424 9016 5032 12296 2408 18616 10696 6600 14920 1528 18088 9576 5384 13368 3176 20392 11784 7976 16152 585 16773 8295 4981 13057 2861 18711 10937 7097 14665 1599 17621 9773 5793 13703 3853 20085 12097 8165 16227 586 17122 8598 4930 12794 2290 18806 11178 6570 14410 1670 18178 9970 5178 14038 3506 19778 11386 7330 16302 587 16447 8901 4879 12531 2743 18901 10395 7067 15179 1741 17711 10167 5587 13349 3159 19471 11699 7519 16377 588 16796 9204 4828 13292 2172 18996 10636 6540 14924 1812 18268 9340 5996 13684 3836 20188 12012 7708 15428 589 17145 8483 4777 13029 2625 19091 10877 7037 14669 1883 17801 9537 5381 14019 3489 19881 11301 7897 15503 590 16470 8786 4726 20530 12766 2054 19186 11118 6510 14414 1954 18358 9734 5790 13330 3142 19574 11614 8086 15578 591 16819 9089 4675 12503 2507 19281 10335 7007 15183 2025 17891 9931 5175 13665 3819 20291 11927 7251 15653 592 17168 8368 4624 13264 2960 19376 10576 6480 14928 1072 17424 10128 5584 14000 3472 19984 12240 7440 15728 593 16493 8671 4573 20591 13001 2389 18447 10817 6977 14673 1143 17981 9301 5993 14335 3125 19677 11529 7629 15803 594 16842 8974 4522 12738 2842 18542 11058 6450 14418 1214 17514 9498 5378 13646 3802 20394 11842 7818 15878 595 17191 8253 4471 12475 2271 18637 10275 6947 15187 1285 18071 9695 5787 13981 3455 20087 12155 8007 15953 596 16516 8556 4420 20652 13236 2724 18732 10516 6420 14932 1356 17604 9892 5172 14316 3108 19780 11444 7172 16028 597 16865 8859 4369 12973 2153 18827 10757 6917 14677 1427 18161 10089 5581 13627 3785 19473 11757 7361 16103 598 17214 9162 4318 12710 2606 18922 10998 6390 14422 1498 17694 9262 5990 13962 3438 20190 12070 7550 16178 599 16539 8441 4267 20713 12447 3059 19017 11239 6887 15191 1569 18251 9459 5375 14297 3091 19883 11359 7739 16253 600 16888 8744 4216 13208 2488 19112 10456 6360 14936 1640 17784 9656 5784 13608 3768 19576 11672 7928 16328 601 17237 9047 4165 12945 2941 19207 10697 6857 14681 1711 18341 9853 5169 13943 3421 20293 11985 8117 15379 602 16562 8326 4114 12682 2370 19302 10938 6330 14426 1782 17874 10050 5578 14278 3074 19986 11274 7282 15454 603 16911 8629 5087 12419 2823 19397 11179 6827 15195 1853 18431 9223 5987 13589 3751 19679 11587 7471 15529 604 17260 8932 5036 13180 2252 18468 10396 6300 14940 1924 17964 9420 5372 13924 3404 20396 11900 7660 15604 605 16585 8211 4985 12917 2705 18563 10637 6797 14685 1995 17497 9617 5781 14259 4081 20089 12213 7849 15679 606 16934 8514 4934 20514 12654 2134 18658 10878 6270 14430 1042 18054 9814 5166 13570 3734 19782 11502 8038 15754 607 17283 8817 4883 12391 2587 18753 11119 6767 15199 1113 17587 10011 5575 13905 3387 19475 11815 7203 15829 608 16608 9120 4832 13152 3040 18848 10336 6240 14944 1184 18144 10208 5984 14240 4064 20192 12128 7392 15904 609 16957 8399 4781 20575 12889 2469 18943 10577 6737 14689 1255 17677 9381 5369 13551 3717 19885 11417 7581 15979 610 17306 8702 4730 12626 2922 19038 10818 6210 14434 1326 18234 9578 5778 13886 3370 19578 11730 7770 16054 611 16631 9005 4679 12363 2351 19133 11059 6707 15203 1397 17767 9775 5163 14221 4047 20295 12043 7959 16129 612 16980 8284 4628 20636 13124 2804 19228 10276 6180 14948 1468 18324 9972 5572 13532 3700 19988 11332 8148 16204 613 17329 8587 4577 12861 2233 19323 10517 6677 14693 1539 17857 10169 5981 13867 3353 19681 11645 7313 16279 614 16654 8890 4526 12598 2686 19418 10758 6150 14438 1610 18414 9342 5366 14202 4030 20398 11958 7502 16354 615 17003 9193 4475 20697 12335 2115 18489 10999 6647 15207 1681 17947 9539 5775 13513 3683 20091 12271 7691 15405 616 17352 8472 4424 13096 2568 18584 11240 7144 14952 1752 17480 9736 5160 13848 3336 19784 11560 7880 15480 617 16677 8775 4373 12833 3021 18679 10457 6617 14697 1823 18037 9933 5569 14183 4013 19477 11873 8069 15555 618 17026 9078 4322 12570 2450 18774 10698 7114 14442 1894 17570 10130 5978 13494 3666 20194 12186 7234 15630 619 17375 8357 4271 12307 2903 18869 10939 6587 15211 1965 18127 9303 5363 13829 3319 19887 11475 7423 15705 620 16700 8660 4220 13068 2332 18964 11180 7084 14956 2036 17660 9500 5772 14164 3996 19580 11788 7612 15780 621 17049 8963 4169 12805 2785 19059 10397 6557 14701 1083 18217 9697 5157 13475 3649 20297 12101 7801 15855 622 17398 8242 4118 20498 12542 2214 19154 10638 7054 14446 1154 17750 9894 5566 13810 3302 19990 11390 7990 15930 623 16723 8545 5091 13303 2667 19249 10879 6527 15215 1225 18307 10091 5975 14145 3979 19683 11703 8179 16005 624 17072 8848 5040 13040 2096 19344 11120 7024 14960 1296 17840 9264 5360 13456 3632 20400 12016 7344 16080 625 16397 9151 4989 20559 12777 2549 19439 10337 6497 14705 1367 18397 9461 5769 13791 3285 20093 11305 7533 16155 626 16746 8430 4938 12514 3002 18510 10578 6994 14450 1438 17930 9658 5154 14126 3962 19786 11618 7722 16230 627 17095 8733 4887 13275 2431 18605 10819 6467 15219 1509 17463 9855 5563 13437 3615 19479 11931 7911 16305 628 16420 9036 4836 20620 13012 2884 18700 11060 6964 14964 1580 18020 10052 5972 13772 3268 20196 12244 8100 16380 629 16769 8315 4785 12749 2313 18795 10277 6437 14709 1651 17553 9225 5357 14107 3945 19889 11533 7265 15431 630 17118 8618 4734 12486 2766 18890 10518 6934 14454 1722 18110 9422 5766 13418 3598 19582 11846 7454 15506 631 16443 8921 4683 20681 13247 2195 18985 10759 6407 15223 1793 17643 9619 5151 13753 3251 20299 12159 7643 15581 632 16792 8200 4632 12984 2648 19080 11000 6904 14968 1864 18200 9816 5560 14088 3928 19992 11448 7832 15656 633 17141 8503 4581 12721 2077 19175 11241 6377 14713 1935 17733 10013 5969 13399 3581 19685 11761 8021 15731 634 16466 8806 4530 12458 2530 19270 10458 6874 14458 2006 18290 10210 5354 13734 3234 20402 12074 7186 15806 635 16815 9109 4479 13219 2983 19365 10699 6347 15227 1053 17823 9383 5763 14069 3911 20095 11363 7375 15881 636 17164 8388 4428 12956 2412 18436 10940 6844 14972 1124 18380 9580 5148 13380 3564 19788 11676 7564 15956 637 16489 8691 4377 12693 2865 18531 11181 6317 14717 1195 17913 9777 5557 13715 3217 19481 11989 7753 16031 638 16838 8994 4326 20482 12430 2294 18626 10398 6814 14462 1266 17446 9974 5966 14050 3894 20198 11278 7942 16106 639 17187 8273 4275 13191 2747 18721 10639 6287 15231 1337 18003 10171 5351 13361 3547 19891 11591 8131 16181 640 16512 8576 4224 12928 2176 18816 10880 6784 14976 1408 17536 9344 5760 13696 3200 19584 11904 7296 16256 641 16861 8879 4173 20543 12665 2629 18911 11121 6257 14721 1479 18093 9541 5145 14031 3877 20301 12217 7485 16331 642 17210 9182 4122 12402 2058 19006 10338 6754 14466 1550 17626 9738 5554 13342 3530 19994 11506 7674 15382 643 16535 8461 5095 13163 2511 19101 10579 6227 15235 1621 18183 9935 5963 13677 3183 19687 11819 7863 15457 644 16884 8764 5044 20604 12900 2964 19196 10820 6724 14980 1692 17716 10132 5348 14012 3860 20404 12132 8052 15532 645 17233 9067 4993 12637 2393 19291 11061 6197 14725 1763 18273 9305 5757 13323 3513 20097 11421 7217 15607 646 16558 8346 4942 12374 2846 19386 10278 6694 14470 1834 17806 9502 5142 13658 3166 19790 11734 7406 15682 647 16907 8649 4891 20665 13135 2275 18457 10519 6167 15239 1905 18363 9699 5551 13993 3843 19483 12047 7595 15757 648 17256 8952 4840 12872 2728 18552 10760 6664 14984 1976 17896 9896 5960 14328 3496 20200 11336 7784 15832 649 16581 8231 4789 12609 2157 18647 11001 7161 14729 2047 17429 10093 5345 13639 3149 19893 11649 7973 15907 650 16930 8534 4738 20726 12346 2610 18742 11242 6634 14474 1094 17986 9266 5754 13974 3826 19586 11962 8162 15982 651 17279 8837 4687 13107 3063 18837 10459 7131 15243 1165 17519 9463 5139 14309 3479 20303 12275 7327 16057 652 16604 9140 4636 12844 2492 18932 10700 6604 14988 1236 18076 9660 5548 13620 3132 19996 11564 7516 16132 653 16953 8419 4585 12581 2945 19027 10941 7101 14733 1307 17609 9857 5957 13955 3809 19689 11877 7705 16207 654 17302 8722 4534 12318 2374 19122 11182 6574 14478 1378 18166 10054 5342 14290 3462 20406 12190 7894 16282 655 16627 9025 4483 13079 2827 19217 10399 7071 15247 1449 17699 9227 5751 13601 3115 20099 11479 8083 16357 656 16976 8304 4432 12816 2256 19312 10640 6544 14992 1520 18256 9424 5136 13936 3792 19792 11792 7248 15408 657 17325 8607 4381 20527 12553 2709 19407 10881 7041 14737 1591 17789 9621 5545 14271 3445 19485 12105 7437 15483 658 16650 8910 4330 12290 2138 18478 11122 6514 14482 1662 18346 9818 5954 13582 3098 20202 11394 7626 15558 659 16999 9213 4279 13051 2591 18573 10339 7011 15251 1733 17879 10015 5339 13917 3775 19895 11707 7815 15633 660 17348 8492 4228 20588 12788 3044 18668 10580 6484 14996 1804 17412 10212 5748 14252 3428 19588 12020 8004 15708 661 16673 8795 4177 12525 2473 18763 10821 6981 14741 1875 17969 9385 5133 13563 3081 20305 11309 7169 15783 662 17022 9098 4126 13286 2926 18858 11062 6454 14486 1946 17502 9582 5542 13898 3758 19998 11622 7358 15858 663 17371 8377 5099 20649 13023 2355 18953 10279 6951 15255 2017 18059 9779 5951 14233 3411 19691 11935 7547 15933 664 16696 8680 5048 12760 2808 19048 10520 6424 15000 1064 17592 9976 5336 13544 4088 20408 12248 7736 16008 665 17045 8983 4997 12497 2237 19143 10761 6921 14745 1135 18149 10173 5745 13879 3741 20101 11537 7925 16083 666 17394 8262 4946 20710 13258 2690 19238 11002 6394 14490 1206 17682 9346 5130 14214 3394 19794 11850 8114 16158 667 16719 8565 4895 12995 2119 19333 11243 6891 15259 1277 18239 9543 5539 13525 4071 19487 12163 7279 16233 668 17068 8868 4844 12732 2572 19428 10460 6364 15004 1348 17772 9740 5948 13860 3724 20204 11452 7468 16308 669 16393 9171 4793 12469 3025 18499 10701 6861 14749 1419 18329 9937 5333 14195 3377 19897 11765 7657 16383 670 16742 8450 4742 13230 2454 18594 10942 6334 14494 1490 17862 10134 5742 13506 4054 19590 12078 7846 15434 671 17091 8753 4691 12967 2907 18689 11183 6831 15263 1561 18419 9307 5127 13841 3707 20307 11367 8035 15509 672 16416 9056 4640 12704 2336 18784 10400 6304 15008 1632 17952 9504 5536 14176 3360 20000 11680 7200 15584 673 16765 8335 4589 20511 12441 2789 18879 10641 6801 14753 1703 17485 9701 5945 13487 4037 19693 11993 7389 15659 674 17114 8638 4538 13202 2218 18974 10882 6274 14498 1774 18042 9898 5330 13822 3690 20410 11282 7578 15734 675 16439 8941 4487 12939 2671 19069 11123 6771 15267 1845 17575 10095 5739 14157 3343 20103 11595 7767 15809 676 16788 8220 4436 20572 12676 2100 19164 10340 6244 15012 1916 18132 9268 5124 13468 4020 19796 11908 7956 15884 677 17137 8523 4385 12413 2553 19259 10581 6741 14757 1987 17665 9465 5533 13803 3673 19489 12221 8145 15959 678 16462 8826 4334 13174 3006 19354 10822 6214 14502 1034 18222 9662 5942 14138 3326 20206 11510 7310 16034 679 16811 9129 4283 20633 12911 2435 19449 11063 6711 15271 1105 17755 9859 5327 13449 4003 19899 11823 7499 16109 680 17160 8408 4232 12648 2888 18520 10280 6184 15016 1176 18312 10056 5736 13784 3656 19592 12136 7688 16184 681 16485 8711 4181 12385 2317 18615 10521 6681 14761 1247 17845 9229 5121 14119 3309 20309 11425 7877 16259 682 16834 9014 4130 20694 13146 2770 18710 10762 6154 14506 1318 18402 9426 5530 13430 3986 20002 11738 8066 16334 683 17183 8293 5103 12883 2199 18805 11003 6651 15275 1389 17935 9623 5939 13765 3639 19695 12051 7231 15385 684 16508 8596 5052 12620 2652 18900 11244 7148 15020 1460 17468 9820 5324 14100 3292 20412 11340 7420 15460 685 16857 8899 5001 12357 2081 18995 10461 6621 14765 1531 18025 10017 5733 13411 3969 20105 11653 7609 15535 686 17206 9202 4950 13118 2534 19090 10702 7118 14510 1602 17558 10214 6142 13746 3622 19798 11966 7798 15610 687 16531 8481 4899 12855 2987 19185 10943 6591 15279 1673 18115 9387 5527 14081 3275 19491 12279 7987 15685 688 16880 8784 4848 12592 2416 19280 11184 7088 15024 1744 17648 9584 5936 13392 3952 20208 11568 8176 15760 689 17229 9087 4797 20495 12329 2869 19375 10401 6561 14769 1815 18205 9781 5321 13727 3605 19901 11881 7341 15835 690 16554 8366 4746 13090 2298 18446 10642 7058 14514 1886 17738 9978 5730 14062 3258 19594 12194 7530 15910 691 16903 8669 4695 12827 2751 18541 10883 6531 15283 1957 18295 10175 6139 13373 3935 20311 11483 7719 15985 692 17252 8972 4644 20556 12564 2180 18636 11124 7028 15028 2028 17828 9348 5524 13708 3588 20004 11796 7908 16060 693 16577 8251 4593 12301 2633 18731 10341 6501 14773 1075 18385 9545 5933 14043 3241 19697 12109 8097 16135 694 16926 8554 4542 13062 2062 18826 10582 6998 14518 1146 17918 9742 5318 13354 3918 20414 11398 7262 16210 695 17275 8857 4491 20617 12799 2515 18921 10823 6471 15287 1217 17451 9939 5727 13689 3571 20107 11711 7451 16285 696 16600 9160 4440 12536 2968 19016 11064 6968 15032 1288 18008 10136 6136 14024 3224 19800 12024 7640 16360 697 16949 8439 4389 13297 2397 19111 10281 6441 14777 1359 17541 9309 5521 13335 3901 19493 11313 7829 15411 698 17298 8742 4338 20678 13034 2850 19206 10522 6938 14522 1430 18098 9506 5930 13670 3554 20210 11626 8018 15486 699 16623 9045 4287 12771 2279 19301 10763 6411 15291 1501 17631 9703 5315 14005 3207 19903 11939 7183 15561 700 16972 8324 4236 12508 2732 19396 11004 6908 15036 1572 18188 9900 5724 13316 3884 19596 12252 7372 15636 701 17321 8627 4185 13269 2161 18467 11245 6381 14781 1643 17721 10097 6133 13651 3537 20313 11541 7561 15711 702 16646 8930 4134 13006 2614 18562 10462 6878 14526 1714 18278 9270 5518 13986 3190 20006 11854 7750 15786 703 16995 8209 5107 12743 3067 18657 10703 6351 15295 1785 17811 9467 5927 14321 3867 19699 12167 7939 15861 704 17344 8512 5056 12480 2496 18752 10944 6848 15040 1856 18368 9664 5312 13632 3520 20416 11456 8128 15936 705 16669 8815 5005 13241 2949 18847 11185 6321 14785 1927 17901 9861 5721 13967 3173 20109 11769 7293 16011 706 17018 9118 4954 12978 2378 18942 10402 6818 14530 1998 17434 10058 6130 14302 3850 19802 12082 7482 16086 707 17367 8397 4903 12715 2831 19037 10643 6291 15299 1045 17991 9231 5515 13613 3503 19495 11371 7671 16161 708 16692 8700 4852 20540 12452 2260 19132 10884 6788 15044 1116 17524 9428 5924 13948 3156 20212 11684 7860 16236 709 17041 9003 4801 13213 2713 19227 11125 6261 14789 1187 18081 9625 5309 14283 3833 19905 11997 8049 16311 710 17390 8282 4750 12950 2142 19322 10342 6758 14534 1258 17614 9822 5718 13594 3486 19598 11286 7214 15362 711 16715 8585 4699 20601 12687 2595 19417 10583 6231 15303 1329 18171 10019 6127 13929 3139 20315 11599 7403 15437 712 17064 8888 4648 12424 3048 18488 10824 6728 15048 1400 17704 10216 5512 14264 3816 20008 11912 7592 15512 713 16389 9191 4597 13185 2477 18583 11065 6201 14793 1471 18261 9389 5921 13575 3469 19701 12225 7781 15587 714 16738 8470 4546 20662 12922 2930 18678 10282 6698 14538 1542 17794 9586 5306 13910 3122 20418 11514 7970 15662 715 17087 8773 4495 12659 2359 18773 10523 6171 15307 1613 18351 9783 5715 14245 3799 20111 11827 8159 15737 716 16412 9076 4444 12396 2812 18868 10764 6668 15052 1684 17884 9980 6124 13556 3452 19804 12140 7324 15812 717 16761 8355 4393 20723 13157 2241 18963 11005 7165 14797 1755 17417 10177 5509 13891 3105 19497 11429 7513 15887 718 17110 8658 4342 12894 2694 19058 11246 6638 14542 1826 17974 9350 5918 14226 3782 20214 11742 7702 15962 719 16435 8961 4291 12631 2123 19153 10463 7135 15311 1897 17507 9547 5303 13537 3435 19907 12055 7891 16037 720 16784 8240 4240 12368 2576 19248 10704 6608 15056 1968 18064 9744 5712 13872 3088 19600 11344 8080 16112 721 17133 8543 4189 13129 3029 19343 10945 7105 14801 2039 17597 9941 6121 14207 3765 20317 11657 7245 16187 722 16458 8846 4138 12866 2458 19438 11186 6578 14546 1086 18154 10138 5506 13518 3418 20010 11970 7434 16262 723 16807 9149 5111 12603 2911 18509 10403 7075 15315 1157 17687 9311 5915 13853 4095 19703 12283 7623 16337 724 17156 8428 5060 20524 12340 2340 18604 10644 6548 15060 1228 18244 9508 5300 14188 3748 20420 11572 7812 15388 725 16481 8731 5009 13101 2793 18699 10885 7045 14805 1299 17777 9705 5709 13499 3401 20113 11885 8001 15463 726 16830 9034 4958 12838 2222 18794 11126 6518 14550 1370 18334 9902 6118 13834 4078 19806 12198 8190 15538 727 17179 8313 4907 20585 12575 2675 18889 10343 7015 15319 1441 17867 10099 5503 14169 3731 19499 11487 7355 15613 728 16504 8616 4856 12312 2104 18984 10584 6488 15064 1512 18424 9272 5912 13480 3384 20216 11800 7544 15688 729 16853 8919 4805 13073 2557 19079 10825 6985 14809 1583 17957 9469 5297 13815 4061 19909 12113 7733 15763 730 17202 8198 4754 20646 12810 3010 19174 11066 6458 14554 1654 17490 9666 5706 14150 3714 19602 11402 7922 15838 731 16527 8501 4703 12547 2439 19269 10283 6955 15323 1725 18047 9863 6115 13461 3367 20319 11715 8111 15913 732 16876 8804 4652 13308 2892 19364 10524 6428 15068 1796 17580 10060 5500 13796 4044 20012 12028 7276 15988 733 17225 9107 4601 20707 13045 2321 18435 10765 6925 14813 1867 18137 9233 5909 14131 3697 19705 11317 7465 16063 734 16550 8386 4550 12782 2774 18530 11006 6398 14558 1938 17670 9430 5294 13442 3350 20422 11630 7654 16138 735 16899 8689 4499 12519 2203 18625 11247 6895 15327 2009 18227 9627 5703 13777 4027 20115 11943 7843 16213 736 17248 8992 4448 13280 2656 18720 10464 6368 15072 1056 17760 9824 6112 14112 3680 19808 12256 8032 16288 737 16573 8271 4397 13017 2085 18815 10705 6865 14817 1127 18317 10021 5497 13423 3333 19501 11545 7197 16363 738 16922 8574 4346 12754 2538 18910 10946 6338 14562 1198 17850 10218 5906 13758 4010 20218 11858 7386 15414 739 17271 8877 4295 12491 2991 19005 11187 6835 15331 1269 18407 9391 5291 14093 3663 19911 12171 7575 15489 740 16596 9180 4244 20508 13252 2420 19100 10404 6308 15076 1340 17940 9588 5700 13404 3316 19604 11460 7764 15564 741 16945 8459 4193 12989 2873 19195 10645 6805 14821 1411 17473 9785 6109 13739 3993 20321 11773 7953 15639 742 17294 8762 4142 12726 2302 19290 10886 6278 14566 1482 18030 9982 5494 14074 3646 20014 12086 8142 15714 743 16619 9065 5115 20569 12463 2755 19385 11127 6775 15335 1553 17563 10179 5903 13385 3299 19707 11375 7307 15789 744 16968 8344 5064 13224 2184 18456 10344 6248 15080 1624 18120 9352 5288 13720 3976 20424 11688 7496 15864 745 17317 8647 5013 12961 2637 18551 10585 6745 14825 1695 17653 9549 5697 14055 3629 20117 12001 7685 15939 746 16642 8950 4962 20630 12698 2066 18646 10826 6218 14570 1766 18210 9746 6106 13366 3282 19810 11290 7874 16014 747 16991 8229 4911 12435 2519 18741 11067 6715 15339 1837 17743 9943 5491 13701 3959 19503 11603 8063 16089 748 17340 8532 4860 13196 2972 18836 10284 6188 15084 1908 18300 10140 5900 14036 3612 20220 11916 7228 16164 749 16665 8835 4809 20691 12933 2401 18931 10525 6685 14829 1979 17833 9313 5285 13347 3265 19913 12229 7417 16239 750 17014 9138 4758 12670 2854 19026 10766 6158 14574 1026 18390 9510 5694 13682 3942 19606 11518 7606 16314 751 17363 8417 4707 12407 2283 19121 11007 6655 15343 1097 17923 9707 6103 14017 3595 20323 11831 7795 15365 752 16688 8720 4656 13168 2736 19216 11248 7152 15088 1168 17456 9904 5488 13328 3248 20016 12144 7984 15440 753 17037 9023 4605 12905 2165 19311 10465 6625 14833 1239 18013 10101 5897 13663 3925 19709 11433 8173 15515 754 17386 8302 4554 12642 2618 19406 10706 7122 14578 1310 17546 9274 5282 13998 3578 20426 11746 7338 15590 755 16711 8605 4503 12379 3071 18477 10947 6595 15347 1381 18103 9471 5691 14333 3231 20119 12059 7527 15665 756 17060 8908 4452 20492 13140 2500 18572 11188 7092 15092 1452 17636 9668 6100 13644 3908 19812 11348 7716 15740 757 16385 9211 4401 12877 2953 18667 10405 6565 14837 1523 18193 9865 5485 13979 3561 19505 11661 7905 15815 758 16734 8490 4350 12614 2382 18762 10646 7062 14582 1594 17726 10062 5894 14314 3214 20222 11974 8094 15890 759 17083 8793 4299 20553 12351 2835 18857 10887 6535 15351 1665 18283 9235 5279 13625 3891 19915 12287 7259 15965 760 16408 9096 4248 13112 2264 18952 11128 7032 15096 1736 17816 9432 5688 13960 3544 19608 11576 7448 16040 761 16757 8375 4197 12849 2717 19047 10345 6505 14841 1807 18373 9629 6097 14295 3197 20325 11889 7637 16115 762 17106 8678 4146 20614 12586 2146 19142 10586 7002 14586 1878 17906 9826 5482 13606 3874 20018 12202 7826 16190 763 16431 8981 5119 12323 2599 19237 10827 6475 15355 1949 17439 10023 5891 13941 3527 19711 11491 8015 16265 764 16780 8260 5068 13084 3052 19332 11068 6972 15100 2020 17996 10220 5276 14276 3180 20428 11804 7180 16340 765 17129 8563 5017 20675 12821 2481 19427 10285 6445 14845 1067 17529 9393 5685 13587 3857 20121 12117 7369 15391 766 16454 8866 4966 12558 2934 18498 10526 6942 14590 1138 18086 9590 6094 13922 3510 19814 11406 7558 15466 767 16803 9169 4915 12295 2363 18593 10767 6415 15359 1209 17619 9787 5479 14257 3163 19507 11719 7747 15541 768 17152 8448 4864 13056 2816 18688 11008 6912 15104 1280 18176 9984 5888 13568 3840 20224 12032 7936 15616 769 16477 8751 4813 12793 2245 18783 11249 6385 14849 1351 17709 10181 5273 13903 3493 19917 11321 8125 15691 770 16826 9054 4762 12530 2698 18878 10466 6882 14594 1422 18266 9354 5682 14238 3146 19610 11634 7290 15766 771 17175 8333 4711 13291 2127 18973 10707 6355 14339 1493 17799 9551 6091 13549 3823 20327 11947 7479 15841 772 16500 8636 4660 13028 2580 19068 10948 6852 15108 1564 18356 9748 5476 13884 3476 20020 12260 7668 15916 773 16849 8939 4609 12765 3033 19163 11189 6325 14853 1635 17889 9945 5885 14219 3129 19713 11549 7857 15991 774 17198 8218 4558 12502 2462 19258 10406 6822 14598 1706 17422 10142 5270 13530 3806 20430 11862 8046 16066 775 16523 8521 4507 20537 13263 2915 19353 10647 6295 14343 1777 17979 9315 5679 13865 3459 20123 12175 7211 16141 776 16872 8824 4456 13000 2344 19448 10888 6792 15112 1848 17512 9512 6088 14200 3112 19816 11464 7400 16216 777 17221 9127 4405 12737 2797 18519 11129 6265 14857 1919 18069 9709 5473 13511 3789 19509 11777 7589 16291 778 16546 8406 4354 20598 12474 2226 18614 10346 6762 14602 1990 17602 9906 5882 13846 3442 20226 12090 7778 16366 779 16895 8709 4303 13235 2679 18709 10587 6235 14347 1037 18159 10103 5267 14181 3095 19919 11379 7967 15417 780 17244 9012 4252 12972 2108 18804 10828 6732 15116 1108 17692 9276 5676 13492 3772 19612 11692 8156 15492 781 16569 8291 4201 20659 12709 2561 18899 11069 6205 14861 1179 18249 9473 6085 13827 3425 20329 12005 7321 15567 782 16918 8594 4150 12446 3014 18994 10286 6702 14606 1250 17782 9670 5470 14162 3078 20022 11294 7510 15642 783 17267 8897 4099 13207 2443 19089 10527 6175 14351 1321 18339 9867 5879 13473 3755 19715 11607 7699 15717 784 16592 9200 5072 20720 12944 2896 19184 10768 6672 15120 1392 17872 10064 5264 13808 3408 20432 11920 7888 15792 785 16941 8479 5021 12681 2325 19279 11009 6145 14865 1463 18429 9237 5673 14143 4085 20125 12233 8077 15867 786 17290 8782 4970 12418 2778 19374 11250 6642 14610 1534 17962 9434 6082 13454 3738 19818 11522 7242 15942 787 16615 9085 4919 13179 2207 18445 10467 7139 14355 1605 17495 9631 5467 13789 3391 19511 11835 7431 16017 788 16964 8364 4868 12916 2660 18540 10708 6612 15124 1676 18052 9828 5876 14124 4068 20228 12148 7620 16092 789 17313 8667 4817 12653 2089 18635 10949 7109 14869 1747 17585 10025 5261 13435 3721 19921 11437 7809 16167 790 16638 8970 4766 12390 2542 18730 11190 6582 14614 1818 18142 10222 5670 13770 3374 19614 11750 7998 16242 791 16987 8249 4715 20521 13151 2995 18825 10407 7079 14359 1889 17675 9395 6079 14105 4051 20331 12063 8187 16317 792 17336 8552 4664 12888 2424 18920 10648 6552 15128 1960 18232 9592 5464 13416 3704 20024 11352 7352 15368 793 16661 8855 4613 12625 2877 19015 10889 7049 14873 2031 17765 9789 5873 13751 3357 19717 11665 7541 15443 794 17010 9158 4562 20582 12362 2306 19110 11130 6522 14618 1078 18322 9986 5258 14086 4034 20434 11978 7730 15518 795 17359 8437 4511 13123 2759 19205 10347 7019 14363 1149 17855 10183 5667 13397 3687 20127 11267 7919 15593 796 16684 8740 4460 12860 2188 19300 10588 6492 15132 1220 18412 9356 6076 13732 3340 19820 11580 8108 15668 797 17033 9043 4409 20643 12597 2641 19395 10829 6989 14877 1291 17945 9553 5461 14067 4017 19513 11893 7273 15743 798 17382 8322 4358 12334 2070 18466 11070 6462 14622 1362 17478 9750 5870 13378 3670 20230 12206 7462 15818 799 16707 8625 4307 13095 2523 18561 10287 6959 14367 1433 18035 9947 5255 13713 3323 19923 11495 7651 15893 800 17056 8928 4256 20704 12832 2976 18656 10528 6432 15136 1504 17568 10144 5664 14048 4000 19616 11808 7840 15968 801 17405 8207 4205 12569 2405 18751 10769 6929 14881 1575 18125 9317 6073 13359 3653 20333 12121 8029 16043 802 16730 8510 4154 12306 2858 18846 11010 6402 14626 1646 17658 9514 5458 13694 3306 20026 11410 7194 16118 803 17079 8813 4103 13067 2287 18941 11251 6899 14371 1717 18215 9711 5867 14029 3983 19719 11723 7383 16193 804 16404 9116 5076 12804 2740 19036 10468 6372 15140 1788 17748 9908 5252 13340 3636 20436 12036 7572 16268 805 16753 8395 5025 12541 2169 19131 10709 6869 14885 1859 18305 10105 5661 13675 3289 20129 11325 7761 16343 806 17102 8698 4974 13302 2622 19226 10950 6342 14630 1930 17838 9278 6070 14010 3966 19822 11638 7950 15394 807 16427 9001 4923 20505 13039 2051 19321 11191 6839 14375 2001 18395 9475 5455 13321 3619 19515 11951 8139 15469 808 16776 8280 4872 12776 2504 19416 10408 6312 15144 1048 17928 9672 5864 13656 3272 20232 12264 7304 15544 809 17125 8583 4821 12513 2957 18487 10649 6809 14889 1119 17461 9869 5249 13991 3949 19925 11553 7493 15619 810 16450 8886 4770 20566 13274 2386 18582 10890 6282 14634 1190 18018 10066 5658 14326 3602 19618 11866 7682 15694 811 16799 9189 4719 13011 2839 18677 11131 6779 14379 1261 17551 9239 6067 13637 3255 20335 12179 7871 15769 812 17148 8468 4668 12748 2268 18772 10348 6252 15148 1332 18108 9436 5452 13972 3932 20028 11468 8060 15844 813 16473 8771 4617 20627 12485 2721 18867 10589 6749 14893 1403 17641 9633 5861 14307 3585 19721 11781 7225 15919 814 16822 9074 4566 13246 2150 18962 10830 6222 14638 1474 18198 9830 5246 13618 3238 20438 12094 7414 15994 815 17171 8353 4515 12983 2603 19057 11071 6719 14383 1545 17731 10027 5655 13953 3915 20131 11383 7603 16069 816 16496 8656 4464 20688 12720 3056 19152 10288 6192 15152 1616 18288 10224 6064 14288 3568 19824 11696 7792 16144 817 16845 8959 4413 12457 2485 19247 10529 6689 14897 1687 17821 9397 5449 13599 3221 19517 12009 7981 16219 818 17194 8238 4362 13218 2938 19342 10770 6162 14642 1758 18378 9594 5858 13934 3898 20234 11298 8170 16294 819 16519 8541 4311 12955 2367 19437 11011 6659 14387 1829 17911 9791 5243 14269 3551 19927 11611 7335 16369 820 16868 8844 4260 12692 2820 18508 11252 7156 15156 1900 17444 9988 5652 13580 3204 19620 11924 7524 15420 821 17217 9147 4209 12429 2249 18603 10469 6629 14901 1971 18001 10185 6061 13915 3881 20337 12237 7713 15495 822 16542 8426 4158 13190 2702 18698 10710 7126 14646 2042 17534 9358 5446 14250 3534 20030 11526 7902 15570 823 16891 8729 4107 20489 12927 2131 18793 10951 6599 14391 1089 18091 9555 5855 13561 3187 19723 11839 8091 15645 824 17240 9032 5080 12664 2584 18888 11192 7096 15160 1160 17624 9752 5240 13896 3864 20440 12152 7256 15720 825 16565 8311 5029 12401 3037 18983 10409 6569 14905 1231 18181 9949 5649 14231 3517 20133 11441 7445 15795 826 16914 8614 4978 20550 13162 2466 19078 10650 7066 14650 1302 17714 10146 6058 13542 3170 19826 11754 7634 15870 827 17263 8917 4927 12899 2919 19173 10891 6539 14395 1373 18271 9319 5443 13877 3847 19519 12067 7823 15945 828 16588 8196 4876 12636 2348 19268 11132 7036 15164 1444 17804 9516 5852 14212 3500 20236 11356 8012 16020 829 16937 8499 4825 20611 12373 2801 19363 10349 6509 14909 1515 18361 9713 5237 13523 3153 19929 11669 7177 16095 830 17286 8802 4774 13134 2230 18434 10590 7006 14654 1586 17894 9910 5646 13858 3830 19622 11982 7366 16170 831 16611 9105 4723 12871 2683 18529 10831 6479 14399 1657 17427 10107 6055 14193 3483 20339 11271 7555 16245 832 16960 8384 4672 20672 12608 2112 18624 11072 6976 15168 1728 17984 9280 5440 13504 3136 20032 11584 7744 16320 833 17309 8687 4621 12345 2565 18719 10289 6449 14913 1799 17517 9477 5849 13839 3813 19725 11897 7933 15371 834 16634 8990 4570 13106 3018 18814 10530 6946 14658 1870 18074 9674 5234 14174 3466 20442 12210 8122 15446 835 16983 8269 4519 12843 2447 18909 10771 6419 14403 1941 17607 9871 5643 13485 3119 20135 11499 7287 15521 836 17332 8572 4468 12580 2900 19004 11012 6916 15172 2012 18164 10068 6052 13820 3796 19828 11812 7476 15596 837 16657 8875 4417 12317 2329 19099 11253 6389 14917 1059 17697 9241 5437 14155 3449 19521 12125 7665 15671 838 17006 9178 4366 13078 2782 19194 10470 6886 14662 1130 18254 9438 5846 13466 3102 20238 11414 7854 15746 839 17355 8457 4315 12815 2211 19289 10711 6359 14407 1201 17787 9635 5231 13801 3779 19931 11727 8043 15821 840 16680 8760 4264 12552 2664 19384 10952 6856 15176 1272 18344 9832 5640 14136 3432 19624 12040 7208 15896 841 17029 9063 4213 12289 2093 18455 11193 6329 14921 1343 17877 10029 6049 13447 3085 20341 11329 7397 15971 842 17378 8342 4162 20534 13050 2546 18550 10410 6826 14666 1414 17410 10226 5434 13782 3762 20034 11642 7586 16046 843 16703 8645 4111 12787 2999 18645 10651 6299 14411 1485 17967 9399 5843 14117 3415 19727 11955 7775 16121 844 17052 8948 5084 12524 2428 18740 10892 6796 15180 1556 17500 9596 5228 13428 4092 20444 12268 7964 16196 845 17401 8227 5033 20595 13285 2881 18835 11133 6269 14925 1627 18057 9793 5637 13763 3745 20137 11557 8153 16271 846 16726 8530 4982 13022 2310 18930 10350 6766 14670 1698 17590 9990 6046 14098 3398 19830 11870 7318 16346 847 17075 8833 4931 12759 2763 19025 10591 6239 14415 1769 18147 10187 5431 13409 4075 19523 12183 7507 15397 848 16400 9136 4880 20656 12496 2192 19120 10832 6736 15184 1840 17680 9360 5840 13744 3728 20240 11472 7696 15472 849 16749 8415 4829 13257 2645 19215 11073 6209 14929 1911 18237 9557 5225 14079 3381 19933 11785 7885 15547 850 17098 8718 4778 12994 2074 19310 10290 6706 14674 1982 17770 9754 5634 13390 4058 19626 12098 8074 15622 851 16423 9021 4727 20717 12731 2527 19405 10531 6179 14419 1029 18327 9951 6043 13725 3711 20343 11387 7239 15697 852 16772 8300 4676 12468 2980 18476 10772 6676 15188 1100 17860 10148 5428 14060 3364 20036 11700 7428 15772 853 17121 8603 4625 13229 2409 18571 11013 6149 14933 1171 18417 9321 5837 13371 4041 19729 12013 7617 15847 854 16446 8906 4574 12966 2862 18666 11254 6646 14678 1242 17950 9518 5222 13706 3694 20446 11302 7806 15922 855 16795 9209 4523 12703 2291 18761 10471 7143 14423 1313 17483 9715 5631 14041 3347 20139 11615 7995 15997 856 17144 8488 4472 12440 2744 18856 10712 6616 15192 1384 18040 9912 6040 13352 4024 19832 11928 8184 16072 857 16469 8791 4421 13201 2173 18951 10953 7113 14937 1455 17573 10109 5425 13687 3677 19525 12241 7349 16147 858 16818 9094 4370 20518 12938 2626 19046 11194 6586 14682 1526 18130 9282 5834 14022 3330 20242 11530 7538 16222 859 17167 8373 4319 12675 2055 19141 10411 7083 14427 1597 17663 9479 5219 13333 4007 19935 11843 7727 16297 860 16492 8676 4268 12412 2508 19236 10652 6556 15196 1668 18220 9676 5628 13668 3660 19628 12156 7916 16372 861 16841 8979 4217 20579 13173 2961 19331 10893 7053 14941 1739 17753 9873 6037 14003 3313 20345 11445 8105 15423 862 17190 8258 4166 12910 2390 19426 11134 6526 14686 1810 18310 10070 5422 13314 3990 20038 11758 7270 15498 863 16515 8561 4115 12647 2843 18497 10351 7023 14431 1881 17843 9243 5831 13649 3643 19731 12071 7459 15573 864 16864 8864 5088 20640 12384 2272 18592 10592 6496 15200 1952 18400 9440 5216 13984 3296 20448 11360 7648 15648 865 17213 9167 5037 13145 2725 18687 10833 6993 14945 2023 17933 9637 5625 14319 3973 20141 11673 7837 15723 866 16538 8446 4986 12882 2154 18782 11074 6466 14690 1070 17466 9834 6034 13630 3626 19834 11986 8026 15798 867 16887 8749 4935 20701 12619 2607 18877 10291 6963 14435 1141 18023 10031 5419 13965 3279 19527 11275 7191 15873 868 17236 9052 4884 12356 3060 18972 10532 6436 15204 1212 17556 10228 5828 14300 3956 20244 11588 7380 15948 869 16561 8331 4833 13117 2489 19067 10773 6933 14949 1283 18113 9401 5213 13611 3609 19937 11901 7569 16023 870 16910 8634 4782 12854 2942 19162 11014 6406 14694 1354 17646 9598 5622 13946 3262 19630 12214 7758 16098 871 17259 8937 4731 12591 2371 19257 11255 6903 14439 1425 18203 9795 6031 14281 3939 20347 11503 7947 16173 872 16584 8216 4680 12328 2824 19352 10472 6376 15208 1496 17736 9992 5416 13592 3592 20040 11816 8136 16248 873 16933 8519 4629 13089 2253 19447 10713 6873 14953 1567 18293 10189 5825 13927 3245 19733 12129 7301 16323 874 17282 8822 4578 20502 12826 2706 18518 10954 6346 14698 1638 17826 9362 5210 14262 3922 20450 11418 7490 15374 875 16607 9125 4527 12563 2135 18613 11195 6843 14443 1709 18383 9559 5619 13573 3575 20143 11731 7679 15449 876 16956 8404 4476 12300 2588 18708 10412 6316 15212 1780 17916 9756 6028 13908 3228 19836 12044 7868 15524 877 17305 8707 4425 20563 13061 3041 18803 10653 6813 14957 1851 17449 9953 5413 14243 3905 19529 11333 8057 15599 878 16630 9010 4374 12798 2470 18898 10894 6286 14702 1922 18006 10150 5822 13554 3558 20246 11646 7222 15674 879 16979 8289 4323 12535 2923 18993 11135 6783 14447 1993 17539 9323 5207 13889 3211 19939 11959 7411 15749 880 17328 8592 4272 20624 13296 2352 19088 10352 6256 15216 1040 18096 9520 5616 14224 3888 19632 12272 7600 15824 881 16653 8895 4221 13033 2805 19183 10593 6753 14961 1111 17629 9717 6025 13535 3541 20349 11561 7789 15899 882 17002 9198 4170 12770 2234 19278 10834 6226 14706 1182 18186 9914 5410 13870 3194 20042 11874 7978 15974 883 17351 8477 4119 20685 12507 2687 19373 11075 6723 14451 1253 17719 10111 5819 14205 3871 19735 12187 8167 16049 884 16676 8780 5092 13268 2116 18444 10292 6196 15220 1324 18276 9284 5204 13516 3524 20452 11476 7332 16124 885 17025 9083 5041 13005 2569 18539 10533 6693 14965 1395 17809 9481 5613 13851 3177 20145 11789 7521 16199 886 17374 8362 4990 12742 3022 18634 10774 6166 14710 1466 18366 9678 6022 14186 3854 19838 12102 7710 16274 887 16699 8665 4939 12479 2451 18729 11015 6663 14455 1537 17899 9875 5407 13497 3507 19531 11391 7899 16349 888 17048 8968 4888 13240 2904 18824 11256 7160 15224 1608 17432 10072 5816 13832 3160 20248 11704 8088 15400 889 17397 8247 4837 12977 2333 18919 10473 6633 14969 1679 17989 9245 5201 14167 3837 19941 12017 7253 15475 890 16722 8550 4786 20486 12714 2786 19014 10714 7130 14714 1750 17522 9442 5610 13478 3490 19634 11306 7442 15550 891 17071 8853 4735 12451 2215 19109 10955 6603 14459 1821 18079 9639 6019 13813 3143 20351 11619 7631 15625 892 16396 9156 4684 13212 2668 19204 11196 7100 15228 1892 17612 9836 5404 14148 3820 20044 11932 7820 15700 893 16745 8435 4633 20547 12949 2097 19299 10413 6573 14973 1963 18169 10033 5813 13459 3473 19737 12245 8009 15775 894 17094 8738 4582 12686 2550 19394 10654 7070 14718 2034 17702 10230 5198 13794 3126 20454 11534 7174 15850 895 16419 9041 4531 12423 3003 18465 10895 6543 14463 1081 18259 9403 5607 14129 3803 20147 11847 7363 15925 896 16768 8320 4480 20608 13184 2432 18560 11136 7040 15232 1152 17792 9600 6016 13440 3456 19840 12160 7552 16000 897 17117 8623 4429 12921 2885 18655 10353 6513 14977 1223 18349 9797 5401 13775 3109 19533 11449 7741 16075 898 16442 8926 4378 12658 2314 18750 10594 7010 14722 1294 17882 9994 5810 14110 3786 20250 11762 7930 16150 899 16791 8205 4327 20669 12395 2767 18845 10835 6483 14467 1365 17415 10191 5195 13421 3439 19943 12075 8119 16225 900 17140 8508 4276 13156 2196 18940 11076 6980 15236 1436 17972 9364 5604 13756 3092 19636 11364 7284 16300 901 16465 8811 4225 12893 2649 19035 10293 6453 14981 1507 17505 9561 6013 14091 3769 20353 11677 7473 16375 902 16814 9114 4174 12630 2078 19130 10534 6950 14726 1578 18062 9758 5398 13402 3422 20046 11990 7662 15426 903 17163 8393 4123 12367 2531 19225 10775 6423 14471 1649 17595 9955 5807 13737 3075 19739 11279 7851 15501 904 16488 8696 5096 13128 2984 19320 11016 6920 15240 1720 18152 10152 5192 14072 3752 20456 11592 8040 15576 905 16837 8999 5045 12865 2413 19415 11257 6393 14985 1791 17685 9325 5601 13383 3405 20149 11905 7205 15651 906 17186 8278 4994 12602 2866 18486 10474 6890 14730 1862 18242 9522 6010 13718 4082 19842 12218 7394 15726 907 16511 8581 4943 12339 2295 18581 10715 6363 14475 1933 17775 9719 5395 14053 3735 19535 11507 7583 15801 908 16860 8884 4892 13100 2748 18676 10956 6860 15244 2004 18332 9916 5804 13364 3388 20252 11820 7772 15876 909 17209 9187 4841 20531 12837 2177 18771 11197 6333 14989 1051 17865 10113 5189 13699 4065 19945 12133 7961 15951 910 16534 8466 4790 12574 2630 18866 10414 6830 14734 1122 18422 9286 5598 14034 3718 19638 11422 8150 16026 911 16883 8769 4739 12311 2059 18961 10655 6303 14479 1193 17955 9483 6007 13345 3371 20355 11735 7315 16101 912 17232 9072 4688 20592 13072 2512 19056 10896 6800 15248 1264 17488 9680 5392 13680 4048 20048 12048 7504 16176 913 16557 8351 4637 12809 2965 19151 11137 6273 14993 1335 18045 9877 5801 14015 3701 19741 11337 7693 16251 914 16906 8654 4586 12546 2394 19246 10354 6770 14738 1406 17578 10074 5186 13326 3354 20458 11650 7882 16326 915 17255 8957 4535 20653 13307 2847 19341 10595 6243 14483 1477 18135 9247 5595 13661 4031 20151 11963 8071 15377 916 16580 8236 4484 13044 2276 19436 10836 6740 15252 1548 17668 9444 6004 13996 3684 19844 12276 7236 15452 917 16929 8539 4433 12781 2729 18507 11077 6213 14997 1619 18225 9641 5389 14331 3337 19537 11565 7425 15527 918 17278 8842 4382 20714 12518 2158 18602 10294 6710 14742 1690 17758 9838 5798 13642 4014 20254 11878 7614 15602 919 16603 9145 4331 13279 2611 18697 10535 6183 14487 1761 18315 10035 5183 13977 3667 19947 12191 7803 15677 920 16952 8424 4280 13016 3064 18792 10776 6680 15256 1832 17848 10232 5592 14312 3320 19640 11480 7992 15752 921 17301 8727 4229 12753 2493 18887 11017 6153 15001 1903 18405 9405 6001 13623 3997 20357 11793 8181 15827 922 16626 9030 4178 12490 2946 18982 11258 6650 14746 1974 17938 9602 5386 13958 3650 20050 12106 7346 15902 923 16975 8309 4127 13251 2375 19077 10475 7147 14491 2045 17471 9799 5795 14293 3303 19743 11395 7535 15977 924 17324 8612 5100 12988 2828 19172 10716 6620 15260 1092 18028 9996 5180 13604 3980 20460 11708 7724 16052 925 16649 8915 5049 20515 12725 2257 19267 10957 7117 15005 1163 17561 10193 5589 13939 3633 20153 12021 7913 16127 926 16998 8194 4998 12462 2710 19362 11198 6590 14750 1234 18118 9366 5998 14274 3286 19846 11310 8102 16202 927 17347 8497 4947 13223 2139 18433 10415 7087 14495 1305 17651 9563 5383 13585 3963 19539 11623 7267 16277 928 16672 8800 4896 20576 12960 2592 18528 10656 6560 15264 1376 18208 9760 5792 13920 3616 20256 11936 7456 16352 929 17021 9103 4845 12697 3045 18623 10897 7057 15009 1447 17741 9957 5177 14255 3269 19949 12249 7645 15403 930 17370 8382 4794 12434 2474 18718 11138 6530 14754 1518 18298 10154 5586 13566 3946 19642 11538 7834 15478 931 16695 8685 4743 20637 13195 2927 18813 10355 7027 14499 1589 17831 9327 5995 13901 3599 20359 11851 8023 15553 932 17044 8988 4692 12932 2356 18908 10596 6500 15268 1660 18388 9524 5380 14236 3252 20052 12164 7188 15628 933 17393 8267 4641 12669 2809 19003 10837 6997 15013 1731 17921 9721 5789 13547 3929 19745 11453 7377 15703 934 16718 8570 4590 20698 12406 2238 19098 11078 6470 14758 1802 17454 9918 5174 13882 3582 20462 11766 7566 15778 935 17067 8873 4539 13167 2691 19193 10295 6967 14503 1873 18011 10115 5583 14217 3235 20155 12079 7755 15853 936 16392 9176 4488 12904 2120 19288 10536 6440 15272 1944 17544 9288 5992 13528 3912 19848 11368 7944 15928 937 16741 8455 4437 12641 2573 19383 10777 6937 15017 2015 18101 9485 5377 13863 3565 19541 11681 8133 16003 938 17090 8758 4386 12378 3026 18454 11018 6410 14762 1062 17634 9682 5786 14198 3218 20258 11994 7298 16078 939 16415 9061 4335 13139 2455 18549 11259 6907 14507 1133 18191 9879 5171 13509 3895 19951 11283 7487 16153 940 16764 8340 4284 12876 2908 18644 10476 6380 15276 1204 17724 10076 5580 13844 3548 19644 11596 7676 16228 941 17113 8643 4233 20499 12613 2337 18739 10717 6877 15021 1275 18281 9249 5989 14179 3201 20361 11909 7865 16303 942 16438 8946 4182 12350 2790 18834 10958 6350 14766 1346 17814 9446 5374 13490 3878 20054 12222 8054 16378 943 16787 8225 4131 13111 2219 18929 11199 6847 14511 1417 18371 9643 5783 13825 3531 19747 11511 7219 15429 944 17136 8528 5104 20560 12848 2672 19024 10416 6320 15280 1488 17904 9840 5168 14160 3184 20464 11824 7408 15504 945 16461 8831 5053 12585 2101 19119 10657 6817 15025 1559 17437 10037 5577 13471 3861 20157 12137 7597 15579 946 16810 9134 5002 12322 2554 19214 10898 6290 14770 1630 17994 10234 5986 13806 3514 19850 11426 7786 15654 947 17159 8413 4951 20621 13083 3007 19309 11139 6787 14515 1701 17527 9407 5371 14141 3167 19543 11739 7975 15729 948 16484 8716 4900 12820 2436 19404 10356 6260 15284 1772 18084 9604 5780 13452 3844 20260 12052 8164 15804 949 16833 9019 4849 12557 2889 18475 10597 6757 15029 1843 17617 9801 5165 13787 3497 19953 11341 7329 15879 950 17182 8298 4798 20682 12294 2318 18570 10838 6230 14774 1914 18174 9998 5574 14122 3150 19646 11654 7518 15954 951 16507 8601 4747 13055 2771 18665 11079 6727 14519 1985 17707 10195 5983 13433 3827 20363 11967 7707 16029 952 16856 8904 4696 12792 2200 18760 10296 6200 15288 1032 18264 9368 5368 13768 3480 20056 12280 7896 16104 953 17205 9207 4645 12529 2653 18855 10537 6697 15033 1103 17797 9565 5777 14103 3133 19749 11569 8085 16179 954 16530 8486 4594 13290 2082 18950 10778 6170 14778 1174 18354 9762 5162 13414 3810 20466 11882 7250 16254 955 16879 8789 4543 13027 2535 19045 11019 6667 14523 1245 17887 9959 5571 13749 3463 20159 12195 7439 16329 956 17228 9092 4492 12764 2988 19140 11260 7164 15292 1316 17420 10156 5980 14084 3116 19852 11484 7628 15380 957 16553 8371 4441 20483 12501 2417 19235 10477 6637 15037 1387 17977 9329 5365 13395 3793 19545 11797 7817 15455 958 16902 8674 4390 13262 2870 19330 10718 7134 14782 1458 17510 9526 5774 13730 3446 20262 12110 8006 15530 959 17251 8977 4339 12999 2299 19425 10959 6607 14527 1529 18067 9723 5159 14065 3099 19955 11399 7171 15605 960 16576 8256 4288 20544 12736 2752 18496 11200 7104 15296 1600 17600 9920 5568 13376 3776 19648 11712 7360 15680 961 16925 8559 4237 12473 2181 18591 10417 6577 15041 1671 18157 10117 5977 13711 3429 20365 12025 7549 15755 962 17274 8862 4186 13234 2634 18686 10658 7074 14786 1742 17690 9290 5362 14046 3082 20058 11314 7738 15830 963 16599 9165 4135 20605 12971 2063 18781 10899 6547 14531 1813 18247 9487 5771 13357 3759 19751 11627 7927 15905 964 16948 8444 5108 12708 2516 18876 11140 7044 15300 1884 17780 9684 5156 13692 3412 20468 11940 8116 15980 965 17297 8747 5057 12445 2969 18971 10357 6517 15045 1955 18337 9881 5565 14027 4089 20161 12253 7281 16055 966 16622 9050 5006 20666 13206 2398 19066 10598 7014 14790 2026 17870 10078 5974 13338 3742 19854 11542 7470 16130 967 16971 8329 4955 12943 2851 19161 10839 6487 14535 1073 18427 9251 5359 13673 3395 19547 11855 7659 16205 968 17320 8632 4904 12680 2280 19256 11080 6984 15304 1144 17960 9448 5768 14008 4072 20264 12168 7848 16280 969 16645 8935 4853 20727 12417 2733 19351 10297 6457 15049 1215 17493 9645 5153 13319 3725 19957 11457 8037 16355 970 16994 8214 4802 13178 2162 19446 10538 6954 14794 1286 18050 9842 5562 13654 3378 19650 11770 7202 15406 971 17343 8517 4751 12915 2615 18517 10779 6427 14539 1357 17583 10039 5971 13989 4055 20367 12083 7391 15481 972 16668 8820 4700 12652 3068 18612 11020 6924 15308 1428 18140 10236 5356 14324 3708 20060 11372 7580 15556 973 17017 9123 4649 12389 2497 18707 11261 6397 15053 1499 17673 9409 5765 13635 3361 19753 11685 7769 15631 974 17366 8402 4598 13150 2950 18802 10478 6894 14798 1570 18230 9606 5150 13970 4038 20470 11998 7958 15706 975 16691 8705 4547 12887 2379 18897 10719 6367 14543 1641 17763 9803 5559 14305 3691 20163 11287 8147 15781 976 17040 9008 4496 20528 12624 2832 18992 10960 6864 15312 1712 18320 10000 5968 13616 3344 19856 11600 7312 15856 977 17389 8287 4445 12361 2261 19087 11201 6337 15057 1783 17853 10197 5353 13951 4021 19549 11913 7501 15931 978 16714 8590 4394 13122 2714 19182 10418 6834 14802 1854 18410 9370 5762 14286 3674 20266 12226 7690 16006 979 17063 8893 4343 20589 12859 2143 19277 10659 6307 14547 1925 17943 9567 5147 13597 3327 19959 11515 7879 16081 980 16388 9196 4292 12596 2596 19372 10900 6804 15316 1996 17476 9764 5556 13932 4004 19652 11828 8068 16156 981 16737 8475 4241 12333 3049 18443 11141 6277 15061 1043 18033 9961 5965 14267 3657 20369 12141 7233 16231 982 17086 8778 4190 20650 13094 2478 18538 10358 6774 14806 1114 17566 10158 5350 13578 3310 20062 11430 7422 16306 983 16411 9081 4139 12831 2931 18633 10599 6247 14551 1185 18123 9331 5759 13913 3987 19755 11743 7611 16381 984 16760 8360 5112 12568 2360 18728 10840 6744 15320 1256 17656 9528 5144 14248 3640 20472 12056 7800 15432 985 17109 8663 5061 20711 12305 2813 18823 11081 6217 15065 1327 18213 9725 5553 13559 3293 20165 11345 7989 15507 986 16434 8966 5010 13066 2242 18918 10298 6714 14810 1398 17746 9922 5962 13894 3970 19858 11658 8178 15582 987 16783 8245 4959 12803 2695 19013 10539 6187 14555 1469 18303 10119 5347 14229 3623 19551 11971 7343 15657 988 17132 8548 4908 12540 2124 19108 10780 6684 15324 1540 17836 9292 5756 13540 3276 20268 12284 7532 15732 989 16457 8851 4857 13301 2577 19203 11021 6157 15069 1611 18393 9489 5141 13875 3953 19961 11573 7721 15807 990 16806 9154 4806 13038 3030 19298 11262 6654 14814 1682 17926 9686 5550 14210 3606 19654 11886 7910 15882 991 17155 8433 4755 12775 2459 19393 10479 7151 14559 1753 17459 9883 5959 13521 3259 20371 12199 8099 15957 992 16480 8736 4704 20512 12512 2912 18464 10720 6624 15328 1824 18016 10080 5344 13856 3936 20064 11488 7264 16032 993 16829 9039 4653 13273 2341 18559 10961 7121 15073 1895 17549 9253 5753 14191 3589 19757 11801 7453 16107 994 17178 8318 4602 13010 2794 18654 11202 6594 14818 1966 18106 9450 5138 13502 3242 20474 12114 7642 16182 995 16503 8621 4551 20573 12747 2223 18749 10419 7091 14563 2037 17639 9647 5547 13837 3919 20167 11403 7831 16257 996 16852 8924 4500 12484 2676 18844 10660 6564 15332 1084 18196 9844 5956 14172 3572 19860 11716 8020 16332 997 17201 8203 4449 13245 2105 18939 10901 7061 15077 1155 17729 10041 5341 13483 3225 19553 12029 7185 15383 998 16526 8506 4398 20634 12982 2558 19034 11142 6534 14822 1226 18286 10238 5750 13818 3902 20270 11318 7374 15458 999 16875 8809 4347 12719 3011 19129 10359 7031 14567 1297 17819 9411 5135 14153 3555 19963 11631 7563 15533 1000 17224 9112 4296 12456 2440 19224 10600 6504 15336 1368 18376 9608 5544 13464 3208 19656 11944 7752 15608 1001 16549 8391 4245 20695 13217 2893 19319 10841 7001 15081 1439 17909 9805 5953 13799 3885 20373 12257 7941 15683 1002 16898 8694 4194 12954 2322 19414 11082 6474 14826 1510 17442 10002 5338 14134 3538 20066 11546 8130 15758 1003 17247 8997 4143 12691 2775 18485 10299 6971 14571 1581 17999 10199 5747 13445 3191 19759 11859 7295 15833 1004 16572 8276 5116 12428 2204 18580 10540 6444 15340 1652 17532 9372 5132 13780 3868 20476 12172 7484 15908 1005 16921 8579 5065 13189 2657 18675 10781 6941 15085 1723 18089 9569 5541 14115 3521 20169 11461 7673 15983 1006 17270 8882 5014 12926 2086 18770 11022 6414 14830 1794 17622 9766 5950 13426 3174 19862 11774 7862 16058 1007 16595 9185 4963 12663 2539 18865 11263 6911 14575 1865 18179 9963 5335 13761 3851 19555 12087 8051 16133 1008 16944 8464 4912 20496 12400 2992 18960 10480 6384 15344 1936 17712 10160 5744 14096 3504 20272 11376 7216 16208 1009 17293 8767 4861 13161 2421 19055 10721 6881 15089 2007 18269 9333 5129 13407 3157 19965 11689 7405 16283 1010 16618 9070 4810 12898 2874 19150 10962 6354 14834 1054 17802 9530 5538 13742 3834 19658 12002 7594 16358 1011 16967 8349 4759 20557 12635 2303 19245 11203 6851 14579 1125 18359 9727 5947 14077 3487 20375 11291 7783 15409 1012 17316 8652 4708 12372 2756 19340 10420 6324 15348 1196 17892 9924 5332 13388 3140 20068 11604 7972 15484 1013 16641 8955 4657 13133 2185 19435 10661 6821 15093 1267 17425 10121 5741 13723 3817 19761 11917 8161 15559 1014 16990 8234 4606 20618 12870 2638 18506 10902 6294 14838 1338 17982 9294 5126 14058 3470 20478 12230 7326 15634 1015 17339 8537 4555 12607 2067 18601 11143 6791 14583 1409 17515 9491 5535 13369 3123 20171 11519 7515 15709 1016 16664 8840 4504 12344 2520 18696 10360 6264 15352 1480 18072 9688 5944 13704 3800 19864 11832 7704 15784 1017 17013 9143 4453 20679 13105 2973 18791 10601 6761 15097 1551 17605 9885 5329 14039 3453 19557 12145 7893 15859 1018 17362 8422 4402 12842 2402 18886 10842 6234 14842 1622 18162 10082 5738 13350 3106 20274 11434 8082 15934 1019 16687 8725 4351 12579 2855 18981 11083 6731 14587 1693 17695 9255 5123 13685 3783 19967 11747 7247 16009 1020 17036 9028 4300 12316 2284 19076 10300 6204 15356 1764 18252 9452 5532 14020 3436 19660 12060 7436 16084 1021 17385 8307 4249 13077 2737 19171 10541 6701 15101 1835 17785 9649 5941 13331 3089 20377 11349 7625 16159 1022 16710 8610 4198 12814 2166 19266 10782 6174 14846 1906 18342 9846 5326 13666 3766 20070 11662 7814 16234 1023 17059 8913 4147 12551 2619 19361 11023 6671 14591 1977 17875 10043 5735 14001 3419 19763 11975 8003 16309 0 16384 8192 4096 20480 12288 2048 18432 10240 6144 14336 1024 17408 9216 5120 13312 3072 19456 11264 7168 15360 codec2-0.0~git20230330.db1c21c/data/interleavers/imap2298000066400000000000000000000242141441116725500221700ustar00rootroot0000000000000015 2175 1113 543 1597 383 1399 825 1887 213 2193 1207 655 1757 447 1421 977 1951 30 2174 1074 574 1658 382 1390 882 1854 170 2210 1262 670 1722 510 1434 930 1982 45 2173 1035 605 1591 381 1381 811 1821 255 2227 1189 685 1687 445 1447 1011 2013 60 2172 1124 636 1652 380 1372 868 1916 212 2244 1244 700 1780 508 1460 964 2044 75 2171 1085 539 1585 379 1363 797 1883 169 2261 1171 715 1745 443 1473 917 1947 90 2170 1046 570 1646 378 1354 854 1850 254 2278 1226 730 1710 506 1486 998 1978 105 2169 1135 601 1579 377 1345 783 1817 211 2295 1153 745 1675 441 1499 951 2009 120 2168 1096 632 1640 376 1336 840 1912 168 2184 1208 760 1768 504 1512 904 2040 7 2167 1057 535 1573 375 1327 769 1879 253 2201 1263 647 1733 439 1525 985 1943 22 2166 1146 566 1634 374 1318 826 1846 210 2218 1190 662 1698 502 1410 938 1974 37 2165 1107 597 1567 373 1309 883 1813 167 2235 1245 677 1791 437 1423 1019 2005 52 2164 1068 628 1628 372 1300 812 1908 252 2252 1172 692 1756 500 1436 972 2036 67 2163 1029 531 1561 371 1291 869 1875 209 2269 1227 707 1721 435 1449 925 1939 82 2162 1118 562 1622 370 1282 798 1842 166 2286 1154 722 1686 498 1462 1006 1970 97 2161 1079 593 1555 369 1401 855 1809 251 1209 737 1779 433 1475 959 2001 112 2160 1040 624 1616 368 1392 784 1904 208 2192 1264 752 1744 496 1488 912 2032 127 2159 1129 527 1549 367 1383 841 1871 165 2209 1191 767 1709 431 1501 993 1935 14 2158 1090 558 1610 366 1374 770 1838 250 2226 1246 654 1674 494 1514 946 1966 29 2157 1051 589 1543 365 1365 827 1805 207 2243 1173 669 1767 429 1527 899 1997 44 2156 1140 620 1604 364 1356 884 1900 164 2260 1228 684 1732 492 1412 980 2028 59 2155 1101 523 1537 363 1347 813 1867 249 2277 1155 699 1697 427 1425 933 1931 74 2154 1062 554 1598 362 1338 870 1834 206 2294 1210 714 1790 490 1438 1014 1962 89 2153 1151 585 1659 361 1329 799 1801 163 2183 1265 729 1755 425 1451 967 1993 104 2152 1112 616 1592 360 1320 856 1896 248 2200 1192 744 1720 488 1464 920 2024 119 2151 1073 519 1653 359 1311 785 1863 205 2217 1247 759 1685 423 1477 1001 1927 6 2150 1034 550 1586 358 1302 842 1830 162 2234 1174 646 1778 486 1490 954 1958 21 2149 1123 581 1647 357 1293 771 1797 247 2251 1229 661 1743 421 1503 907 1989 36 2148 1084 612 1580 356 1284 828 1892 204 2268 1156 676 1708 484 1516 988 2020 51 2147 1045 515 1641 355 1403 885 1859 161 2285 1211 691 1673 419 1529 941 1923 66 2146 1134 546 1574 354 1394 814 1826 246 1266 706 1766 482 1414 1022 1954 81 2145 1095 577 1635 353 1385 871 1793 203 2191 1193 721 1731 417 1427 975 1985 96 2144 1056 608 1568 352 1376 800 1888 160 2208 1248 736 1696 480 1440 928 2016 111 2143 1145 639 1629 351 1367 857 1855 245 2225 1175 751 1789 415 1453 1009 2047 126 2142 1106 542 1562 350 1358 786 1822 202 2242 1230 766 1754 478 1466 962 1950 13 2141 1067 573 1623 349 1349 843 1917 159 2259 1157 653 1719 413 1479 915 1981 28 2140 1028 604 1556 348 1340 772 1884 244 2276 1212 668 1684 476 1492 996 2012 43 2139 1117 635 1617 347 1331 829 1851 201 2293 1267 683 1777 411 1505 949 2043 58 2138 1078 538 1550 346 1322 886 1818 158 2182 1194 698 1742 474 1518 902 1946 73 2137 1039 569 1611 345 1313 815 1913 243 2199 1249 713 1707 409 1531 983 1977 88 2136 1128 600 1544 344 1304 872 1880 200 2216 1176 728 1672 472 1416 936 2008 103 2135 1089 631 1605 343 1295 801 1847 157 2233 1231 743 1765 407 1429 1017 2039 118 2134 1050 534 1538 342 1286 858 1814 242 2250 1158 758 1730 470 1442 970 1942 5 2133 1139 565 1599 341 1405 787 1909 199 2267 1213 645 1695 405 1455 923 1973 20 2132 1100 596 1660 340 1396 844 1876 156 2284 1268 660 1788 468 1468 1004 2004 35 2131 1061 627 1593 339 1387 773 1843 241 1195 675 1753 403 1481 957 2035 50 2130 1150 530 1654 338 1378 830 1810 198 2190 1250 690 1718 466 1494 910 1938 65 2129 1111 561 1587 337 1369 887 1905 155 2207 1177 705 1683 401 1507 991 1969 80 2128 1072 592 1648 336 1360 816 1872 240 2224 1232 720 1776 464 1520 944 2000 95 2127 1033 623 1581 335 1351 873 1839 197 2241 1159 735 1741 399 1533 897 2031 110 2126 1122 526 1642 334 1342 802 1806 154 2258 1214 750 1706 462 1418 978 1934 125 2125 1083 557 1575 333 1333 859 1901 239 2275 1269 765 1671 397 1431 931 1965 12 2124 1044 588 1636 332 1324 788 1868 196 2292 1196 652 1764 460 1444 1012 1996 27 2123 1133 619 1569 331 1315 845 1835 153 2181 1251 667 1729 395 1457 965 2027 42 2122 1094 522 1630 330 1306 774 1802 238 2198 1178 682 1694 458 1470 918 1930 57 2121 1055 553 1563 329 1297 831 1897 195 2215 1233 697 1787 393 1483 999 1961 72 2120 1144 584 1624 328 1288 888 1864 152 2232 1160 712 1752 456 1496 952 1992 87 2119 1105 615 1557 327 1407 817 1831 237 2249 1215 727 1717 391 1509 905 2023 102 2118 1066 518 1618 326 1398 874 1798 194 2266 1270 742 1682 454 1522 986 1926 117 2117 1027 549 1551 325 1389 803 1893 151 2283 1197 757 1775 389 1535 939 1957 4 2116 1116 580 1612 324 1380 860 1860 236 1252 644 1740 452 1420 1020 1988 19 2115 1077 611 1545 323 1371 789 1827 193 2189 1179 659 1705 387 1433 973 2019 34 2114 1038 514 1606 322 1362 846 1794 150 2206 1234 674 1670 450 1446 926 1922 49 2113 1127 545 1539 321 1353 775 1889 235 2223 1161 689 1763 385 1459 1007 1953 64 2112 1088 576 1600 320 1344 832 1856 192 2240 1216 704 1728 448 1472 960 1984 79 2111 1049 607 1661 319 1335 889 1823 149 2257 1271 719 1693 511 1485 913 2015 94 2110 1138 638 1594 318 1326 818 1918 234 2274 1198 734 1786 446 1498 994 2046 109 2109 1099 541 1655 317 1317 875 1885 191 2291 1253 749 1751 509 1511 947 1949 124 2108 1060 572 1588 316 1308 804 1852 148 2180 1180 764 1716 444 1524 900 1980 11 2107 1149 603 1649 315 1299 861 1819 233 2197 1235 651 1681 507 1409 981 2011 26 2106 1110 634 1582 314 1290 790 1914 190 2214 1162 666 1774 442 1422 934 2042 41 2105 1071 537 1643 313 1281 847 1881 147 2231 1217 681 1739 505 1435 1015 1945 56 2104 1032 568 1576 312 1400 776 1848 232 2248 1272 696 1704 440 1448 968 1976 71 2103 1121 599 1637 311 1391 833 1815 189 2265 1199 711 1669 503 1461 921 2007 86 2102 1082 630 1570 310 1382 890 1910 146 2282 1254 726 1762 438 1474 1002 2038 101 2101 1043 533 1631 309 1373 819 1877 231 1181 741 1727 501 1487 955 1941 116 2100 1132 564 1564 308 1364 876 1844 188 2188 1236 756 1692 436 1500 908 1972 3 2099 1093 595 1625 307 1355 805 1811 145 2205 1163 643 1785 499 1513 989 2003 18 2098 1054 626 1558 306 1346 862 1906 230 2222 1218 658 1750 434 1526 942 2034 33 2097 1143 529 1619 305 1337 791 1873 187 2239 1273 673 1715 497 1411 1023 1937 48 2096 1104 560 1552 304 1328 848 1840 144 2256 1200 688 1680 432 1424 976 1968 63 2095 1065 591 1613 303 1319 777 1807 229 2273 1255 703 1773 495 1437 929 1999 78 2094 1026 622 1546 302 1310 834 1902 186 2290 1182 718 1738 430 1450 1010 2030 93 2093 1115 525 1607 301 1301 891 1869 143 2179 1237 733 1703 493 1463 963 1933 108 2092 1076 556 1540 300 1292 820 1836 228 2196 1164 748 1668 428 1476 916 1964 123 2091 1037 587 1601 299 1283 877 1803 185 2213 1219 763 1761 491 1489 997 1995 10 2090 1126 618 1662 298 1402 806 1898 142 2230 1274 650 1726 426 1502 950 2026 25 2089 1087 521 1595 297 1393 863 1865 227 2247 1201 665 1691 489 1515 903 1929 40 2088 1048 552 1656 296 1384 792 1832 184 2264 1256 680 1784 424 1528 984 1960 55 2087 1137 583 1589 295 1375 849 1799 141 2281 1183 695 1749 487 1413 937 1991 70 2086 1098 614 1650 294 1366 778 1894 226 1238 710 1714 422 1426 1018 2022 85 2085 1059 517 1583 293 1357 835 1861 183 2187 1165 725 1679 485 1439 971 1925 100 2084 1148 548 1644 292 1348 892 1828 140 2204 1220 740 1772 420 1452 924 1956 115 2083 1109 579 1577 291 1339 821 1795 225 2221 1275 755 1737 483 1465 1005 1987 2 2082 1070 610 1638 290 1330 878 1890 182 2238 1202 642 1702 418 1478 958 2018 17 2081 1031 513 1571 289 1321 807 1857 139 2255 1257 657 1667 481 1491 911 1921 32 2080 1120 544 1632 288 1312 864 1824 224 2272 1184 672 1760 416 1504 992 1952 47 2079 1081 575 1565 287 1303 793 1919 181 2289 1239 687 1725 479 1517 945 1983 62 2078 1042 606 1626 286 1294 850 1886 138 2178 1166 702 1690 414 1530 898 2014 77 2077 1131 637 1559 285 1285 779 1853 223 2195 1221 717 1783 477 1415 979 2045 92 2076 1092 540 1620 284 1404 836 1820 180 2212 1276 732 1748 412 1428 932 1948 107 2075 1053 571 1553 283 1395 893 1915 137 2229 1203 747 1713 475 1441 1013 1979 122 2074 1142 602 1614 282 1386 822 1882 222 2246 1258 762 1678 410 1454 966 2010 9 2073 1103 633 1547 281 1377 879 1849 179 2263 1185 649 1771 473 1467 919 2041 24 2072 1064 536 1608 280 1368 808 1816 136 2280 1240 664 1736 408 1480 1000 1944 39 2071 1025 567 1541 279 1359 865 1911 221 2297 1167 679 1701 471 1493 953 1975 54 2070 1114 598 1602 278 1350 794 1878 178 2186 1222 694 1666 406 1506 906 2006 69 2069 1075 629 1663 277 1341 851 1845 135 2203 1277 709 1759 469 1519 987 2037 84 2068 1036 532 1596 276 1332 780 1812 220 2220 1204 724 1724 404 1532 940 1940 99 2067 1125 563 1657 275 1323 837 1907 177 2237 1259 739 1689 467 1417 1021 1971 114 2066 1086 594 1590 274 1314 894 1874 134 2254 1186 754 1782 402 1430 974 2002 1 2065 1047 625 1651 273 1305 823 1841 219 2271 1241 641 1747 465 1443 927 2033 16 2064 1136 528 1584 272 1296 880 1808 176 2288 1168 656 1712 400 1456 1008 1936 31 2063 1097 559 1645 271 1287 809 1903 133 2177 1223 671 1677 463 1469 961 1967 46 2062 1058 590 1578 270 1406 866 1870 218 2194 1278 686 1770 398 1482 914 1998 61 2061 1147 621 1639 269 1397 795 1837 175 2211 1205 701 1735 461 1495 995 2029 76 2060 1108 524 1572 268 1388 852 1804 132 2228 1260 716 1700 396 1508 948 1932 91 2059 1069 555 1633 267 1379 781 1899 217 2245 1187 731 1665 459 1521 901 1963 106 2058 1030 586 1566 266 1370 838 1866 174 2262 1242 746 1758 394 1534 982 1994 121 2057 1119 617 1627 265 1361 895 1833 131 2279 1169 761 1723 457 1419 935 2025 8 2056 1080 520 1560 264 1352 824 1800 216 2296 1224 648 1688 392 1432 1016 1928 23 2055 1041 551 1621 263 1343 881 1895 173 2185 1279 663 1781 455 1445 969 1959 38 2054 1130 582 1554 262 1334 810 1862 130 2202 1206 678 1746 390 1458 922 1990 53 2053 1091 613 1615 261 1325 867 1829 215 2219 1261 693 1711 453 1471 1003 2021 68 2052 1052 516 1548 260 1316 796 1796 172 2236 1188 708 1676 388 1484 956 1924 83 2051 1141 547 1609 259 1307 853 1891 129 2253 1243 723 1769 451 1497 909 1955 98 2050 1102 578 1542 258 1298 782 1858 214 2270 1170 738 1734 386 1510 990 1986 113 2049 1063 609 1603 257 1289 839 1825 171 2287 1225 753 1699 449 1523 943 2017 0 2048 1024 512 1536 256 1280 768 1792 128 2176 1152 640 1664 384 1408 896 1920 codec2-0.0~git20230330.db1c21c/data/interleavers/imap3066000066400000000000000000000336141441116725500221660ustar00rootroot0000000000000015 2175 1113 543 2575 1597 383 2321 1399 825 2939 1887 213 2193 1207 655 2729 1757 447 2447 1421 977 3001 1951 30 2174 1074 574 2590 1658 382 2338 1390 882 2934 1854 170 2210 1262 670 2770 1722 510 2462 1434 930 3058 1982 45 2173 1035 605 2605 1591 381 2355 1381 811 2929 1821 255 2227 1189 685 2811 1687 445 2477 1447 1011 2987 2013 60 2172 1124 636 2620 1652 380 2372 1372 868 2924 1916 212 2244 1244 700 2724 1780 508 2492 1460 964 3044 2044 75 2171 1085 539 2635 1585 379 2389 1363 797 2919 1883 169 2261 1171 715 2765 1745 443 2507 1473 917 2973 1947 90 2170 1046 570 2650 1646 378 2406 1354 854 2914 1850 254 2278 1226 730 2806 1710 506 2522 1486 998 3030 1978 105 2169 1135 601 2665 1579 377 2423 1345 783 2909 1817 211 2295 1153 745 2719 1675 441 2537 1499 951 2959 2009 120 2168 1096 632 2680 1640 376 2312 1336 840 2904 1912 168 2184 1208 760 2760 1768 504 2552 1512 904 3016 2040 7 2167 1057 535 2567 1573 375 2329 1327 769 2899 1879 253 2201 1263 647 2801 1733 439 2439 1525 985 2945 1943 22 2166 1146 566 2582 1634 374 2346 1318 826 2894 1846 210 2218 1190 662 2714 1698 502 2454 1410 938 3002 1974 37 2165 1107 597 2597 1567 373 2363 1309 883 2889 1813 167 2235 1245 677 2755 1791 437 2469 1423 1019 3059 2005 52 2164 1068 628 2612 1628 372 2380 1300 812 2884 1908 252 2252 1172 692 2796 1756 500 2484 1436 972 2988 2036 67 2163 1029 531 2627 1561 371 2397 1291 869 2879 1875 209 2269 1227 707 2709 1721 435 2499 1449 925 3045 1939 82 2162 1118 562 2642 1622 370 2414 1282 798 2874 1842 166 2286 1154 722 2750 1686 498 2514 1462 1006 2974 1970 97 2161 1079 593 2657 1555 369 2431 1401 855 2869 1809 251 2303 1209 737 2791 1779 433 2529 1475 959 3031 2001 112 2160 1040 624 2672 1616 368 2320 1392 784 2864 1904 208 2192 1264 752 2704 1744 496 2544 1488 912 2960 2032 127 2159 1129 527 2687 1549 367 2337 1383 841 2859 1871 165 2209 1191 767 2745 1709 431 2559 1501 993 3017 1935 14 2158 1090 558 2574 1610 366 2354 1374 770 2854 1838 250 2226 1246 654 2786 1674 494 2446 1514 946 2946 1966 29 2157 1051 589 2589 1543 365 2371 1365 827 2849 1805 207 2243 1173 669 2699 1767 429 2461 1527 899 3003 1997 44 2156 1140 620 2604 1604 364 2388 1356 884 2844 1900 164 2260 1228 684 2740 1732 492 2476 1412 980 3060 2028 59 2155 1101 523 2619 1537 363 2405 1347 813 2839 1867 249 2277 1155 699 2781 1697 427 2491 1425 933 2989 1931 74 2154 1062 554 2634 1598 362 2422 1338 870 2834 1834 206 2294 1210 714 2694 1790 490 2506 1438 1014 3046 1962 89 2153 1151 585 2649 1659 361 2311 1329 799 2829 1801 163 2183 1265 729 2735 1755 425 2521 1451 967 2975 1993 104 2152 1112 616 2664 1592 360 2328 1320 856 2824 1896 248 2200 1192 744 2776 1720 488 2536 1464 920 3032 2024 119 2151 1073 519 2679 1653 359 2345 1311 785 2819 1863 205 2217 1247 759 2689 1685 423 2551 1477 1001 2961 1927 6 2150 1034 550 2566 1586 358 2362 1302 842 2942 1830 162 2234 1174 646 2730 1778 486 2438 1490 954 3018 1958 21 2149 1123 581 2581 1647 357 2379 1293 771 2937 1797 247 2251 1229 661 2771 1743 421 2453 1503 907 2947 1989 36 2148 1084 612 2596 1580 356 2396 1284 828 2932 1892 204 2268 1156 676 2812 1708 484 2468 1516 988 3004 2020 51 2147 1045 515 2611 1641 355 2413 1403 885 2927 1859 161 2285 1211 691 2725 1673 419 2483 1529 941 3061 1923 66 2146 1134 546 2626 1574 354 2430 1394 814 2922 1826 246 2302 1266 706 2766 1766 482 2498 1414 1022 2990 1954 81 2145 1095 577 2641 1635 353 2319 1385 871 2917 1793 203 2191 1193 721 2807 1731 417 2513 1427 975 3047 1985 96 2144 1056 608 2656 1568 352 2336 1376 800 2912 1888 160 2208 1248 736 2720 1696 480 2528 1440 928 2976 2016 111 2143 1145 639 2671 1629 351 2353 1367 857 2907 1855 245 2225 1175 751 2761 1789 415 2543 1453 1009 3033 2047 126 2142 1106 542 2686 1562 350 2370 1358 786 2902 1822 202 2242 1230 766 2802 1754 478 2558 1466 962 2962 1950 13 2141 1067 573 2573 1623 349 2387 1349 843 2897 1917 159 2259 1157 653 2715 1719 413 2445 1479 915 3019 1981 28 2140 1028 604 2588 1556 348 2404 1340 772 2892 1884 244 2276 1212 668 2756 1684 476 2460 1492 996 2948 2012 43 2139 1117 635 2603 1617 347 2421 1331 829 2887 1851 201 2293 1267 683 2797 1777 411 2475 1505 949 3005 2043 58 2138 1078 538 2618 1550 346 2310 1322 886 2882 1818 158 2182 1194 698 2710 1742 474 2490 1518 902 3062 1946 73 2137 1039 569 2633 1611 345 2327 1313 815 2877 1913 243 2199 1249 713 2751 1707 409 2505 1531 983 2991 1977 88 2136 1128 600 2648 1544 344 2344 1304 872 2872 1880 200 2216 1176 728 2792 1672 472 2520 1416 936 3048 2008 103 2135 1089 631 2663 1605 343 2361 1295 801 2867 1847 157 2233 1231 743 2705 1765 407 2535 1429 1017 2977 2039 118 2134 1050 534 2678 1538 342 2378 1286 858 2862 1814 242 2250 1158 758 2746 1730 470 2550 1442 970 3034 1942 5 2133 1139 565 2565 1599 341 2395 1405 787 2857 1909 199 2267 1213 645 2787 1695 405 2437 1455 923 2963 1973 20 2132 1100 596 2580 1660 340 2412 1396 844 2852 1876 156 2284 1268 660 2700 1788 468 2452 1468 1004 3020 2004 35 2131 1061 627 2595 1593 339 2429 1387 773 2847 1843 241 2301 1195 675 2741 1753 403 2467 1481 957 2949 2035 50 2130 1150 530 2610 1654 338 2318 1378 830 2842 1810 198 2190 1250 690 2782 1718 466 2482 1494 910 3006 1938 65 2129 1111 561 2625 1587 337 2335 1369 887 2837 1905 155 2207 1177 705 2695 1683 401 2497 1507 991 3063 1969 80 2128 1072 592 2640 1648 336 2352 1360 816 2832 1872 240 2224 1232 720 2736 1776 464 2512 1520 944 2992 2000 95 2127 1033 623 2655 1581 335 2369 1351 873 2827 1839 197 2241 1159 735 2777 1741 399 2527 1533 897 3049 2031 110 2126 1122 526 2670 1642 334 2386 1342 802 2822 1806 154 2258 1214 750 2690 1706 462 2542 1418 978 2978 1934 125 2125 1083 557 2685 1575 333 2403 1333 859 2817 1901 239 2275 1269 765 2731 1671 397 2557 1431 931 3035 1965 12 2124 1044 588 2572 1636 332 2420 1324 788 2940 1868 196 2292 1196 652 2772 1764 460 2444 1444 1012 2964 1996 27 2123 1133 619 2587 1569 331 2309 1315 845 2935 1835 153 2181 1251 667 2813 1729 395 2459 1457 965 3021 2027 42 2122 1094 522 2602 1630 330 2326 1306 774 2930 1802 238 2198 1178 682 2726 1694 458 2474 1470 918 2950 1930 57 2121 1055 553 2617 1563 329 2343 1297 831 2925 1897 195 2215 1233 697 2767 1787 393 2489 1483 999 3007 1961 72 2120 1144 584 2632 1624 328 2360 1288 888 2920 1864 152 2232 1160 712 2808 1752 456 2504 1496 952 3064 1992 87 2119 1105 615 2647 1557 327 2377 1407 817 2915 1831 237 2249 1215 727 2721 1717 391 2519 1509 905 2993 2023 102 2118 1066 518 2662 1618 326 2394 1398 874 2910 1798 194 2266 1270 742 2762 1682 454 2534 1522 986 3050 1926 117 2117 1027 549 2677 1551 325 2411 1389 803 2905 1893 151 2283 1197 757 2803 1775 389 2549 1535 939 2979 1957 4 2116 1116 580 2564 1612 324 2428 1380 860 2900 1860 236 2300 1252 644 2716 1740 452 2436 1420 1020 3036 1988 19 2115 1077 611 2579 1545 323 2317 1371 789 2895 1827 193 2189 1179 659 2757 1705 387 2451 1433 973 2965 2019 34 2114 1038 514 2594 1606 322 2334 1362 846 2890 1794 150 2206 1234 674 2798 1670 450 2466 1446 926 3022 1922 49 2113 1127 545 2609 1539 321 2351 1353 775 2885 1889 235 2223 1161 689 2711 1763 385 2481 1459 1007 2951 1953 64 2112 1088 576 2624 1600 320 2368 1344 832 2880 1856 192 2240 1216 704 2752 1728 448 2496 1472 960 3008 1984 79 2111 1049 607 2639 1661 319 2385 1335 889 2875 1823 149 2257 1271 719 2793 1693 511 2511 1485 913 3065 2015 94 2110 1138 638 2654 1594 318 2402 1326 818 2870 1918 234 2274 1198 734 2706 1786 446 2526 1498 994 2994 2046 109 2109 1099 541 2669 1655 317 2419 1317 875 2865 1885 191 2291 1253 749 2747 1751 509 2541 1511 947 3051 1949 124 2108 1060 572 2684 1588 316 2308 1308 804 2860 1852 148 2180 1180 764 2788 1716 444 2556 1524 900 2980 1980 11 2107 1149 603 2571 1649 315 2325 1299 861 2855 1819 233 2197 1235 651 2701 1681 507 2443 1409 981 3037 2011 26 2106 1110 634 2586 1582 314 2342 1290 790 2850 1914 190 2214 1162 666 2742 1774 442 2458 1422 934 2966 2042 41 2105 1071 537 2601 1643 313 2359 1281 847 2845 1881 147 2231 1217 681 2783 1739 505 2473 1435 1015 3023 1945 56 2104 1032 568 2616 1576 312 2376 1400 776 2840 1848 232 2248 1272 696 2696 1704 440 2488 1448 968 2952 1976 71 2103 1121 599 2631 1637 311 2393 1391 833 2835 1815 189 2265 1199 711 2737 1669 503 2503 1461 921 3009 2007 86 2102 1082 630 2646 1570 310 2410 1382 890 2830 1910 146 2282 1254 726 2778 1762 438 2518 1474 1002 2038 101 2101 1043 533 2661 1631 309 2427 1373 819 2825 1877 231 2299 1181 741 2691 1727 501 2533 1487 955 2995 1941 116 2100 1132 564 2676 1564 308 2316 1364 876 2820 1844 188 2188 1236 756 2732 1692 436 2548 1500 908 3052 1972 3 2099 1093 595 2563 1625 307 2333 1355 805 2943 1811 145 2205 1163 643 2773 1785 499 2435 1513 989 2981 2003 18 2098 1054 626 2578 1558 306 2350 1346 862 2938 1906 230 2222 1218 658 2814 1750 434 2450 1526 942 3038 2034 33 2097 1143 529 2593 1619 305 2367 1337 791 2933 1873 187 2239 1273 673 2727 1715 497 2465 1411 1023 2967 1937 48 2096 1104 560 2608 1552 304 2384 1328 848 2928 1840 144 2256 1200 688 2768 1680 432 2480 1424 976 3024 1968 63 2095 1065 591 2623 1613 303 2401 1319 777 2923 1807 229 2273 1255 703 2809 1773 495 2495 1437 929 2953 1999 78 2094 1026 622 2638 1546 302 2418 1310 834 2918 1902 186 2290 1182 718 2722 1738 430 2510 1450 1010 3010 2030 93 2093 1115 525 2653 1607 301 2307 1301 891 2913 1869 143 2179 1237 733 2763 1703 493 2525 1463 963 1933 108 2092 1076 556 2668 1540 300 2324 1292 820 2908 1836 228 2196 1164 748 2804 1668 428 2540 1476 916 2996 1964 123 2091 1037 587 2683 1601 299 2341 1283 877 2903 1803 185 2213 1219 763 2717 1761 491 2555 1489 997 3053 1995 10 2090 1126 618 2570 1662 298 2358 1402 806 2898 1898 142 2230 1274 650 2758 1726 426 2442 1502 950 2982 2026 25 2089 1087 521 2585 1595 297 2375 1393 863 2893 1865 227 2247 1201 665 2799 1691 489 2457 1515 903 3039 1929 40 2088 1048 552 2600 1656 296 2392 1384 792 2888 1832 184 2264 1256 680 2712 1784 424 2472 1528 984 2968 1960 55 2087 1137 583 2615 1589 295 2409 1375 849 2883 1799 141 2281 1183 695 2753 1749 487 2487 1413 937 3025 1991 70 2086 1098 614 2630 1650 294 2426 1366 778 2878 1894 226 2298 1238 710 2794 1714 422 2502 1426 1018 2954 2022 85 2085 1059 517 2645 1583 293 2315 1357 835 2873 1861 183 2187 1165 725 2707 1679 485 2517 1439 971 3011 1925 100 2084 1148 548 2660 1644 292 2332 1348 892 2868 1828 140 2204 1220 740 2748 1772 420 2532 1452 924 1956 115 2083 1109 579 2675 1577 291 2349 1339 821 2863 1795 225 2221 1275 755 2789 1737 483 2547 1465 1005 2997 1987 2 2082 1070 610 2562 1638 290 2366 1330 878 2858 1890 182 2238 1202 642 2702 1702 418 2434 1478 958 3054 2018 17 2081 1031 513 2577 1571 289 2383 1321 807 2853 1857 139 2255 1257 657 2743 1667 481 2449 1491 911 2983 1921 32 2080 1120 544 2592 1632 288 2400 1312 864 2848 1824 224 2272 1184 672 2784 1760 416 2464 1504 992 3040 1952 47 2079 1081 575 2607 1565 287 2417 1303 793 2843 1919 181 2289 1239 687 2697 1725 479 2479 1517 945 2969 1983 62 2078 1042 606 2622 1626 286 2306 1294 850 2838 1886 138 2178 1166 702 2738 1690 414 2494 1530 898 3026 2014 77 2077 1131 637 2637 1559 285 2323 1285 779 2833 1853 223 2195 1221 717 2779 1783 477 2509 1415 979 2955 2045 92 2076 1092 540 2652 1620 284 2340 1404 836 2828 1820 180 2212 1276 732 2692 1748 412 2524 1428 932 3012 1948 107 2075 1053 571 2667 1553 283 2357 1395 893 2823 1915 137 2229 1203 747 2733 1713 475 2539 1441 1013 1979 122 2074 1142 602 2682 1614 282 2374 1386 822 2818 1882 222 2246 1258 762 2774 1678 410 2554 1454 966 2998 2010 9 2073 1103 633 2569 1547 281 2391 1377 879 2941 1849 179 2263 1185 649 2815 1771 473 2441 1467 919 3055 2041 24 2072 1064 536 2584 1608 280 2408 1368 808 2936 1816 136 2280 1240 664 2728 1736 408 2456 1480 1000 2984 1944 39 2071 1025 567 2599 1541 279 2425 1359 865 2931 1911 221 2297 1167 679 2769 1701 471 2471 1493 953 3041 1975 54 2070 1114 598 2614 1602 278 2314 1350 794 2926 1878 178 2186 1222 694 2810 1666 406 2486 1506 906 2970 2006 69 2069 1075 629 2629 1663 277 2331 1341 851 2921 1845 135 2203 1277 709 2723 1759 469 2501 1519 987 3027 2037 84 2068 1036 532 2644 1596 276 2348 1332 780 2916 1812 220 2220 1204 724 2764 1724 404 2516 1532 940 2956 1940 99 2067 1125 563 2659 1657 275 2365 1323 837 2911 1907 177 2237 1259 739 2805 1689 467 2531 1417 1021 3013 1971 114 2066 1086 594 2674 1590 274 2382 1314 894 2906 1874 134 2254 1186 754 2718 1782 402 2546 1430 974 2002 1 2065 1047 625 2561 1651 273 2399 1305 823 2901 1841 219 2271 1241 641 2759 1747 465 2433 1443 927 2999 2033 16 2064 1136 528 2576 1584 272 2416 1296 880 2896 1808 176 2288 1168 656 2800 1712 400 2448 1456 1008 3056 1936 31 2063 1097 559 2591 1645 271 2305 1287 809 2891 1903 133 2177 1223 671 2713 1677 463 2463 1469 961 2985 1967 46 2062 1058 590 2606 1578 270 2322 1406 866 2886 1870 218 2194 1278 686 2754 1770 398 2478 1482 914 3042 1998 61 2061 1147 621 2621 1639 269 2339 1397 795 2881 1837 175 2211 1205 701 2795 1735 461 2493 1495 995 2971 2029 76 2060 1108 524 2636 1572 268 2356 1388 852 2876 1804 132 2228 1260 716 2708 1700 396 2508 1508 948 3028 1932 91 2059 1069 555 2651 1633 267 2373 1379 781 2871 1899 217 2245 1187 731 2749 1665 459 2523 1521 901 2957 1963 106 2058 1030 586 2666 1566 266 2390 1370 838 2866 1866 174 2262 1242 746 2790 1758 394 2538 1534 982 3014 1994 121 2057 1119 617 2681 1627 265 2407 1361 895 2861 1833 131 2279 1169 761 2703 1723 457 2553 1419 935 2025 8 2056 1080 520 2568 1560 264 2424 1352 824 2856 1800 216 2296 1224 648 2744 1688 392 2440 1432 1016 3000 1928 23 2055 1041 551 2583 1621 263 2313 1343 881 2851 1895 173 2185 1279 663 2785 1781 455 2455 1445 969 3057 1959 38 2054 1130 582 2598 1554 262 2330 1334 810 2846 1862 130 2202 1206 678 2698 1746 390 2470 1458 922 2986 1990 53 2053 1091 613 2613 1615 261 2347 1325 867 2841 1829 215 2219 1261 693 2739 1711 453 2485 1471 1003 3043 2021 68 2052 1052 516 2628 1548 260 2364 1316 796 2836 1796 172 2236 1188 708 2780 1676 388 2500 1484 956 2972 1924 83 2051 1141 547 2643 1609 259 2381 1307 853 2831 1891 129 2253 1243 723 2693 1769 451 2515 1497 909 3029 1955 98 2050 1102 578 2658 1542 258 2398 1298 782 2826 1858 214 2270 1170 738 2734 1734 386 2530 1510 990 2958 1986 113 2049 1063 609 2673 1603 257 2415 1289 839 2821 1825 171 2287 1225 753 2775 1699 449 2545 1523 943 3015 2017 0 2048 1024 512 2560 1536 256 2304 1280 768 2816 1792 128 2176 1152 640 2688 1664 384 2432 1408 896 2944 1920 codec2-0.0~git20230330.db1c21c/data/interleavers/imap378000066400000000000000000000025721441116725500221100ustar00rootroot000000000000005 271 133 65 329 201 45 303 167 111 355 239 29 287 153 81 339 223 61 305 185 123 371 255 10 270 138 66 322 194 42 302 174 110 358 238 26 286 146 82 342 222 58 306 178 118 374 254 15 269 143 67 331 203 39 301 165 109 361 237 23 285 155 83 345 221 55 307 187 113 377 253 4 268 132 68 324 196 36 300 172 108 364 236 20 284 148 84 348 220 52 308 180 124 252 9 267 137 69 333 205 33 299 163 107 367 235 17 283 157 85 351 219 49 309 189 119 251 14 266 142 70 326 198 46 298 170 106 354 234 30 282 150 86 338 218 62 310 182 114 370 250 3 265 131 71 335 207 43 297 161 105 357 233 27 281 159 87 341 217 59 311 191 125 373 249 8 264 136 72 328 200 40 296 168 104 360 232 24 280 152 88 344 216 56 312 184 120 376 248 13 263 141 73 321 193 37 295 175 103 363 231 21 279 145 89 347 215 53 313 177 115 247 2 262 130 74 330 202 34 294 166 102 366 230 18 278 154 90 350 214 50 314 186 126 246 7 261 135 75 323 195 47 293 173 101 353 229 31 277 147 91 337 213 63 315 179 121 369 245 12 260 140 76 332 204 44 292 164 100 356 228 28 276 156 92 340 212 60 316 188 116 372 244 1 259 129 77 325 197 41 291 171 99 359 227 25 275 149 93 343 211 57 317 181 127 375 243 6 258 134 78 334 206 38 290 162 98 362 226 22 274 158 94 346 210 54 318 190 122 242 11 257 139 79 327 199 35 289 169 97 365 225 19 273 151 95 349 209 51 319 183 117 241 0 256 128 64 320 192 32 288 160 96 352 224 16 272 144 80 336 208 48 304 176 112 368 240 codec2-0.0~git20230330.db1c21c/data/interleavers/imap4602000066400000000000000000000526141441116725500221640ustar00rootroot000000000000003 4097 2053 1043 3091 535 2563 1549 3601 319 4483 2321 1491 3559 791 3059 1981 3855 6 4098 2058 1062 3110 558 2566 1562 3618 382 4358 2338 1446 3534 814 3046 1914 3870 9 4099 2063 1081 3129 581 2569 1575 3635 445 4489 2355 1401 3509 837 3033 1847 3885 12 4100 2068 1100 3148 604 2572 1588 3652 508 4364 2372 1356 3484 860 3020 2036 3900 15 4101 2073 1119 3167 627 2575 1601 3669 315 4495 2389 1311 3459 883 3007 1969 3915 18 4102 2078 1138 3186 650 2578 1614 3686 378 4370 2406 1522 3434 906 2994 1902 3930 21 4103 2083 1157 3205 673 2581 1627 3703 441 4501 2423 1477 3409 929 2981 1835 3945 24 4104 2088 1176 3224 696 2584 1640 3720 504 4376 2440 1432 3384 952 2968 2024 3960 27 4105 2093 1195 3243 719 2587 1653 3737 311 4507 2457 1387 3359 975 2955 1957 3975 30 4106 2098 1214 3262 742 2590 1666 3754 374 4382 2474 1342 3334 998 2942 1890 3990 33 4107 2103 1233 3281 765 2593 1679 3771 437 4513 2491 1297 3565 1021 2929 1823 4005 36 4108 2108 1252 3300 532 2596 1692 3788 500 4388 2508 1508 3540 788 2916 2012 4020 39 4109 2113 1271 3319 555 2599 1705 3805 307 4519 2525 1463 3515 811 2903 1945 4035 42 4110 2118 1034 3082 578 2602 1718 3822 370 4394 2542 1418 3490 834 2890 1878 4050 45 4111 2123 1053 3101 601 2605 1731 3839 433 4525 2559 1373 3465 857 2877 1811 4065 48 4112 2128 1072 3120 624 2608 1744 3600 496 4400 2320 1328 3440 880 2864 2000 4080 51 4113 2133 1091 3139 647 2611 1757 3617 303 4531 2337 1283 3415 903 2851 1933 4095 54 4114 2138 1110 3158 670 2614 1770 3634 366 4406 2354 1494 3390 926 2838 1866 3854 57 4115 2143 1129 3177 693 2617 1783 3651 429 4537 2371 1449 3365 949 2825 1799 3869 60 4116 2148 1148 3196 716 2620 1540 3668 492 4412 2388 1404 3340 972 3068 1988 3884 63 4117 2153 1167 3215 739 2623 1553 3685 299 4543 2405 1359 3571 995 3055 1921 3899 66 4118 2158 1186 3234 762 2626 1566 3702 362 4418 2422 1314 3546 1018 3042 1854 3914 69 4119 2163 1205 3253 529 2629 1579 3719 425 4549 2439 1525 3521 785 3029 2043 3929 72 4120 2168 1224 3272 552 2632 1592 3736 488 4424 2456 1480 3496 808 3016 1976 3944 75 4121 2173 1243 3291 575 2635 1605 3753 295 4555 2473 1435 3471 831 3003 1909 3959 78 4122 2178 1262 3310 598 2638 1618 3770 358 4430 2490 1390 3446 854 2990 1842 3974 81 4123 2183 1025 3073 621 2641 1631 3787 421 4561 2507 1345 3421 877 2977 2031 3989 84 4124 2188 1044 3092 644 2644 1644 3804 484 4436 2524 1300 3396 900 2964 1964 4004 87 4125 2193 1063 3111 667 2647 1657 3821 291 4567 2541 1511 3371 923 2951 1897 4019 90 4126 2198 1082 3130 690 2650 1670 3838 354 4442 2558 1466 3346 946 2938 1830 4034 93 4127 2203 1101 3149 713 2653 1683 3599 417 4573 2319 1421 3577 969 2925 2019 4049 96 4128 2208 1120 3168 736 2656 1696 3616 480 4448 2336 1376 3552 992 2912 1952 4064 99 4129 2213 1139 3187 759 2659 1709 3633 287 4579 2353 1331 3527 1015 2899 1885 4079 102 4130 2218 1158 3206 526 2662 1722 3650 350 4454 2370 1286 3502 782 2886 1818 4094 105 4131 2223 1177 3225 549 2665 1735 3667 413 4585 2387 1497 3477 805 2873 2007 3853 108 4132 2228 1196 3244 572 2668 1748 3684 476 4460 2404 1452 3452 828 2860 1940 3868 111 4133 2233 1215 3263 595 2671 1761 3701 283 4591 2421 1407 3427 851 2847 1873 3883 114 4134 2238 1234 3282 618 2674 1774 3718 346 4466 2438 1362 3402 874 2834 1806 3898 117 4135 2243 1253 3301 641 2677 1787 3735 409 4597 2455 1317 3377 897 2821 1995 3913 120 4136 2248 1272 3320 664 2680 1544 3752 472 4472 2472 1528 3352 920 3064 1928 3928 123 4137 2253 1035 3083 687 2683 1557 3769 279 2489 1483 3583 943 3051 1861 3943 126 4138 2258 1054 3102 710 2686 1570 3786 342 4478 2506 1438 3558 966 3038 1794 3958 129 4139 2263 1073 3121 733 2689 1583 3803 405 4353 2523 1393 3533 989 3025 1983 3973 132 4140 2268 1092 3140 756 2692 1596 3820 468 4484 2540 1348 3508 1012 3012 1916 3988 135 4141 2273 1111 3159 523 2695 1609 3837 275 4359 2557 1303 3483 779 2999 1849 4003 138 4142 2278 1130 3178 546 2698 1622 3598 338 4490 2318 1514 3458 802 2986 2038 4018 141 4143 2283 1149 3197 569 2701 1635 3615 401 4365 2335 1469 3433 825 2973 1971 4033 144 4144 2288 1168 3216 592 2704 1648 3632 464 4496 2352 1424 3408 848 2960 1904 4048 147 4145 2293 1187 3235 615 2707 1661 3649 271 4371 2369 1379 3383 871 2947 1837 4063 150 4146 2298 1206 3254 638 2710 1674 3666 334 4502 2386 1334 3358 894 2934 2026 4078 153 4147 2303 1225 3273 661 2713 1687 3683 397 4377 2403 1289 3333 917 2921 1959 4093 156 4148 2052 1244 3292 684 2716 1700 3700 460 4508 2420 1500 3564 940 2908 1892 3852 159 4149 2057 1263 3311 707 2719 1713 3717 267 4383 2437 1455 3539 963 2895 1825 3867 162 4150 2062 1026 3074 730 2722 1726 3734 330 4514 2454 1410 3514 986 2882 2014 3882 165 4151 2067 1045 3093 753 2725 1739 3751 393 4389 2471 1365 3489 1009 2869 1947 3897 168 4152 2072 1064 3112 520 2728 1752 3768 456 4520 2488 1320 3464 776 2856 1880 3912 171 4153 2077 1083 3131 543 2731 1765 3785 263 4395 2505 1531 3439 799 2843 1813 3927 174 4154 2082 1102 3150 566 2734 1778 3802 326 4526 2522 1486 3414 822 2830 2002 3942 177 4155 2087 1121 3169 589 2737 1791 3819 389 4401 2539 1441 3389 845 2817 1935 3957 180 4156 2092 1140 3188 612 2740 1548 3836 452 4532 2556 1396 3364 868 3060 1868 3972 183 4157 2097 1159 3207 635 2743 1561 3597 259 4407 2317 1351 3339 891 3047 1801 3987 186 4158 2102 1178 3226 658 2746 1574 3614 322 4538 2334 1306 3570 914 3034 1990 4002 189 4159 2107 1197 3245 681 2749 1587 3631 385 4413 2351 1517 3545 937 3021 1923 4017 192 4160 2112 1216 3264 704 2752 1600 3648 448 4544 2368 1472 3520 960 3008 1856 4032 195 4161 2117 1235 3283 727 2755 1613 3665 511 4419 2385 1427 3495 983 2995 2045 4047 198 4162 2122 1254 3302 750 2758 1626 3682 318 4550 2402 1382 3470 1006 2982 1978 4062 201 4163 2127 1273 3321 517 2761 1639 3699 381 4425 2419 1337 3445 773 2969 1911 4077 204 4164 2132 1036 3084 540 2764 1652 3716 444 4556 2436 1292 3420 796 2956 1844 4092 207 4165 2137 1055 3103 563 2767 1665 3733 507 4431 2453 1503 3395 819 2943 2033 3851 210 4166 2142 1074 3122 586 2770 1678 3750 314 4562 2470 1458 3370 842 2930 1966 3866 213 4167 2147 1093 3141 609 2773 1691 3767 377 4437 2487 1413 3345 865 2917 1899 3881 216 4168 2152 1112 3160 632 2776 1704 3784 440 4568 2504 1368 3576 888 2904 1832 3896 219 4169 2157 1131 3179 655 2779 1717 3801 503 4443 2521 1323 3551 911 2891 2021 3911 222 4170 2162 1150 3198 678 2782 1730 3818 310 4574 2538 1534 3526 934 2878 1954 3926 225 4171 2167 1169 3217 701 2785 1743 3835 373 4449 2555 1489 3501 957 2865 1887 3941 228 4172 2172 1188 3236 724 2788 1756 3596 436 4580 2316 1444 3476 980 2852 1820 3956 231 4173 2177 1207 3255 747 2791 1769 3613 499 4455 2333 1399 3451 1003 2839 2009 3971 234 4174 2182 1226 3274 514 2794 1782 3630 306 4586 2350 1354 3426 770 2826 1942 3986 237 4175 2187 1245 3293 537 2797 1539 3647 369 4461 2367 1309 3401 793 3069 1875 4001 240 4176 2192 1264 3312 560 2800 1552 3664 432 4592 2384 1520 3376 816 3056 1808 4016 243 4177 2197 1027 3075 583 2803 1565 3681 495 4467 2401 1475 3351 839 3043 1997 4031 246 4178 2202 1046 3094 606 2806 1578 3698 302 4598 2418 1430 3582 862 3030 1930 4046 249 4179 2207 1065 3113 629 2809 1591 3715 365 4473 2435 1385 3557 885 3017 1863 4061 252 4180 2212 1084 3132 652 2812 1604 3732 428 2452 1340 3532 908 3004 1796 4076 255 4181 2217 1103 3151 675 2815 1617 3749 491 4479 2469 1295 3507 931 2991 1985 4091 2 4182 2222 1122 3170 698 2562 1630 3766 298 4354 2486 1506 3482 954 2978 1918 3850 5 4183 2227 1141 3189 721 2565 1643 3783 361 4485 2503 1461 3457 977 2965 1851 3865 8 4184 2232 1160 3208 744 2568 1656 3800 424 4360 2520 1416 3432 1000 2952 2040 3880 11 4185 2237 1179 3227 767 2571 1669 3817 487 4491 2537 1371 3407 1023 2939 1973 3895 14 4186 2242 1198 3246 534 2574 1682 3834 294 4366 2554 1326 3382 790 2926 1906 3910 17 4187 2247 1217 3265 557 2577 1695 3595 357 4497 2315 1281 3357 813 2913 1839 3925 20 4188 2252 1236 3284 580 2580 1708 3612 420 4372 2332 1492 3332 836 2900 2028 3940 23 4189 2257 1255 3303 603 2583 1721 3629 483 4503 2349 1447 3563 859 2887 1961 3955 26 4190 2262 1274 3322 626 2586 1734 3646 290 4378 2366 1402 3538 882 2874 1894 3970 29 4191 2267 1037 3085 649 2589 1747 3663 353 4509 2383 1357 3513 905 2861 1827 3985 32 4192 2272 1056 3104 672 2592 1760 3680 416 4384 2400 1312 3488 928 2848 2016 4000 35 4193 2277 1075 3123 695 2595 1773 3697 479 4515 2417 1523 3463 951 2835 1949 4015 38 4194 2282 1094 3142 718 2598 1786 3714 286 4390 2434 1478 3438 974 2822 1882 4030 41 4195 2287 1113 3161 741 2601 1543 3731 349 4521 2451 1433 3413 997 3065 1815 4045 44 4196 2292 1132 3180 764 2604 1556 3748 412 4396 2468 1388 3388 1020 3052 2004 4060 47 4197 2297 1151 3199 531 2607 1569 3765 475 4527 2485 1343 3363 787 3039 1937 4075 50 4198 2302 1170 3218 554 2610 1582 3782 282 4402 2502 1298 3338 810 3026 1870 4090 53 4199 2051 1189 3237 577 2613 1595 3799 345 4533 2519 1509 3569 833 3013 1803 3849 56 4200 2056 1208 3256 600 2616 1608 3816 408 4408 2536 1464 3544 856 3000 1992 3864 59 4201 2061 1227 3275 623 2619 1621 3833 471 4539 2553 1419 3519 879 2987 1925 3879 62 4202 2066 1246 3294 646 2622 1634 3594 278 4414 2314 1374 3494 902 2974 1858 3894 65 4203 2071 1265 3313 669 2625 1647 3611 341 4545 2331 1329 3469 925 2961 2047 3909 68 4204 2076 1028 3076 692 2628 1660 3628 404 4420 2348 1284 3444 948 2948 1980 3924 71 4205 2081 1047 3095 715 2631 1673 3645 467 4551 2365 1495 3419 971 2935 1913 3939 74 4206 2086 1066 3114 738 2634 1686 3662 274 4426 2382 1450 3394 994 2922 1846 3954 77 4207 2091 1085 3133 761 2637 1699 3679 337 4557 2399 1405 3369 1017 2909 2035 3969 80 4208 2096 1104 3152 528 2640 1712 3696 400 4432 2416 1360 3344 784 2896 1968 3984 83 4209 2101 1123 3171 551 2643 1725 3713 463 4563 2433 1315 3575 807 2883 1901 3999 86 4210 2106 1142 3190 574 2646 1738 3730 270 4438 2450 1526 3550 830 2870 1834 4014 89 4211 2111 1161 3209 597 2649 1751 3747 333 4569 2467 1481 3525 853 2857 2023 4029 92 4212 2116 1180 3228 620 2652 1764 3764 396 4444 2484 1436 3500 876 2844 1956 4044 95 4213 2121 1199 3247 643 2655 1777 3781 459 4575 2501 1391 3475 899 2831 1889 4059 98 4214 2126 1218 3266 666 2658 1790 3798 266 4450 2518 1346 3450 922 2818 1822 4074 101 4215 2131 1237 3285 689 2661 1547 3815 329 4581 2535 1301 3425 945 3061 2011 4089 104 4216 2136 1256 3304 712 2664 1560 3832 392 4456 2552 1512 3400 968 3048 1944 3848 107 4217 2141 1275 3323 735 2667 1573 3593 455 4587 2313 1467 3375 991 3035 1877 3863 110 4218 2146 1038 3086 758 2670 1586 3610 262 4462 2330 1422 3350 1014 3022 1810 3878 113 4219 2151 1057 3105 525 2673 1599 3627 325 4593 2347 1377 3581 781 3009 1999 3893 116 4220 2156 1076 3124 548 2676 1612 3644 388 4468 2364 1332 3556 804 2996 1932 3908 119 4221 2161 1095 3143 571 2679 1625 3661 451 4599 2381 1287 3531 827 2983 1865 3923 122 4222 2166 1114 3162 594 2682 1638 3678 258 4474 2398 1498 3506 850 2970 1798 3938 125 4223 2171 1133 3181 617 2685 1651 3695 321 2415 1453 3481 873 2957 1987 3953 128 4224 2176 1152 3200 640 2688 1664 3712 384 4480 2432 1408 3456 896 2944 1920 3968 131 4225 2181 1171 3219 663 2691 1677 3729 447 4355 2449 1363 3431 919 2931 1853 3983 134 4226 2186 1190 3238 686 2694 1690 3746 510 4486 2466 1318 3406 942 2918 2042 3998 137 4227 2191 1209 3257 709 2697 1703 3763 317 4361 2483 1529 3381 965 2905 1975 4013 140 4228 2196 1228 3276 732 2700 1716 3780 380 4492 2500 1484 3356 988 2892 1908 4028 143 4229 2201 1247 3295 755 2703 1729 3797 443 4367 2517 1439 3331 1011 2879 1841 4043 146 4230 2206 1266 3314 522 2706 1742 3814 506 4498 2534 1394 3562 778 2866 2030 4058 149 4231 2211 1029 3077 545 2709 1755 3831 313 4373 2551 1349 3537 801 2853 1963 4073 152 4232 2216 1048 3096 568 2712 1768 3592 376 4504 2312 1304 3512 824 2840 1896 4088 155 4233 2221 1067 3115 591 2715 1781 3609 439 4379 2329 1515 3487 847 2827 1829 3847 158 4234 2226 1086 3134 614 2718 1538 3626 502 4510 2346 1470 3462 870 3070 2018 3862 161 4235 2231 1105 3153 637 2721 1551 3643 309 4385 2363 1425 3437 893 3057 1951 3877 164 4236 2236 1124 3172 660 2724 1564 3660 372 4516 2380 1380 3412 916 3044 1884 3892 167 4237 2241 1143 3191 683 2727 1577 3677 435 4391 2397 1335 3387 939 3031 1817 3907 170 4238 2246 1162 3210 706 2730 1590 3694 498 4522 2414 1290 3362 962 3018 2006 3922 173 4239 2251 1181 3229 729 2733 1603 3711 305 4397 2431 1501 3337 985 3005 1939 3937 176 4240 2256 1200 3248 752 2736 1616 3728 368 4528 2448 1456 3568 1008 2992 1872 3952 179 4241 2261 1219 3267 519 2739 1629 3745 431 4403 2465 1411 3543 775 2979 1805 3967 182 4242 2266 1238 3286 542 2742 1642 3762 494 4534 2482 1366 3518 798 2966 1994 3982 185 4243 2271 1257 3305 565 2745 1655 3779 301 4409 2499 1321 3493 821 2953 1927 3997 188 4244 2276 1276 3324 588 2748 1668 3796 364 4540 2516 1532 3468 844 2940 1860 4012 191 4245 2281 1039 3087 611 2751 1681 3813 427 4415 2533 1487 3443 867 2927 1793 4027 194 4246 2286 1058 3106 634 2754 1694 3830 490 4546 2550 1442 3418 890 2914 1982 4042 197 4247 2291 1077 3125 657 2757 1707 3591 297 4421 2311 1397 3393 913 2901 1915 4057 200 4248 2296 1096 3144 680 2760 1720 3608 360 4552 2328 1352 3368 936 2888 1848 4072 203 4249 2301 1115 3163 703 2763 1733 3625 423 4427 2345 1307 3343 959 2875 2037 4087 206 4250 2050 1134 3182 726 2766 1746 3642 486 4558 2362 1518 3574 982 2862 1970 3846 209 4251 2055 1153 3201 749 2769 1759 3659 293 4433 2379 1473 3549 1005 2849 1903 3861 212 4252 2060 1172 3220 516 2772 1772 3676 356 4564 2396 1428 3524 772 2836 1836 3876 215 4253 2065 1191 3239 539 2775 1785 3693 419 4439 2413 1383 3499 795 2823 2025 3891 218 4254 2070 1210 3258 562 2778 1542 3710 482 4570 2430 1338 3474 818 3066 1958 3906 221 4255 2075 1229 3277 585 2781 1555 3727 289 4445 2447 1293 3449 841 3053 1891 3921 224 4256 2080 1248 3296 608 2784 1568 3744 352 4576 2464 1504 3424 864 3040 1824 3936 227 4257 2085 1267 3315 631 2787 1581 3761 415 4451 2481 1459 3399 887 3027 2013 3951 230 4258 2090 1030 3078 654 2790 1594 3778 478 4582 2498 1414 3374 910 3014 1946 3966 233 4259 2095 1049 3097 677 2793 1607 3795 285 4457 2515 1369 3349 933 3001 1879 3981 236 4260 2100 1068 3116 700 2796 1620 3812 348 4588 2532 1324 3580 956 2988 1812 3996 239 4261 2105 1087 3135 723 2799 1633 3829 411 4463 2549 1535 3555 979 2975 2001 4011 242 4262 2110 1106 3154 746 2802 1646 3590 474 4594 2310 1490 3530 1002 2962 1934 4026 245 4263 2115 1125 3173 513 2805 1659 3607 281 4469 2327 1445 3505 769 2949 1867 4041 248 4264 2120 1144 3192 536 2808 1672 3624 344 4600 2344 1400 3480 792 2936 1800 4056 251 4265 2125 1163 3211 559 2811 1685 3641 407 4475 2361 1355 3455 815 2923 1989 4071 254 4266 2130 1182 3230 582 2814 1698 3658 470 2378 1310 3430 838 2910 1922 4086 1 4267 2135 1201 3249 605 2561 1711 3675 277 4481 2395 1521 3405 861 2897 1855 3845 4 4268 2140 1220 3268 628 2564 1724 3692 340 4356 2412 1476 3380 884 2884 2044 3860 7 4269 2145 1239 3287 651 2567 1737 3709 403 4487 2429 1431 3355 907 2871 1977 3875 10 4270 2150 1258 3306 674 2570 1750 3726 466 4362 2446 1386 3330 930 2858 1910 3890 13 4271 2155 1277 3325 697 2573 1763 3743 273 4493 2463 1341 3561 953 2845 1843 3905 16 4272 2160 1040 3088 720 2576 1776 3760 336 4368 2480 1296 3536 976 2832 2032 3920 19 4273 2165 1059 3107 743 2579 1789 3777 399 4499 2497 1507 3511 999 2819 1965 3935 22 4274 2170 1078 3126 766 2582 1546 3794 462 4374 2514 1462 3486 1022 3062 1898 3950 25 4275 2175 1097 3145 533 2585 1559 3811 269 4505 2531 1417 3461 789 3049 1831 3965 28 4276 2180 1116 3164 556 2588 1572 3828 332 4380 2548 1372 3436 812 3036 2020 3980 31 4277 2185 1135 3183 579 2591 1585 3589 395 4511 2309 1327 3411 835 3023 1953 3995 34 4278 2190 1154 3202 602 2594 1598 3606 458 4386 2326 1282 3386 858 3010 1886 4010 37 4279 2195 1173 3221 625 2597 1611 3623 265 4517 2343 1493 3361 881 2997 1819 4025 40 4280 2200 1192 3240 648 2600 1624 3640 328 4392 2360 1448 3336 904 2984 2008 4040 43 4281 2205 1211 3259 671 2603 1637 3657 391 4523 2377 1403 3567 927 2971 1941 4055 46 4282 2210 1230 3278 694 2606 1650 3674 454 4398 2394 1358 3542 950 2958 1874 4070 49 4283 2215 1249 3297 717 2609 1663 3691 261 4529 2411 1313 3517 973 2945 1807 4085 52 4284 2220 1268 3316 740 2612 1676 3708 324 4404 2428 1524 3492 996 2932 1996 3844 55 4285 2225 1031 3079 763 2615 1689 3725 387 4535 2445 1479 3467 1019 2919 1929 3859 58 4286 2230 1050 3098 530 2618 1702 3742 450 4410 2462 1434 3442 786 2906 1862 3874 61 4287 2235 1069 3117 553 2621 1715 3759 257 4541 2479 1389 3417 809 2893 1795 3889 64 4288 2240 1088 3136 576 2624 1728 3776 320 4416 2496 1344 3392 832 2880 1984 3904 67 4289 2245 1107 3155 599 2627 1741 3793 383 4547 2513 1299 3367 855 2867 1917 3919 70 4290 2250 1126 3174 622 2630 1754 3810 446 4422 2530 1510 3342 878 2854 1850 3934 73 4291 2255 1145 3193 645 2633 1767 3827 509 4553 2547 1465 3573 901 2841 2039 3949 76 4292 2260 1164 3212 668 2636 1780 3588 316 4428 2308 1420 3548 924 2828 1972 3964 79 4293 2265 1183 3231 691 2639 1537 3605 379 4559 2325 1375 3523 947 3071 1905 3979 82 4294 2270 1202 3250 714 2642 1550 3622 442 4434 2342 1330 3498 970 3058 1838 3994 85 4295 2275 1221 3269 737 2645 1563 3639 505 4565 2359 1285 3473 993 3045 2027 4009 88 4296 2280 1240 3288 760 2648 1576 3656 312 4440 2376 1496 3448 1016 3032 1960 4024 91 4297 2285 1259 3307 527 2651 1589 3673 375 4571 2393 1451 3423 783 3019 1893 4039 94 4298 2290 1278 3326 550 2654 1602 3690 438 4446 2410 1406 3398 806 3006 1826 4054 97 4299 2295 1041 3089 573 2657 1615 3707 501 4577 2427 1361 3373 829 2993 2015 4069 100 4300 2300 1060 3108 596 2660 1628 3724 308 4452 2444 1316 3348 852 2980 1948 4084 103 4301 2049 1079 3127 619 2663 1641 3741 371 4583 2461 1527 3579 875 2967 1881 3843 106 4302 2054 1098 3146 642 2666 1654 3758 434 4458 2478 1482 3554 898 2954 1814 3858 109 4303 2059 1117 3165 665 2669 1667 3775 497 4589 2495 1437 3529 921 2941 2003 3873 112 4304 2064 1136 3184 688 2672 1680 3792 304 4464 2512 1392 3504 944 2928 1936 3888 115 4305 2069 1155 3203 711 2675 1693 3809 367 4595 2529 1347 3479 967 2915 1869 3903 118 4306 2074 1174 3222 734 2678 1706 3826 430 4470 2546 1302 3454 990 2902 1802 3918 121 4307 2079 1193 3241 757 2681 1719 3587 493 4601 2307 1513 3429 1013 2889 1991 3933 124 4308 2084 1212 3260 524 2684 1732 3604 300 4476 2324 1468 3404 780 2876 1924 3948 127 4309 2089 1231 3279 547 2687 1745 3621 363 2341 1423 3379 803 2863 1857 3963 130 4310 2094 1250 3298 570 2690 1758 3638 426 4482 2358 1378 3354 826 2850 2046 3978 133 4311 2099 1269 3317 593 2693 1771 3655 489 4357 2375 1333 3329 849 2837 1979 3993 136 4312 2104 1032 3080 616 2696 1784 3672 296 4488 2392 1288 3560 872 2824 1912 4008 139 4313 2109 1051 3099 639 2699 1541 3689 359 4363 2409 1499 3535 895 3067 1845 4023 142 4314 2114 1070 3118 662 2702 1554 3706 422 4494 2426 1454 3510 918 3054 2034 4038 145 4315 2119 1089 3137 685 2705 1567 3723 485 4369 2443 1409 3485 941 3041 1967 4053 148 4316 2124 1108 3156 708 2708 1580 3740 292 4500 2460 1364 3460 964 3028 1900 4068 151 4317 2129 1127 3175 731 2711 1593 3757 355 4375 2477 1319 3435 987 3015 1833 4083 154 4318 2134 1146 3194 754 2714 1606 3774 418 4506 2494 1530 3410 1010 3002 2022 3842 157 4319 2139 1165 3213 521 2717 1619 3791 481 4381 2511 1485 3385 777 2989 1955 3857 160 4320 2144 1184 3232 544 2720 1632 3808 288 4512 2528 1440 3360 800 2976 1888 3872 163 4321 2149 1203 3251 567 2723 1645 3825 351 4387 2545 1395 3335 823 2963 1821 3887 166 4322 2154 1222 3270 590 2726 1658 3586 414 4518 2306 1350 3566 846 2950 2010 3902 169 4323 2159 1241 3289 613 2729 1671 3603 477 4393 2323 1305 3541 869 2937 1943 3917 172 4324 2164 1260 3308 636 2732 1684 3620 284 4524 2340 1516 3516 892 2924 1876 3932 175 4325 2169 1279 3327 659 2735 1697 3637 347 4399 2357 1471 3491 915 2911 1809 3947 178 4326 2174 1042 3090 682 2738 1710 3654 410 4530 2374 1426 3466 938 2898 1998 3962 181 4327 2179 1061 3109 705 2741 1723 3671 473 4405 2391 1381 3441 961 2885 1931 3977 184 4328 2184 1080 3128 728 2744 1736 3688 280 4536 2408 1336 3416 984 2872 1864 3992 187 4329 2189 1099 3147 751 2747 1749 3705 343 4411 2425 1291 3391 1007 2859 1797 4007 190 4330 2194 1118 3166 518 2750 1762 3722 406 4542 2442 1502 3366 774 2846 1986 4022 193 4331 2199 1137 3185 541 2753 1775 3739 469 4417 2459 1457 3341 797 2833 1919 4037 196 4332 2204 1156 3204 564 2756 1788 3756 276 4548 2476 1412 3572 820 2820 1852 4052 199 4333 2209 1175 3223 587 2759 1545 3773 339 4423 2493 1367 3547 843 3063 2041 4067 202 4334 2214 1194 3242 610 2762 1558 3790 402 4554 2510 1322 3522 866 3050 1974 4082 205 4335 2219 1213 3261 633 2765 1571 3807 465 4429 2527 1533 3497 889 3037 1907 3841 208 4336 2224 1232 3280 656 2768 1584 3824 272 4560 2544 1488 3472 912 3024 1840 3856 211 4337 2229 1251 3299 679 2771 1597 3585 335 4435 2305 1443 3447 935 3011 2029 3871 214 4338 2234 1270 3318 702 2774 1610 3602 398 4566 2322 1398 3422 958 2998 1962 3886 217 4339 2239 1033 3081 725 2777 1623 3619 461 4441 2339 1353 3397 981 2985 1895 3901 220 4340 2244 1052 3100 748 2780 1636 3636 268 4572 2356 1308 3372 1004 2972 1828 3916 223 4341 2249 1071 3119 515 2783 1649 3653 331 4447 2373 1519 3347 771 2959 2017 3931 226 4342 2254 1090 3138 538 2786 1662 3670 394 4578 2390 1474 3578 794 2946 1950 3946 229 4343 2259 1109 3157 561 2789 1675 3687 457 4453 2407 1429 3553 817 2933 1883 3961 232 4344 2264 1128 3176 584 2792 1688 3704 264 4584 2424 1384 3528 840 2920 1816 3976 235 4345 2269 1147 3195 607 2795 1701 3721 327 4459 2441 1339 3503 863 2907 2005 3991 238 4346 2274 1166 3214 630 2798 1714 3738 390 4590 2458 1294 3478 886 2894 1938 4006 241 4347 2279 1185 3233 653 2801 1727 3755 453 4465 2475 1505 3453 909 2881 1871 4021 244 4348 2284 1204 3252 676 2804 1740 3772 260 4596 2492 1460 3428 932 2868 1804 4036 247 4349 2289 1223 3271 699 2807 1753 3789 323 4471 2509 1415 3403 955 2855 1993 4051 250 4350 2294 1242 3290 722 2810 1766 3806 386 2526 1370 3378 978 2842 1926 4066 253 4351 2299 1261 3309 745 2813 1779 3823 449 4477 2543 1325 3353 1001 2829 1859 4081 0 4096 2048 1024 3072 512 2560 1536 3584 256 4352 2304 1280 3328 768 2816 1792 3840 codec2-0.0~git20230330.db1c21c/data/interleavers/imap570000066400000000000000000000041721441116725500221000ustar00rootroot0000000000000027 515 257 141 407 73 335 205 461 53 563 289 189 441 105 375 237 493 22 518 258 154 398 82 350 218 474 42 550 290 186 434 114 366 250 506 17 521 259 135 389 91 333 199 455 63 569 291 183 427 123 357 231 487 12 524 260 148 412 68 348 212 468 52 556 292 180 420 100 380 244 500 7 527 261 129 403 77 331 193 449 41 293 177 445 109 371 225 481 2 530 262 142 394 86 346 206 462 62 562 294 174 438 118 362 238 494 29 533 263 155 385 95 329 219 475 51 549 295 171 431 127 353 251 507 24 536 264 136 408 72 344 200 456 40 568 296 168 424 104 376 232 488 19 539 265 149 399 81 327 213 469 61 555 297 165 417 113 367 245 501 14 542 266 130 390 90 342 194 450 50 298 162 442 122 358 226 482 9 513 267 143 413 67 325 207 463 39 561 299 191 435 99 381 239 495 4 516 268 156 404 76 340 220 476 60 548 300 188 428 108 372 252 508 31 519 269 137 395 85 323 201 457 49 567 301 185 421 117 363 233 489 26 522 270 150 386 94 338 214 470 38 554 302 182 446 126 354 246 502 21 525 271 131 409 71 321 195 451 59 303 179 439 103 377 227 483 16 528 272 144 400 80 336 208 464 48 560 304 176 432 112 368 240 496 11 531 273 157 391 89 351 221 477 37 547 305 173 425 121 359 253 509 6 534 274 138 414 66 334 202 458 58 566 306 170 418 98 382 234 490 1 537 275 151 405 75 349 215 471 47 553 307 167 443 107 373 247 503 28 540 276 132 396 84 332 196 452 36 308 164 436 116 364 228 484 23 543 277 145 387 93 347 209 465 57 559 309 161 429 125 355 241 497 18 514 278 158 410 70 330 222 478 46 546 310 190 422 102 378 254 510 13 517 279 139 401 79 345 203 459 35 565 311 187 447 111 369 235 491 8 520 280 152 392 88 328 216 472 56 552 312 184 440 120 360 248 504 3 523 281 133 415 65 343 197 453 45 313 181 433 97 383 229 485 30 526 282 146 406 74 326 210 466 34 558 314 178 426 106 374 242 498 25 529 283 159 397 83 341 223 479 55 545 315 175 419 115 365 255 511 20 532 284 140 388 92 324 204 460 44 564 316 172 444 124 356 236 492 15 535 285 153 411 69 339 217 473 33 551 317 169 437 101 379 249 505 10 538 286 134 402 78 322 198 454 54 318 166 430 110 370 230 486 5 541 287 147 393 87 337 211 467 43 557 319 163 423 119 361 243 499 0 512 256 128 384 64 320 192 448 32 544 288 160 416 96 352 224 480 codec2-0.0~git20230330.db1c21c/data/interleavers/imap6138000066400000000000000000000716141441116725500221730ustar00rootroot000000000000003 4097 2053 1043 5299 3091 535 4609 2563 1549 5635 3601 319 4483 2321 1491 5549 3559 791 5011 3059 1981 5939 3855 6 4098 2058 1062 5222 3110 558 4610 2566 1562 5638 3618 382 4358 2338 1446 5466 3534 814 4902 3046 1914 5990 3870 9 4099 2063 1081 5145 3129 581 4611 2569 1575 5641 3635 445 4489 2355 1401 5383 3509 837 5049 3033 1847 6041 3885 12 4100 2068 1100 5324 3148 604 4612 2572 1588 5644 3652 508 4364 2372 1356 5556 3484 860 4940 3020 2036 6092 3900 15 4101 2073 1119 5247 3167 627 4613 2575 1601 5647 3669 315 4495 2389 1311 5473 3459 883 5087 3007 1969 3915 18 4102 2078 1138 5170 3186 650 4614 2578 1614 5650 3686 378 4370 2406 1522 5390 3434 906 4978 2994 1902 5938 3930 21 4103 2083 1157 5349 3205 673 4615 2581 1627 5653 3703 441 4501 2423 1477 5563 3409 929 4869 2981 1835 5989 3945 24 4104 2088 1176 5272 3224 696 4616 2584 1640 5656 3720 504 4376 2440 1432 5480 3384 952 5016 2968 2024 6040 3960 27 4105 2093 1195 5195 3243 719 4617 2587 1653 5659 3737 311 4507 2457 1387 5397 3359 975 4907 2955 1957 6091 3975 30 4106 2098 1214 5374 3262 742 4618 2590 1666 5662 3754 374 4382 2474 1342 5570 3334 998 5054 2942 1890 3990 33 4107 2103 1233 5297 3281 765 4619 2593 1679 5665 3771 437 4513 2491 1297 5487 3565 1021 4945 2929 1823 5937 4005 36 4108 2108 1252 5220 3300 532 4620 2596 1692 5668 3788 500 4388 2508 1508 5404 3540 788 5092 2916 2012 5988 4020 39 4109 2113 1271 5143 3319 555 4621 2599 1705 5671 3805 307 4519 2525 1463 5577 3515 811 4983 2903 1945 6039 4035 42 4110 2118 1034 5322 3082 578 4622 2602 1718 5674 3822 370 4394 2542 1418 5494 3490 834 4874 2890 1878 6090 4050 45 4111 2123 1053 5245 3101 601 4623 2605 1731 5677 3839 433 4525 2559 1373 5411 3465 857 5021 2877 1811 4065 48 4112 2128 1072 5168 3120 624 4624 2608 1744 5680 3600 496 4400 2320 1328 5584 3440 880 4912 2864 2000 5936 4080 51 4113 2133 1091 5347 3139 647 4625 2611 1757 5683 3617 303 4531 2337 1283 5501 3415 903 5059 2851 1933 5987 4095 54 4114 2138 1110 5270 3158 670 4626 2614 1770 5686 3634 366 4406 2354 1494 5418 3390 926 4950 2838 1866 6038 3854 57 4115 2143 1129 5193 3177 693 4627 2617 1783 5689 3651 429 4537 2371 1449 5591 3365 949 5097 2825 1799 6089 3869 60 4116 2148 1148 5372 3196 716 4628 2620 1540 5692 3668 492 4412 2388 1404 5508 3340 972 4988 3068 1988 3884 63 4117 2153 1167 5295 3215 739 4629 2623 1553 5695 3685 299 4543 2405 1359 5425 3571 995 4879 3055 1921 5935 3899 66 4118 2158 1186 5218 3234 762 4630 2626 1566 5698 3702 362 4418 2422 1314 5598 3546 1018 5026 3042 1854 5986 3914 69 4119 2163 1205 5141 3253 529 4631 2629 1579 5701 3719 425 4549 2439 1525 5515 3521 785 4917 3029 2043 6037 3929 72 4120 2168 1224 5320 3272 552 4632 2632 1592 5704 3736 488 4424 2456 1480 5432 3496 808 5064 3016 1976 6088 3944 75 4121 2173 1243 5243 3291 575 4633 2635 1605 5707 3753 295 4555 2473 1435 5605 3471 831 4955 3003 1909 3959 78 4122 2178 1262 5166 3310 598 4634 2638 1618 5710 3770 358 4430 2490 1390 5522 3446 854 5102 2990 1842 5934 3974 81 4123 2183 1025 5345 3073 621 4635 2641 1631 5713 3787 421 4561 2507 1345 5439 3421 877 4993 2977 2031 5985 3989 84 4124 2188 1044 5268 3092 644 4636 2644 1644 5716 3804 484 4436 2524 1300 5612 3396 900 4884 2964 1964 6036 4004 87 4125 2193 1063 5191 3111 667 4637 2647 1657 5719 3821 291 4567 2541 1511 5529 3371 923 5031 2951 1897 6087 4019 90 4126 2198 1082 5370 3130 690 4638 2650 1670 5722 3838 354 4442 2558 1466 5446 3346 946 4922 2938 1830 4034 93 4127 2203 1101 5293 3149 713 4639 2653 1683 5725 3599 417 4573 2319 1421 5619 3577 969 5069 2925 2019 5933 4049 96 4128 2208 1120 5216 3168 736 4640 2656 1696 5728 3616 480 4448 2336 1376 5536 3552 992 4960 2912 1952 5984 4064 99 4129 2213 1139 5139 3187 759 4641 2659 1709 5731 3633 287 4579 2353 1331 5453 3527 1015 5107 2899 1885 6035 4079 102 4130 2218 1158 5318 3206 526 4642 2662 1722 5734 3650 350 4454 2370 1286 5626 3502 782 4998 2886 1818 6086 4094 105 4131 2223 1177 5241 3225 549 4643 2665 1735 5737 3667 413 4585 2387 1497 5543 3477 805 4889 2873 2007 6137 3853 108 4132 2228 1196 5164 3244 572 4644 2668 1748 5740 3684 476 4460 2404 1452 5460 3452 828 5036 2860 1940 5932 3868 111 4133 2233 1215 5343 3263 595 4645 2671 1761 5743 3701 283 4591 2421 1407 5377 3427 851 4927 2847 1873 5983 3883 114 4134 2238 1234 5266 3282 618 4646 2674 1774 5746 3718 346 4466 2438 1362 5550 3402 874 5074 2834 1806 6034 3898 117 4135 2243 1253 5189 3301 641 4647 2677 1787 5749 3735 409 4597 2455 1317 5467 3377 897 4965 2821 1995 6085 3913 120 4136 2248 1272 5368 3320 664 4648 2680 1544 5752 3752 472 4472 2472 1528 5384 3352 920 5112 3064 1928 6136 3928 123 4137 2253 1035 5291 3083 687 4649 2683 1557 5755 3769 279 4603 2489 1483 5557 3583 943 5003 3051 1861 5931 3943 126 4138 2258 1054 5214 3102 710 4650 2686 1570 5758 3786 342 4478 2506 1438 5474 3558 966 4894 3038 1794 5982 3958 129 4139 2263 1073 5137 3121 733 4651 2689 1583 5761 3803 405 4353 2523 1393 5391 3533 989 5041 3025 1983 6033 3973 132 4140 2268 1092 5316 3140 756 4652 2692 1596 5764 3820 468 4484 2540 1348 5564 3508 1012 4932 3012 1916 6084 3988 135 4141 2273 1111 5239 3159 523 4653 2695 1609 5767 3837 275 4359 2557 1303 5481 3483 779 5079 2999 1849 6135 4003 138 4142 2278 1130 5162 3178 546 4654 2698 1622 5770 3598 338 4490 2318 1514 5398 3458 802 4970 2986 2038 5930 4018 141 4143 2283 1149 5341 3197 569 4655 2701 1635 5773 3615 401 4365 2335 1469 5571 3433 825 5117 2973 1971 5981 4033 144 4144 2288 1168 5264 3216 592 4656 2704 1648 5776 3632 464 4496 2352 1424 5488 3408 848 5008 2960 1904 6032 4048 147 4145 2293 1187 5187 3235 615 4657 2707 1661 5779 3649 271 4371 2369 1379 5405 3383 871 4899 2947 1837 6083 4063 150 4146 2298 1206 5366 3254 638 4658 2710 1674 5782 3666 334 4502 2386 1334 5578 3358 894 5046 2934 2026 6134 4078 153 4147 2303 1225 5289 3273 661 4659 2713 1687 5785 3683 397 4377 2403 1289 5495 3333 917 4937 2921 1959 5929 4093 156 4148 2052 1244 5212 3292 684 4660 2716 1700 5788 3700 460 4508 2420 1500 5412 3564 940 5084 2908 1892 5980 3852 159 4149 2057 1263 5135 3311 707 4661 2719 1713 5791 3717 267 4383 2437 1455 5585 3539 963 4975 2895 1825 6031 3867 162 4150 2062 1026 5314 3074 730 4662 2722 1726 5794 3734 330 4514 2454 1410 5502 3514 986 4866 2882 2014 6082 3882 165 4151 2067 1045 5237 3093 753 4663 2725 1739 5797 3751 393 4389 2471 1365 5419 3489 1009 5013 2869 1947 6133 3897 168 4152 2072 1064 5160 3112 520 4664 2728 1752 5800 3768 456 4520 2488 1320 5592 3464 776 4904 2856 1880 5928 3912 171 4153 2077 1083 5339 3131 543 4665 2731 1765 5803 3785 263 4395 2505 1531 5509 3439 799 5051 2843 1813 5979 3927 174 4154 2082 1102 5262 3150 566 4666 2734 1778 5806 3802 326 4526 2522 1486 5426 3414 822 4942 2830 2002 6030 3942 177 4155 2087 1121 5185 3169 589 4667 2737 1791 5809 3819 389 4401 2539 1441 5599 3389 845 5089 2817 1935 6081 3957 180 4156 2092 1140 5364 3188 612 4668 2740 1548 5812 3836 452 4532 2556 1396 5516 3364 868 4980 3060 1868 6132 3972 183 4157 2097 1159 5287 3207 635 4669 2743 1561 5815 3597 259 4407 2317 1351 5433 3339 891 4871 3047 1801 5927 3987 186 4158 2102 1178 5210 3226 658 4670 2746 1574 5818 3614 322 4538 2334 1306 5606 3570 914 5018 3034 1990 5978 4002 189 4159 2107 1197 5133 3245 681 4671 2749 1587 5821 3631 385 4413 2351 1517 5523 3545 937 4909 3021 1923 6029 4017 192 4160 2112 1216 5312 3264 704 4672 2752 1600 5824 3648 448 4544 2368 1472 5440 3520 960 5056 3008 1856 6080 4032 195 4161 2117 1235 5235 3283 727 4673 2755 1613 5827 3665 511 4419 2385 1427 5613 3495 983 4947 2995 2045 6131 4047 198 4162 2122 1254 5158 3302 750 4674 2758 1626 5830 3682 318 4550 2402 1382 5530 3470 1006 5094 2982 1978 5926 4062 201 4163 2127 1273 5337 3321 517 4675 2761 1639 5833 3699 381 4425 2419 1337 5447 3445 773 4985 2969 1911 5977 4077 204 4164 2132 1036 5260 3084 540 4676 2764 1652 5836 3716 444 4556 2436 1292 5620 3420 796 4876 2956 1844 6028 4092 207 4165 2137 1055 5183 3103 563 4677 2767 1665 5839 3733 507 4431 2453 1503 5537 3395 819 5023 2943 2033 6079 3851 210 4166 2142 1074 5362 3122 586 4678 2770 1678 5842 3750 314 4562 2470 1458 5454 3370 842 4914 2930 1966 6130 3866 213 4167 2147 1093 5285 3141 609 4679 2773 1691 5845 3767 377 4437 2487 1413 5627 3345 865 5061 2917 1899 5925 3881 216 4168 2152 1112 5208 3160 632 4680 2776 1704 5848 3784 440 4568 2504 1368 5544 3576 888 4952 2904 1832 5976 3896 219 4169 2157 1131 5131 3179 655 4681 2779 1717 5851 3801 503 4443 2521 1323 5461 3551 911 5099 2891 2021 6027 3911 222 4170 2162 1150 5310 3198 678 4682 2782 1730 5854 3818 310 4574 2538 1534 5378 3526 934 4990 2878 1954 6078 3926 225 4171 2167 1169 5233 3217 701 4683 2785 1743 5857 3835 373 4449 2555 1489 5551 3501 957 4881 2865 1887 6129 3941 228 4172 2172 1188 5156 3236 724 4684 2788 1756 5860 3596 436 4580 2316 1444 5468 3476 980 5028 2852 1820 5924 3956 231 4173 2177 1207 5335 3255 747 4685 2791 1769 5863 3613 499 4455 2333 1399 5385 3451 1003 4919 2839 2009 5975 3971 234 4174 2182 1226 5258 3274 514 4686 2794 1782 5866 3630 306 4586 2350 1354 5558 3426 770 5066 2826 1942 6026 3986 237 4175 2187 1245 5181 3293 537 4687 2797 1539 5869 3647 369 4461 2367 1309 5475 3401 793 4957 3069 1875 6077 4001 240 4176 2192 1264 5360 3312 560 4688 2800 1552 5872 3664 432 4592 2384 1520 5392 3376 816 5104 3056 1808 6128 4016 243 4177 2197 1027 5283 3075 583 4689 2803 1565 5875 3681 495 4467 2401 1475 5565 3351 839 4995 3043 1997 5923 4031 246 4178 2202 1046 5206 3094 606 4690 2806 1578 5878 3698 302 4598 2418 1430 5482 3582 862 4886 3030 1930 5974 4046 249 4179 2207 1065 5129 3113 629 4691 2809 1591 5881 3715 365 4473 2435 1385 5399 3557 885 5033 3017 1863 6025 4061 252 4180 2212 1084 5308 3132 652 4692 2812 1604 5884 3732 428 4604 2452 1340 5572 3532 908 4924 3004 1796 6076 4076 255 4181 2217 1103 5231 3151 675 4693 2815 1617 5887 3749 491 4479 2469 1295 5489 3507 931 5071 2991 1985 6127 4091 2 4182 2222 1122 5154 3170 698 4694 2562 1630 5634 3766 298 4354 2486 1506 5406 3482 954 4962 2978 1918 5922 3850 5 4183 2227 1141 5333 3189 721 4695 2565 1643 5637 3783 361 4485 2503 1461 5579 3457 977 5109 2965 1851 5973 3865 8 4184 2232 1160 5256 3208 744 4696 2568 1656 5640 3800 424 4360 2520 1416 5496 3432 1000 5000 2952 2040 6024 3880 11 4185 2237 1179 5179 3227 767 4697 2571 1669 5643 3817 487 4491 2537 1371 5413 3407 1023 4891 2939 1973 6075 3895 14 4186 2242 1198 5358 3246 534 4698 2574 1682 5646 3834 294 4366 2554 1326 5586 3382 790 5038 2926 1906 6126 3910 17 4187 2247 1217 5281 3265 557 4699 2577 1695 5649 3595 357 4497 2315 1281 5503 3357 813 4929 2913 1839 5921 3925 20 4188 2252 1236 5204 3284 580 4700 2580 1708 5652 3612 420 4372 2332 1492 5420 3332 836 5076 2900 2028 5972 3940 23 4189 2257 1255 5127 3303 603 4701 2583 1721 5655 3629 483 4503 2349 1447 5593 3563 859 4967 2887 1961 6023 3955 26 4190 2262 1274 5306 3322 626 4702 2586 1734 5658 3646 290 4378 2366 1402 5510 3538 882 5114 2874 1894 6074 3970 29 4191 2267 1037 5229 3085 649 4703 2589 1747 5661 3663 353 4509 2383 1357 5427 3513 905 5005 2861 1827 6125 3985 32 4192 2272 1056 5152 3104 672 4704 2592 1760 5664 3680 416 4384 2400 1312 5600 3488 928 4896 2848 2016 5920 4000 35 4193 2277 1075 5331 3123 695 4705 2595 1773 5667 3697 479 4515 2417 1523 5517 3463 951 5043 2835 1949 5971 4015 38 4194 2282 1094 5254 3142 718 4706 2598 1786 5670 3714 286 4390 2434 1478 5434 3438 974 4934 2822 1882 6022 4030 41 4195 2287 1113 5177 3161 741 4707 2601 1543 5673 3731 349 4521 2451 1433 5607 3413 997 5081 3065 1815 6073 4045 44 4196 2292 1132 5356 3180 764 4708 2604 1556 5676 3748 412 4396 2468 1388 5524 3388 1020 4972 3052 2004 6124 4060 47 4197 2297 1151 5279 3199 531 4709 2607 1569 5679 3765 475 4527 2485 1343 5441 3363 787 5119 3039 1937 5919 4075 50 4198 2302 1170 5202 3218 554 4710 2610 1582 5682 3782 282 4402 2502 1298 5614 3338 810 5010 3026 1870 5970 4090 53 4199 2051 1189 5125 3237 577 4711 2613 1595 5685 3799 345 4533 2519 1509 5531 3569 833 4901 3013 1803 6021 3849 56 4200 2056 1208 5304 3256 600 4712 2616 1608 5688 3816 408 4408 2536 1464 5448 3544 856 5048 3000 1992 6072 3864 59 4201 2061 1227 5227 3275 623 4713 2619 1621 5691 3833 471 4539 2553 1419 5621 3519 879 4939 2987 1925 6123 3879 62 4202 2066 1246 5150 3294 646 4714 2622 1634 5694 3594 278 4414 2314 1374 5538 3494 902 5086 2974 1858 5918 3894 65 4203 2071 1265 5329 3313 669 4715 2625 1647 5697 3611 341 4545 2331 1329 5455 3469 925 4977 2961 2047 5969 3909 68 4204 2076 1028 5252 3076 692 4716 2628 1660 5700 3628 404 4420 2348 1284 5628 3444 948 4868 2948 1980 6020 3924 71 4205 2081 1047 5175 3095 715 4717 2631 1673 5703 3645 467 4551 2365 1495 5545 3419 971 5015 2935 1913 6071 3939 74 4206 2086 1066 5354 3114 738 4718 2634 1686 5706 3662 274 4426 2382 1450 5462 3394 994 4906 2922 1846 6122 3954 77 4207 2091 1085 5277 3133 761 4719 2637 1699 5709 3679 337 4557 2399 1405 5379 3369 1017 5053 2909 2035 5917 3969 80 4208 2096 1104 5200 3152 528 4720 2640 1712 5712 3696 400 4432 2416 1360 5552 3344 784 4944 2896 1968 5968 3984 83 4209 2101 1123 5123 3171 551 4721 2643 1725 5715 3713 463 4563 2433 1315 5469 3575 807 5091 2883 1901 6019 3999 86 4210 2106 1142 5302 3190 574 4722 2646 1738 5718 3730 270 4438 2450 1526 5386 3550 830 4982 2870 1834 6070 4014 89 4211 2111 1161 5225 3209 597 4723 2649 1751 5721 3747 333 4569 2467 1481 5559 3525 853 4873 2857 2023 6121 4029 92 4212 2116 1180 5148 3228 620 4724 2652 1764 5724 3764 396 4444 2484 1436 5476 3500 876 5020 2844 1956 5916 4044 95 4213 2121 1199 5327 3247 643 4725 2655 1777 5727 3781 459 4575 2501 1391 5393 3475 899 4911 2831 1889 5967 4059 98 4214 2126 1218 5250 3266 666 4726 2658 1790 5730 3798 266 4450 2518 1346 5566 3450 922 5058 2818 1822 6018 4074 101 4215 2131 1237 5173 3285 689 4727 2661 1547 5733 3815 329 4581 2535 1301 5483 3425 945 4949 3061 2011 6069 4089 104 4216 2136 1256 5352 3304 712 4728 2664 1560 5736 3832 392 4456 2552 1512 5400 3400 968 5096 3048 1944 6120 3848 107 4217 2141 1275 5275 3323 735 4729 2667 1573 5739 3593 455 4587 2313 1467 5573 3375 991 4987 3035 1877 5915 3863 110 4218 2146 1038 5198 3086 758 4730 2670 1586 5742 3610 262 4462 2330 1422 5490 3350 1014 4878 3022 1810 5966 3878 113 4219 2151 1057 5121 3105 525 4731 2673 1599 5745 3627 325 4593 2347 1377 5407 3581 781 5025 3009 1999 6017 3893 116 4220 2156 1076 5300 3124 548 4732 2676 1612 5748 3644 388 4468 2364 1332 5580 3556 804 4916 2996 1932 6068 3908 119 4221 2161 1095 5223 3143 571 4733 2679 1625 5751 3661 451 4599 2381 1287 5497 3531 827 5063 2983 1865 6119 3923 122 4222 2166 1114 5146 3162 594 4734 2682 1638 5754 3678 258 4474 2398 1498 5414 3506 850 4954 2970 1798 5914 3938 125 4223 2171 1133 5325 3181 617 4735 2685 1651 5757 3695 321 4605 2415 1453 5587 3481 873 5101 2957 1987 5965 3953 128 4224 2176 1152 5248 3200 640 4736 2688 1664 5760 3712 384 4480 2432 1408 5504 3456 896 4992 2944 1920 6016 3968 131 4225 2181 1171 5171 3219 663 4737 2691 1677 5763 3729 447 4355 2449 1363 5421 3431 919 4883 2931 1853 6067 3983 134 4226 2186 1190 5350 3238 686 4738 2694 1690 5766 3746 510 4486 2466 1318 5594 3406 942 5030 2918 2042 6118 3998 137 4227 2191 1209 5273 3257 709 4739 2697 1703 5769 3763 317 4361 2483 1529 5511 3381 965 4921 2905 1975 5913 4013 140 4228 2196 1228 5196 3276 732 4740 2700 1716 5772 3780 380 4492 2500 1484 5428 3356 988 5068 2892 1908 5964 4028 143 4229 2201 1247 5375 3295 755 4741 2703 1729 5775 3797 443 4367 2517 1439 5601 3331 1011 4959 2879 1841 6015 4043 146 4230 2206 1266 5298 3314 522 4742 2706 1742 5778 3814 506 4498 2534 1394 5518 3562 778 5106 2866 2030 6066 4058 149 4231 2211 1029 5221 3077 545 4743 2709 1755 5781 3831 313 4373 2551 1349 5435 3537 801 4997 2853 1963 6117 4073 152 4232 2216 1048 5144 3096 568 4744 2712 1768 5784 3592 376 4504 2312 1304 5608 3512 824 4888 2840 1896 5912 4088 155 4233 2221 1067 5323 3115 591 4745 2715 1781 5787 3609 439 4379 2329 1515 5525 3487 847 5035 2827 1829 5963 3847 158 4234 2226 1086 5246 3134 614 4746 2718 1538 5790 3626 502 4510 2346 1470 5442 3462 870 4926 3070 2018 6014 3862 161 4235 2231 1105 5169 3153 637 4747 2721 1551 5793 3643 309 4385 2363 1425 5615 3437 893 5073 3057 1951 6065 3877 164 4236 2236 1124 5348 3172 660 4748 2724 1564 5796 3660 372 4516 2380 1380 5532 3412 916 4964 3044 1884 6116 3892 167 4237 2241 1143 5271 3191 683 4749 2727 1577 5799 3677 435 4391 2397 1335 5449 3387 939 5111 3031 1817 5911 3907 170 4238 2246 1162 5194 3210 706 4750 2730 1590 5802 3694 498 4522 2414 1290 5622 3362 962 5002 3018 2006 5962 3922 173 4239 2251 1181 5373 3229 729 4751 2733 1603 5805 3711 305 4397 2431 1501 5539 3337 985 4893 3005 1939 6013 3937 176 4240 2256 1200 5296 3248 752 4752 2736 1616 5808 3728 368 4528 2448 1456 5456 3568 1008 5040 2992 1872 6064 3952 179 4241 2261 1219 5219 3267 519 4753 2739 1629 5811 3745 431 4403 2465 1411 5629 3543 775 4931 2979 1805 6115 3967 182 4242 2266 1238 5142 3286 542 4754 2742 1642 5814 3762 494 4534 2482 1366 5546 3518 798 5078 2966 1994 5910 3982 185 4243 2271 1257 5321 3305 565 4755 2745 1655 5817 3779 301 4409 2499 1321 5463 3493 821 4969 2953 1927 5961 3997 188 4244 2276 1276 5244 3324 588 4756 2748 1668 5820 3796 364 4540 2516 1532 5380 3468 844 5116 2940 1860 6012 4012 191 4245 2281 1039 5167 3087 611 4757 2751 1681 5823 3813 427 4415 2533 1487 5553 3443 867 5007 2927 1793 6063 4027 194 4246 2286 1058 5346 3106 634 4758 2754 1694 5826 3830 490 4546 2550 1442 5470 3418 890 4898 2914 1982 6114 4042 197 4247 2291 1077 5269 3125 657 4759 2757 1707 5829 3591 297 4421 2311 1397 5387 3393 913 5045 2901 1915 5909 4057 200 4248 2296 1096 5192 3144 680 4760 2760 1720 5832 3608 360 4552 2328 1352 5560 3368 936 4936 2888 1848 5960 4072 203 4249 2301 1115 5371 3163 703 4761 2763 1733 5835 3625 423 4427 2345 1307 5477 3343 959 5083 2875 2037 6011 4087 206 4250 2050 1134 5294 3182 726 4762 2766 1746 5838 3642 486 4558 2362 1518 5394 3574 982 4974 2862 1970 6062 3846 209 4251 2055 1153 5217 3201 749 4763 2769 1759 5841 3659 293 4433 2379 1473 5567 3549 1005 4865 2849 1903 6113 3861 212 4252 2060 1172 5140 3220 516 4764 2772 1772 5844 3676 356 4564 2396 1428 5484 3524 772 5012 2836 1836 5908 3876 215 4253 2065 1191 5319 3239 539 4765 2775 1785 5847 3693 419 4439 2413 1383 5401 3499 795 4903 2823 2025 5959 3891 218 4254 2070 1210 5242 3258 562 4766 2778 1542 5850 3710 482 4570 2430 1338 5574 3474 818 5050 3066 1958 6010 3906 221 4255 2075 1229 5165 3277 585 4767 2781 1555 5853 3727 289 4445 2447 1293 5491 3449 841 4941 3053 1891 6061 3921 224 4256 2080 1248 5344 3296 608 4768 2784 1568 5856 3744 352 4576 2464 1504 5408 3424 864 5088 3040 1824 6112 3936 227 4257 2085 1267 5267 3315 631 4769 2787 1581 5859 3761 415 4451 2481 1459 5581 3399 887 4979 3027 2013 5907 3951 230 4258 2090 1030 5190 3078 654 4770 2790 1594 5862 3778 478 4582 2498 1414 5498 3374 910 4870 3014 1946 5958 3966 233 4259 2095 1049 5369 3097 677 4771 2793 1607 5865 3795 285 4457 2515 1369 5415 3349 933 5017 3001 1879 6009 3981 236 4260 2100 1068 5292 3116 700 4772 2796 1620 5868 3812 348 4588 2532 1324 5588 3580 956 4908 2988 1812 6060 3996 239 4261 2105 1087 5215 3135 723 4773 2799 1633 5871 3829 411 4463 2549 1535 5505 3555 979 5055 2975 2001 6111 4011 242 4262 2110 1106 5138 3154 746 4774 2802 1646 5874 3590 474 4594 2310 1490 5422 3530 1002 4946 2962 1934 5906 4026 245 4263 2115 1125 5317 3173 513 4775 2805 1659 5877 3607 281 4469 2327 1445 5595 3505 769 5093 2949 1867 5957 4041 248 4264 2120 1144 5240 3192 536 4776 2808 1672 5880 3624 344 4600 2344 1400 5512 3480 792 4984 2936 1800 6008 4056 251 4265 2125 1163 5163 3211 559 4777 2811 1685 5883 3641 407 4475 2361 1355 5429 3455 815 4875 2923 1989 6059 4071 254 4266 2130 1182 5342 3230 582 4778 2814 1698 5886 3658 470 4606 2378 1310 5602 3430 838 5022 2910 1922 6110 4086 1 4267 2135 1201 5265 3249 605 4779 2561 1711 5633 3675 277 4481 2395 1521 5519 3405 861 4913 2897 1855 5905 3845 4 4268 2140 1220 5188 3268 628 4780 2564 1724 5636 3692 340 4356 2412 1476 5436 3380 884 5060 2884 2044 5956 3860 7 4269 2145 1239 5367 3287 651 4781 2567 1737 5639 3709 403 4487 2429 1431 5609 3355 907 4951 2871 1977 6007 3875 10 4270 2150 1258 5290 3306 674 4782 2570 1750 5642 3726 466 4362 2446 1386 5526 3330 930 5098 2858 1910 6058 3890 13 4271 2155 1277 5213 3325 697 4783 2573 1763 5645 3743 273 4493 2463 1341 5443 3561 953 4989 2845 1843 6109 3905 16 4272 2160 1040 5136 3088 720 4784 2576 1776 5648 3760 336 4368 2480 1296 5616 3536 976 4880 2832 2032 5904 3920 19 4273 2165 1059 5315 3107 743 4785 2579 1789 5651 3777 399 4499 2497 1507 5533 3511 999 5027 2819 1965 5955 3935 22 4274 2170 1078 5238 3126 766 4786 2582 1546 5654 3794 462 4374 2514 1462 5450 3486 1022 4918 3062 1898 6006 3950 25 4275 2175 1097 5161 3145 533 4787 2585 1559 5657 3811 269 4505 2531 1417 5623 3461 789 5065 3049 1831 6057 3965 28 4276 2180 1116 5340 3164 556 4788 2588 1572 5660 3828 332 4380 2548 1372 5540 3436 812 4956 3036 2020 6108 3980 31 4277 2185 1135 5263 3183 579 4789 2591 1585 5663 3589 395 4511 2309 1327 5457 3411 835 5103 3023 1953 5903 3995 34 4278 2190 1154 5186 3202 602 4790 2594 1598 5666 3606 458 4386 2326 1282 5630 3386 858 4994 3010 1886 5954 4010 37 4279 2195 1173 5365 3221 625 4791 2597 1611 5669 3623 265 4517 2343 1493 5547 3361 881 4885 2997 1819 6005 4025 40 4280 2200 1192 5288 3240 648 4792 2600 1624 5672 3640 328 4392 2360 1448 5464 3336 904 5032 2984 2008 6056 4040 43 4281 2205 1211 5211 3259 671 4793 2603 1637 5675 3657 391 4523 2377 1403 5381 3567 927 4923 2971 1941 6107 4055 46 4282 2210 1230 5134 3278 694 4794 2606 1650 5678 3674 454 4398 2394 1358 5554 3542 950 5070 2958 1874 5902 4070 49 4283 2215 1249 5313 3297 717 4795 2609 1663 5681 3691 261 4529 2411 1313 5471 3517 973 4961 2945 1807 5953 4085 52 4284 2220 1268 5236 3316 740 4796 2612 1676 5684 3708 324 4404 2428 1524 5388 3492 996 5108 2932 1996 6004 3844 55 4285 2225 1031 5159 3079 763 4797 2615 1689 5687 3725 387 4535 2445 1479 5561 3467 1019 4999 2919 1929 6055 3859 58 4286 2230 1050 5338 3098 530 4798 2618 1702 5690 3742 450 4410 2462 1434 5478 3442 786 4890 2906 1862 6106 3874 61 4287 2235 1069 5261 3117 553 4799 2621 1715 5693 3759 257 4541 2479 1389 5395 3417 809 5037 2893 1795 5901 3889 64 4288 2240 1088 5184 3136 576 4800 2624 1728 5696 3776 320 4416 2496 1344 5568 3392 832 4928 2880 1984 5952 3904 67 4289 2245 1107 5363 3155 599 4801 2627 1741 5699 3793 383 4547 2513 1299 5485 3367 855 5075 2867 1917 6003 3919 70 4290 2250 1126 5286 3174 622 4802 2630 1754 5702 3810 446 4422 2530 1510 5402 3342 878 4966 2854 1850 6054 3934 73 4291 2255 1145 5209 3193 645 4803 2633 1767 5705 3827 509 4553 2547 1465 5575 3573 901 5113 2841 2039 6105 3949 76 4292 2260 1164 5132 3212 668 4804 2636 1780 5708 3588 316 4428 2308 1420 5492 3548 924 5004 2828 1972 5900 3964 79 4293 2265 1183 5311 3231 691 4805 2639 1537 5711 3605 379 4559 2325 1375 5409 3523 947 4895 3071 1905 5951 3979 82 4294 2270 1202 5234 3250 714 4806 2642 1550 5714 3622 442 4434 2342 1330 5582 3498 970 5042 3058 1838 6002 3994 85 4295 2275 1221 5157 3269 737 4807 2645 1563 5717 3639 505 4565 2359 1285 5499 3473 993 4933 3045 2027 6053 4009 88 4296 2280 1240 5336 3288 760 4808 2648 1576 5720 3656 312 4440 2376 1496 5416 3448 1016 5080 3032 1960 6104 4024 91 4297 2285 1259 5259 3307 527 4809 2651 1589 5723 3673 375 4571 2393 1451 5589 3423 783 4971 3019 1893 5899 4039 94 4298 2290 1278 5182 3326 550 4810 2654 1602 5726 3690 438 4446 2410 1406 5506 3398 806 5118 3006 1826 5950 4054 97 4299 2295 1041 5361 3089 573 4811 2657 1615 5729 3707 501 4577 2427 1361 5423 3373 829 5009 2993 2015 6001 4069 100 4300 2300 1060 5284 3108 596 4812 2660 1628 5732 3724 308 4452 2444 1316 5596 3348 852 4900 2980 1948 6052 4084 103 4301 2049 1079 5207 3127 619 4813 2663 1641 5735 3741 371 4583 2461 1527 5513 3579 875 5047 2967 1881 6103 3843 106 4302 2054 1098 5130 3146 642 4814 2666 1654 5738 3758 434 4458 2478 1482 5430 3554 898 4938 2954 1814 5898 3858 109 4303 2059 1117 5309 3165 665 4815 2669 1667 5741 3775 497 4589 2495 1437 5603 3529 921 5085 2941 2003 5949 3873 112 4304 2064 1136 5232 3184 688 4816 2672 1680 5744 3792 304 4464 2512 1392 5520 3504 944 4976 2928 1936 6000 3888 115 4305 2069 1155 5155 3203 711 4817 2675 1693 5747 3809 367 4595 2529 1347 5437 3479 967 4867 2915 1869 6051 3903 118 4306 2074 1174 5334 3222 734 4818 2678 1706 5750 3826 430 4470 2546 1302 5610 3454 990 5014 2902 1802 6102 3918 121 4307 2079 1193 5257 3241 757 4819 2681 1719 5753 3587 493 4601 2307 1513 5527 3429 1013 4905 2889 1991 5897 3933 124 4308 2084 1212 5180 3260 524 4820 2684 1732 5756 3604 300 4476 2324 1468 5444 3404 780 5052 2876 1924 5948 3948 127 4309 2089 1231 5359 3279 547 4821 2687 1745 5759 3621 363 4607 2341 1423 5617 3379 803 4943 2863 1857 5999 3963 130 4310 2094 1250 5282 3298 570 4822 2690 1758 5762 3638 426 4482 2358 1378 5534 3354 826 5090 2850 2046 6050 3978 133 4311 2099 1269 5205 3317 593 4823 2693 1771 5765 3655 489 4357 2375 1333 5451 3329 849 4981 2837 1979 6101 3993 136 4312 2104 1032 5128 3080 616 4824 2696 1784 5768 3672 296 4488 2392 1288 5624 3560 872 4872 2824 1912 5896 4008 139 4313 2109 1051 5307 3099 639 4825 2699 1541 5771 3689 359 4363 2409 1499 5541 3535 895 5019 3067 1845 5947 4023 142 4314 2114 1070 5230 3118 662 4826 2702 1554 5774 3706 422 4494 2426 1454 5458 3510 918 4910 3054 2034 5998 4038 145 4315 2119 1089 5153 3137 685 4827 2705 1567 5777 3723 485 4369 2443 1409 5631 3485 941 5057 3041 1967 6049 4053 148 4316 2124 1108 5332 3156 708 4828 2708 1580 5780 3740 292 4500 2460 1364 5548 3460 964 4948 3028 1900 6100 4068 151 4317 2129 1127 5255 3175 731 4829 2711 1593 5783 3757 355 4375 2477 1319 5465 3435 987 5095 3015 1833 5895 4083 154 4318 2134 1146 5178 3194 754 4830 2714 1606 5786 3774 418 4506 2494 1530 5382 3410 1010 4986 3002 2022 5946 3842 157 4319 2139 1165 5357 3213 521 4831 2717 1619 5789 3791 481 4381 2511 1485 5555 3385 777 4877 2989 1955 5997 3857 160 4320 2144 1184 5280 3232 544 4832 2720 1632 5792 3808 288 4512 2528 1440 5472 3360 800 5024 2976 1888 6048 3872 163 4321 2149 1203 5203 3251 567 4833 2723 1645 5795 3825 351 4387 2545 1395 5389 3335 823 4915 2963 1821 6099 3887 166 4322 2154 1222 5126 3270 590 4834 2726 1658 5798 3586 414 4518 2306 1350 5562 3566 846 5062 2950 2010 5894 3902 169 4323 2159 1241 5305 3289 613 4835 2729 1671 5801 3603 477 4393 2323 1305 5479 3541 869 4953 2937 1943 5945 3917 172 4324 2164 1260 5228 3308 636 4836 2732 1684 5804 3620 284 4524 2340 1516 5396 3516 892 5100 2924 1876 5996 3932 175 4325 2169 1279 5151 3327 659 4837 2735 1697 5807 3637 347 4399 2357 1471 5569 3491 915 4991 2911 1809 6047 3947 178 4326 2174 1042 5330 3090 682 4838 2738 1710 5810 3654 410 4530 2374 1426 5486 3466 938 4882 2898 1998 6098 3962 181 4327 2179 1061 5253 3109 705 4839 2741 1723 5813 3671 473 4405 2391 1381 5403 3441 961 5029 2885 1931 5893 3977 184 4328 2184 1080 5176 3128 728 4840 2744 1736 5816 3688 280 4536 2408 1336 5576 3416 984 4920 2872 1864 5944 3992 187 4329 2189 1099 5355 3147 751 4841 2747 1749 5819 3705 343 4411 2425 1291 5493 3391 1007 5067 2859 1797 5995 4007 190 4330 2194 1118 5278 3166 518 4842 2750 1762 5822 3722 406 4542 2442 1502 5410 3366 774 4958 2846 1986 6046 4022 193 4331 2199 1137 5201 3185 541 4843 2753 1775 5825 3739 469 4417 2459 1457 5583 3341 797 5105 2833 1919 6097 4037 196 4332 2204 1156 5124 3204 564 4844 2756 1788 5828 3756 276 4548 2476 1412 5500 3572 820 4996 2820 1852 5892 4052 199 4333 2209 1175 5303 3223 587 4845 2759 1545 5831 3773 339 4423 2493 1367 5417 3547 843 4887 3063 2041 5943 4067 202 4334 2214 1194 5226 3242 610 4846 2762 1558 5834 3790 402 4554 2510 1322 5590 3522 866 5034 3050 1974 5994 4082 205 4335 2219 1213 5149 3261 633 4847 2765 1571 5837 3807 465 4429 2527 1533 5507 3497 889 4925 3037 1907 6045 3841 208 4336 2224 1232 5328 3280 656 4848 2768 1584 5840 3824 272 4560 2544 1488 5424 3472 912 5072 3024 1840 6096 3856 211 4337 2229 1251 5251 3299 679 4849 2771 1597 5843 3585 335 4435 2305 1443 5597 3447 935 4963 3011 2029 5891 3871 214 4338 2234 1270 5174 3318 702 4850 2774 1610 5846 3602 398 4566 2322 1398 5514 3422 958 5110 2998 1962 5942 3886 217 4339 2239 1033 5353 3081 725 4851 2777 1623 5849 3619 461 4441 2339 1353 5431 3397 981 5001 2985 1895 5993 3901 220 4340 2244 1052 5276 3100 748 4852 2780 1636 5852 3636 268 4572 2356 1308 5604 3372 1004 4892 2972 1828 6044 3916 223 4341 2249 1071 5199 3119 515 4853 2783 1649 5855 3653 331 4447 2373 1519 5521 3347 771 5039 2959 2017 6095 3931 226 4342 2254 1090 5122 3138 538 4854 2786 1662 5858 3670 394 4578 2390 1474 5438 3578 794 4930 2946 1950 5890 3946 229 4343 2259 1109 5301 3157 561 4855 2789 1675 5861 3687 457 4453 2407 1429 5611 3553 817 5077 2933 1883 5941 3961 232 4344 2264 1128 5224 3176 584 4856 2792 1688 5864 3704 264 4584 2424 1384 5528 3528 840 4968 2920 1816 5992 3976 235 4345 2269 1147 5147 3195 607 4857 2795 1701 5867 3721 327 4459 2441 1339 5445 3503 863 5115 2907 2005 6043 3991 238 4346 2274 1166 5326 3214 630 4858 2798 1714 5870 3738 390 4590 2458 1294 5618 3478 886 5006 2894 1938 6094 4006 241 4347 2279 1185 5249 3233 653 4859 2801 1727 5873 3755 453 4465 2475 1505 5535 3453 909 4897 2881 1871 5889 4021 244 4348 2284 1204 5172 3252 676 4860 2804 1740 5876 3772 260 4596 2492 1460 5452 3428 932 5044 2868 1804 5940 4036 247 4349 2289 1223 5351 3271 699 4861 2807 1753 5879 3789 323 4471 2509 1415 5625 3403 955 4935 2855 1993 5991 4051 250 4350 2294 1242 5274 3290 722 4862 2810 1766 5882 3806 386 4602 2526 1370 5542 3378 978 5082 2842 1926 6042 4066 253 4351 2299 1261 5197 3309 745 4863 2813 1779 5885 3823 449 4477 2543 1325 5459 3353 1001 4973 2829 1859 6093 4081 0 4096 2048 1024 5120 3072 512 4608 2560 1536 5632 3584 256 4352 2304 1280 5376 3328 768 4864 2816 1792 5888 3840 codec2-0.0~git20230330.db1c21c/data/interleavers/imap762000066400000000000000000000055721441116725500221100ustar00rootroot0000000000000027 515 257 141 657 407 73 579 335 205 705 461 53 563 289 189 689 441 105 621 375 237 737 493 22 518 258 154 642 398 82 582 350 218 706 474 42 550 290 186 674 434 114 634 366 250 738 506 17 521 259 135 659 389 91 585 333 199 707 455 63 569 291 183 691 427 123 615 357 231 739 487 12 524 260 148 644 412 68 588 348 212 708 468 52 556 292 180 676 420 100 628 380 244 740 500 7 527 261 129 661 403 77 591 331 193 709 449 41 575 293 177 693 445 109 609 371 225 741 481 2 530 262 142 646 394 86 594 346 206 710 462 62 562 294 174 678 438 118 622 362 238 742 494 29 533 263 155 663 385 95 597 329 219 711 475 51 549 295 171 695 431 127 635 353 251 743 507 24 536 264 136 648 408 72 600 344 200 712 456 40 568 296 168 680 424 104 616 376 232 744 488 19 539 265 149 665 399 81 603 327 213 713 469 61 555 297 165 697 417 113 629 367 245 745 501 14 542 266 130 650 390 90 606 342 194 714 450 50 574 298 162 682 442 122 610 358 226 746 482 9 513 267 143 667 413 67 577 325 207 715 463 39 561 299 191 699 435 99 623 381 239 747 495 4 516 268 156 652 404 76 580 340 220 716 476 60 548 300 188 684 428 108 636 372 252 748 508 31 519 269 137 669 395 85 583 323 201 717 457 49 567 301 185 701 421 117 617 363 233 749 489 26 522 270 150 654 386 94 586 338 214 718 470 38 554 302 182 686 446 126 630 354 246 750 502 21 525 271 131 671 409 71 589 321 195 719 451 59 573 303 179 703 439 103 611 377 227 751 483 16 528 272 144 656 400 80 592 336 208 720 464 48 560 304 176 688 432 112 624 368 240 752 496 11 531 273 157 641 391 89 595 351 221 721 477 37 547 305 173 673 425 121 637 359 253 753 509 6 534 274 138 658 414 66 598 334 202 722 458 58 566 306 170 690 418 98 618 382 234 754 490 1 537 275 151 643 405 75 601 349 215 723 471 47 553 307 167 675 443 107 631 373 247 755 503 28 540 276 132 660 396 84 604 332 196 724 452 36 572 308 164 692 436 116 612 364 228 756 484 23 543 277 145 645 387 93 607 347 209 725 465 57 559 309 161 677 429 125 625 355 241 757 497 18 514 278 158 662 410 70 578 330 222 726 478 46 546 310 190 694 422 102 638 378 254 758 510 13 517 279 139 647 401 79 581 345 203 727 459 35 565 311 187 679 447 111 619 369 235 759 491 8 520 280 152 664 392 88 584 328 216 728 472 56 552 312 184 696 440 120 632 360 248 760 504 3 523 281 133 649 415 65 587 343 197 729 453 45 571 313 181 681 433 97 613 383 229 761 485 30 526 282 146 666 406 74 590 326 210 730 466 34 558 314 178 698 426 106 626 374 242 498 25 529 283 159 651 397 83 593 341 223 731 479 55 545 315 175 683 419 115 639 365 255 511 20 532 284 140 668 388 92 596 324 204 732 460 44 564 316 172 700 444 124 620 356 236 492 15 535 285 153 653 411 69 599 339 217 733 473 33 551 317 169 685 437 101 633 379 249 505 10 538 286 134 670 402 78 602 322 198 734 454 54 570 318 166 702 430 110 614 370 230 486 5 541 287 147 655 393 87 605 337 211 735 467 43 557 319 163 687 423 119 627 361 243 499 0 512 256 128 640 384 64 576 320 192 704 448 32 544 288 160 672 416 96 608 352 224 736 480 codec2-0.0~git20230330.db1c21c/data/interleavers/imap9210000066400000000000000000001276141441116725500221670ustar00rootroot0000000000000013 8527 4183 2063 6477 1037 5241 3073 7589 1021 8919 4655 2855 7083 1945 5825 4085 8169 26 8350 4270 2078 6298 1050 5362 3074 7498 1018 9134 4702 2638 6998 1842 6018 4074 8146 39 8685 4357 2093 6631 1063 5483 3075 7407 1015 8837 4749 2933 6913 1739 5699 4063 8123 52 8508 4444 2108 6452 1076 5604 3076 7316 1012 9052 4796 2716 6828 1636 5892 4052 8100 65 8331 4531 2123 6273 1089 5213 3077 7225 1009 8755 4843 3011 6743 2045 6085 4041 8077 78 8666 4106 2138 6606 1102 5334 3078 7646 1006 8970 4890 2794 6658 1942 5766 4030 8054 91 8489 4193 2153 6427 1115 5455 3079 7555 1003 9185 4937 2577 7085 1839 5959 4019 8031 104 8312 4280 2168 6248 1128 5576 3080 7464 1000 8888 4984 2872 7000 1736 5640 4008 8008 117 8647 4367 2183 6581 1141 5185 3081 7373 997 9103 5031 2655 6915 1633 5833 3997 7985 130 8470 4454 2198 6402 1154 5306 3082 7282 994 8806 5078 2950 6830 2042 6026 3986 7962 143 8293 4541 2213 6223 1167 5427 3083 7191 991 9021 4613 2733 6745 1939 5707 3975 7939 156 8628 4116 2228 6556 1180 5548 3084 7612 988 8724 4660 3028 6660 1836 5900 3964 7916 169 8451 4203 2243 6377 1193 5157 3085 7521 985 8939 4707 2811 7087 1733 6093 3953 7893 182 8274 4290 2258 6198 1206 5278 3086 7430 982 9154 4754 2594 7002 1630 5774 3942 7870 195 8609 4377 2273 6531 1219 5399 3087 7339 979 8857 4801 2889 6917 2039 5967 3931 7847 208 8432 4464 2288 6352 1232 5520 3088 7248 976 9072 4848 2672 6832 1936 5648 3920 7824 221 8255 4551 2303 6173 1245 5129 3089 7669 973 8775 4895 2967 6747 1833 5841 3909 7801 234 8590 4126 2318 6506 1258 5250 3090 7578 970 8990 4942 2750 6662 1730 6034 3898 7778 247 8413 4213 2333 6327 1271 5371 3091 7487 967 9205 4989 3045 7089 1627 5715 3887 7755 260 8236 4300 2348 6148 1284 5492 3092 7396 964 8908 5036 2828 7004 2036 5908 3876 7732 273 8571 4387 2363 6481 1297 5613 3093 7305 961 9123 5083 2611 6919 1933 6101 3865 7709 286 8394 4474 2378 6302 1310 5222 3094 7214 958 8826 4618 2906 6834 1830 5782 3854 7686 299 8217 4561 2393 6635 1323 5343 3095 7635 955 9041 4665 2689 6749 1727 5975 3843 8175 312 8552 4136 2408 6456 1336 5464 3096 7544 952 8744 4712 2984 6664 1624 5656 3832 8152 325 8375 4223 2423 6277 1349 5585 3097 7453 949 8959 4759 2767 7091 2033 5849 3821 8129 338 8198 4310 2438 6610 1362 5194 3098 7362 946 9174 4806 3062 7006 1930 6042 3810 8106 351 8533 4397 2453 6431 1375 5315 3099 7271 943 8877 4853 2845 6921 1827 5723 3799 8083 364 8356 4484 2468 6252 1388 5436 3100 7180 940 9092 4900 2628 6836 1724 5916 3788 8060 377 8691 4571 2483 6585 1401 5557 3101 7601 937 8795 4947 2923 6751 1621 6109 3777 8037 390 8514 4146 2498 6406 1414 5166 3102 7510 934 9010 4994 2706 6666 2030 5790 3766 8014 403 8337 4233 2513 6227 1427 5287 3103 7419 931 8713 5041 3001 7093 1927 5983 3755 7991 416 8672 4320 2528 6560 1440 5408 3104 7328 928 8928 5088 2784 7008 1824 5664 3744 7968 429 8495 4407 2543 6381 1453 5529 3105 7237 925 9143 4623 2567 6923 1721 5857 3733 7945 442 8318 4494 2558 6202 1466 5138 3106 7658 922 8846 4670 2862 6838 1618 6050 3722 7922 455 8653 4581 2061 6535 1479 5259 3107 7567 919 9061 4717 2645 6753 2027 5731 3711 7899 468 8476 4156 2076 6356 1492 5380 3108 7476 916 8764 4764 2940 6668 1924 5924 3700 7876 481 8299 4243 2091 6177 1505 5501 3109 7385 913 8979 4811 2723 7095 1821 6117 3689 7853 494 8634 4330 2106 6510 1518 5622 3110 7294 910 9194 4858 3018 7010 1718 5798 3678 7830 507 8457 4417 2121 6331 1531 5231 3111 7203 907 8897 4905 2801 6925 1615 5991 3667 7807 8 8280 4504 2136 6152 1032 5352 3112 7624 904 9112 4952 2584 6840 2024 5672 3656 7784 21 8615 4591 2151 6485 1045 5473 3113 7533 901 8815 4999 2879 6755 1921 5865 3645 7761 34 8438 4166 2166 6306 1058 5594 3114 7442 898 9030 5046 2662 6670 1818 6058 3634 7738 47 8261 4253 2181 6639 1071 5203 3115 7351 895 8733 5093 2957 7097 1715 5739 3623 7715 60 8596 4340 2196 6460 1084 5324 3116 7260 892 8948 4628 2740 7012 1612 5932 3612 7692 73 8419 4427 2211 6281 1097 5445 3117 7169 889 9163 4675 3035 6927 2021 6125 3601 8181 86 8242 4514 2226 6614 1110 5566 3118 7590 886 8866 4722 2818 6842 1918 5806 3590 8158 99 8577 4601 2241 6435 1123 5175 3119 7499 883 9081 4769 2601 6757 1815 5999 4091 8135 112 8400 4176 2256 6256 1136 5296 3120 7408 880 8784 4816 2896 6672 1712 5680 4080 8112 125 8223 4263 2271 6589 1149 5417 3121 7317 877 8999 4863 2679 7099 1609 5873 4069 8089 138 8558 4350 2286 6410 1162 5538 3122 7226 874 4910 2974 7014 2018 6066 4058 8066 151 8381 4437 2301 6231 1175 5147 3123 7647 871 8917 4957 2757 6929 1915 5747 4047 8043 164 8204 4524 2316 6564 1188 5268 3124 7556 868 9132 5004 3052 6844 1812 5940 4036 8020 177 8539 4099 2331 6385 1201 5389 3125 7465 865 8835 5051 2835 6759 1709 6133 4025 7997 190 8362 4186 2346 6206 1214 5510 3126 7374 862 9050 5098 2618 6674 1606 5814 4014 7974 203 8697 4273 2361 6539 1227 5631 3127 7283 859 8753 4633 2913 7101 2015 6007 4003 7951 216 8520 4360 2376 6360 1240 5240 3128 7192 856 8968 4680 2696 7016 1912 5688 3992 7928 229 8343 4447 2391 6181 1253 5361 3129 7613 853 9183 4727 2991 6931 1809 5881 3981 7905 242 8678 4534 2406 6514 1266 5482 3130 7522 850 8886 4774 2774 6846 1706 6074 3970 7882 255 8501 4109 2421 6335 1279 5603 3131 7431 847 9101 4821 3069 6761 1603 5755 3959 7859 268 8324 4196 2436 6156 1292 5212 3132 7340 844 8804 4868 2852 6676 2012 5948 3948 7836 281 8659 4283 2451 6489 1305 5333 3133 7249 841 9019 4915 2635 7103 1909 6141 3937 7813 294 8482 4370 2466 6310 1318 5454 3134 7670 838 8722 4962 2930 7018 1806 5822 3926 7790 307 8305 4457 2481 6643 1331 5575 3135 7579 835 8937 5009 2713 6933 1703 6015 3915 7767 320 8640 4544 2496 6464 1344 5184 3136 7488 832 9152 5056 3008 6848 1600 5696 3904 7744 333 8463 4119 2511 6285 1357 5305 3137 7397 829 8855 5103 2791 6763 2009 5889 3893 7721 346 8286 4206 2526 6618 1370 5426 3138 7306 826 9070 4638 2574 6678 1906 6082 3882 7698 359 8621 4293 2541 6439 1383 5547 3139 7215 823 8773 4685 2869 7105 1803 5763 3871 8187 372 8444 4380 2556 6260 1396 5156 3140 7636 820 8988 4732 2652 7020 1700 5956 3860 8164 385 8267 4467 2059 6593 1409 5277 3141 7545 817 9203 4779 2947 6935 1597 5637 3849 8141 398 8602 4554 2074 6414 1422 5398 3142 7454 814 8906 4826 2730 6850 2006 5830 3838 8118 411 8425 4129 2089 6235 1435 5519 3143 7363 811 9121 4873 3025 6765 1903 6023 3827 8095 424 8248 4216 2104 6568 1448 5128 3144 7272 808 8824 4920 2808 6680 1800 5704 3816 8072 437 8583 4303 2119 6389 1461 5249 3145 7181 805 9039 4967 2591 7107 1697 5897 3805 8049 450 8406 4390 2134 6210 1474 5370 3146 7602 802 8742 5014 2886 7022 1594 6090 3794 8026 463 8229 4477 2149 6543 1487 5491 3147 7511 799 8957 5061 2669 6937 2003 5771 3783 8003 476 8564 4564 2164 6364 1500 5612 3148 7420 796 9172 5108 2964 6852 1900 5964 3772 7980 489 8387 4139 2179 6185 1513 5221 3149 7329 793 8875 4643 2747 6767 1797 5645 3761 7957 502 8210 4226 2194 6518 1526 5342 3150 7238 790 9090 4690 3042 6682 1694 5838 3750 7934 3 8545 4313 2209 6339 1027 5463 3151 7659 787 8793 4737 2825 7109 1591 6031 3739 7911 16 8368 4400 2224 6160 1040 5584 3152 7568 784 9008 4784 2608 7024 2000 5712 3728 7888 29 8703 4487 2239 6493 1053 5193 3153 7477 781 8711 4831 2903 6939 1897 5905 3717 7865 42 8526 4574 2254 6314 1066 5314 3154 7386 778 8926 4878 2686 6854 1794 6098 3706 7842 55 8349 4149 2269 6647 1079 5435 3155 7295 775 9141 4925 2981 6769 1691 5779 3695 7819 68 8684 4236 2284 6468 1092 5556 3156 7204 772 8844 4972 2764 6684 1588 5972 3684 7796 81 8507 4323 2299 6289 1105 5165 3157 7625 769 9059 5019 3059 7111 1997 5653 3673 7773 94 8330 4410 2314 6622 1118 5286 3158 7534 766 8762 5066 2842 7026 1894 5846 3662 7750 107 8665 4497 2329 6443 1131 5407 3159 7443 763 8977 5113 2625 6941 1791 6039 3651 7727 120 8488 4584 2344 6264 1144 5528 3160 7352 760 9192 4648 2920 6856 1688 5720 3640 7704 133 8311 4159 2359 6597 1157 5137 3161 7261 757 8895 4695 2703 6771 1585 5913 3629 7681 146 8646 4246 2374 6418 1170 5258 3162 7170 754 9110 4742 2998 6686 1994 6106 3618 8170 159 8469 4333 2389 6239 1183 5379 3163 7591 751 8813 4789 2781 7113 1891 5787 3607 8147 172 8292 4420 2404 6572 1196 5500 3164 7500 748 9028 4836 2564 7028 1788 5980 3596 8124 185 8627 4507 2419 6393 1209 5621 3165 7409 745 8731 4883 2859 6943 1685 5661 3585 8101 198 8450 4594 2434 6214 1222 5230 3166 7318 742 8946 4930 2642 6858 1582 5854 4086 8078 211 8273 4169 2449 6547 1235 5351 3167 7227 739 9161 4977 2937 6773 1991 6047 4075 8055 224 8608 4256 2464 6368 1248 5472 3168 7648 736 8864 5024 2720 6688 1888 5728 4064 8032 237 8431 4343 2479 6189 1261 5593 3169 7557 733 9079 5071 3015 7115 1785 5921 4053 8009 250 8254 4430 2494 6522 1274 5202 3170 7466 730 8782 5118 2798 7030 1682 6114 4042 7986 263 8589 4517 2509 6343 1287 5323 3171 7375 727 8997 4653 2581 6945 1579 5795 4031 7963 276 8412 4604 2524 6164 1300 5444 3172 7284 724 4700 2876 6860 1988 5988 4020 7940 289 8235 4179 2539 6497 1313 5565 3173 7193 721 8915 4747 2659 6775 1885 5669 4009 7917 302 8570 4266 2554 6318 1326 5174 3174 7614 718 9130 4794 2954 6690 1782 5862 3998 7894 315 8393 4353 2057 6651 1339 5295 3175 7523 715 8833 4841 2737 7117 1679 6055 3987 7871 328 8216 4440 2072 6472 1352 5416 3176 7432 712 9048 4888 3032 7032 1576 5736 3976 7848 341 8551 4527 2087 6293 1365 5537 3177 7341 709 8751 4935 2815 6947 1985 5929 3965 7825 354 8374 4102 2102 6626 1378 5146 3178 7250 706 8966 4982 2598 6862 1882 6122 3954 7802 367 8197 4189 2117 6447 1391 5267 3179 7671 703 9181 5029 2893 6777 1779 5803 3943 7779 380 8532 4276 2132 6268 1404 5388 3180 7580 700 8884 5076 2676 6692 1676 5996 3932 7756 393 8355 4363 2147 6601 1417 5509 3181 7489 697 9099 4611 2971 7119 1573 5677 3921 7733 406 8690 4450 2162 6422 1430 5630 3182 7398 694 8802 4658 2754 7034 1982 5870 3910 7710 419 8513 4537 2177 6243 1443 5239 3183 7307 691 9017 4705 3049 6949 1879 6063 3899 7687 432 8336 4112 2192 6576 1456 5360 3184 7216 688 8720 4752 2832 6864 1776 5744 3888 8176 445 8671 4199 2207 6397 1469 5481 3185 7637 685 8935 4799 2615 6779 1673 5937 3877 8153 458 8494 4286 2222 6218 1482 5602 3186 7546 682 9150 4846 2910 6694 1570 6130 3866 8130 471 8317 4373 2237 6551 1495 5211 3187 7455 679 8853 4893 2693 7121 1979 5811 3855 8107 484 8652 4460 2252 6372 1508 5332 3188 7364 676 9068 4940 2988 7036 1876 6004 3844 8084 497 8475 4547 2267 6193 1521 5453 3189 7273 673 8771 4987 2771 6951 1773 5685 3833 8061 510 8298 4122 2282 6526 1534 5574 3190 7182 670 8986 5034 3066 6866 1670 5878 3822 8038 11 8633 4209 2297 6347 1035 5183 3191 7603 667 9201 5081 2849 6781 1567 6071 3811 8015 24 8456 4296 2312 6168 1048 5304 3192 7512 664 8904 4616 2632 6696 1976 5752 3800 7992 37 8279 4383 2327 6501 1061 5425 3193 7421 661 9119 4663 2927 7123 1873 5945 3789 7969 50 8614 4470 2342 6322 1074 5546 3194 7330 658 8822 4710 2710 7038 1770 6138 3778 7946 63 8437 4557 2357 6655 1087 5155 3195 7239 655 9037 4757 3005 6953 1667 5819 3767 7923 76 8260 4132 2372 6476 1100 5276 3196 7660 652 8740 4804 2788 6868 1564 6012 3756 7900 89 8595 4219 2387 6297 1113 5397 3197 7569 649 8955 4851 2571 6783 1973 5693 3745 7877 102 8418 4306 2402 6630 1126 5518 3198 7478 646 9170 4898 2866 6698 1870 5886 3734 7854 115 8241 4393 2417 6451 1139 5127 3199 7387 643 8873 4945 2649 7125 1767 6079 3723 7831 128 8576 4480 2432 6272 1152 5248 3200 7296 640 9088 4992 2944 7040 1664 5760 3712 7808 141 8399 4567 2447 6605 1165 5369 3201 7205 637 8791 5039 2727 6955 1561 5953 3701 7785 154 8222 4142 2462 6426 1178 5490 3202 7626 634 9006 5086 3022 6870 1970 5634 3690 7762 167 8557 4229 2477 6247 1191 5611 3203 7535 631 8709 4621 2805 6785 1867 5827 3679 7739 180 8380 4316 2492 6580 1204 5220 3204 7444 628 8924 4668 2588 6700 1764 6020 3668 7716 193 8203 4403 2507 6401 1217 5341 3205 7353 625 9139 4715 2883 7127 1661 5701 3657 7693 206 8538 4490 2522 6222 1230 5462 3206 7262 622 8842 4762 2666 7042 1558 5894 3646 8182 219 8361 4577 2537 6555 1243 5583 3207 7171 619 9057 4809 2961 6957 1967 6087 3635 8159 232 8696 4152 2552 6376 1256 5192 3208 7592 616 8760 4856 2744 6872 1864 5768 3624 8136 245 8519 4239 2055 6197 1269 5313 3209 7501 613 8975 4903 3039 6787 1761 5961 3613 8113 258 8342 4326 2070 6530 1282 5434 3210 7410 610 9190 4950 2822 6702 1658 5642 3602 8090 271 8677 4413 2085 6351 1295 5555 3211 7319 607 8893 4997 2605 7129 1555 5835 3591 8067 284 8500 4500 2100 6172 1308 5164 3212 7228 604 9108 5044 2900 7044 1964 6028 4092 8044 297 8323 4587 2115 6505 1321 5285 3213 7649 601 8811 5091 2683 6959 1861 5709 4081 8021 310 8658 4162 2130 6326 1334 5406 3214 7558 598 9026 4626 2978 6874 1758 5902 4070 7998 323 8481 4249 2145 6147 1347 5527 3215 7467 595 8729 4673 2761 6789 1655 6095 4059 7975 336 8304 4336 2160 6480 1360 5136 3216 7376 592 8944 4720 3056 6704 1552 5776 4048 7952 349 8639 4423 2175 6301 1373 5257 3217 7285 589 9159 4767 2839 7131 1961 5969 4037 7929 362 8462 4510 2190 6634 1386 5378 3218 7194 586 8862 4814 2622 7046 1858 5650 4026 7906 375 8285 4597 2205 6455 1399 5499 3219 7615 583 9077 4861 2917 6961 1755 5843 4015 7883 388 8620 4172 2220 6276 1412 5620 3220 7524 580 8780 4908 2700 6876 1652 6036 4004 7860 401 8443 4259 2235 6609 1425 5229 3221 7433 577 8995 4955 2995 6791 1549 5717 3993 7837 414 8266 4346 2250 6430 1438 5350 3222 7342 574 5002 2778 6706 1958 5910 3982 7814 427 8601 4433 2265 6251 1451 5471 3223 7251 571 8913 5049 2561 7133 1855 6103 3971 7791 440 8424 4520 2280 6584 1464 5592 3224 7672 568 9128 5096 2856 7048 1752 5784 3960 7768 453 8247 4607 2295 6405 1477 5201 3225 7581 565 8831 4631 2639 6963 1649 5977 3949 7745 466 8582 4182 2310 6226 1490 5322 3226 7490 562 9046 4678 2934 6878 1546 5658 3938 7722 479 8405 4269 2325 6559 1503 5443 3227 7399 559 8749 4725 2717 6793 1955 5851 3927 7699 492 8228 4356 2340 6380 1516 5564 3228 7308 556 8964 4772 3012 6708 1852 6044 3916 8188 505 8563 4443 2355 6201 1529 5173 3229 7217 553 9179 4819 2795 7135 1749 5725 3905 8165 6 8386 4530 2370 6534 1030 5294 3230 7638 550 8882 4866 2578 7050 1646 5918 3894 8142 19 8209 4105 2385 6355 1043 5415 3231 7547 547 9097 4913 2873 6965 1543 6111 3883 8119 32 8544 4192 2400 6176 1056 5536 3232 7456 544 8800 4960 2656 6880 1952 5792 3872 8096 45 8367 4279 2415 6509 1069 5145 3233 7365 541 9015 5007 2951 6795 1849 5985 3861 8073 58 8702 4366 2430 6330 1082 5266 3234 7274 538 8718 5054 2734 6710 1746 5666 3850 8050 71 8525 4453 2445 6151 1095 5387 3235 7183 535 8933 5101 3029 7137 1643 5859 3839 8027 84 8348 4540 2460 6484 1108 5508 3236 7604 532 9148 4636 2812 7052 1540 6052 3828 8004 97 8683 4115 2475 6305 1121 5629 3237 7513 529 8851 4683 2595 6967 1949 5733 3817 7981 110 8506 4202 2490 6638 1134 5238 3238 7422 526 9066 4730 2890 6882 1846 5926 3806 7958 123 8329 4289 2505 6459 1147 5359 3239 7331 523 8769 4777 2673 6797 1743 6119 3795 7935 136 8664 4376 2520 6280 1160 5480 3240 7240 520 8984 4824 2968 6712 1640 5800 3784 7912 149 8487 4463 2535 6613 1173 5601 3241 7661 517 9199 4871 2751 7139 1537 5993 3773 7889 162 8310 4550 2550 6434 1186 5210 3242 7570 514 8902 4918 3046 7054 1946 5674 3762 7866 175 8645 4125 2053 6255 1199 5331 3243 7479 1023 9117 4965 2829 6969 1843 5867 3751 7843 188 8468 4212 2068 6588 1212 5452 3244 7388 1020 8820 5012 2612 6884 1740 6060 3740 7820 201 8291 4299 2083 6409 1225 5573 3245 7297 1017 9035 5059 2907 6799 1637 5741 3729 7797 214 8626 4386 2098 6230 1238 5182 3246 7206 1014 8738 5106 2690 6714 2046 5934 3718 7774 227 8449 4473 2113 6563 1251 5303 3247 7627 1011 8953 4641 2985 7141 1943 6127 3707 7751 240 8272 4560 2128 6384 1264 5424 3248 7536 1008 9168 4688 2768 7056 1840 5808 3696 7728 253 8607 4135 2143 6205 1277 5545 3249 7445 1005 8871 4735 3063 6971 1737 6001 3685 7705 266 8430 4222 2158 6538 1290 5154 3250 7354 1002 9086 4782 2846 6886 1634 5682 3674 7682 279 8253 4309 2173 6359 1303 5275 3251 7263 999 8789 4829 2629 6801 2043 5875 3663 8171 292 8588 4396 2188 6180 1316 5396 3252 7172 996 9004 4876 2924 6716 1940 6068 3652 8148 305 8411 4483 2203 6513 1329 5517 3253 7593 993 8707 4923 2707 7143 1837 5749 3641 8125 318 8234 4570 2218 6334 1342 5126 3254 7502 990 8922 4970 3002 7058 1734 5942 3630 8102 331 8569 4145 2233 6155 1355 5247 3255 7411 987 9137 5017 2785 6973 1631 6135 3619 8079 344 8392 4232 2248 6488 1368 5368 3256 7320 984 8840 5064 2568 6888 2040 5816 3608 8056 357 8215 4319 2263 6309 1381 5489 3257 7229 981 9055 5111 2863 6803 1937 6009 3597 8033 370 8550 4406 2278 6642 1394 5610 3258 7650 978 8758 4646 2646 6718 1834 5690 3586 8010 383 8373 4493 2293 6463 1407 5219 3259 7559 975 8973 4693 2941 7145 1731 5883 4087 7987 396 8196 4580 2308 6284 1420 5340 3260 7468 972 9188 4740 2724 7060 1628 6076 4076 7964 409 8531 4155 2323 6617 1433 5461 3261 7377 969 8891 4787 3019 6975 2037 5757 4065 7941 422 8354 4242 2338 6438 1446 5582 3262 7286 966 9106 4834 2802 6890 1934 5950 4054 7918 435 8689 4329 2353 6259 1459 5191 3263 7195 963 8809 4881 2585 6805 1831 6143 4043 7895 448 8512 4416 2368 6592 1472 5312 3264 7616 960 9024 4928 2880 6720 1728 5824 4032 7872 461 8335 4503 2383 6413 1485 5433 3265 7525 957 8727 4975 2663 7147 1625 6017 4021 7849 474 8670 4590 2398 6234 1498 5554 3266 7434 954 8942 5022 2958 7062 2034 5698 4010 7826 487 8493 4165 2413 6567 1511 5163 3267 7343 951 9157 5069 2741 6977 1931 5891 3999 7803 500 8316 4252 2428 6388 1524 5284 3268 7252 948 8860 5116 3036 6892 1828 6084 3988 7780 1 8651 4339 2443 6209 1025 5405 3269 7673 945 9075 4651 2819 6807 1725 5765 3977 7757 14 8474 4426 2458 6542 1038 5526 3270 7582 942 8778 4698 2602 6722 1622 5958 3966 7734 27 8297 4513 2473 6363 1051 5135 3271 7491 939 8993 4745 2897 7149 2031 5639 3955 7711 40 8632 4600 2488 6184 1064 5256 3272 7400 936 9208 4792 2680 7064 1928 5832 3944 7688 53 8455 4175 2503 6517 1077 5377 3273 7309 933 8911 4839 2975 6979 1825 6025 3933 8177 66 8278 4262 2518 6338 1090 5498 3274 7218 930 9126 4886 2758 6894 1722 5706 3922 8154 79 8613 4349 2533 6159 1103 5619 3275 7639 927 8829 4933 3053 6809 1619 5899 3911 8131 92 8436 4436 2548 6492 1116 5228 3276 7548 924 9044 4980 2836 6724 2028 6092 3900 8108 105 8259 4523 2051 6313 1129 5349 3277 7457 921 8747 5027 2619 7151 1925 5773 3889 8085 118 8594 4098 2066 6646 1142 5470 3278 7366 918 8962 5074 2914 7066 1822 5966 3878 8062 131 8417 4185 2081 6467 1155 5591 3279 7275 915 9177 4609 2697 6981 1719 5647 3867 8039 144 8240 4272 2096 6288 1168 5200 3280 7184 912 8880 4656 2992 6896 1616 5840 3856 8016 157 8575 4359 2111 6621 1181 5321 3281 7605 909 9095 4703 2775 6811 2025 6033 3845 7993 170 8398 4446 2126 6442 1194 5442 3282 7514 906 8798 4750 3070 6726 1922 5714 3834 7970 183 8221 4533 2141 6263 1207 5563 3283 7423 903 9013 4797 2853 7153 1819 5907 3823 7947 196 8556 4108 2156 6596 1220 5172 3284 7332 900 8716 4844 2636 7068 1716 6100 3812 7924 209 8379 4195 2171 6417 1233 5293 3285 7241 897 8931 4891 2931 6983 1613 5781 3801 7901 222 8202 4282 2186 6238 1246 5414 3286 7662 894 9146 4938 2714 6898 2022 5974 3790 7878 235 8537 4369 2201 6571 1259 5535 3287 7571 891 8849 4985 3009 6813 1919 5655 3779 7855 248 8360 4456 2216 6392 1272 5144 3288 7480 888 9064 5032 2792 6728 1816 5848 3768 7832 261 8695 4543 2231 6213 1285 5265 3289 7389 885 8767 5079 2575 7155 1713 6041 3757 7809 274 8518 4118 2246 6546 1298 5386 3290 7298 882 8982 4614 2870 7070 1610 5722 3746 7786 287 8341 4205 2261 6367 1311 5507 3291 7207 879 9197 4661 2653 6985 2019 5915 3735 7763 300 8676 4292 2276 6188 1324 5628 3292 7628 876 8900 4708 2948 6900 1916 6108 3724 7740 313 8499 4379 2291 6521 1337 5237 3293 7537 873 9115 4755 2731 6815 1813 5789 3713 7717 326 8322 4466 2306 6342 1350 5358 3294 7446 870 8818 4802 3026 6730 1710 5982 3702 7694 339 8657 4553 2321 6163 1363 5479 3295 7355 867 9033 4849 2809 7157 1607 5663 3691 8183 352 8480 4128 2336 6496 1376 5600 3296 7264 864 8736 4896 2592 7072 2016 5856 3680 8160 365 8303 4215 2351 6317 1389 5209 3297 7173 861 8951 4943 2887 6987 1913 6049 3669 8137 378 8638 4302 2366 6650 1402 5330 3298 7594 858 9166 4990 2670 6902 1810 5730 3658 8114 391 8461 4389 2381 6471 1415 5451 3299 7503 855 8869 5037 2965 6817 1707 5923 3647 8091 404 8284 4476 2396 6292 1428 5572 3300 7412 852 9084 5084 2748 6732 1604 6116 3636 8068 417 8619 4563 2411 6625 1441 5181 3301 7321 849 8787 4619 3043 7159 2013 5797 3625 8045 430 8442 4138 2426 6446 1454 5302 3302 7230 846 9002 4666 2826 7074 1910 5990 3614 8022 443 8265 4225 2441 6267 1467 5423 3303 7651 843 8705 4713 2609 6989 1807 5671 3603 7999 456 8600 4312 2456 6600 1480 5544 3304 7560 840 8920 4760 2904 6904 1704 5864 3592 7976 469 8423 4399 2471 6421 1493 5153 3305 7469 837 9135 4807 2687 6819 1601 6057 4093 7953 482 8246 4486 2486 6242 1506 5274 3306 7378 834 8838 4854 2982 6734 2010 5738 4082 7930 495 8581 4573 2501 6575 1519 5395 3307 7287 831 9053 4901 2765 7161 1907 5931 4071 7907 508 8404 4148 2516 6396 1532 5516 3308 7196 828 8756 4948 3060 7076 1804 6124 4060 7884 9 8227 4235 2531 6217 1033 5125 3309 7617 825 8971 4995 2843 6991 1701 5805 4049 7861 22 8562 4322 2546 6550 1046 5246 3310 7526 822 9186 5042 2626 6906 1598 5998 4038 7838 35 8385 4409 2049 6371 1059 5367 3311 7435 819 8889 5089 2921 6821 2007 5679 4027 7815 48 8208 4496 2064 6192 1072 5488 3312 7344 816 9104 4624 2704 6736 1904 5872 4016 7792 61 8543 4583 2079 6525 1085 5609 3313 7253 813 8807 4671 2999 7163 1801 6065 4005 7769 74 8366 4158 2094 6346 1098 5218 3314 7674 810 9022 4718 2782 7078 1698 5746 3994 7746 87 8701 4245 2109 6167 1111 5339 3315 7583 807 8725 4765 2565 6993 1595 5939 3983 7723 100 8524 4332 2124 6500 1124 5460 3316 7492 804 8940 4812 2860 6908 2004 6132 3972 7700 113 8347 4419 2139 6321 1137 5581 3317 7401 801 9155 4859 2643 6823 1901 5813 3961 8189 126 8682 4506 2154 6654 1150 5190 3318 7310 798 8858 4906 2938 6738 1798 6006 3950 8166 139 8505 4593 2169 6475 1163 5311 3319 7219 795 9073 4953 2721 7165 1695 5687 3939 8143 152 8328 4168 2184 6296 1176 5432 3320 7640 792 8776 5000 3016 7080 1592 5880 3928 8120 165 8663 4255 2199 6629 1189 5553 3321 7549 789 8991 5047 2799 6995 2001 6073 3917 8097 178 8486 4342 2214 6450 1202 5162 3322 7458 786 9206 5094 2582 6910 1898 5754 3906 8074 191 8309 4429 2229 6271 1215 5283 3323 7367 783 8909 4629 2877 6825 1795 5947 3895 8051 204 8644 4516 2244 6604 1228 5404 3324 7276 780 9124 4676 2660 6740 1692 6140 3884 8028 217 8467 4603 2259 6425 1241 5525 3325 7185 777 8827 4723 2955 7167 1589 5821 3873 8005 230 8290 4178 2274 6246 1254 5134 3326 7606 774 9042 4770 2738 7082 1998 6014 3862 7982 243 8625 4265 2289 6579 1267 5255 3327 7515 771 8745 4817 3033 6997 1895 5695 3851 7959 256 8448 4352 2304 6400 1280 5376 3328 7424 768 8960 4864 2816 6912 1792 5888 3840 7936 269 8271 4439 2319 6221 1293 5497 3329 7333 765 9175 4911 2599 6827 1689 6081 3829 7913 282 8606 4526 2334 6554 1306 5618 3330 7242 762 8878 4958 2894 6742 1586 5762 3818 7890 295 8429 4101 2349 6375 1319 5227 3331 7663 759 9093 5005 2677 6657 1995 5955 3807 7867 308 8252 4188 2364 6196 1332 5348 3332 7572 756 8796 5052 2972 7084 1892 5636 3796 7844 321 8587 4275 2379 6529 1345 5469 3333 7481 753 9011 5099 2755 6999 1789 5829 3785 7821 334 8410 4362 2394 6350 1358 5590 3334 7390 750 8714 4634 3050 6914 1686 6022 3774 7798 347 8233 4449 2409 6171 1371 5199 3335 7299 747 8929 4681 2833 6829 1583 5703 3763 7775 360 8568 4536 2424 6504 1384 5320 3336 7208 744 9144 4728 2616 6744 1992 5896 3752 7752 373 8391 4111 2439 6325 1397 5441 3337 7629 741 8847 4775 2911 6659 1889 6089 3741 7729 386 8214 4198 2454 6146 1410 5562 3338 7538 738 9062 4822 2694 7086 1786 5770 3730 7706 399 8549 4285 2469 6479 1423 5171 3339 7447 735 8765 4869 2989 7001 1683 5963 3719 7683 412 8372 4372 2484 6300 1436 5292 3340 7356 732 8980 4916 2772 6916 1580 5644 3708 8172 425 8195 4459 2499 6633 1449 5413 3341 7265 729 9195 4963 3067 6831 1989 5837 3697 8149 438 8530 4546 2514 6454 1462 5534 3342 7174 726 8898 5010 2850 6746 1886 6030 3686 8126 451 8353 4121 2529 6275 1475 5143 3343 7595 723 9113 5057 2633 6661 1783 5711 3675 8103 464 8688 4208 2544 6608 1488 5264 3344 7504 720 8816 5104 2928 7088 1680 5904 3664 8080 477 8511 4295 2559 6429 1501 5385 3345 7413 717 9031 4639 2711 7003 1577 6097 3653 8057 490 8334 4382 2062 6250 1514 5506 3346 7322 714 8734 4686 3006 6918 1986 5778 3642 8034 503 8669 4469 2077 6583 1527 5627 3347 7231 711 8949 4733 2789 6833 1883 5971 3631 8011 4 8492 4556 2092 6404 1028 5236 3348 7652 708 9164 4780 2572 6748 1780 5652 3620 7988 17 8315 4131 2107 6225 1041 5357 3349 7561 705 8867 4827 2867 6663 1677 5845 3609 7965 30 8650 4218 2122 6558 1054 5478 3350 7470 702 9082 4874 2650 7090 1574 6038 3598 7942 43 8473 4305 2137 6379 1067 5599 3351 7379 699 8785 4921 2945 7005 1983 5719 3587 7919 56 8296 4392 2152 6200 1080 5208 3352 7288 696 9000 4968 2728 6920 1880 5912 4088 7896 69 8631 4479 2167 6533 1093 5329 3353 7197 693 5015 3023 6835 1777 6105 4077 7873 82 8454 4566 2182 6354 1106 5450 3354 7618 690 8918 5062 2806 6750 1674 5786 4066 7850 95 8277 4141 2197 6175 1119 5571 3355 7527 687 9133 5109 2589 6665 1571 5979 4055 7827 108 8612 4228 2212 6508 1132 5180 3356 7436 684 8836 4644 2884 7092 1980 5660 4044 7804 121 8435 4315 2227 6329 1145 5301 3357 7345 681 9051 4691 2667 7007 1877 5853 4033 7781 134 8258 4402 2242 6150 1158 5422 3358 7254 678 8754 4738 2962 6922 1774 6046 4022 7758 147 8593 4489 2257 6483 1171 5543 3359 7675 675 8969 4785 2745 6837 1671 5727 4011 7735 160 8416 4576 2272 6304 1184 5152 3360 7584 672 9184 4832 3040 6752 1568 5920 4000 7712 173 8239 4151 2287 6637 1197 5273 3361 7493 669 8887 4879 2823 6667 1977 6113 3989 7689 186 8574 4238 2302 6458 1210 5394 3362 7402 666 9102 4926 2606 7094 1874 5794 3978 8178 199 8397 4325 2317 6279 1223 5515 3363 7311 663 8805 4973 2901 7009 1771 5987 3967 8155 212 8220 4412 2332 6612 1236 5124 3364 7220 660 9020 5020 2684 6924 1668 5668 3956 8132 225 8555 4499 2347 6433 1249 5245 3365 7641 657 8723 5067 2979 6839 1565 5861 3945 8109 238 8378 4586 2362 6254 1262 5366 3366 7550 654 8938 5114 2762 6754 1974 6054 3934 8086 251 8201 4161 2377 6587 1275 5487 3367 7459 651 9153 4649 3057 6669 1871 5735 3923 8063 264 8536 4248 2392 6408 1288 5608 3368 7368 648 8856 4696 2840 7096 1768 5928 3912 8040 277 8359 4335 2407 6229 1301 5217 3369 7277 645 9071 4743 2623 7011 1665 6121 3901 8017 290 8694 4422 2422 6562 1314 5338 3370 7186 642 8774 4790 2918 6926 1562 5802 3890 7994 303 8517 4509 2437 6383 1327 5459 3371 7607 639 8989 4837 2701 6841 1971 5995 3879 7971 316 8340 4596 2452 6204 1340 5580 3372 7516 636 9204 4884 2996 6756 1868 5676 3868 7948 329 8675 4171 2467 6537 1353 5189 3373 7425 633 8907 4931 2779 6671 1765 5869 3857 7925 342 8498 4258 2482 6358 1366 5310 3374 7334 630 9122 4978 2562 7098 1662 6062 3846 7902 355 8321 4345 2497 6179 1379 5431 3375 7243 627 8825 5025 2857 7013 1559 5743 3835 7879 368 8656 4432 2512 6512 1392 5552 3376 7664 624 9040 5072 2640 6928 1968 5936 3824 7856 381 8479 4519 2527 6333 1405 5161 3377 7573 621 8743 5119 2935 6843 1865 6129 3813 7833 394 8302 4606 2542 6154 1418 5282 3378 7482 618 8958 4654 2718 6758 1762 5810 3802 7810 407 8637 4181 2557 6487 1431 5403 3379 7391 615 9173 4701 3013 6673 1659 6003 3791 7787 420 8460 4268 2060 6308 1444 5524 3380 7300 612 8876 4748 2796 7100 1556 5684 3780 7764 433 8283 4355 2075 6641 1457 5133 3381 7209 609 9091 4795 2579 7015 1965 5877 3769 7741 446 8618 4442 2090 6462 1470 5254 3382 7630 606 8794 4842 2874 6930 1862 6070 3758 7718 459 8441 4529 2105 6283 1483 5375 3383 7539 603 9009 4889 2657 6845 1759 5751 3747 7695 472 8264 4104 2120 6616 1496 5496 3384 7448 600 8712 4936 2952 6760 1656 5944 3736 8184 485 8599 4191 2135 6437 1509 5617 3385 7357 597 8927 4983 2735 6675 1553 6137 3725 8161 498 8422 4278 2150 6258 1522 5226 3386 7266 594 9142 5030 3030 7102 1962 5818 3714 8138 511 8245 4365 2165 6591 1535 5347 3387 7175 591 8845 5077 2813 7017 1859 6011 3703 8115 12 8580 4452 2180 6412 1036 5468 3388 7596 588 9060 4612 2596 6932 1756 5692 3692 8092 25 8403 4539 2195 6233 1049 5589 3389 7505 585 8763 4659 2891 6847 1653 5885 3681 8069 38 8226 4114 2210 6566 1062 5198 3390 7414 582 8978 4706 2674 6762 1550 6078 3670 8046 51 8561 4201 2225 6387 1075 5319 3391 7323 579 9193 4753 2969 6677 1959 5759 3659 8023 64 8384 4288 2240 6208 1088 5440 3392 7232 576 8896 4800 2752 7104 1856 5952 3648 8000 77 8207 4375 2255 6541 1101 5561 3393 7653 573 9111 4847 3047 7019 1753 5633 3637 7977 90 8542 4462 2270 6362 1114 5170 3394 7562 570 8814 4894 2830 6934 1650 5826 3626 7954 103 8365 4549 2285 6183 1127 5291 3395 7471 567 9029 4941 2613 6849 1547 6019 3615 7931 116 8700 4124 2300 6516 1140 5412 3396 7380 564 8732 4988 2908 6764 1956 5700 3604 7908 129 8523 4211 2315 6337 1153 5533 3397 7289 561 8947 5035 2691 6679 1853 5893 3593 7885 142 8346 4298 2330 6158 1166 5142 3398 7198 558 9162 5082 2986 7106 1750 6086 4094 7862 155 8681 4385 2345 6491 1179 5263 3399 7619 555 8865 4617 2769 7021 1647 5767 4083 7839 168 8504 4472 2360 6312 1192 5384 3400 7528 552 9080 4664 3064 6936 1544 5960 4072 7816 181 8327 4559 2375 6645 1205 5505 3401 7437 549 8783 4711 2847 6851 1953 5641 4061 7793 194 8662 4134 2390 6466 1218 5626 3402 7346 546 8998 4758 2630 6766 1850 5834 4050 7770 207 8485 4221 2405 6287 1231 5235 3403 7255 543 4805 2925 6681 1747 6027 4039 7747 220 8308 4308 2420 6620 1244 5356 3404 7676 540 8916 4852 2708 7108 1644 5708 4028 7724 233 8643 4395 2435 6441 1257 5477 3405 7585 537 9131 4899 3003 7023 1541 5901 4017 7701 246 8466 4482 2450 6262 1270 5598 3406 7494 534 8834 4946 2786 6938 1950 6094 4006 8190 259 8289 4569 2465 6595 1283 5207 3407 7403 531 9049 4993 2569 6853 1847 5775 3995 8167 272 8624 4144 2480 6416 1296 5328 3408 7312 528 8752 5040 2864 6768 1744 5968 3984 8144 285 8447 4231 2495 6237 1309 5449 3409 7221 525 8967 5087 2647 6683 1641 5649 3973 8121 298 8270 4318 2510 6570 1322 5570 3410 7642 522 9182 4622 2942 7110 1538 5842 3962 8098 311 8605 4405 2525 6391 1335 5179 3411 7551 519 8885 4669 2725 7025 1947 6035 3951 8075 324 8428 4492 2540 6212 1348 5300 3412 7460 516 9100 4716 3020 6940 1844 5716 3940 8052 337 8251 4579 2555 6545 1361 5421 3413 7369 513 8803 4763 2803 6855 1741 5909 3929 8029 350 8586 4154 2058 6366 1374 5542 3414 7278 1022 9018 4810 2586 6770 1638 6102 3918 8006 363 8409 4241 2073 6187 1387 5151 3415 7187 1019 8721 4857 2881 6685 2047 5783 3907 7983 376 8232 4328 2088 6520 1400 5272 3416 7608 1016 8936 4904 2664 7112 1944 5976 3896 7960 389 8567 4415 2103 6341 1413 5393 3417 7517 1013 9151 4951 2959 7027 1841 5657 3885 7937 402 8390 4502 2118 6162 1426 5514 3418 7426 1010 8854 4998 2742 6942 1738 5850 3874 7914 415 8213 4589 2133 6495 1439 5123 3419 7335 1007 9069 5045 3037 6857 1635 6043 3863 7891 428 8548 4164 2148 6316 1452 5244 3420 7244 1004 8772 5092 2820 6772 2044 5724 3852 7868 441 8371 4251 2163 6649 1465 5365 3421 7665 1001 8987 4627 2603 6687 1941 5917 3841 7845 454 8194 4338 2178 6470 1478 5486 3422 7574 998 9202 4674 2898 7114 1838 6110 3830 7822 467 8529 4425 2193 6291 1491 5607 3423 7483 995 8905 4721 2681 7029 1735 5791 3819 7799 480 8352 4512 2208 6624 1504 5216 3424 7392 992 9120 4768 2976 6944 1632 5984 3808 7776 493 8687 4599 2223 6445 1517 5337 3425 7301 989 8823 4815 2759 6859 2041 5665 3797 7753 506 8510 4174 2238 6266 1530 5458 3426 7210 986 9038 4862 3054 6774 1938 5858 3786 7730 7 8333 4261 2253 6599 1031 5579 3427 7631 983 8741 4909 2837 6689 1835 6051 3775 7707 20 8668 4348 2268 6420 1044 5188 3428 7540 980 8956 4956 2620 7116 1732 5732 3764 7684 33 8491 4435 2283 6241 1057 5309 3429 7449 977 9171 5003 2915 7031 1629 5925 3753 8173 46 8314 4522 2298 6574 1070 5430 3430 7358 974 8874 5050 2698 6946 2038 6118 3742 8150 59 8649 4097 2313 6395 1083 5551 3431 7267 971 9089 5097 2993 6861 1935 5799 3731 8127 72 8472 4184 2328 6216 1096 5160 3432 7176 968 8792 4632 2776 6776 1832 5992 3720 8104 85 8295 4271 2343 6549 1109 5281 3433 7597 965 9007 4679 3071 6691 1729 5673 3709 8081 98 8630 4358 2358 6370 1122 5402 3434 7506 962 8710 4726 2854 7118 1626 5866 3698 8058 111 8453 4445 2373 6191 1135 5523 3435 7415 959 8925 4773 2637 7033 2035 6059 3687 8035 124 8276 4532 2388 6524 1148 5132 3436 7324 956 9140 4820 2932 6948 1932 5740 3676 8012 137 8611 4107 2403 6345 1161 5253 3437 7233 953 8843 4867 2715 6863 1829 5933 3665 7989 150 8434 4194 2418 6166 1174 5374 3438 7654 950 9058 4914 3010 6778 1726 6126 3654 7966 163 8257 4281 2433 6499 1187 5495 3439 7563 947 8761 4961 2793 6693 1623 5807 3643 7943 176 8592 4368 2448 6320 1200 5616 3440 7472 944 8976 5008 2576 7120 2032 6000 3632 7920 189 8415 4455 2463 6653 1213 5225 3441 7381 941 9191 5055 2871 7035 1929 5681 3621 7897 202 8238 4542 2478 6474 1226 5346 3442 7290 938 8894 5102 2654 6950 1826 5874 3610 7874 215 8573 4117 2493 6295 1239 5467 3443 7199 935 9109 4637 2949 6865 1723 6067 3599 7851 228 8396 4204 2508 6628 1252 5588 3444 7620 932 8812 4684 2732 6780 1620 5748 3588 7828 241 8219 4291 2523 6449 1265 5197 3445 7529 929 9027 4731 3027 6695 2029 5941 4089 7805 254 8554 4378 2538 6270 1278 5318 3446 7438 926 8730 4778 2810 7122 1926 6134 4078 7782 267 8377 4465 2553 6603 1291 5439 3447 7347 923 8945 4825 2593 7037 1823 5815 4067 7759 280 8200 4552 2056 6424 1304 5560 3448 7256 920 9160 4872 2888 6952 1720 6008 4056 7736 293 8535 4127 2071 6245 1317 5169 3449 7677 917 8863 4919 2671 6867 1617 5689 4045 7713 306 8358 4214 2086 6578 1330 5290 3450 7586 914 9078 4966 2966 6782 2026 5882 4034 7690 319 8693 4301 2101 6399 1343 5411 3451 7495 911 8781 5013 2749 6697 1923 6075 4023 8179 332 8516 4388 2116 6220 1356 5532 3452 7404 908 8996 5060 3044 7124 1820 5756 4012 8156 345 8339 4475 2131 6553 1369 5141 3453 7313 905 5107 2827 7039 1717 5949 4001 8133 358 8674 4562 2146 6374 1382 5262 3454 7222 902 8914 4642 2610 6954 1614 6142 3990 8110 371 8497 4137 2161 6195 1395 5383 3455 7643 899 9129 4689 2905 6869 2023 5823 3979 8087 384 8320 4224 2176 6528 1408 5504 3456 7552 896 8832 4736 2688 6784 1920 6016 3968 8064 397 8655 4311 2191 6349 1421 5625 3457 7461 893 9047 4783 2983 6699 1817 5697 3957 8041 410 8478 4398 2206 6170 1434 5234 3458 7370 890 8750 4830 2766 7126 1714 5890 3946 8018 423 8301 4485 2221 6503 1447 5355 3459 7279 887 8965 4877 3061 7041 1611 6083 3935 7995 436 8636 4572 2236 6324 1460 5476 3460 7188 884 9180 4924 2844 6956 2020 5764 3924 7972 449 8459 4147 2251 6145 1473 5597 3461 7609 881 8883 4971 2627 6871 1917 5957 3913 7949 462 8282 4234 2266 6478 1486 5206 3462 7518 878 9098 5018 2922 6786 1814 5638 3902 7926 475 8617 4321 2281 6299 1499 5327 3463 7427 875 8801 5065 2705 6701 1711 5831 3891 7903 488 8440 4408 2296 6632 1512 5448 3464 7336 872 9016 5112 3000 7128 1608 6024 3880 7880 501 8263 4495 2311 6453 1525 5569 3465 7245 869 8719 4647 2783 7043 2017 5705 3869 7857 2 8598 4582 2326 6274 1026 5178 3466 7666 866 8934 4694 2566 6958 1914 5898 3858 7834 15 8421 4157 2341 6607 1039 5299 3467 7575 863 9149 4741 2861 6873 1811 6091 3847 7811 28 8244 4244 2356 6428 1052 5420 3468 7484 860 8852 4788 2644 6788 1708 5772 3836 7788 41 8579 4331 2371 6249 1065 5541 3469 7393 857 9067 4835 2939 6703 1605 5965 3825 7765 54 8402 4418 2386 6582 1078 5150 3470 7302 854 8770 4882 2722 7130 2014 5646 3814 7742 67 8225 4505 2401 6403 1091 5271 3471 7211 851 8985 4929 3017 7045 1911 5839 3803 7719 80 8560 4592 2416 6224 1104 5392 3472 7632 848 9200 4976 2800 6960 1808 6032 3792 7696 93 8383 4167 2431 6557 1117 5513 3473 7541 845 8903 5023 2583 6875 1705 5713 3781 8185 106 8206 4254 2446 6378 1130 5122 3474 7450 842 9118 5070 2878 6790 1602 5906 3770 8162 119 8541 4341 2461 6199 1143 5243 3475 7359 839 8821 5117 2661 6705 2011 6099 3759 8139 132 8364 4428 2476 6532 1156 5364 3476 7268 836 9036 4652 2956 7132 1908 5780 3748 8116 145 8699 4515 2491 6353 1169 5485 3477 7177 833 8739 4699 2739 7047 1805 5973 3737 8093 158 8522 4602 2506 6174 1182 5606 3478 7598 830 8954 4746 3034 6962 1702 5654 3726 8070 171 8345 4177 2521 6507 1195 5215 3479 7507 827 9169 4793 2817 6877 1599 5847 3715 8047 184 8680 4264 2536 6328 1208 5336 3480 7416 824 8872 4840 2600 6792 2008 6040 3704 8024 197 8503 4351 2551 6149 1221 5457 3481 7325 821 9087 4887 2895 6707 1905 5721 3693 8001 210 8326 4438 2054 6482 1234 5578 3482 7234 818 8790 4934 2678 7134 1802 5914 3682 7978 223 8661 4525 2069 6303 1247 5187 3483 7655 815 9005 4981 2973 7049 1699 6107 3671 7955 236 8484 4100 2084 6636 1260 5308 3484 7564 812 8708 5028 2756 6964 1596 5788 3660 7932 249 8307 4187 2099 6457 1273 5429 3485 7473 809 8923 5075 3051 6879 2005 5981 3649 7909 262 8642 4274 2114 6278 1286 5550 3486 7382 806 9138 4610 2834 6794 1902 5662 3638 7886 275 8465 4361 2129 6611 1299 5159 3487 7291 803 8841 4657 2617 6709 1799 5855 3627 7863 288 8288 4448 2144 6432 1312 5280 3488 7200 800 9056 4704 2912 7136 1696 6048 3616 7840 301 8623 4535 2159 6253 1325 5401 3489 7621 797 8759 4751 2695 7051 1593 5729 3605 7817 314 8446 4110 2174 6586 1338 5522 3490 7530 794 8974 4798 2990 6966 2002 5922 3594 7794 327 8269 4197 2189 6407 1351 5131 3491 7439 791 9189 4845 2773 6881 1899 6115 4095 7771 340 8604 4284 2204 6228 1364 5252 3492 7348 788 8892 4892 3068 6796 1796 5796 4084 7748 353 8427 4371 2219 6561 1377 5373 3493 7257 785 9107 4939 2851 6711 1693 5989 4073 7725 366 8250 4458 2234 6382 1390 5494 3494 7678 782 8810 4986 2634 7138 1590 5670 4062 7702 379 8585 4545 2249 6203 1403 5615 3495 7587 779 9025 5033 2929 7053 1999 5863 4051 8191 392 8408 4120 2264 6536 1416 5224 3496 7496 776 8728 5080 2712 6968 1896 6056 4040 8168 405 8231 4207 2279 6357 1429 5345 3497 7405 773 8943 4615 3007 6883 1793 5737 4029 8145 418 8566 4294 2294 6178 1442 5466 3498 7314 770 9158 4662 2790 6798 1690 5930 4018 8122 431 8389 4381 2309 6511 1455 5587 3499 7223 767 8861 4709 2573 6713 1587 6123 4007 8099 444 8212 4468 2324 6332 1468 5196 3500 7644 764 9076 4756 2868 7140 1996 5804 3996 8076 457 8547 4555 2339 6153 1481 5317 3501 7553 761 8779 4803 2651 7055 1893 5997 3985 8053 470 8370 4130 2354 6486 1494 5438 3502 7462 758 8994 4850 2946 6970 1790 5678 3974 8030 483 8193 4217 2369 6307 1507 5559 3503 7371 755 9209 4897 2729 6885 1687 5871 3963 8007 496 8528 4304 2384 6640 1520 5168 3504 7280 752 8912 4944 3024 6800 1584 6064 3952 7984 509 8351 4391 2399 6461 1533 5289 3505 7189 749 9127 4991 2807 6715 1993 5745 3941 7961 10 8686 4478 2414 6282 1034 5410 3506 7610 746 8830 5038 2590 7142 1890 5938 3930 7938 23 8509 4565 2429 6615 1047 5531 3507 7519 743 9045 5085 2885 7057 1787 6131 3919 7915 36 8332 4140 2444 6436 1060 5140 3508 7428 740 8748 4620 2668 6972 1684 5812 3908 7892 49 8667 4227 2459 6257 1073 5261 3509 7337 737 8963 4667 2963 6887 1581 6005 3897 7869 62 8490 4314 2474 6590 1086 5382 3510 7246 734 9178 4714 2746 6802 1990 5686 3886 7846 75 8313 4401 2489 6411 1099 5503 3511 7667 731 8881 4761 3041 6717 1887 5879 3875 7823 88 8648 4488 2504 6232 1112 5624 3512 7576 728 9096 4808 2824 7144 1784 6072 3864 7800 101 8471 4575 2519 6565 1125 5233 3513 7485 725 8799 4855 2607 7059 1681 5753 3853 7777 114 8294 4150 2534 6386 1138 5354 3514 7394 722 9014 4902 2902 6974 1578 5946 3842 7754 127 8629 4237 2549 6207 1151 5475 3515 7303 719 8717 4949 2685 6889 1987 6139 3831 7731 140 8452 4324 2052 6540 1164 5596 3516 7212 716 8932 4996 2980 6804 1884 5820 3820 7708 153 8275 4411 2067 6361 1177 5205 3517 7633 713 9147 5043 2763 6719 1781 6013 3809 7685 166 8610 4498 2082 6182 1190 5326 3518 7542 710 8850 5090 3058 7146 1678 5694 3798 8174 179 8433 4585 2097 6515 1203 5447 3519 7451 707 9065 4625 2841 7061 1575 5887 3787 8151 192 8256 4160 2112 6336 1216 5568 3520 7360 704 8768 4672 2624 6976 1984 6080 3776 8128 205 8591 4247 2127 6157 1229 5177 3521 7269 701 8983 4719 2919 6891 1881 5761 3765 8105 218 8414 4334 2142 6490 1242 5298 3522 7178 698 9198 4766 2702 6806 1778 5954 3754 8082 231 8237 4421 2157 6311 1255 5419 3523 7599 695 8901 4813 2997 6721 1675 5635 3743 8059 244 8572 4508 2172 6644 1268 5540 3524 7508 692 9116 4860 2780 7148 1572 5828 3732 8036 257 8395 4595 2187 6465 1281 5149 3525 7417 689 8819 4907 2563 7063 1981 6021 3721 8013 270 8218 4170 2202 6286 1294 5270 3526 7326 686 9034 4954 2858 6978 1878 5702 3710 7990 283 8553 4257 2217 6619 1307 5391 3527 7235 683 8737 5001 2641 6893 1775 5895 3699 7967 296 8376 4344 2232 6440 1320 5512 3528 7656 680 8952 5048 2936 6808 1672 6088 3688 7944 309 8199 4431 2247 6261 1333 5121 3529 7565 677 9167 5095 2719 6723 1569 5769 3677 7921 322 8534 4518 2262 6594 1346 5242 3530 7474 674 8870 4630 3014 7150 1978 5962 3666 7898 335 8357 4605 2277 6415 1359 5363 3531 7383 671 9085 4677 2797 7065 1875 5643 3655 7875 348 8692 4180 2292 6236 1372 5484 3532 7292 668 8788 4724 2580 6980 1772 5836 3644 7852 361 8515 4267 2307 6569 1385 5605 3533 7201 665 9003 4771 2875 6895 1669 6029 3633 7829 374 8338 4354 2322 6390 1398 5214 3534 7622 662 8706 4818 2658 6810 1566 5710 3622 7806 387 8673 4441 2337 6211 1411 5335 3535 7531 659 8921 4865 2953 6725 1975 5903 3611 7783 400 8496 4528 2352 6544 1424 5456 3536 7440 656 9136 4912 2736 7152 1872 6096 3600 7760 413 8319 4103 2367 6365 1437 5577 3537 7349 653 8839 4959 3031 7067 1769 5777 3589 7737 426 8654 4190 2382 6186 1450 5186 3538 7258 650 9054 5006 2814 6982 1666 5970 4090 7714 439 8477 4277 2397 6519 1463 5307 3539 7679 647 8757 5053 2597 6897 1563 5651 4079 7691 452 8300 4364 2412 6340 1476 5428 3540 7588 644 8972 5100 2892 6812 1972 5844 4068 8180 465 8635 4451 2427 6161 1489 5549 3541 7497 641 9187 4635 2675 6727 1869 6037 4057 8157 478 8458 4538 2442 6494 1502 5158 3542 7406 638 8890 4682 2970 7154 1766 5718 4046 8134 491 8281 4113 2457 6315 1515 5279 3543 7315 635 9105 4729 2753 7069 1663 5911 4035 8111 504 8616 4200 2472 6648 1528 5400 3544 7224 632 8808 4776 3048 6984 1560 6104 4024 8088 5 8439 4287 2487 6469 1029 5521 3545 7645 629 9023 4823 2831 6899 1969 5785 4013 8065 18 8262 4374 2502 6290 1042 5130 3546 7554 626 8726 4870 2614 6814 1866 5978 4002 8042 31 8597 4461 2517 6623 1055 5251 3547 7463 623 8941 4917 2909 6729 1763 5659 3991 8019 44 8420 4548 2532 6444 1068 5372 3548 7372 620 9156 4964 2692 7156 1660 5852 3980 7996 57 8243 4123 2547 6265 1081 5493 3549 7281 617 8859 5011 2987 7071 1557 6045 3969 7973 70 8578 4210 2050 6598 1094 5614 3550 7190 614 9074 5058 2770 6986 1966 5726 3958 7950 83 8401 4297 2065 6419 1107 5223 3551 7611 611 8777 5105 3065 6901 1863 5919 3947 7927 96 8224 4384 2080 6240 1120 5344 3552 7520 608 8992 4640 2848 6816 1760 6112 3936 7904 109 8559 4471 2095 6573 1133 5465 3553 7429 605 9207 4687 2631 6731 1657 5793 3925 7881 122 8382 4558 2110 6394 1146 5586 3554 7338 602 8910 4734 2926 7158 1554 5986 3914 7858 135 8205 4133 2125 6215 1159 5195 3555 7247 599 9125 4781 2709 7073 1963 5667 3903 7835 148 8540 4220 2140 6548 1172 5316 3556 7668 596 8828 4828 3004 6988 1860 5860 3892 7812 161 8363 4307 2155 6369 1185 5437 3557 7577 593 9043 4875 2787 6903 1757 6053 3881 7789 174 8698 4394 2170 6190 1198 5558 3558 7486 590 8746 4922 2570 6818 1654 5734 3870 7766 187 8521 4481 2185 6523 1211 5167 3559 7395 587 8961 4969 2865 6733 1551 5927 3859 7743 200 8344 4568 2200 6344 1224 5288 3560 7304 584 9176 5016 2648 7160 1960 6120 3848 7720 213 8679 4143 2215 6165 1237 5409 3561 7213 581 8879 5063 2943 7075 1857 5801 3837 7697 226 8502 4230 2230 6498 1250 5530 3562 7634 578 9094 5110 2726 6990 1754 5994 3826 8186 239 8325 4317 2245 6319 1263 5139 3563 7543 575 8797 4645 3021 6905 1651 5675 3815 8163 252 8660 4404 2260 6652 1276 5260 3564 7452 572 9012 4692 2804 6820 1548 5868 3804 8140 265 8483 4491 2275 6473 1289 5381 3565 7361 569 8715 4739 2587 6735 1957 6061 3793 8117 278 8306 4578 2290 6294 1302 5502 3566 7270 566 8930 4786 2882 7162 1854 5742 3782 8094 291 8641 4153 2305 6627 1315 5623 3567 7179 563 9145 4833 2665 7077 1751 5935 3771 8071 304 8464 4240 2320 6448 1328 5232 3568 7600 560 8848 4880 2960 6992 1648 6128 3760 8048 317 8287 4327 2335 6269 1341 5353 3569 7509 557 9063 4927 2743 6907 1545 5809 3749 8025 330 8622 4414 2350 6602 1354 5474 3570 7418 554 8766 4974 3038 6822 1954 6002 3738 8002 343 8445 4501 2365 6423 1367 5595 3571 7327 551 8981 5021 2821 6737 1851 5683 3727 7979 356 8268 4588 2380 6244 1380 5204 3572 7236 548 9196 5068 2604 7164 1748 5876 3716 7956 369 8603 4163 2395 6577 1393 5325 3573 7657 545 8899 5115 2899 7079 1645 6069 3705 7933 382 8426 4250 2410 6398 1406 5446 3574 7566 542 9114 4650 2682 6994 1542 5750 3694 7910 395 8249 4337 2425 6219 1419 5567 3575 7475 539 8817 4697 2977 6909 1951 5943 3683 7887 408 8584 4424 2440 6552 1432 5176 3576 7384 536 9032 4744 2760 6824 1848 6136 3672 7864 421 8407 4511 2455 6373 1445 5297 3577 7293 533 8735 4791 3055 6739 1745 5817 3661 7841 434 8230 4598 2470 6194 1458 5418 3578 7202 530 8950 4838 2838 7166 1642 6010 3650 7818 447 8565 4173 2485 6527 1471 5539 3579 7623 527 9165 4885 2621 7081 1539 5691 3639 7795 460 8388 4260 2500 6348 1484 5148 3580 7532 524 8868 4932 2916 6996 1948 5884 3628 7772 473 8211 4347 2515 6169 1497 5269 3581 7441 521 9083 4979 2699 6911 1845 6077 3617 7749 486 8546 4434 2530 6502 1510 5390 3582 7350 518 8786 5026 2994 6826 1742 5758 3606 7726 499 8369 4521 2545 6323 1523 5511 3583 7259 515 9001 5073 2777 6741 1639 5951 3595 7703 0 8192 4096 2048 6144 1024 5120 3072 7168 512 8704 4608 2560 6656 1536 5632 3584 7680 codec2-0.0~git20230330.db1c21c/data/tables/000077500000000000000000000000001441116725500175365ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/data/tables/Jtable.mat000066400000000000000000000055401441116725500214460ustar00rootroot00000000000000MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Sun Jan 16 00:33:29 2005 IMY mutual_info K]?Ynm?@Eu?N}?Ye?8?yԚ?@c(1?=!?E?@Wz?pAW? 0m? ["?+?X!?(_?TC?fgJܘ?lN4?$^}?4.?ϡ?y8J?-:?P'f?tk?ܔL?/E5TQ? aښ?\`?&wF?{ ?E$j?I H?t#?sZ6?|?nw?dJ,?*9Tj?8?@!XY?("?,?f$34?yM?xe?i$vay?΁o1? 5 ?~ͦ?d ^AK{d]A(l\A ^[A "[AJZAx1m~YA,UW.UAM@TAzRA*ڑeQA,'PA_$LwMAZCY$KAw끅IAJbGA5J+DAA5bXAAn3?Aڣ4:A,+GS7A'^t44A= ͥ1ABGy~.Ah {*A ܃&Alĝ$Ak!Ag{XAQE_A\`bhA73B+A'y6U|AO}A2@ ADL A3AքAt@W)P #@'@.7$@m @]}@,(@, '>@v4B/@ @+A@, k@l=v@<@Kgl<@B @`d@_މ@Ysigma_square_vector {Gz?{Gz?Q?{Gz??Q?Q?{Gz? ףp= ???433333???333333?ffffff????333333?ffffff???@@433333@@ffffff@@ @333333 @ @ffffff@@@@ffffff@333333@@@@@@ @!@"@#@$@&@(@*@,@.@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@@@A@A@B@B@C@C@D@D@E@E@F@F@G@G@H@H@I@codec2-0.0~git20230330.db1c21c/demos/000077500000000000000000000000001441116725500164625ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/demos/HsdpaDemo.m000066400000000000000000000170501441116725500205070ustar00rootroot00000000000000% HSDPA Demo: Prompts user for input, then simulates a specified number of packets % at a specified SNR. % % Last modified on June 21, 2006 % Turbo Code Parameters % generator polynomial g_turbo = [1 0 1 1 1 1 0 1]; % scrambling parameters g_scrambling = [1 zeros(1,10) 1 0 1 1 0 1]; % Puncturing pattern pun_pattern = [1 1 0 1]; % tail pattern tail_pattern = [1 1 1 1 1 1 1 1 1 1 1 1]; nsc_flag = 0; % Query for parameters H_set = input( 'Choose an H_set (1-6) or select 0 to enter custom parameters: ' ); if ( sum( H_set == [0 1 2 3 6] ) ) modulation= input('\nEnter 0 for QPSK modulation or 1 for QAM modulation: ' ); elseif ( sum( H_set == [4 5] ) ) fprintf( '\nFor this H_set, QPSK modulation is used.\n' ); modulation = 0; else error( 'This H_set not supported' ); end if (H_set == 0) TTI_distance = input( 'TTI spacing (1, 2, or 3): ' ); K_info = input( 'K_info (number of information bits per frame): ' ); P = input( 'P (number of physical channels per codeword): '); X_set = input( 'X_set (the vector of redundancy versions, e.g. [0 2 5 6]): ' ); N_IR = input( 'N_IR (the virtual IR buffer size): ' ); elseif(H_set == 1) TTI_distance = 3; elseif (H_set == 2) TTI_distance = 2; elseif ( (H_set == 3)|(H_set==6) ) TTI_distance = 1; elseif (H_set == 4) % The TTI distance is actually only 2, % but effectively it is 3 because there are % only 2 simultaneous HARQ processes TTI_distance = 3; elseif (H_set == 5) % The TTI distance is actually only 1, % but effectively it is 2 because there are % only 3 simultaneous HARQ processes TTI_distance = 2; end if (modulation == 0) % QPSK if (H_set == 6) K_info = 6438; elseif ( H_set > 0 ) K_info = 3202; end if (H_set > 0) P = 5; % The sequence of redundancy versions X_set = [0 2 5 6]; end U = 960; % Create the constellation (updated 6-21-06) % S_matrix = Create2D( 4, 'HSDPA', [] ); S_matrix = CreateConstellation( 'HSDPA', 4 ); elseif (modulation == 1) % QAM if (H_set == 6) K_info = 9377; elseif ( H_set > 0 ) K_info = 4664; end if (H_set > 0) P = 4; % The sequence of redundancy versions X_set = [6 2 1 5]; end U = 1920; % Create the constellation (updated 6-21-06) % S_matrix = Create2D( 16, 'HSDPA', [] ); S_matrix = CreateConstellation( 'HSDPA', 16 ); else error('Modulation should be either 0 or 1'); end % Ask if AWGN or Rayleigh fading channel_type = input('\nChannel type (0 for AWGN or 1 for Rayleigh block fading): ' ); if ( sum( channel_type == [0 1] ) == 0) error( 'Invalid selection' ); end % Ask which Es/No and how many trials EsNodB = input('\nEnter Es/No in dB: '); number_frames = input('\nHow many frames to simulate: '); if ( H_set == 4 ) N_IR = 7200; elseif ( H_set > 0 ) N_IR = 9600; end % derived constants K_crc = K_info + 24; % add CRC bits % see if there needs to be more than one block number_codewords = ceil( K_crc/5114 ); % number of blocks data_bits_per_frame = ceil( K_crc/number_codewords ); % length of each block if (number_codewords*data_bits_per_frame ~= K_crc) K_crc = number_codewords*data_bits_per_frame; fprintf( '\nWarning %d filler bit(s) needed prior to segmentation\n', K_crc-K_info-24 ); end N_TTI = 3*data_bits_per_frame + 12; N_data = P*U; M = length( X_set ); % maximum HARQ retransmissions symbols_per_frame = number_codewords*N_data/(2^(modulation+1)); % default values (change if desired) turbo_iterations = 14; % 14 iterations of turbo decoding demod_type = 2; % constant log-MAP decoder_type = 2; % constant log-MAP input_somap_c = zeros(1,number_codewords*N_data); % a priori demodulator input code_interleaver = CreateUmtsInterleaver( data_bits_per_frame ); % SNR EsNo = 10^(EsNodB/10); variance = 1/(2*EsNo); % channel fading coefficients (set to one for AWGN) a = 1; trials = zeros(1,M); frame_errors = zeros(1,M); bit_errors = zeros(1,M); fprintf( '\nFor each frame, the number below indicates how many HARQ transmissions before success\n(x indicates failure after last attempt)\n\n' ); % generate the scrambling sequence pnsequence = PnGenerator( K_crc, g_scrambling ); for (frame=1:number_frames) % Generate Random Data data_unscrambled = round( rand( 1, K_crc ) ); % Scramble data_scrambled = mod( data_unscrambled + pnsequence, 2 ); % Turbo Encode codeword = TurboEncode( data_scrambled, code_interleaver, pun_pattern, tail_pattern, g_turbo, nsc_flag, g_turbo, nsc_flag ); % Create the virtual buffer LLR_buffer = zeros(number_codewords,N_TTI); for (harq_transmission=1:M) % increment counter trials( harq_transmission ) = trials( harq_transmission ) + 1; % Rate Matching [channel_streams] = HarqMatch( codeword, X_set(harq_transmission), N_IR, modulation, P ); % modulate harq_codeword = reshape( channel_streams', 1, number_codewords*N_data); % updated 6-21-06 % s = Mod2D( harq_codeword, S_matrix ); s = Modulate( harq_codeword, S_matrix ); % generate fading, if necessary if (channel_type==1) % block Rayleigh fading a = sqrt(0.5)*( randn( 1, 1) + j*randn( 1, 1) ); end % add noise noise = sqrt(variance)*( randn(1,symbols_per_frame) + j*randn(1,symbols_per_frame) ); % complex noise r = a*s + noise; % demodulate symbol_likelihood = Demod2D( r, S_matrix, EsNo, a*ones(1,symbols_per_frame) ); bit_likelihood = Somap( symbol_likelihood, demod_type, input_somap_c ); % Dematch [LLR] = HarqDematch( reshape( bit_likelihood, U, number_codewords*P)', X_set(harq_transmission), N_IR, N_TTI, number_codewords ); % update the virtual buffer LLR_buffer = LLR_buffer + LLR; % Decode [detected_data, errors, output_decoder_c ] = TurboDecode( LLR_buffer, data_scrambled, turbo_iterations, decoder_type, code_interleaver, pun_pattern, tail_pattern, g_turbo, nsc_flag, g_turbo, nsc_flag ); % Update error counters and retransmit, if necessary if ( errors(turbo_iterations) ) % errors remain frame_errors( harq_transmission ) = frame_errors( harq_transmission ) + 1; bit_errors( harq_transmission ) = bit_errors( harq_transmission ) + errors( turbo_iterations ); if (harq_transmission == M) fprintf( 'x' ); % unsuccesful after Mth attempt end else fprintf( '%d', harq_transmission ); % success after this attempt % This is where you could unscramble the data as follows: detected_data_unscrambled = mod( pnsequence + detected_data, 2 ); break; end end end % Compute the throughput number_correct_bits = K_info*(trials(1)-frame_errors(M)); blocks_transmitted = sum( trials ); throughput = number_correct_bits/(blocks_transmitted*TTI_distance*2); fprintf( '\n\nThroughput at %3.1f dB = %4.0f kbps\n', EsNodB, throughput ); codec2-0.0~git20230330.db1c21c/documentation/000077500000000000000000000000001441116725500202245ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/documentation/CMLoverview.pdf000066400000000000000000007721071441116725500231370ustar00rootroot00000000000000%PDF-1.4 % 297 0 obj <> endobj xref 297 14 0000000016 00000 n 0000001583 00000 n 0000001668 00000 n 0000001803 00000 n 0000001930 00000 n 0000001967 00000 n 0000002045 00000 n 0000002554 00000 n 0000003295 00000 n 0000003538 00000 n 0000004113 00000 n 0000004361 00000 n 0000007055 00000 n 0000000576 00000 n trailer <<239DE5227011FC41866C12A8A5A102D6>]>> startxref 0 %%EOF 310 0 obj <>stream xU]HQ>wfwj#Gךti2FHk Cm%\q*(X]AJ7 )*#_"ܧz~?=s9u[' `Zޛx{"r4{=4]K(6nOoC7?5W8LndFq qqgGEp-E_ :^0r%|OSIVlnTwX.X7pGzբ9qT.w^6P0O7 unvYG]jGm$]}.\j֫jGOX]-[i͇ =K;#7u]~KOH&sҷ~95Naہ}OZH`DzZ,*FgLm߈?욣SJS͖ XJdnI!Kt6[֘fx:`ؒV luQ>$=\lHǴ)bUu):5kL} yG c-vI `菥+ܢTYDIm"Ŋ:+.BلjQ]0R$eE4(b@\ѭD:ufdٙ\G-MףW#CGhD0"x2d%2w•$2 l*YBBb2q,DGR$e -/16i1(C.bܵQnC5ՇiiD7=œ ZRU-f06kʅ0Bm_WFZW *;ͣX$.j}р`Y5N{  8%pxO@Qj endstream endobj 298 0 obj <> endobj 299 0 obj <> endobj 300 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 301 0 obj [/ICCBased 308 0 R] endobj 302 0 obj <> endobj 303 0 obj <>stream hdn0EY ]R ċ"V,UaK6AA3sD90"d7GFЭ 8!ql{k_yxR@_j,dreh>T .%4Ž,ig**C,hI ǙA8)!<4gƺJAq9[z OmUeߪ-C1mKWt&\9Ă BLgE?,6dzg2ʢ{"Ah2Ϝg!W@a]f'bd浘L_?#wj1T©0sW.8{tM [ݾnJzx2qE3f5hKBp3M(=ΧQVȊoA`s endstream endobj 304 0 obj <> endobj 305 0 obj <> endobj 306 0 obj <> endobj 307 0 obj <> endobj 308 0 obj <>stream hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" 3R`̊j[~: w!$E}kyhyRm333: }=#vʉe tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. @JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz endstream endobj 309 0 obj <>stream h{ xTEvw!!ݡ5$ J  [ōQTqAС2 #6n8@O{CӀ̼}KSu~ "*h.1WP:yF٬u;"g6$ \̺rk7!r+qJ|& #yԊ 0Hҩ`v'j/N1{+̓]3'mC?wf͝;}]S68 :Nw5r6ʍ>뺊Yi!7Q?- $j)2cF.]~:{in.RࢍS_G6@4Mn<ùn xt'2dZ?Ùʯ!_gh=)ѓk+ wE<ة=Dr]W?)tʠPz]H- /@*.vbL1&CשTZځ_qJ4N^,VjO2D//3F0n2ߢԍƠ!r~3ʶ֦c(bl/gʵuA+ih"C쐍AU z$YD8,>r|@~ݣ?.C"V#oTqX"K-G6UV_^/4]_׿PLs1>,@掠N:H}" H4'Rq3~JQl J|+'%I2E/7{ ~oȿZ-CJ(m~OiAD;gu&cq[y^;NXOKWo7?8a"ZKP2BmhDAC2UZ1-yX#Qe؍Vz[Cd*sgC]!+rKnO[kEkqZmvVnVkA5' ~{6z'sUsWkkOwwB;i GZ. <}HP MRy.SFtKrQI 0h)aТڧw(R(ׯ۩G1*׸:>9Mv]o*49&.ָwi#C 6T?nS1ntn47ŕES@cV9mF.Pp9Cc0C>:4h8bhk+&WGxQ߼1N M9AĢiP 1 A$廲H>i"\_MEe0Aa&` rdYB}?cWDTjNAe qPLr9[v@k,;ftv eݫgKgvڥsڷkon߲E\fMcD5nq ]: J}Ҡ8e`0J> Ζ Jl$I,@~:y~_?y_rUUwJ "ԗ,~ju~iiϭԑj"`KѲP2O$O Ly\_V18?/)%SǠȝ$N0:CP& U6i\Z鸷zE] M*h\//PJ87/xxln$:?~K|#CCS[R4WV h"rJbqMVV*)V_UIҨSj;#]O f%KkS%| gtXjؚ&ѶqT!L8 G5A!>؏:OE/ b+,GL FVa>i1~_ ٜ2JzҠjw`"\)_{tx}g@|4m[Vҧ ?%;xy]&Yl}4)]2JC:!qc8 i^&o'6ゞ1-O-~& /,_˯.۶pY>+WC 6-֒I RNhfOq㠞.unRq S:DHuqșhv1}2=VWk(0㫫# Y 4Fr4#3 ̽%I,%dK٩c&άwsճKũ3w-O (A[M}0($ґ5h|.BԤ"x'0ŕe&{|BJJOډR C' R<4NZ'-^@šڣdI'w"waC?m Ylʷ AVt1/7- ':n?tDž#0HyC2q,NGJLcy6^)Z7&WoÈG'2ڵAOo-h1x]mw{%s Hg]߶ڳt^i~ b1(L3`x͍ <D:x/;pF)@;i7hUoeuno\Xe, #A#Bau*@0RN3!$^q;}\0Ydl5*TiBMըG9ֱ)'hN ,RcuơJ+דub.-Cy؋znA{Цd0-W}9Oϡ{0а_O n16&s 7+s(@!Lu1"^Oym%-*h;ʰNJaZAgY:Ku5oԅwg6NC 6bK_͟s=0=23NQeNy~9HxqiHjz4ml F?>a8tXs+w| ۰zYK->5rQ;Ͱ糇|-ݣѱ|48~ʻhO{^6_C+Pm #nD.݋vh%-އqSS^d8}aMelan 銣QʞchwmpMHeAD^KZi)R?~($sY;s#\|)Tŀ.fSs\k ~k IOOQF+]C1ZG?@[|B}L'@.Wtca@;iO[Bpx^/P8zРwQy G~`Dt{SI޶+aYOBwV+Upz~ς6 7_ ý 4# E Gهfrz =/N^5 93V;` `8EևBcM٘he~VMMٱȗCvfmg_A73Cg Uu#tnZ Ht(ۚ0DCaYRZ0bZ {gMss؋ik]#550\Abk_`][;O wKϱ.⿘kvǯ%?焇c$Rbݯ-NqxhP`hg1_7[X̻9E')GA9 tXi -Q~1}[ϕ}6S*.?u@ 0kC"w%V]@ xQڃ?h]M1o1>>yuΖg@|ASGY5gCnu\[Fځ|Ǫ;:~Kh(>Cn%WΈȟR7}Y=>>Ww5K]F`fZ2SgoZ=H {};=P+cuYfbÙ]p@o |xߪs(" jܺ0O|>j7h6>LQt8,N^hqϺ3f!pR5̈7ws9\KJЏ. r-5+Anuw ȚxW[f" 嚂|6ݑZtgVPjF z|U1Fw s:vvܺ>@7ŸnSVċƾgsgi*pFL/{1%_i {d)3Dy@|/5 ?MW8j4T[r Y%7PpLr'IyΡrY<֣,G Lg>clqv La>Ӝpsr\HB?=qt3+ jp3/ao;zPh_ pcaNr5W6sl`3y3lp1:c8n3V v۬oOs.P?Ɩ_j^y:x305`½EgPy?|.2nmiN̼@?"ZLisVYw֟&5k~銂sQXXu7]?B"%Dv.y{62 Ju'w'siIve@{?m)ߟ| *e5n<3h8z`&Ro4ۺfPvM  >ME,]@tnh75Q|-W? QeFya[7w MUy;IcXQ;wl.4"ֻN.^7SJf,tg <"qyl Te/ƪ{-<:i}[vcG5AÙSP^?o{:S 42OSLo/tɶg{h[}S1ҌS{ų}v+nƏE(kK1>'jlwzͿ fs9r>fnOc|'Cj>!P;~Kz7UwNu> q}˱é>e}Ӧkl+z3v5z^aw9dPӴM~ٝ}?P9P4ێe}9?7\ ~Op>0W ο \w e^`|766244_ _zN,(g6 7F'VQ? X 1&iwvAzOm(ۏmseFϡvureALlЮ[6f`$[%T+69GVboʰ ;}ZXGv=F ;Y/-Xwyw՟)g|f67b4 ԘMUMa 6ll?sҥoCmk Jf;: _X3r^ߨIJPKj=B=4JоA8o( RVf^>vm MKXX%߷SK1O^aMNliQá#!;v@Ay4yuҦ`?8f S7? = ޏ6VXpA尉ˑ%wHűrʫ\Az)i(8B"c\U#qF8JS Xf2]+ꧏ(`; 2¿w=M'iqu2N>zp'#ڹF`{X[Cہ"^C[~r?FGcmeXSv;bwS1ؠ{N8CգLE^6-DT &k͞|W!G{-7־{>|0i5V=ԅ.6bo5;{qQ؝ˠl#`]liN̯3t2Mu>jk˴F۳D(Z_[Q3M9ټy<.H_C;% tD9%4ZS՚oO|SsG)k"u.2(ܲ=P쎺mA695gix>kWDkoYs2m9'kTs!C­?1bm[n 8bvg\ykI3&LlaE]گ D8 g|]ȺuֹY[!tNs;~,8uSi~g' {?g/5kaJB]MZwofZm7vk ;Zھ@ 떠.w&uZ| \*G8Dk%1mMc hZ"ז4\J93 h-kꎲ]ȶT2;r6ĢCGZ4o%vcѶ-Y42*sov */PX@8-v[jz=B(ܫڨّҔ(?Q+D֤i 4 ~ˏi+f UJY p*`2|cƾ0GQlov y@L-W}MEE/_mF'ĉpC>-5kf7nƷ  &w.G-"gh?,!}6z(p7 'epη.]W/o .߶.ߴ._}=\I/ .҇ :Զޞç _vtZ G?\j;t@ d%vQjUDQOT]!2DUj- MQ%ċIQU)EUJU>3P'SjuW$_m<@/'ZES){0/!_K856:dY}2gf##@G=5z<&{c C}d1s 4.VU.vO>_RdJULrLF@dZ om=E XM=MDԎCEdG0lrMNW7;NNtڋ*%{^Bɰ"6y,EצwM8ɟyJp~m_.jٲV2.upv ]>%3Jtz15ywz />;%O*oV~TEȰP*Skubj{=};ѝ[=OOcOqytyy$K^^#++G` 6 eaQ( L|E:9r|`l! (s=3 )priud֢`lnN颕IL-ZYRB-ϊϊߴwAy>7_YVՅEͭJ0[.M()v2))ީb?NUr4J΃imɭrL AiJ.-"Bj*SjRSLKU*ʖPiIKS2-hߢeHr2DZ'+HJ$Y$*gD"D4qF&ْ:DL/L_/WOVMj&p/NԴAc^D-xnϱi.*6h-fSel]8Zb*=u0xl)^*KPJ!*4bgd'slmjDJI2Zl6䙋OLrƤiJ4|0)T ~:/M\*QN$&%<>>!>).:![Fn"D5ĄM$ǧcr]mZr e$mmbH27 s.7>>#G;s:zhL~Y@ ܢilތ%3ny[DCGQe{k}IҩN' dAp"Q!@ (!eQDA}" 3"Èd 2>MF3ϽPgTYn(\_ |lđ7; esoa\T'NS\#efg8鮨*zh^ ^|`UeEk7mXjK+~}!l\}gox.  |cï?.xiI{|φCGV/`' 5U.Iִ6\ނp4+q:q;[&\4 &u@NqVTWUz5?}5 .,çϼUjߙgjG#B{`}pl {[VM#A8p0XƄws+G:?;1-}^t/ -\t_C͛3}{֭j˙15e|w: ]'H:+oFB*E%ZW+љЎ%+ѝPVTFΈ7$lkkN|fzl^B$m 0Rڲ֜|;0Mz ?f>x5+(V>YvC b!< Q E*[YtLS0_NlP;S(̲' Q!dfL`D*8i4>$j%SJrr#tpSe ƇX85[(N&|cX4 GS 0ζÕJ{n#{ X~=WsAtHKzT].4,'ɴ󙡸d|CgGSSQ2OYk♶G[cUC!^eqtH>-Rq9UEE;]\CdzNԗ$ -9$ G h+j(dgla<2։! #@l:&mu,E: CuF“vQǚS`D  cN,V؁jRL20%qr~}}7WQGc$r(EVo{q#~'&m 1}Ϝso{i)u='x ק@6%*|EQ͡:Vk7͇"[Ԧfu_bTX)eR\at:_^uŵ%FGl#l+lYekٞ|7zVVyzftFQmv^.j1`{q!lUU/h'O eB/4E^'z"YobbŴwD A;Gp;dcm3ŴH9$c'>SSzw/gUR%Jt ^k}`ΒOR>RV̾f5 }}̫n[k~y|{;n[ɳ-[:tΫPjsm\5bq5/m! ro91Y׽jN眢]-hF`F(H c$kDjNg,?6s撤%h ±r1ÍmlVr`/hf3wއu le򂻻^ڪ>~a>'н;?Q[ h 4:p.!Y6lfW%=6k:1iaF5gg?nuݡ1dv0I5oN_(  q**y*}|CryEQmSlBeG zT NZ~f#S",>C<;p]MS$BX)K4"Rͅq O__>zH~KI*HKUbc)X= +(QrsQCNRRLK9u\ZWcw~\2'n^}vYMٯhTƋW68q m0 '܆ƇuA@EQA) (+ܟr$ad|HX]E`YnE8hKaNT`.r^r^eO2ze ?NEhf$/c#9y$m~Fzn|Ơ-\@fT]EQQWe ߂nr2_ZW+2un]y`);=z)=c|EB76tli#WZIv94q{w 4o4^Kk4]`])L-GVb%7zUfj6HaZAkvŘ6 L=M ,Id$2M hO,{3:qwy:C?n'MߐQ184gD'&Dgr憮. ^+޷%/~JwmmqI!QS zXdiHm[i'rq)յ})ORvbi8smɡM }gvQ'ӞW-d)s 3ȤO*\wXzuM͋7^۝[߲ _-n̒橁9X~S7lye]  >* (Yy+I@\͘7R#O9+˽l{:::vtY=ێMʓIEY#u]ϭbKM)!WZi+*$x֍ ୃB)?':ML] .avʼZH;LIot֑.ez)x!<]m05\@8Ad"% p# ;!Zk /ڊ< |n;(X鄟@(+` ;؋wY#dfO;]=6w۸Ar8xrY-}8)HՎ¡ضY‡_ܰeǭ|d~a؁7o{䯯;썙w`=@nKȎލ%߶aֳbۗje,TnvXxUܯYuVоS}g*ob<(I*ȲJ!hp .D8sΫ%,rX62ϰ Y v@`.UG3$ZMS[ ݆ԪOUnUYsHoJd,~wS PPoZyv:>][?x|vBV;zrK&N{NB~{:z<1Fq9rbđ&?Ȧ?].03/$ xݞF뀛M9YރxE^#uљ&2xMap",\8˱XܮpqqQ üN$bJC}QN#EC#Q3/"ӵ8l JS)..57'3kۧXńt]V *VVN \'!C}JUO؀$3R']?ũrl;#$#S%X64k&4ڼ]:#o`~^0xmB{Wx~! C?4}d;~#w?X Wu9ǿ6{_G@Qr N-@2tقsY9@e;à()b} ?^ZN܀ *.KEYyP }#e]@Ύ`Al~$E, L 6ZEv,7_{0k/fIh挹|೦emUF|̉[O3|  (eYӉZ %U!.֭XC6aI)'lXOt@Yj9=}[&o3=oڶQ+ _c653À!<]!$~Jj}4mϺo2c ͒~gݵ߃uτ>_F(˓%S |qI f:Ƣ?l"aтq bXWTV>F¼oYd~s!.̉Vle)5>הkx[Iϩ8 |ѬPv0՘V>-r"pGf[SP ]|v(n MzzܡXȪ#胾A*@C1xk qm\n ZɽFc7Bnoυ-֍ַ*`$ty@C##DCeT4\^u\ .VU֋ܻt}} gj=eVeJ(O,TWiwѳ-YNyza-.=14m -Pj`|͊V+HrD| 6e( pL)e!:!q0TEHz3 os 99PKMPX%tv.]=cI ͂pF O臓-Iٝf*,Tjg,ȼ[h8-y0o}qnyYq'} "V2L;I2ЭL$-L ,( nԆأẙ#rР8O8_N $F8wH aGd  wnʄ r`P/&!GbN I^%XSt:BN:Ǒ\;N+;h> 3q8[":VsǞ!sxa Olp9hI3KkD\rgssy {Uf{ؔWPf%#z>oq*x%I?Vh#}R~-}׍Q /ξX\=7{;ڶ8_ڿphNt8ŕE"!UtѷVa?u%kE v9?*f^3<ؚ7sy_jAQ &-u;w ]όKS/ ﱟ9a Gܡ vSWY` Ɲ\ٍ [?lQ? 2:ao,D6U#5}Ə:0 "7-_wɃOeB>z4 F<`A}W^Ym=_+AekNM/(ùQҘ,&Lse: #2BaF2UnN ! i;J}l|T9*(m Ufgzf*lh77V)wV9֖^pmc7EbX+1B.~e0%QU,wd&L  !EّѨP nSk-<\TkR[|кТ“R^fsԏ{v0 +R YXM8H8F>"BC%OJj̖Ċ14@*Yqlqt@j=ǃt 0%pls|GFxXNU*5 ά_Můԡ{N🬂[}M"k`N<ݞqt AF.ƽI|GHqw f_9-FX <$6YA5\dl_}Yk??}ESۮxu=4q3.Ge#G]Wf_n|jZލk/\_r+/[A(Cqw;* цShYFv&ܮ\ZL%`pcL܃o ? Nl)ݢ U+N~f &M{<21䣬⋧(x:H,fQޜa J} {L ]/#ND$S5$*> %î; "CHJ}PpJ~<Ͷp3@ᤩ,7̯.dZߘ?ɟ^Ƙ|sv٧6 z 2'D(΍LjpX@ $(VXz-1u,*T RZNG9 e( УZ@A3z˖ҝDD1!~A`)"CȊ裾HH/P ]etz BJ `p@;ˢ*tNY mS'7dO;5Mqԭ4AHwh|B8J\J.:+ӆ:{6I19Ի5d=#rX30^:V TcLxůĹS^EUVyb6YCB18kLhu9˺,d<"<{ N2lFɎT&f3yrvrK@gdjȱH&o~1Ͱ,xDQt],+C!J6dPggN !;P!V! Q,Xhi' o%*B(ꦁ }%.w YiRBĶ#LP,;ۂp7wd#ቹH(sI/'(@8V -OȒk޽м@֑MisSqXgKH!|B,tՃ22>NFJOb>{3T?6Ֆ*I]Kޗ?SŎC・* (*74CPu`5$ˇac 4+Vs YADf^Vɰ+j  30WͰBMo`npNZ[#=t /[o1o f">>g ǴϬL)& A||Dx鹬PL *JHGWHEHD(tMUahϠ*ӊOg@(| JDO&گ(4H4 OEj 38 T/'NGnнJt;Sm'9R o`瓞tl6ixx-fy*?]Z,rrlغm|HZC(&P½h=1BmJMH=;bq&J|ijAg T!4 ZJRIVJ.TQI,+gk>]+V9zpSLBys M/|1x/%Nx&aE˔]g)y=)E/,-hf8wZ6V -0: *Dt/p`*B.TKs=^cq/rѢ~B$s4'8Ut@a% Z7 9"Ns "娲$(zdѠ]P992I/%$nUꔋav=}3f&2rj,zL2a69 0{zORtIBp$>Ej0.f<'@Ͻ5(2+@ [o] ݙҽ6"Yh'i KSv^b8))p&N_P$;̒@Y`wŸTo]Zam!B]/K34ÀAV~<̀gnzkW̟|V|ݓò7{s}ȏN=FG*xUaF] 0b }P|<{L{hr:1ⱋ}}V_|tD԰ CݢwK%S>VzX]u\s hE_LNYewJr:.\, Hg,Id\,σ8C^# ?' YpyMK'L/@*+KO/-p̦Z#{'l``ۋyP~qo >gO߹`#~y?( Dt7 cF#}2pLi 2jJͨ#U ΐǮ5XO}O_?%l"v0  8JLTN1;:hGo{)XXsٛքS01)K>J/G_^" Ǥw]s_ [Ou8r Hls=xhoA^ćDG@u"õAa'$ 9UpO 3EJ+zLM~9b(>HcON l&aGEf T(ņCx÷^5Z$aPmp2#M= P%) Qf2u<(->dLar" (C2D+JЫ^,ʼns= Bfjzشc%sC릍ܿ} 3/F^}kE\J,Oj.vZe)%(?'jrMYͫ7q۽#H޿Wt{^ͷz1;z "ؘw!uiG{T\f3`*fX/KJJtdzE# 1A+яE $|ۉHAbcc9 y HBa :5NSD* 0BFsI(`D\\u[ʗ&tX8f~`_䮄Oe5_#܀L<ϹB`)n= ĸD7yQ396T#q|Mffa)&@͕Loo?!)x6-bIxIwoistZ\oP==M^ѮlbڿL)?sO= {Q b3:2 i˜;9>fȣ6J5%I2-dGߑG$LjJT& )Y 5 m9X2U+ I۩Ray _od&z`HQ j|r5dFbҸsu/oU?qw<{{fމ"]*'ʹw)7Gu) #[.A*,‚ib&JLNct'bTpDW8aQD fI!2O MPEffs&Q-ȮQ %I,M3sE=!2iIh ),V $LIL7eR*G% R.%@r)T+R,3>8ˉ&SHiB%c/k"j=n?Es\Mј%# 49zh:AqN!P0#Ě&Q(*jE9m/q9 KPfgG !G; BF'H!re o&L-/z{kvvv$摅/vvW<9Of@Fbf"cCqL{4=N ؏Yf2:`8`{Yys ҮD}e6(ЃL/]Y%cwoo.js΋ dGޙ;ȰCr3a]`ۙ(s9*4~J@[HhB)Hؐ@gjs R&0RI`:RMآm|&$uqc&,nuP3 }o%oŌr]D()ؖHp*//H8@8&W# zl!G>I(vE&Lu;]|&wdCrӾԝchqش7iWW(@!P{ oP|Yw>rdG#?h pAUR5EKH"9L-d[r_%#K3lK&z+PYиSq2Id˓B"8 %͡ma} HlTiz?pIK~ Ybc}?dqHbr91/ r( /ќQnrZ c/L졸D[bH] .{)x%u70wsd>ud1IQ`@ȣg#Fc\Wanp)7[k1l2&XBsٹ4#keB77B@@Xrz;C\YDgKɎ1\?%OOڻتyx@`z% }K,z_27O?F>_֒Თ́SkbDB*H$젷R#R =tTm] NfS|F#咭Eȧ_A8y*6=﫟bλ;@_h})AbpQ1 %-*.PWtQђDgBfGg +sB͸^I?:yhDo"XƤtffsO寊ljt0s.dJ 'HUꐘahJH)T-F rેV~1/F?8(?}4$@y|Lc.͸?J+8`qA[aa^2灁斕emkLz_#O{ɰ}{?[|}Рb`QiX'%,\f|hKHt5ksXq_(_*XMAG+s`<5IgѳPd^1 )UЙbD:"tH {lo}z Ib 늊G~[͝l`v`z8n8U~xkowo۟̕zٖ+W Gy[sI֘?(ٓKt7\"e^#P٥ [ \DG'/lk /hbÞҺ4>ޅcv h۹)Nj#/U(ޙU*ڑ=hB͇63!4+Js\u@\ -( Ԯ PUCsy˖';?~s|XLlH2B:Z׆#pH8_NWI&xw^OV5S+ Lꂝŗ#J*3u=ua>I|\epK$:q:zzdV҃K?.80؁~ tZ:k}rb CkL'QT (.c5a>JD+(`C=,ʢTiURTVfT(yVPk׮#d}ATW !? VN="TzzRzz.MV:D} }M}"NJ5v*rQL9:V0"UxxN(JO_#,r"cB4//MQ%^RE!LlVPB/4Z(8bn,dt<esHѬ6mͦ1/#"wBpR~oׯodsw^xJc.KeSj+3S}\w)* P CO6Ph+!%!h7T@FbLC\Ggo>sxrwjYT3Uo^nn4i3A䇩B^H%#VdEŰ2ɢ Ah?r`S|2T?Lp?Q _1[Ӭ<:&f~ Gm;#Vf%UVhzUJ5Zu#3YEEhg>ǘcIĞBHH'GSۨE/x=2Ni()C{)i_5TqlKis3Mk.2o51%Sb.bqBmd;d?nG& <+Jj0M'd) ,k%]KiB7-+~5$甪UUP?z9V,A7M%_B~\x)fPA G qd ,n]8'`yf:VȸNN]KRēl5?6l'<3qY>gvf4Hd\7%@ $$-.C=i$>P nҡ"H-Vrz1j|6{;O4/K;{xON>;ypUt0O]w]޼H~8zkJl35;"e# QU"gWp/\~{⛲E{fIv*{T.55 e3?Y~UU0TP L9j/2֚B`pV,+ eѠX2k*Nk5Nk֪DgZ&'lŖL\gi}tzة =4u9׵To l+_`05&o8AY x9!0Δ1AN. 3AΏgΠǨ%)F(^CB6C'ȣ]حEӊo샗ȼX#+#@m$oFXݲ`>Y5ZXu[خ'lWNjT|ΛȬ*a=Da;nQ=5ۖmv']5GiP"[[[]ےw;qQhXl{A9:O?q *Cl4 _RY. 6U=)?4J6N^fz޻'cmUv,);O 1 >[ۯNkg=WЮ7PU8R؂2~9<\c)T$hKfY\K,:k$*ma]"; 8ΝΏI|xvk!@j@>hsl0z 2eMp_\j*W`4%YkObij0-2UB||笰q)!qxLZ"y&qo u#R=wKq)1c$b"g$v/ ̓/ul]Ok }c햧X=c 莤_-UvPSlΒ;Or'Lt  }o~$Mu|i,2Ȅʬ#&@!)w 9'J ]ZB)ҙdVd3lǂ (Q]IITd-HoaS61IU+/Q6GEk'+փջbgW_ (;x=MZ/,  @J 03g<:N&%187 8@phtQS+lw0gW!J#;#Oc4h4hRIEq|J-AޱTxh(Ԣ^}O8Z-?ޱ;P~+YK*֧cC ,wٌɓfs{L=> (с҃[[貰}=\!d%P6JGd>/OsXl^k6s渪G. m wһ.7d:ҕP}92mڮ;-柳U6ۗ[-_,[#GZKnkQ"_EfPX5'QbX?dX}v}giOXs(މw'g$p"vs"߰w;rԁLa2~cL'qVhM.<S/.GkyC^!oh--(^WC+hأm7mtMMݚ$z SEJ!ԅ ~q(Dp{"aojs3+%P_JNl):Q. [׎—7tuvvFI8f^d~I"D KW7Cu+ޑPS7~5iدekxTϊjtO]$nhR}BS&y@9QYDz^dEH!DSQ_| )EkAes糞kқ܇2U{ +kDO 9h"Tհ` 4iAlϪ;{v % U˶K{$ȠH7D3->%rMƂ$zOϦdEDЙMncX:VFrXC XĊ3162l4K]_D]],HJDJTX20R2~1uaHV/-l.D|+Xr73݋=;%.l'1' qq 7 Ǵ~ e2q~Gw}@_()(PUPN'c'tlWP5a":L`}K~|=|F|U՘o3>C2D0Wdztc~QLc3޳ro~ͰlMmS^ 0` 0` 0` 0` 0` 0`_W¹MnDRfvNYq;MnjM32ǍdeNˇ¢'W+'` a̘9kf~m݂/YaZQ:}䷎_m3y烎ȅ+VA}8'tMO}_gYCCxyP݄|YwY0!.Zw'߄? GFGx6[)plBy]B69!Hdd4IB&2'] &dNfyp:W"h<@#6xօ27ax(+UІ?b:? -{ 1fō8M(OlclX< Ko1EC=JM,s;tv+VfOb'Z[M-M]MHG{^֦/kv [[4̭7&+VAtMzecScOQ=miMK+]ѮHKw_~b:30Q]Pm*_zu7Q C;IA;+h5D;D{nDJKxlƏjjS@) g!7 endstream endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3 0 obj <>stream hޔV]s:|WG|gP􅀧Nfi!lӋ!L~Ho qhjw%à/)B;q'Tb<wU@(Ϯm5 V#9/$Lj0XbuO,f88!^")&Hg.|%"\AxȌ8=~t\~4?PAINoz^^/w1$tُ"9{$(}w=Ul^Ο+S)_~Fzp?#0 pBf<)%Y>t?`33"=RGp8 Ʊ }Gu=^Ii%hd@,Kбa@M7p@悋e8C^%ADh8Ze(eەEkz8sC4LA0)F`GcDa}dC }r04ԸF!{( ?`!\/['-#t59>`I Gm4]9;|Q iE,Ƥ"}~:˳q:ۖIWU&0&=oiv.9l)Hc/5߽܏o2/VpdE{a"uzz<f۱Lq<k3%^ tfQV MoO8Y,$,i5,ƤbZoUqw3IUC$n=I 9:v&ͻ1:3 ڮIMfiV8 O9 W㙮&l}&|ձ!C6z,WKXu/m3/[rH%p&'8?EUtWժ[;tHbr?!5ŘL>C=FEѦV?411ILZbM]&L_:d$^}L|dOWqX My7? n endstream endobj 4 0 obj <> endobj 5 0 obj <>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageC]/ExtGState<>>> endobj 6 0 obj <>stream hޤUێ6}ẈTT4hn"AA*!ȃ,Ykv#INC`C%̙9A 2RI SL'}v2|84P}Xq/VWfBp?qIWBa2!_X"* ,K:CZe")&P҂0HM?ӣȌ^\qJmQ}@.2n Eۨ [Wׯm!xW.!XXKt2JTnWRQ4\^a kx&)<SJ@z VrF0C6MydB1"22a81p Fa=:|ҥ{A vii0c3i%:tAXPlD|\)s0Y;$pAo +&6\9P.FfADĦgDȟٛ\b#0p Bj{q80t#l=mݽv!  6P7wqٰ#;^x&i.4A%seyc" {%B,_+BGrBVG7Cwa7c 3Cy9'ʌe=ǥ5N!YÿE#2?%O'.dƅ i>1_U!'wAaG|ӔX`G˷^P(ݶMw'\BБS3ӞQ8GTl4l<2cT cQJbrg nXkg68.h}{TIF9MOC޲`2 ӹp$6lgbkR endstream endobj 7 0 obj <>stream ExifII*1J2fizACD Systems Digital Imaging2007:08:07 07:45:340220820__R980100__!         !1A" 2QaqB#(36Vbcr!1AQ"2aq3BR ?1lNN1(Ke56Xq).NHNWBq~P)*3,0V~2ݷ8c2J'Z&{}x,Jٻbm w$)@t?֊x5~~s;T苷O?U5L& qzI=o3uj(0VT1u'៖URi8Q+Z7,SPq') JRdc;Xҗ*UH~8 u8b(NGV_{ƭo?MxɼYĨ9 zs愋C6UdW%+R3Ca %C>\%M''?4_>r{*+*9Rg0Qʲ P<񌓞ҦەKTgs%\p19Ʊ8j1鮑_T_QDu@vaTGWVq#xg8w)D֞2u3O.9 HP榞jiylU(>}`Vh3^I:nJfXSEC8 .Vz;3(.--)ꖌN%cV (J0ŽK}b^ zmgsʰ1efnw~]zZtKB4@Tj5)NDX FOrcR⺙O6}i[PI~ړpF* ΩݢZè՗&g$%eKfZBQ %+>n<'j#d8*FHȄn)Z-;sUzEO8]mIS$7|䊥坩83+ [ͫa }sGr׫8УlY[iETe)je7嗑Brq^ |mw+v<߶楤7:nK6ږ$}:*fl˂PʞZX=a{W{IsL\JҮ%_MA*'c%'H rcP Z ?3,SӃx_3Wd L䧷[[B3k슄l+! Q;rqצLž1oywsq_q4!%JV[<9 +bp~~GcH>?OFBӛ\-+C>Cr>RI8zsWH,<S#9e8[^8PQcUn|WcN0BOmPe$̅Fǥzt=(^Bq'#bv/`лsQ@%L@ԩ%\zO@rGldJfiޏPykHEbPRHRzP06$|ގO4{S5rB)7xTԺ})RAb1pQ !VMgLzJsCNer -$RrިtnӂsZfwN<_\R%)$%Đ><꥟CrzNUPZ\@)xp :q A>LsO1P+h+&Qϖe9>c`C7=lRjrbU-al𺜌=lk[t:T죎$c9['8%kBG8u왾`~)? u^{6SPЛմqj$ebaZ7S^~I7 kK<]ڍmU5Kz32Ϛt- cL[1Dv\1@4׽%[rp8!=Uk#p'W|96%LIOe9}ۢB2oR ֓Яz.UTSQrޝIiy+ڡe?2e-8 #\: = xú-;{ZVELjҌH%]EX@c:7MDTRaɝ_%ԃۊ.rs ZK7O"HhI.\() XNN0z7HZv$ !,>ihhi%kQTf_zɹٴ'+t94;P VOxwW5屸g@ x0JSsxd(X0)%|.)h#1o 9HPȌ|pWb79z[Gʋa;ZRG $Plbizl} ̔m/M? ,b~%9U ~X!m#zF5$=#اHZL C!ױ*V{>HԌm^c=N8f1n* VȫI3K#wҵ%yS0RG:qӡGKV &4M3Ҍ0B/9r5r&ov)%H?2:YSuΙk8V^i*~v!cZYe ?#5N=OK9/3.: V#wGB"%QUTc yDA!)~6J^ԥi;m-C/ˌ8HɌev[u~(>їtvנrqVz]9mҶeZK}HjC~T}IĎQIb2>97qvͺ|h^^RL_p\OA .U]34Հ8J@J@ 6Z:.$+TMR endstream endobj 8 0 obj <> endobj 9 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 10 0 obj <>stream hޤU]oH}WGxjFiclŐb?{^c&+l=9g<YPB9DC[x^@D2 !ӌ;c2Zȷ8W?]9ι Xm=-Fi&0Xb@jerO8(câ'6 Q6ji;vD ɓgY^v ߵb ȶ?wr)ahQBc> endobj 12 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 13 0 obj <>stream hތTn@}W:ﺪ*T*Ey DD\A~og IT vg=s왃#35 $Z1zd`i*(`>c:@ʘLxnJ99l"%Z*\y0ĸ|GMS 56[ -NQ(,(4u6r EKU$AfBQbyE.MvwANAыi_7Ɨ^lp_Y,#]|Y|J`rBB,D}wq7jTR3ȳ/H33%I=(REufT[e$55> endobj 15 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 16 0 obj <>stream hޤUێ6}Ẉu6A.MVmR]#A7CR 83眡"5Di@(HRI! ><.§'TbrTP@(ck~;cp1FR!!c%k.ULIb^nNKĀr EIQH ,- pe;ãrED2(+ /wQO<3b9,yIIԅrW B<6ŧet3"9.NH.1fձ:ͥ+k.3RV(8[Ax/q矁UP x$SJ@RUX,`?MH0o"qsQruhO0!JɌ9L9\ӴizpZE# %1na!g$zS Ș(g)s|gumk/lycX%mU*L8PA9auDȟCٜ\"cϜpظ O&s!F}mFxG`(`~N0&]RHRUA7zЭfJ7YWux&( mᶇH!OɅ"R=FٜccOtfm@y>gL%[,"aqgQ yWv;hm9@ϑYtvG?neշP`NL<{{V# -?9fyl`m{/wY(5큝> endobj 18 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 19 0 obj <>stream hޤTj@}߯GW*AB(,; XrL$$@^4s̜ٽgJ`;bkx%`W04 wSŅ'8' 1_:Uh\¦eFVb1>=dG-O= ,&ěͳ̠CFRR48 \4r=?$FfC{v`+3WB$f=2th2Z}OiDavc,Qh 1'JZ!S狏H3J*(x<@j +5H1 a3m%7ɸifqt"ŝ*̵(`r$sXO5,+ aDY(@ad%zP mHo+S'^1*fr/]Y+8ۮ ;b۩; a2ב#®1Ԓ`_RԏhOZn _VD[>R#uu[#(2+*UqW骯]C5KJ;n3%t售9zv.wƔ1˲@wS gh0)/xgotzX6rS/pi! He<.c[# ULnL=)Cl$d_p-ŏ%ͮ\wc1)n`8 endstream endobj 20 0 obj <> endobj 21 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 22 0 obj <>stream hޤUn6}Ẉ\@ IQ7(M/趛<,AYYJro=$e9  )s̙92$YJqJQ8eӠؽPm!)"k|qq9T8 )?{5% I(ʂǞVd4Wc .R!AQ"fENpJҘ(HLT$*5c .$C-cȞgey+*f }^~ýY,q|sɌ)ⲧElK_N&\)/Pk0#IGw?G3" +TܫERDƀŹ7u'o8,[qq°+noZ9}T24c;8yy{B8Dd"2eбHyLۏ-6ɢK -ηΣ,: Qxas)h^YE2KC3RE>dk}7nh@W֯ZĜ^!9 xgȅITK+þF;`wj'=+:h&i@WqC᭙ a0u/e@=B8X IVQtFzԸ[Ӎt]0gKxx '1.WLRcWb24Z$t[v 6_]_ۃ<[|»dr0#H7=2y(,b+,T\P UBP306h@l.~E=]y]EFuM] 4^?!SY> endobj 24 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 25 0 obj <>stream hތUnF}WW{ ( J hҋMl萔7z";nr3g}$i:(6R%vo86W\hH%~ Tp!tgPᙗn(XH!0c~9XoU$ 0M*wiTQHHƜ|2yŝ`/@? (t厈ֹt5R5?a'9O)$WHt#Gۗc}o9uwxյݔߎW 6F٠e'ܰaJA &MjT=0R5RM OIH_w=6%vX^Q+9kv?dC $t{}8@UQG{HRU9ᕭSgqbFg f"D-iNFHnWawMYYޓK"Xӹ~gf?}Yѭ\wo.G31yaX'sf٠4w3/7Z~y&'ͳlD~[cՍ|:$lYmflOPf_n1$|< C=f?"8:a2eh"F·e5oҜa9dz"FyiZ,[uP yprL663vX0Cw+ӝ?wO? 0FL! endstream endobj 26 0 obj <> endobj 27 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 28 0 obj <>stream hޤVn6|WGry%E-IRɃ tq$m&IIƮa9sfj Đ25Dr@'m+<$㊌xhq2)c=?^- Ҕm!VYЌbsVj8"LA}V@m15ś8|:45"a'[j '_6q™ stDxGi atW0X[wM1}Gլ*/L˜AiOKOñB}t  uU_?ȗ­-WX|]A.M +na!Xk2> endobj 30 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 31 0 obj <>stream hޤVnF}W#R}X! Z xqHv>eC ARgΜ9˯&J {^A\2 b՘@5\R>}/h 5JC*4!ӇQDf딿V_`WG$%3I&A'L&P+=>$Ff"Cʝ;y_2 g)d.㆖MBK?W{;בbYhOśK&,KRY A\\])u^+i_`_@'_ɣZHZhLH"*<e2nJc/ti>^+ΰ~USe0c#\ax:pAXP`˥QEsqCx%P)'<[R.W+Ǝ@H6:I _ܗ0ZPQ, 2 p`]Y3 SNbBEK9|> Z[j[AݘJˆgkb#v8U]Nt %vcݞrnKI-y=~@#E# bLub;QJגBh"/ ·}("vY7=p[aڎsW w:#ý"3SqD#-dG8ܝnjAy_My5% ʠd.]oSg7gX 軲h'QWg)a?T9%(Hsm ݕ-[DdSt4&Bx̄-vAeld?z3Pգ}~*7EzsvN31눥ᡞl6p `2{h?& LK_zoKl^)T۱ м Z9?n_yQmnvaEpŊpCfd(_0ضZqDUtuòvDKX {w:Q6v`?xuW tlw}wa),6(1i^?܂c}Zq*5vpo{T_ endstream endobj 32 0 obj <> endobj 33 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 34 0 obj <>stream hޤTn0+(7NQ CL'h$9~o$ &)qg;ý!RFА(Ip .^Aی*@3 { eRqdKqএ$)!0cd&˖ 2^_\_ bcϣc.b%B!Ș\3Zi%e ;ǓG`>mPy,b)e=1[ ADX5O2iu ÉY"18j*%(`kaœV3bM* t0Q,DS 0aFH"#z)4ڔͲ붮]QuU٘$ 44suAc "[|rUG9X#9hwPT\XBY4p`-7HvYr?aL<OcC$-*!=s}6Cw(CzRO.NP;[3B(C my]3þmڑBUVP՗ :?_OVz(:e3'mwz?CIbcM[&(omq:<:@whpO02|`hmc5mB)/fܯHGR\Ou; /셿̈ endstream endobj 35 0 obj <> endobj 36 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 37 0 obj <>stream hތV펛FSܟP1 Tm&%i#MTmZ}ˀU2g=3wPCҀU-9vm,X p>i~ d ]k^.9;G ?-\Q0uQ8aɻCgH6qǠ />Gd<$ɝ㊅P |B,2E:R/^C)`YVmZyoYo;ԯ,yRe}5y3xP#j1Pz=uK|6+ZQ[5Hi*$4qhc$\1c _;'PA,ݥY?Q1ƉSM<"oҺFNܼhaH͘gK!Y5au׷iY;3!'%%j*Q`;Ocq~R TT`Y\y,t-\vmsޔ[*6gX95)&8:'.KU Y밦0FGGXʺiۢ^s/H#6c;v`B)t}!~EkҘz'nݡa-6# [P&/S#UcnF5fY{"y@4IvNҨofcGĉC83L jپ-!/g eY>FwsӖ9\Gϟ6iN@p7%aϴm  #=/%}Wvɥ?B ຿}Zַȭ endstream endobj 38 0 obj <> endobj 39 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 40 0 obj <>stream htSn@}+*.Rۇ)MӋD!28'V>.`5ievs)AhH`8iFqBh!ŵ8yP*2Οs/#JH0L:0X#{\cT$30RLGy4s5bd𢠴 LeHMQ81y}3NMk2!5J7s .t_uu"}rG.Rb%B!'r&gV:y:_<,Ӱct~ (|U-XL)8j-` b*bD1DpbXd#[QoM3لNii0`XC!F2|lQr5D>SLS+nI_듪 us)v] FMs ҄ WҮ38N|S$_ÈfaD0^an]ќ]UnyB9yiwHǁv4> endobj 42 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 43 0 obj <>stream hޜUnF|WG0{ h jQ$hf$(j%1(Ansx BKΙ33z)ȋLLad%%ZR<3z/L i(VB<|Tv$4֏ƮĚ/;j_d,%20V^#%48,Cņ|Rʈ,p$E*21=9|Hf*|\s-ee^iPFGd!歯_ŵkwM̻c "PAߊغ޵-v~G5]T۫]ӱ ( qD2Gt6c.Ew#!B4{_qG aC}p󒉾[W@0l RC}ԹOF/PG }j֟*gp*yw<Ϩ,zhn Ō |GǙ:wk,I`Q>b~hD'b~M'/=򪧪Uj:䐜h~'-AhPj\s`J,;1$'HNA ή޵gąʒEki먻i+x˴>w  |L퉶FG9W58_A}?s0 u5ƍïGwUpާhfx+tľ-YjZ]c&]1[Lǚn26~Z`=" endstream endobj 44 0 obj <> endobj 45 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 46 0 obj <>stream h|U]F}WGx@j*5m٪1jh]"kޞv\Un4yɟ3ī[eƆbiB8pb"JS҆ICY5% LĔ؞=_^IΓ .2dOb$J4ex#=wѶeX}1{-a)d@fI.*.e6RXW2"58'' i3*F("IE5LUJ1T{;S`:⭧b9Vី[3Yq]F,Iyg:[os' :? .'5L ř;(CTjx2('PSYQoi]Vۼ/i-v!`@ex:z\rGIY䯃P2_}h&c0K?e'h 4|R}^֮k5ewTִyuZB :c%Ek7bk~omMCM俫PX b''uIǺYq5zY]5#eLMwVp>P;.}@wMeHJ5 ?0]v=vM d/New}H_(*ct43YN;7"E?'nFuj-AzzEC8 gF^vdFA{ #ktE[;{kt(ts3r=!PfOm׹Hx ٜ>`9:7W<n̡e]:v~mQ #[7v- =dD} A, W endstream endobj 47 0 obj <> endobj 48 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 49 0 obj <>stream hެUn6}ẈT\DQ@SqAYyC]IA?(i@)R9~ T$e N4Tr]&xW3ɸ#$L;`q2)ơ=o\ Ґ MŰC1aY s떿`;lJ(Y!1$@& >cg"mʍɹ˲ mEMу“W7"ln`% &Yn"XMsXɄ5 8w9{?oЬDBLK R0"eX1V T"˼T*YUԠ'Nq4<Õ?+@Y sygZ|;tT-pd4Ȍ%P1n'8iMs1 reT0^:Vu]UiXv4"?3YCM~ik$ ل9Yn1M_eԨޟ ,s 4]Vg>KzB/Ğ5EM~$a &l쫢XZLy4Lƕc3gX*IqbW(5ΰ%AՎOеvU/gZ+MxG, ]]0k;4^7 Ӄ+\ ;b>1^ * jP\w= ZA-q\c롎zxi@ Ssb!iZwkH3=+/;7 タT#UX ]+GsLʽe&C[(6gߐSxSCYűSZ-~=*6 8;17!7rI&ً~%.>L.x^_6  endstream endobj 50 0 obj <> endobj 51 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 52 0 obj <>stream hޜV]s8}WG3BNfmML'm0`.p3! ;㌅չG]Ǡ/ 4VoP{sB(!gq/WB9e2y`<B!A3icę!58=e͓Dd q(J1HEdGI 3!p{|S͒e FP䭇hhe~n>E [;DJC@"P2$W,G$N,իůJ W{>#!fC&`tƔ{ǦaO `:CH扦c Olz:TK-N-Pe\CS=\~3êial endstream endobj 53 0 obj <> endobj 54 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 55 0 obj <>stream hތVn6}W#D4IQT4;I" ZG.RkN~ogDI{qk"E3C}$E@i*_p5U\`ik|qpd aԝL…B KO?G#0x1m9 ν\!O 2!Q6\ד{=1s<>:P@ ˸ '1$J4̏=<&":FaG'˫buU!OXq?6቉!F(鍛q$ ?;Wfw3 @c@5H'歀c#81Z)~Fk<sD „޺$Hr ci#= ڏ)T9 ty9L5L+Ϲ3LG5,W#E>xBRD S#l!)}.\ޔuueh'ez;nič 1D j7"&>EFh4:@ISSfe3*v89g Ibn0)RV_?0)k6 VDb/:+Akn $rYXPolv7`-\ Xɀ8#F%q,deU|B:*[UV X+(=؛6[jL;lvl]uPZaj;$R$vS8c\) )y{U@֩FU Z5UEɀ-:k][#8 +x1黅%F_U2e6 a(* lX A}x_tp[+}ju}.[dIjTg9+*2I_X L̖b|m^g FJG]OX}H_e%u/n˻A3OemxW\w|_ZmUmg>ΰ~ <@X}WE޵?R6WC4|(HYSݸD.i-|eCgبH$h.TF=|s f2o '_1I}J3ׂ&e}/Ԋx%K>`) endstream endobj 56 0 obj <> endobj 57 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 58 0 obj <>stream hތVn6}ẈX4IQ4Ru/y@rJuHmяH{;CR/@(g̜3ڏ4ӐhS!$Jy]W xZHx7NF q/l@Io(Ȅ"0`|s1eEo 7tRaAR"aE;pHuDZ4VB`U]SN%y\0z!(\uxJDַO˭n(ayhwXR\g\! 8?v娞]Cj#AZzQлPTӵWN2!#*ӵݞBTVS 0s@Hs,-Xf)R6iM7Q5og!Ԏh#TrP·MDM0B9}U]ЂUxN#?|76:֭i'P\(ajڌP_Վppqj@Sav(_Jy}D="E.z)8҃_G1Ulʛf:N%x;y`9z'l2D3PYMƪl缗Ȕ缗@+wbGxnx7pVMؚ XlLC/Qkz?wIi2oq<(Ęl`Ӕ[9BqHӭnw$~ˏj' BG^\%1կpI/TM2olĒbjO1!c<Ѱt{ݠbGfՋce mN֠B]ch_20_g.28]}jmPǛGfϏT<|7#tf ݛ3%䁺_Qډt9ayS 3?VĢTnwՉ3z㢝6$)e_q endstream endobj 59 0 obj <> endobj 60 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 61 0 obj <>stream hޜWnF}WG*5dzq84\g)*m I䁑) E9c?YH$ ss~ I%SXpOћGPGpB(!k 8>m pϋ &/2&-bQ}VbJLAnit_+Δ0X)=Z3"e[?"2"u{_E"$i1qU_ J0f3+VW'ܶ-,j0> DR~Ac@6hF 7\0jj]|I%bW˪7vADi2f$4 T6LȓVM#IQEF;jեĸƟXYhN]#Y a^-b aqix4&dĉϖ%P.i$556Sm`/$h$&):px^ gDVRQO 'r?5%T+Wg70Hjqw(#ȗU)eQ7XT+{J 0 :3!*N³1}rv-OGp.y6{Rq<8νFII4!¶(8 mʋ:j`.`U,T뼺*+"qky׊Y*v&>瓳ÖaKte};,?GKd<96T⬋5Vo|'D`Ȏ46IF4Y9~W[gj ;YRto%JD G3WmRTv!qn_$apj9켆q ̆'m2L7!$QG˰U.At8^6Ŭ()Me׶UA xLHc we}|^JdY^k5;x8yԫqvG;VH֋.yUݡjGG{Bͨ{c^FUm(vM~Uګ^wĠVa>w©+| 'UeueUb,|HnX /CX|-%q,w{)uڷ$zi/9id ֤M'vrDf{)+Œ{]nޔ~d//~-Nn6Et c?K#ڈ9wzf?~GKczZ/ѺƆAm~plBO endstream endobj 62 0 obj <> endobj 63 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 64 0 obj <>stream h޴XnF}W#UX9Ң<$y)b;CR"qPEyvsIN" kH$dtߔHLg<~q~62&c!M g~ "W t>shQ8"Ñ??/BbNqIcK6rD* Y{C#sGd>ŹP1;[|_c`FZmY@iE߇oߐ?d/LRfW֖0Ԛ̩U 8fǸ8 ^\# {"[##K;`*E YZt_`m.8G4Υ4Se".^~bxM?KF!^ʨZK:8]kxw^C5 HO@$ SJ1fl3oydE%W,/ْ\>Wu`";cDc7d0?@gFGePsQpxCyy]Si&-M,r6߱ -7(p1ȡ36䬆c[;uC8هYfUf]gvS_%Wy𞴤ɯ c[\S??J AX-`d8; \aj;q9ₒΑKr4iȜSn{Ba! ;NSr[ ȫ}"gdX(BA"YFc-Db DLЉl R;x½G< +),$wCܯM6`t@ƪS7$HyWmI &m)}W.W[ U&Pސ(m7cO\đ28"G9aL> endobj 66 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 67 0 obj <>stream hެWNG}%4}D% KMd`0k>=;,:@Lu]NWn>5.q:+)hIdɼy ]5&-!4xgwX[x.HHiO)t^*:_4V~egqzщCQUV`|Pʈ-I\JdО O 4||׌Zʸ3,"hiW3،_<޼n\GfK{}VD WpAp-{O3Jv4ݑN$ ~ɴP,i:Ϣ9Z C*xlM6)ac}٘E&>M>^&H.˻,V#u>/d_eStY/)ngtE ^B\SA##/}:q@%d,@w&3UAlx&WÌg(ET\,zj$Og4ݞ? Rx}|"YcE?+T b#+T kh-^IҢkR*APhAi՞)yPA+洆P;6JQ(%Nqzaq *yKEӥ 0oD*Qu [#4z3BIWnCK8@L:!U<7G88-3|tͼB+ hoB>FF4k X(AN@3 gZĽ/(TGa! ~˟`CGТ[xb"B~`>1MbG΃xWcWɇNdWh!m*FX׊c*| &S'9c z-"r~ 9N? x7|l (n3TЍTk .)2[|Vu%)i'cPZ86򸪭3\EnqNz)f@S©|`wlB.=V9GQ'S:>/lL"&pFp`MJ~∶kV_].WF*f8cdq:mP,QPx\aIDc2pRy쓏HOfbEnFIXzl6ƿ[{|B}^SVY*fjzMbe8@h6ƛlo.䴤I޵V:n%T'NMS]&p['2O5޿S'Y&<=I35lZiwV+;GeY>B(u]ApqB|Vps&L endstream endobj 68 0 obj <> endobj 69 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 70 0 obj <>stream hެYn}W0{#$$YI&{^!%Y@S[ljd 61Xk`^ ':>YMLS\hb-xd|˸Sw;${Նyix\aGtgYlf`v]`m:ͥ:fWVx"MZH&=ͱ|yҨGZaVI[mom%7/'+{t%NtxLZp80rX&ʷI'|Uq8aTM P~Rs"D qd}7o՛-rKVJ"&m[7{wZiM?N~ȑDlj@203P]>}V>mwMvz/&K#+;o+ed\m|bXo٫ؾ>N ?lm۲41$7scOnM-M2Ɩ}^o{v*/I!t7:EtKlϋ,"ɕ6:TDlN.A~[Ƥ@r  "x6 ]ʀ I ' Nb<@T*ѕi~[߳?ErHW*Ƽw .sHqJ#: EUbBDk7gX/]Ҕ#6p)YMa_߬&׸7U.*.{/' u`~ջ{T!u*,ׄ;TjF$9`>nY$! Z.^H1JPKUtн rJlSqYՌ7Yl:CYu6#"QuK[]{!IeE>5 /ީcg- ʚ_NQn-CBrbQ奠)#NS}*p3 R.w%C>k~5 B&&QiRJDv4=隔:gMR+I]j^s!"{w*B-+jҼТQsAjѩ0߷GИ' D?풋z\4TECrF''a/ |7S4s?; _O֥w"l')|COm€4Fjm*is`zJ31¯$8rE!04`h 5ӫ eU^ګoO^L-Ion4eP6hiƙ~ai2YD21hbv$MZ+Af %AP` e<"Xeu 1?W+| _‹K.'./vي78С_2& MU0 d3|$SGuƱ)¤LKZfL - ͐HԌ za(#bv oAh!fABty\*P3dQ&yL"d8T@)t C tIt:(t]>F|8Ҫt`E 7@buOrmYj3C᥍xXh⃀\3%/bC|6"b8D@yɜ+.:8 EZyzi^٣ZܴgR6<~6"=0uɫa!օ0/NL'bد> endobj 72 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 73 0 obj <>stream hޤXmO7"goRԒj8)HT@$!JZ)?}rpTxfẏƪsո{:1*QW ʺyD]6&҆ZgX;jy1n=ЪFHcQJV?/#:X~Th FY)>ru))ZL -,A-_|ifGGlـ袨ųbe sq2xތXuA: TAIn/JqQM=8Igl{S(kKu֨g(ˑZ i feƖc^wˆ0|su7&rQhJy :F StuM55Z5_N}I@6( q&`y*Nqu֞\/Yӣkb%~Ey[o>_]C'l5 )A`! >p ]P9 tr'VF[ :d,c_ #Hu4Exy$![bRfzNvB9)߇FHԉJb@xjlw>o"с TzPyArIkgӐ$ӫE laH5X;Yul0 SԈ+rzv''@9 LQa|& R֥ 4a DzX٢vR5[0°GlK OQJs(79VJ E3%= yVBѸQN %hM9:\kw.6 P&cb;cbL$;cɹigY Y]5*u=eq@&M*5#"l]rͧx+kј6x!I>),KNG&)]0ss8v1 lv 'A_'WgrNtvaTغ\ajQÓCbtCm}*kW<8oiH2AHciR@guk`kb9M=wVáՂx332"!U_?dt/ӇV NIB,FI*>Wh\.7H]Q5,n>ƪx2X55Άl yxB1s2ġ0adPc@ɍD"y"Ae>PqD>* Sada[ bNbT7f4q efEALMSb37|Qn/ktI-?qT6Q.' h`r21u8Rp3݂-7:?/h:kLQwڗZ{M[/l^ZϽv??~5oI0p̾CPftrbԙrz&"?;<D`~/. endstream endobj 74 0 obj <> endobj 75 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 76 0 obj <>stream h[ˎdqWԲp -6 .(.P0CY R?CNZ"4t=73"2S>'w/Orpk>ߔ7sp7`o9prLW0>p|,^ ?>}xpWTqgݥsRΝ/R5sx‹|~t_o'㟿~ӯ~Og ŗ{J륷1+Ct.nM; HvΆ=ߝ>2vnXwֻz7y>kOj+WBҕ#ٗ~ɸw=s'xNuv{!.v,I؝Dm~7j ܈!Cdڳw#-]L:"t$r$AzI䛎HȑrˑFu$ôGvtK{uG`;n9RR|)x~Nl\At7#I,]ږ8#pqo+F/)r"ؕCKx=RI}sǹ \OLn-PA$ {jNb7* WX*p:D|n(XA'gRÊ<sAB\_QHQfP;6>E? ˎO 64z^m٠B/sRQ#1 (p G qC{MGxlA6V$E[Y.x|2i?L1< ;.XEO i'`f3.8߲- ?vt[a;)LCy()-{unQⳛRqaR79:f(Qu ~NF/@&o=;Ph pq_(LH!" mEg@PyG#L04@%. l`he! MahYE R-VӄJ`bГq@)>$8&pVxQ ; @H! y܉(Nh;`F[7 ^L cS 1v&QĮm0mr:m'[۽tr||Lr & 7~g,rxy\cvz1y gg ϩ~@'(_ڡVDtNbH@P*P9q{eR"?//=̠2t j\jtpP@jЁ( id2|]q @N &lzBC;ؓd{EC)B*,6pP>ޡX'P'gv{: }1DP˜pkDP =%hr2Gh8Q.?~Qx:؛B|*b/ǷbaYSO맞O=PO+u6r TZ@&`f57oeI{*[BټB7elޕ!&m>JfҘPiZe\ݭi>{z럡5Pte;ֹ JvWHgve;JvWN0Џ R Nts] /56 LhBҔttLp|/51}Q>Uf /xU~XS4+ #/GS.A,4kTzΐ%oR긦*l -{˖ֿ-'˖R\7ljD )h]$mᅠ/U~!a!Z+AY rCѭ(`WjWhzT] _A۸\Ѿ3dyC+.o|Z(_|^`+W6>-X77~PO- F-]Eal1(¼KnȨY@\C%KZ(.nlZeo鲖.yEqƧŋ-_ h8Y7>-_[*BojtUJyc+̀n3TmT1jvT3ըg ꣘-YOndm#,9gȒhK/lBrek_7Q!yg|>||>o|[n[#C qyq )䍭XFF Y&0 Y,&R̖ndDaKβ`BJҥdR6A!񵍯|[LTH9Y7bBuk8RW|6Ջmc놭:VeѰdjlumꆪ97Tm]-в*U;ս =X-Y6*Ս٨лli?ms[egK6>[e,Q8>Y:7:Se66S %[T _5&bn=CDe!"=Da`tKQX MV&7ph$׷`tSZ H[.Un<+PFB%r~CqSQ|Z=?*%rTz:*3C > >j6e]J1$7|^1Dl|ACZ15ZH6Up\=Tp@xIch8e|L.hJM#G#E14WPIǕcj8^P{LjpPi>Pm=J큶(J쁖*:pxܥ>%P pc JcQpc :! ]끆Cc8$X%\=Tρj+ǐs\=>Da=K=Isdܢc:vڪCCAjzV{ ÔtPm<5ef3 pFA@asc@I;`/'*RPw7YOW{1GHCCHꎈ;U"V{sCϞ,`9Gbsc9@tc@{ }Gf!`wc;{ }WS᩾{<'XCC!x;D1nWm!)Q,Ҏv(Vm(?T1U!ҏ~#Cx;D1CSAwEG)|[A'EAx(< C!ƃx0 F.2T-e F)!<"V025ƃ% EƒQr:"tS}>"C {VqG[mu(Vbj:M@: ŪPlwUWe1io:[)zuwΓpT![rѲ GZizEVGZiwUّYtAǪ0Rt2RC!8ɔrRukݐr0jMMY<q6w7UZC!8o|ej,‹0/9G&ejh@wC%?i@ 5 eS uK74 e7bɆDp7dC"ph@C65 DplucS"[-ԀukЀ0M dDp5 E"[-ԀNV,R @oЀ4ƆX7fCh@x55 %úE"8h@'÷h@m|DE"[,Ԁ.&0, @oDp\Câ\,[]#â Ԁlh@&D`Ț Spj@ dDpMPX4 M b¢,ԀXԀL]Jvр6*E"8XjE"8[QuCl45 ly45 Fe#Հ04Z4 %4Z4 gKEǥ4Z4 [4 mih@FD-D`t>ot:Z4 Mu45 %[4 CR Pŗ{A5&WB>TiD޴jw  , niv‚Y԰st =U'$MO<,G,W?94{/9'8xJ~Uqu>=<;Lih1%uAaÍbެvns ˨e]ڔ8S&+3إ|d.pxM]5]W|=\nf,BCH_Smn /0V}`5 ĮW'kW9;Y8 /wo͗>cwR-Wa<7Bjzx8:CjݣYM/8a- oȅ_=r,NܙTlѿ=}~Zwa[\pL< ǿwϟ0o>cq<R{Qoi\Ȱ6=$*1u.9y}d|Fo`t;&Rs>7u ! YPN/-{yqp|wtBT']0#Ώ^g1O=S,e^ftmJEn0wu f؂\L{e_.ɧ8q\\ P^q~]'PEHW$an #x|1"o'Һu)+ز^#*zFwgFzyOyB9X,ҤE8!ȅ'O/Ӊb=, # `rط(x5iఖC7 r8o<@F:8$0gtT3+=RTu`Kg֧+zUp HOAP%_͹|87aB2e.%沧RU -ڥ|߼I8HE"! endstream endobj 77 0 obj <> endobj 78 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 79 0 obj <>stream htTn0}+" 5}hzڦ-R(7K%mU34X=sΙ#n%hb%)NO4Pqqn|^CT?ZY3JH0L:0"{=ǨHj`R\@ȂUILȶ( &҂0 5zGǑĨ LAW\8I}C-5dO D%QFԳ=|] v]do$bHB\#7D:Wz~IEYa}ʿ=0 pvAa'x^<6SJa)E=sF0C1{bD&s\pbX3QwWMS<^PYZ$0aNXSX^3j8x?p>\)P_X8U&nvLC7:OL~~mQn>]^vV p:̠`3>x=bN.cϜ{Ta_֗Ny٢6qF)SpN0&{j_ʠ]1싼ʻ_OCa9va};Ѹb-Sb,bBnn|(fcO1^ 1۞pMC mjVO F>.Nj,/r[WQ 0<$2ϲ?Mh.$z)bX[;fme,w1;P#/X!F63Su2\ r~TptA?}:&( `}f: endstream endobj 80 0 obj <> endobj 81 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 82 0 obj <>stream hބUn6}W#T\DI@SqA㢵?؁!K\[VH6A?{;$%%6],I-y̙3ԧC AhX1H=Y i&(v%84Pd&WP➷@ o,$\Y0X"}1Yc_g7ys%%R ֒8@i*49<>$xyǀP X1i 4N?xh{􊜽~y0CJ~{.ih A> O?>Գ4\cx0 8pA+ |(RŊ+hlTO("F2qQ2TӺ d"h2e6aq,'KFV MS1qX |8rBP` M1xBj [n8Riff‰~6el mk[dgkiLҀymp4lh$ڻ4.ͼKG(n:p+ͺ5MuHm|x8W4+o {aD9 k/oŮ1ݽ6]?G/ b,f;g˓'Dag&urr!M|/ KlU CKBPuvnkGķ_#_CVV]5Ѷy489ӓ#9-1pM*,:h+kLx7>[|H}G#P2s]#ĩtd[tWJ~.M}oPw}\8qMrmciaqW ? endstream endobj 83 0 obj <> endobj 84 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 85 0 obj <>stream h|TێH}+걉Do4EeH816V ib2C\"M&;$%Mb Ԓ0I@i*4L - 3AczzX~LaX=a }a mh,WӃi _Ҙ-}k McA@cP2'œElQ];2hX/?"?@8|` <6S)@By5lUX-JE@'CNUhʼnAitd?8}1-1PO=M9'1Y$HQoo`VE ]4"HIY>V1nhۦ^?o&o} Tv?; .+7柉' 5\6=de9teAZ_ b:^4 endstream endobj 86 0 obj <> endobj 87 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 88 0 obj <>stream hޔV]s:}W#3BS'I3M{C ئC 8߻BŽ[ܐqBbu:?8~@(|I!ֹ*W#N8x#nU@(m1 ֭#9/$Lj0Xa~q:O,}y(fn8p" #D(铫CrAԉ/cCb>egO8<pw)d?G1,!K[qF 'B|I'~.C?QYP4 HŴ3ci:v: bMPp@f2!A`X\"R4ܗPmˮ+*RGpfӀHt=##cngOǃ:rR@2Gf:C1a7ѯS1c`6އn :CReY%MgoᎵX@TY)EZug3hw;ㄹu+j%)WMcHsVgat]|>wMTz3ֶ#.&:%R'4VC>lǾ_k@k5h`[z/3>j-B§ZKa1XK ԗͺΊw3.6IUշ}$n=a-:5{wyŞ&V;Եj&7Y+xnqU8 K2S?stMASC>G͸Q6z,;+,:̥TW7/[rL%n$Ɔq> VEUtWպ-D#)>`j`cʽC0'Qijy)&wO1Kny6nux'#w2cV?]aU7yZ6E\` endstream endobj 89 0 obj <> endobj 90 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 91 0 obj <>stream hޤTnF}W#/Yhčq8hJvRB6>{3]R]Μ33g_# DYPR98ɡ[Gj3Fh% <.Ţ-=0U.哵祀>g'4!5C~hX d16C,EYj (1)XA*&LLZ(9=>>DbfAYcxyr!Br%gerC!(L<0 qqܭ&Q,ɇU璖eA2P2=LOOX>",~^aA=gW+䱙Ze$hj-)!b2záLgy)'*0hWsl^q(21#V8n"N8Nj(\Nӌ*|/@R٬2A..v n)sq"ƂҰ QPmW nK0gHNQUn˒8Gc^|9C,56YA\{0Q3 cfy]}~RuU{wz׭.F:I'Qk?G1;o1$#S1Rbc}VcOϾ6Uv+|~x+VєRL#<$5b :w-qV5XǙE$^5۪{ᶻyQ ׋qfAo2! endstream endobj 92 0 obj <> endobj 93 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 94 0 obj <>stream hެVn6}ẈT\^EnAH1 Y׳}+NieЗZO5TFf'z_ ooIr]d-4T"8TZ/312 #( OG2LP4nAk1gDcoiQB1"y]Bs03Q{DŽܩ\P I„9Úuݙ3ŒZ&' ( ,ŵ@0a.FMYӎuvn6amfEV4Qy YK2G =A xz$F'g5۶>K`n.{(0nn~,7:ւ7 H͌QIXbFTpkqח0vp]]YC0qj^8 1#frJۦjweT-z;a̫!\:1ؼ$ؒu${$t Kh|1tx2nf yysea*"zs(+?H`M>? @ 0E\Y\zXkysSyȄiv9ör¥VVpJe8ؚ3{Ivx fB蟝g^|g)zLj8Tfe'ѝS5qq52l6yK(*Soc?M!]4(g;ڡL?(` CS endstream endobj 95 0 obj <> endobj 96 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 97 0 obj <>stream hޤT]@}WG ]cb\?D\cflw j; U_ M{9sKAR BC$Sl$+u PqHp+P@(9k]1?%$Lz0ĸE~:ϨH¤b)y@<)uQHl(nQ$ ' J TԄk(EO2BQb{qbr)V'2!{"(T&*ڷ7/v$qx&N!!D(\u&="H\=IEYj='(\/04Kq(Rl gDK "&"w)#ټ"r.{~E}=5Jւ40ti, saψ5m(ș3ŒZF= >d)rE6S 8(k-&S6YoV_6M'{c0.99u_زݺfծpW%9"!xm*0@<钁=8@--O yIbػt;mWdu}oW OIG5LeSnQ:u~CHjlw9DfET<p&#GۑN@6@T.< ױ`Pƚ~PoBx+cmL8C? s,-ۦL3ܯXi p~W`|zho^?!#`L٠eC.S|-ï\Y:[Ui6-}tͶ==SS~3/1r endstream endobj 98 0 obj <> endobj 99 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 100 0 obj <>stream hޔTnF}W#s yZ6  " g۳ˋEQHv93sO"YRR9eS_G*ѻE8%㊬bo`qr)C;?^ "- _4eB{0`܁=hXѬb 6EPAP,wN 'c&I[&-*'ILdTTH/Q,7Ro$.)>Br .(si*ƍOS훟藇h\\KZlF)sP \ӞbzIEnj3FIҙ7tn'ģZe$Um8jJ1U;A)#vKT&Y*_0X-q3 pʲ:cь9G Xs&9s ,U4`2p S@X H914L喻u\~·=uxmaCW|f5Xab8Y?"x$uNzUj4P?o-(cٗMա$+ zK"T/ŭnrIj2t|nCGt怦_s "`S[oМLY}_hi cL`S)L<&eP1{b9h*|mBk/2w? GK endstream endobj 101 0 obj <> endobj 102 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 103 0 obj <>stream hޔTj@}߯G)޵҇!<$!,;KY$RE;9s̬51;Ҏ2kJP[34 B2!/fQBJY 1_$t(jC4 +O -/rXL!ħ \ԼEuK[dWf''LTVH/Xf̔>-oe Cu{ ҄ ip!"|uN5I^PK9]NP鋻Cqmgބ_Hu~VI+dlq[RDR ]\ ZS$1!4*~ALIImi+a:W<|]!v6ւ1˙{O! twDQ+֡jlPs\pX CZ`| tF$ﭢW|hh[]vǏ \BK0=c>Fi6`"4Ϧc%ݺ[2ij./S|/+! Px8\~(742 n;ZZZnOnze= 2 @+Båָ\/7)vPJmGK3gW|U׫&&G=l|/0q)p([$Tt޼y%gA߂135Н]S\|jT}[-߄h1_ a endstream endobj 104 0 obj <> endobj 105 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 106 0 obj <>stream hޔVn6}WKnP"ERRhFNQR?؁!ke[.IE~M!%/` KsfΜ!P#_"@Wx}R{i"y|`{A&R>9q%ӡH(C+#F͓()?A*\^aP"I MȅNPKi= qyz1y Ձ x~XiGc+H=\hZF71|Wtw"1+7ޖK|+BKn9.꩒:-3ApgX ~<`jd!#jU<+/$qLt| 'txÈ9p„{=\NWh ]0Y+Pq[8 &&mV&e5Oom3>_PH2]hqe3s,j,\oG;5iL8PTee}ɺ>g])>\K8$<a=scc¹o%ô/f(й _FXz5+ϣi 4f-i<H}퐁ʆnu5k5 -\ Ťx²S|G3J=UL)"PSTXɫۅ[X(ɥ<5%K?0-C|WOϙƚ/PW$]O_9hRMp\)#@1P#Nb:*!tTȖj/8_켗R6ʭv{ ,8 |U-`qƖm-حLTEs=AOkl]q_1i @:,kTY^@v#l%hɎT \O'Wt|EyOJv{ Ɔ_iSԜ ԾT<3<ߥal81w=BOlZJQ޵-=*Gl! g,w!/64-Zbm.KJP7/_Uipo7=\OfCƽ\ϫBeZz)N,|"m}l7VklyaG)f1n*nF4̠7Y5@m{<CEA쩾I`0g9bWabka^WNX)|jk{S7;rX=7E_S 0Ԯi endstream endobj 107 0 obj <> endobj 108 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 109 0 obj <>stream hޤTn0}Wcw'!! UnSmv!IIJEH(x93s",( Ցo#|KX!!98eoqr) <=#-FipBblGFW3ģ"Zƀbbyi80y2ihgy?D2ᠨ0bz!9ϒLې=s2i(G Rxy^~MXɻYt%-ˬeēr&'E<{_k;c1lPUlLp S?.Ht6wry fhyova8(21xqq9!LUcCp@adFh2g<~s`X1[\N gWqqˡr.Z4fUi€KH(,u)"0@o@$1v,ЭxK Iܲ6ѣ2x{Ǚ7 v/Fo>I*]f?ۺCrWv_G \XZ\V=3VoIj g"_yJ8o~q ՝\$xzEثuPjVCV]ĭ~JB⛤bA~kDӕtzQセUuoUWaOuQ2ph Vg Pwm{ 3;xdȀw*b]Y1[TclY)n8?g4L LDW9 endstream endobj 110 0 obj <> endobj 111 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 112 0 obj <>stream hެVn6?bM XdikڤI82ݨDuc{]";Ps=\"e4  PHo+XF6 ЌC~'P4@(Ʀ5?O|i"``1d,%Oyt7sL YH@AiA2p y5Gۏbf@^1R_1~FAUVB:mTmA;21FO&VH mp\+}Ϩe6ngv׮Xճ˄piA2F 2 =7 قQJR}/˵j5]L?:Tͱ֡vO_&1,$j[eLo6 }\`=Uqq$FypzeIF|E$%"v,j7,ge MZ6p!1L!n*:E]-bHsXw鲩c^&oTgvz1vZWxS >sw)1 eƸ|ʞɥ[4Xo{Dvv5+#ʶkC3؆OP 6y$O 0v:S(ѶwEmXyơ XRϓY ?Op="fK1H-d> endobj 114 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 115 0 obj <>stream h|UnF}W(W{. R(I ,E[LII!Fh3\øp3gfρ YpJ@[zi`n`t,.N]g~F~cmIC`sb:s,`@iVs)˕C$*ócB" Ot <Ua"0X cwK~BVÏ̥,O'd gr.CĿd^fd,djf?#HpQW3xh1ŊͰ [$ GH'"б&9@;ݴ fhE;k>ǓFq1ָ/g\NEa}թ5aBFrtLV$S!ٻߖd5Sp4 r'(Kb~(S*֘sFi.`lUjySeݳ,v>l3sY E) =wҾ Tؔş&)Kd?_*nRh:rb]'I߄0@p5;x,e%$(a$*q|R%9%պlW󾜩O stkxG,0F͡n}(zGPHa^ K4&È[6 \Fk=EOE -)O٣ -+sύ<&?T.5W+6{4Q{Lps+`[)"8FcUאRy]?&{mT[K=W0_',B!Tq84Ԕߋ2Kv"*6#Pm!_+ڥf^-OF endstream endobj 116 0 obj <> endobj 117 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 118 0 obj <>stream hޤTn0 }WjE7K6vִP :)QZwi$]`}(lX$0(!H N$)4&n _@j 9n B84y7bp`1lĄd:/=a \C>GRL,%K "\A^{l1 y&4[=S$MR Qn4nvE8<Ms_FDi+* 1I%B! K:H |{c%2Gw 0 gpqIa+MI1fZUٶw 'pqʕ%ë5IuquF$Yhv3q҉W endstream endobj 119 0 obj <> endobj 120 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 121 0 obj <>stream hdTێ6}Ẉ4豈,q +؇$ZYQjY%#vHJ@ɡ8g{¡D[ъ u"Jܿ}L{|X(c2◱p >Q˕CGW40/dQ G$%80FR@Xx|̸┤b!B0+raug:Lcڧ\LR֧s69:cP ABqs.)_TW_Ԍ6H-+8glcC$b*,-jRՈTtm*SxH+cO~~ qeQl`2R`# XcK"1&*bjBS 8a9f(f@Q1B:Q{/5?yVzB?B@=BU9{nĦir=P987L ʧ_y-^/#T Uvǡm f{EѸr|"=)LQ~н2gQЗ0 Ubȑ,WdmZdS_j˶DVY#Yϑ٫k};x0tp@A.R)S11skd{B󡻐r\ט8kC!y?SΈWN Ϡ<4C? J9se6j> endobj 123 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 124 0 obj <>stream hޤVMo8WQ^@ DR"I.MUȲ, ?w$v6qp2g{ Jb@(bIAs "*&Pqٮ/N[y Rp~09y?ehb!A3ia9ַVIG1.SIJ H @!V8I@*u[$BdLCcxzN˰ Ima4aAЛ#|YALXOm-Q"b$$H[]ꡞO)KL?!wp|0 ɔPCrVX-``HO@ČH3̫@hN8ɐ>QGE|SgA 裔s3qix8t0d̓Ap@~fFHX#]K$Qj\l7]Uօ0AٔU-YKƈ̓m8F] Q\v>l g!tG76˔k&1,=DvbDXz[x:([(765:zx[xocX;,.[O"AT7(>}K$nE y3+fkMdD$٦ʺgcB҉6dgjأ&|^42 4o꺩N Pzh%G =EWWxA,,mv7$RP|P2m{hHڧO{U8\QN{wgbKN*KvAYGmv[V=<;rkjɞ1(+AH@I0/+mi%sGQ}Wݖ}W6x31"7*EWNu= ϳ endstream endobj 125 0 obj <> endobj 126 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 127 0 obj <>stream hެWn#}W0i}zcBF,^a9Z-/>&V~T)ʠ+(%Ui>-6oJQ*Ӈ$Pz=#<TE'BK߀eXC"`iۤmyb_mq,E"Xx?nE| I'Ur#}#M$@Lxi-YNbEkVj% J@ci8%lWSiQtdp`m%B3aOԕ_W'O׃9F ,I)S{"$< dvO4k6vE|]5#[J!߲O]q!Up= Hǔ_kD$l]XؾAi!u_qĭ,pu˶z?nZ dn L$IǤFcnsl} T 2J ſ|*⮥ -UoWO,žKy˻'0̐ߠJT_Ϊ.=2+,}Og'*Ⴀ]PeLی4\XFX??&y¼)e͜Iﮋ5d9Cq(xa^ `󩽞VLf:^?ii+} ϘDpMlM+A%au hʪ΢酌#lps6*A'͆7sq8plBV6J}o_ Qƺ>Gݲ*E7J ˕~v{؇Jl9 R͞]~nwV]sjf6"9#PE UO.~Rl"MPvf=ۛ[uE!}#r` С1㾄B֚#A裎q->5:vQ<qXfktp˃Xycllρo ^8}8԰ehYdY;{$% J3\W:_za)F)k6L1+b,h/G8@qA 0bo6IpUAFE#uK,Ke%Kk ͉2m[K#dk&+:DF,X]}HB=s]>3:*f9K fPBLGXy ȝy<ǝE"5!6y+S ,Tޞ,G4ȃGFo˛]]ĩТ|~JahA u3pRNcC VgJhs5'P^q( z&@&Y]QUOQv}=HA@] X 7) XY5xAehrz^O ]o\qApV|_M,Jm V(zwsQک*ҬaTJ?㫌`5<,m̶` mE92UNۃH:ͶŇcFS0DuVgNh]ͬ? >: endstream endobj 128 0 obj <> endobj 129 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 130 0 obj <>stream hޤWnG}$E H(8Fa=Kbv!ͩ%ؙSSŧJ9wL;X#WmJe;p9Xgxíc-Bԃ 2O$VF10/ )OH,Z=+(L#uK#3+ǦHHdҳ OoZ(sG``=x(æ*|&,}F>=_~m>'y` Jq7nA0dh<2:vrx x/G bg;2xdYftFI6[^fп/*ûz$_'"NY 毜<Vt7|tE^CuVmp'jTL0F%9"!E$)MyB۫v6ݲϯv,eI\yV7%c5[M;_uzGeB\ ^K(M egfUCM+@IeUPɷ}yIW]s>_v8ZEvt6r+ȵD7"/JE6!|?[u<0)BX!1Dn튝Q׻7R̄d) *f`&ud] %mb"щI]XH,dX8%T]mn>kQ} "A95*B4,ʢD7)aN< cEDģ蠸M87 oˍˀO`21NzLD(˜7i <4D342ӘO%$T=6,t@r>}Tu6V\[.F_nDZt|RQ kIin7u2aU9֨fX_ `ts!gDZ)Iy;)B m]`Xu9[_J`LXCd[(ÚXSkX0Jћ1 C$1>P`i!&ސNpV .Src6wӘUFH}a< J菳5bz4ɩb/N!I.֠E(Ge{+ wZUwiL ИFKD#'I$U&0<)T6/ 461A1UX1W433e)Qk{'V|nM N42ruprvZ'L26f9qqr놝a}OX7ޏWS[j(KAH쁵H }kk, e}ddByL.S%7 ;> 1O> endobj 132 0 obj <> endobj 133 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 134 0 obj <>stream hޜXێF}W#'znxa8X;Jmy9TF$HM =RHauӧtWH6gӎRBe+*0[+.4sRi+|8lBJ=zny6Ma? !a1~ubɊ~M`dg:ͥkfWMy",4>y(Ju̥_L> }[oim6zqmy?컏Bs_?N-]q*6@nPn7ߓhq$c㫗0[x)`/'xǢ1 ekaj m#%f8ҞӠ)<^RǺ2Mz<1Zp`LŽgIfaO"YB|yHxooؔ[fW5{ߒl{\ a*`t׀G\ %A٨{uv|{mZ7z=}X@{w?]u~~2d6_ͷm8ȺPKR7햍7*颃.:DŁV%==e;(ǵ5 jOoOY5@xq\֒5ɬ#9Ցtey&[$zhW˛v26{Wup]TGK10Пϙ.]y o[Ϸ"մ`^Yh\sܖg:rm0 uvb֭t$ EW/4r٭ضcŢ1l= #<8UgXE|>!b U^K RD=./o9k&''} .`@Zdkb!wW~K5_:]a B씧;}H>{I"ZEZ:);%T@FSXԎoQ~"Psy3FjU=MIԻ2).ܰ}NkeZN?% 9_0ʭ{)X_7ʙ$u= 8< jR>S`DVzA#] |0]ߩ0DP(ѣ.WO?US)PlJfPk.AJ2dF;̥`iCm$ nPxU*hE$&IUaj }"U O5Qb3Z9ݲtu(TH >zhh5:ީ,ǫC3cPtTtDvlS#}~,+ `w]ɠ ;LU`*IòAkU%>84^`lw/B!6M;݉ܠ6{풧#"-75$%ݰ8dަ# Ú~k$Ɓb3E@wk[] 7JN{+A ![kgbKaSM/U?F Fik{T䚣<"L߉k%Yk^r7#4Zfb`. "%+z ;B\Gh/%M;F |5ul:%6ǩSK0Õ:E[Ⱥ@&f_x{Cbh0J[$D:Gt Y> endobj 136 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 137 0 obj <>stream hޤXnG}uiDHy%@^^ATvvƻ&@LOoթSẓu;+nN;oتnT\hb=$?[BG&2Kvjü43ا?$G-/ȳӼ; gpJjC046FfW/{"!#=<Pu3u̡"×* AMXR#W??-o>hf˻'Ɩr<8z q!Ïգi$ѱ?=SIW;7xͲ1 e[\KXIρ@ˢVrE⾽X1h%HO'"v.Z Zx+ : ^tٝZ*[zQM22utBr)<{Njur>)r^&qlэy!AFUg. ho<=xNήn.OE8Y7Kf^/OUFvV4wL߳7KvnY'(lxx)2-sFQ6k tu^0(*~O:{ѿ쮦~Gjo4qV;h2b@BmiLf矖+ S((KJ,*Y,;-,ţ '4Gг F l! 3Rz5r?r]}vڪ)[e'"y]|l"!qH_b<{Q@ѥBE;ӎBqzKMrkr)3uP:lS nbyv*B1ظm`$Aq-A; mCYj*5+bJtӚ1]\{1R4B0'eL۲ޜ:a MNE=vA):KR#g}dSAܐ\-[ȜMa;15ؽkh2B|_J`R'TL-L MFG__VֺQ~] Dڛ m7Ri20wZ}'oK`mz(;Y92 JI h4۔m%&`֍ugkdsroA#W@=e7RqBIe7/]QY}·]gBHh̪=:"}0>3EUD!16ED&U[.$sŴB.)|9e>,jxju߾\0 ?efY?.j endstream endobj 138 0 obj <> endobj 139 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 140 0 obj <>stream hޤX[o[~?b<Ǥf}!<<{*~1^zɠMw0[x2ZTo V-w5S&8sֿXv.v.>+ 4uζz*笚Fj䶫4r0H]v$& 'FyrtG\:YfH`_,ߨײ.nb_]+"!fPVՐ!iw2ö01$SB0}>MqU ҥBTH7)۝A6Jvoղ,n?k8[Ll(95yR6wگ# ݽ?Wbw8?#٤<ɇH|z_3ɏW?\mLj5Cݢ8IT|B4Y,bO^wRwǾ 2̳LMo&{uݭLmXەݯ fXQqus'uPϿ tOjqLmWaiuުf<<{Ü.e{ <mǞVLt"TSõF*kLo(sµM a bs񣻁e* %^GOj泇1W-bc,FœH|N@xj@fcFgkK=PeGLB> endobj 142 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 143 0 obj <>stream hެXn7}߯[K~ <-M ΃Hvl'|ϐ\jWZ^8Ù3Ñ4Xccڱbfݼ}N ͜T=IcKƅQ2/$toa^2K?#G *G5ٛ fK|:ͥǕcu'9iLz6C}vLԞ2{J0K'(66F7TO_|[\|[M5eγS0s!ǿ2HZ!c%v~fRW> ~a!B%!j|9 8:x&VCJ>6^ܖxEME8LB6EKn) \YY7pi@uRg^4 UY?I8WJ>I IcB:"|7GL .xdI$H1]M2EɵC(>n/{BAkWṔ ¶&GIb1U8BU1CqJHB* c7K ,(6Hk;w۳i`%RzMA\Zy-D_.tqAuXL*TL {nxtkjӟb#iZ9,Ͽ^-7+qZ!ݱԊD\QnwT*IN[X18ya]w44q)걽MTyT p}6>}:sYw7x׆6 5CKyN˻Rmpp Vb6rbc2m܉+QlO3"I- d6VC1O 6͏ 6?:eWW9C endstream endobj 144 0 obj <> endobj 145 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 146 0 obj <>stream hެWn7}߯[K{PN hҋACb;ع ]ʒ -ɝgr?5Z/JRzޘj^? VIe$ZY5^x1R)z^`7x)޾S}'QG2(#1[:HXlMNfqZ͗ $C?7#xz,c$ X 2FQmt:]6%:,tVg _ N]-16aVB"]&yR+nk+Areyy.N&ܞ:d.B5FGQkgn=@Ӕ$J%֮I8i1ǃkI ku?T"$0EȺwj$ Q+ 0>|^^k 069̴.8~ &#<&B1Z:&!2_߬3̭}ʪR^Е2g.[#d^u_or~8 ٛ AZ&8_8>Sl~#C}db֫/ ͏}7(]4DowsT8Lэκ|^,bXo w h\ ͤ<0U9'.J2yP&UY&J~5ku^H,I} w=Mݾwj*,W <6gL4˓1+@D[Uu;]Zmz=Vr݀ipL)aċJ;bNl猱 o$]#cI~o_|7q2_ 4jbSswH4>_x33v~ot7DE|y ,X:pIO u[Buq hMøl:W#?O;$A@eGdR]:Ԍh3Hg/)kW '&Qq`|j87GP_hZm7@piZQz4:< OZW7rO϶@o8llP,j⭓aUg@2łv&% Av 8ٌ׺ &G;[ͥ-5 2nBN?У8[ۗ+=1: :<,i궽A"=ldo-sC1co6|9ob" endstream endobj 147 0 obj <> endobj 148 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 149 0 obj <>stream hޜW[oF~篘GsLCAbݮ4FEb%843CJF6Drx~A )Q%MedQXV8MF*+6b{/.6AL6B*e1G4?_kqS9#v$ 2ODGL(Vt$u"~Uh )a(ვڧ$\&Ѣ3O)2]죯\wiO%XC>:1{6前n\مq|x?2AP r.#ůFԫHzSWo`ޯ0J+q3EdL単,hmC80y^Ⱥ{Awq *dﭒH` 1",LK_Z_6GuYCqu"Mn& [}CZ9Z-nkqzEAtr5w"4AQR2 f6gt lvl/Hǵ&i6q0qc*/S)oWP%U\=XqNAĜTga^jZ0 VHC{>)qz4/3 0X6 S3?t> endobj 151 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 152 0 obj <>stream hޔVrG}߯GD_$8.8$RPJH YFTȿJlCJ.lOwoQtN 7&giBJkxG[O- )M๝AXmc5KAYV ˱E'RE'W9L,.LpJ"CF(Y/ɪsO3h2ɧf=R|i`=(EK\՗'Ϗq04|=yli/4Bd~gܩhɤz<>*y½Gw)IOkIoJ?Pq,iG+Xi% qd"-f~٘E&:x%YO/Nem@-oκÝnMqn[ YEKup P*ܰ&[@L2v9'>=x: TC/IEY2 tߊ"dvD1VMRur??G_^S:nts>锝˾[[s) p3/p9mfHܥ[Sdw"iQRFիA~-E$P*{aA0Pi\W: dR *Z1D%Q 9-M kAҐ xZ(䑬 q%!p^@U(C~jȲ#D'_ %d3|-okUu/ +U{sbewK= R!֠ -3=*fqTD8xzzeiE E B~\jUcd߫[wTstz|S+c21 urw$湔jj< !:}*^p1BM*8h&/ot>HdކdԤʝެefdu0EDQ{>Ǵp~1pVȌQBek!src$9/.Hll~q7S^$u$"RfjNhx5xy9E9Cjstt=O%`/ aP|IA~qQ'"yݶd:yڑM~G6֪|Pd;%L+dzk endstream endobj 153 0 obj <> endobj 154 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 155 0 obj <>stream h[KoﯘmHq8|riِ-1SݳC;~ ⊜X]^ qDnx|;W~1Yw iķ/vB>K?x2$/s04tG˫+W?((!1>(yzFQp.7uٓ^}xz͋o᯿yW/Wc,a#9wrvtg;[q/w/_ V&$Å_tO8'׶XSy/0Bqlֵ}מ{x?{"e/m$og ~6VUg jp* cVјSG|ޟogÏOt*{^.k٧>uӯlW^M.>S%Fqu? 71P!lwS;lǎQ߷ެ 77_Fju~ t;0.-˨7}{,yF=0R^~ M}}1p)y8i(&]5ix}]3U11G+_FSv-rҘ[Ƒ[ѷ*QnRҥw)%XHb\_TTFB?EM\mUkd5 jolU46N}꾸nZ?T~Bޑ[U7kT|o*TbM8>?deOQdi}_n֏`SE d{<`y-<b&QО$vY^lFc:PbǤ jO[~)>zڮTB_O#-JgOcy+}WF1F/k[ce9U#k-=IچlVl8mBKp"˲$%DGŒhW:F{{__`G%]dԑbEd*@qR èvDV#dD5?}S\zd^rsH-r1;ZL{\Sc#gQjs$O?H7ffa"KBh[F2Es?j6;i"ZlITCVRIh1U ZA7: ,l]U,=q!Pm_gQţG=6Ox7;:! wpIO6BGvR4b^"cX¨ئ61-S~`*Q`a&-sw PƖ${ix%sY0Y"*P%_Ze'ڀ|=՟96aebEb=,f$HRAa¾Ўqk!d墣YDivhMAoz8\TB9h -!KViԇBq9LCc;F&#|c;.S5643PN&zylt 'K&/c,$Z&$KH}fa{ĉ٢Fk&] *j Ežj)7Xo[2|$e]lөY`t16-b/اǎ2zWufIMT)0Zz!: h Y;^0)FoQbO"y`4fJ`ӗ>JLS42OE9V/iW|)IFE#8~/X=W! Ɯ-DJԄ.`|U9Xm# ;;OaEvQs"5z;@:atiLksr+QsN3'J]eQIݺfPD͢ &9E8,q%5.aоnޅ6V`ZԼٱhd&o(/h. R*8 . G- b׹%<`3mL 9~x$ YFZ/`HT6_!R<#c%,[hB$+<.cHaVm UÈ-VazԪ_#"1& DsMWqudꖠS}7 :*;ӭ 1V L!ʖ0$ IR0qd+V'6i syv9=@tp+u+L$lǻ競{@5]hVHA+sqڥj%$F:k(90"YlgKD$2l&i{}r-@YȻ,39I(zlB'> PJAe #6=Dh$$4&vPQٺnB, %&D:ĔµƌEoVi~Nx溊:HCh|f%**1wj zhbZMV%i࠸v~C IћfyHiEquC:k +s= =S51Z);&RsP˯T* boޔw€M{'6! P)jGjy8bC&اNq&GEj @ԩ&'(5s<PT1#Y/.F?ǀׁH 8]P@, Q8v̙Z160^>"B!Nt#AU#3X2 Q?EXYxG͕g"A.-mƀcͳΠ:uH "tx obI@KwXtSU=nW/: ݃vDRШIGuA0vNڗLfف]Փ-WAYYz\Шs2@vt*}"ux̸~۫ե2`߳ endstream endobj 156 0 obj <> endobj 157 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 158 0 obj <>stream hެWn7}W*j(AZȃGcHJ }ϐR-`ws9s!mĴl;Mh.FHFzi6J[ lŻh|dh#ƜjQzYۛzqKg_G-MRh4`;0<̗g12H+Dw64~L8=Kn"}lwB#bVZgEˎgdDmfxe#G(BRa15G/U.UXDx͊ qā Re*@X^WAl${̢UQr'E7PZdbR X EF8cJeKcI>=L@pը&I)PؓH袨(b˦BbjI¦ m/t>bt'r'2rKʧ#=5R)u evNF+lX'8j)ժ3Q b q cD΢:G ɕԢhA*%AS\gtD-?dN=ek:N꼒W[? wH&WfZX@}pi zBm}h7D ^7mƌ[l1`r>7[ cvFi`o2Lc1Onq i;a[ j({+ؙAUc4w  j\F5,ZA5įO UN7\e&83-tݿ=Kb~:r"vBEU"}WPHˁp\Ro&E"hn{EIuyQ%PE?ĸL b^_r ;.Y8B_u. Z@h7[:7.ϛ +֙ح8ջg/ /vAY[*5C\SfЁZAw3<9*׮=;~~pc:>Y;`so^ߏ6,ɰNVaNe@09t<PMl?J]-zy=\q(*i[_.A64 Վ_5w@@|ib]󛱌hZ=wLX͕?:z(7ny6-&_@ޔ;jJ=m_;wބ]{0;c@g̵ˇTr4-^=ji endstream endobj 159 0 obj <> endobj 160 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 161 0 obj <>stream h޴Xn#}W0{AVGY,9iS}ΩK6 Ե׉UjsR>63jxY'`sxS-ƤZ<(m;}XV0 N_Ae \8BNŎMRG,CW Qq5s= 'bR'*K8.t4k (HdTF:"qL*@c1!sfC伅#:"ܰ0g.v* /vK=ҐLDҨ:APCNS.E#M>4GyCV?$Ho*' Nm4,Be8S[TEg313B$D !(2\4C!H3J݋h$4t}wM۠K4mNj#Y|k*,ɶc'HG}?JI8"*@3 ) ρ=yՌ*4QH0.-W9!7Pf[AGes6Lo֕){\o7/91Oժ5(9f*{fʒC ,R:0Z)< ;YSsh[PPJ"rX:b͑By9A, G}P#xXK_{^2y{-z'(<\FuQcދo-Kw[#8~F:؂!@j̳Va&@X"ieΠhMQ9- fA[DwhDYu@&׶VܹD.H% 3}7Aj2xحDVXyqbx_Too Ĵ+$.q錦HrDz_ !;: A(f-m3q]^ [AKTo`9m> [^JעJVzĶ:Lѭݮh@V>΢ӝeh5%[L0%#+2@^Fv!k6Ɉ6r#Q}-Dv#Ef[m|)$A !`;ifUp϶BЫVoOx?)D$UmZiJ7*ODBs*ecM!K?EM@^FW5ISbdd2E [S!1*nT9i-k*7qn65> HM)o\SD"!o Hu {zt#PdUqY?^nnj&xxyS _IBR@9X盁x>vR,^ |SW ?\UrVTG%bSf.1^/ m(dz9:܋^\W'8O'E_\]V7`uW;VXP}?ԶrAU3˳xú/(dxC',ް7Ue,pEEwة㇋v?aRe> 'z\(VJ!95uZ~{ g<;wkԝ7z[{ xﲶ)s/\|Jӆ]ݹ?R++ ;񏋶b1#-Y/7>ڤF^k_T#RFgQq#@ؤ]LY: eG 3cM5oޘuSqJ섘?@'Ejsx1D<*癊5ԏ/X/v~sc@sddŏ97>a1iWۖmm}s{6} _skX?~sfqLmȁC\;D{q.ojWhs>/H+HrHG܎wo/vzyW=b2>{>Ǣ,nh@,6wJBWVC}V endstream endobj 162 0 obj <> endobj 163 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 164 0 obj <>stream h޴[ێ$E}fJ~y4Ү-V<0@404׎=+sv-UǷCx%=2}ߎuKGx]xwx~w\B3=S|yPAk.Gߐ~C?h»|"j>Ο~1G8#E_;_2~/1(G)Q>3YF}; /4XM<yL=}2n4_a]{O}MgEʁ)Kj0ݙH#^ZyM#{a#=#rzFi޴6/#i/cܳ>gDIE"ge}-W ĜJBܚ:Iu}Cˋ7ti[n4Z8]F77tM뽷"&)cօlYBGPoGBV/ 6%h/nn4&S~?8m2R/Zczk?~߀/KBJ3üUKL.& m:m7>'o,p;l% "pĻL xxo&iƸO M"ƥM C)#P.e4]U@m:fw bx#} 3a%v2ҥML:>"u"l2~iL"17>Ң.'ǜ#CVFSuYhRĐ_4D/ }%sduV0FFObJ$s$UL!qP'(ZO_|#3 %9ȗxp*0$n.g~x!Hב:8 8q~b7uT9c kCLѻXerQWQx8R9F׮w5,&9h =90 dcGjDh k3>x[fc03|:ˎzց&jRK҉ؔ%ɬqb9oL%$Lت\~3!Ҳʞ5yu>e9s&gMTyڲ5l8fQW*'(}D}%iƦKڄ]t}&ݎv;z̛.ߦ]w:w&MPMsi6%f䱛;1nJ˻)QM@Te;<7]UCE¦$&SNf f;fK -zua5"̸mUCt6]5MWmUSZ_qjH-q7ܢ6+] gjey)>r #0 F\#Wԅ,쬐O.ute..iORu*}NkTLJ_10d#B%6.*iJ~(O s)b6yTl*QjPT&~.fC1R#D&WDj& -dʰQw>2؆@ M* aԮOgӪ*$SP! aX||HG ޝx8mcavD߈!Yc0/R|s#8W g@Q2!vV`rƹ1kV>Ei>$ÁCr]vD:7NE9-)uثk#L9kf[޴};{bV ξ3>(QEH ɧP8wl;/& xgSZ=:!Ew>ai6% pT :TU+-Zƛ={O6tCoopJƹ\7 7JR@9XU-46@vʸ2+R6WHJ(W*ǼR9˕9wJ\&Ma47aa*Tw-\lJeW*{R9•ʱqW9ۮ, FiPw6vE1 4-.AtӚL=#f^g YGE{FJmpFH?ʁ>'<x胫erؼsHe8kEH6"`RC 9\Qk,;zeLxOp w]pn>,4 ? ٻ Wl+xKdGR-]A[0@ kO}><8YQʯ$K׷};s?WVߠVI<Rm[HP%p~?@]ʲ!`oPCi!݂ abR:rt~XԓM !Z0ӹyi-ʻiK ̟gIFoqEGLԩ\1Ut;[˖Af4Ʌce`ZЫЂ]պS5Y T=`mէ&B ^ sKK2 L+;*P>iA㈞%!0j@uIJ\upj39jOV^8/ ɳ=ŬR+l Δ'L,{ m.[m>7יGRR5.f.p&[ViДL8E$k h3ghKrsTb j@^ :o1SP [K%Hק@ZO6c ds9%X|d)*(ԯފ}9C$!-$Λ:nvW!X~t׃9 8t$;p9}%3{_ ;eI}"'F^5呧.c1c|s~1Ns~sn64ߧ=%5_h3ɟ*7>^*B^VW<{a]LګP?bF@YHQ5gtOcWZGwM;x&_"v -|Oeݗ4_T?}oNt\4$*N-z湄?P#?zz_g endstream endobj 165 0 obj <> endobj 166 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 167 0 obj <>stream h޴ZMs 2M|eTLVt}+kU{@wbliA`?4lbMv٭|sz_ 7:gx&B;uTf;?ip1YϘϏ0$ nǞߋN4OfKx0D2L1/̷ߏBy(!cG?xh8! ߜcO؉igB]1kz5juv՗=s3ubjkibS*"CHI}!)iR^FX=5]"ٔVG=bXi)F?fsg@gS5G-P W!jkܓ`-Y H}|th<ҽjAẑY-ȏY`*tZP ' %;[0=fAeƀp ׏'KʯV{k6~%w2znHOωa=o0OslN嬍Noˈ$?i6m#;?H~H4b @V  |}. xGZ8X4`~ U?_s4&$+Y1p뢪ѧ \яّCDD Hg%(*EDyg4(kG|J"t ˏK9O{eT]qBuX|i ҄q@Č 4d-B0@M1 #iqZIu(ND1A[h*D ^CvEEDOhr&@tUtD+;\%mBMl႓*INU9C+s'LN)t8 ;Rc{&$nxZO @|R@#t&4#Е4tP(ʀ Y06Dc&UvbS6mXK$rh쒚SC8Ps*5xAh,} ,0aK`M9')-s bg8c\ ɤs Ec.X,(įڍ!̨ T6bd!bP ɎM(tle$ R#%!ELP2|TJ!lV A͒m} T암`ʲȹj-4nN JR=B Z%C:gN>!g, c@`3JTAY͓T,ϧN)^I ' 6ٗ)I_%a/V\4HH?KװM_%7vUya.tӽWmJ'R땪[$k1 *rqC- RcFI5Yc4[j"Jd#?YəV*su`QؔG=H46V-RPCo,Ss)J#<$.5MlRSլ7Rtx$K8[a`)ڐCedLu sm̔EV׉bZP2!.d[ϧ^F##|3S ܙiu4LS3p3 ZL҉͗|owۏׯWݍپ;wW# uEr'*yɷwryPڛ/o'Vy?U0+8 yP/7`Uitr-m[aXt±ኤzNV e2"V:zLF;D4> endobj 169 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 170 0 obj <>stream h޴[rGr}ǁCӪz!% 1z 7@—9Y3=AbDWWN^OW*22mrrS n;_EnWmSa#Nj/_ߗ~='?0柏* 瘦'X8+ɸ NV_|prƀ&\C[NnvܹiKd slŇFa/d8I-܋0J򳌔^24Rc$⾚]j}\@;_mϱQq_-WҾZZR%= gSp t0dS>f">m<.,ϳ>BErW{Ȫ'\ՑB=/kT3])/OU}x9sD_8x6TFOuzpS|"}oYrq`qڬC>(HƗ+H|1gįc*{oB^yl*@Y@&Ȋ<\y2d*$6Bvcp 9Y- hLu}\`-RdeJ>M cuSk6Ijdx!Ae8"R-*OL(]~];Z6ZeC|}!@#Qu`8u(4 ""M.u0shD\։Wq#|_ukYl*I}4^ir5 )PH&iD uaN:LM.&odǮ f9Og(t"CVqJe BBR+FE'i|-K[L:1$FfRױ5̎VZn|C p]{"~F3,| Cd1ny,{cVN z)IqP {K6դ~ ɖ柤'7Cr˂ɰƚE^`ˉwPQg=8OAM˒eb<|mn,CQed6to/-2Ctu:S 1m,<J̃ Df&5 .wjf(h+l W3|+%IRZMhDxW)kԦ$% +Y"9T$Q?Ws$^w6Jٳ|rE&WĕH%Q1,nF>V:a'xy鬅HJgҥ^>ꑋz<|"Sv+[{>$vݺkc[jDZ ݬ]D_-ji?Èa{¶vW 6H`g4F91H040z| 8Z+N ۞2#^L,šfZisA-5[4H}FPk jT[7J?*=ĴΘ&ju.no8gx } v}L `}0y%IeCg R9Rel:~`@7RxlI3Mf}Hra{7rфw#izL,)i6s~:V T!،]`(T㥊(jO[ّC+^M+sI)(%kX9eX,@7,}&1>rQ2,Bx@!-sD}ny{\ F7r"tk|a)1|QuF{dZNxz ;|I'#wyp v 䌎9\*ɱ`鵲61EO|kwp}‘7:j}LP {[B(-GnVvSSK P&hBf߽c'n[w[Y&rz9ח?~1<}h6uY__bnwO(vy^ӿ^>Sȓ~|*ܾ9l#8XwpkjwU|:[\*ޞm/>tgGD("rߵ6nz|;326~[ww˫??\A7(L=].E-.6ܧOw۳MyN^Ar<])z~֯=>~gdÀ[l+/wWW7ۻs8ӏ:~\Zܤ67kLz.nR=U {zX=t[;1IYDqYJ!ȣk,0Il]l_M4=f :#B%x::\9>Lw_14k2@t0hJp&+w(!VB\|-U',jr0F*م [>GV 1!y^4Jﴰ>AR2it$Ge$o̒e5\#Fe<jj5"rK BD9X%!x -^^.JXM4LfZ[!UJr]B ,aUFyzxΌbLl!v s57R9Bafqv-C؝hMq5s`t^rKdud] T%vD?2뱰uf;M .ɭ3Lciw v |++-ңTrHjP"' IB*C;[SjϲawQ FDCE=İȕ_ =ԔWַVXLc}-!u37^LHBɌRYW7+iND@qA|:nrg#ZwZ+A]0#ZYU1"uT8MhWN<MU6Fn*u|4]qZS2|bM2PZh][yrwJpOY^88F:JF%l6a E()m78nuuAH)\lhh/1zmWך&>nte뱳 B&H{Xځci^,K]'1Y\4$ v7z7ڀeS0XՋ߂"X?c8/>nB4҈.H/(Ͼ1W$H;F.du=$Yx+N: *"[11Ln'MAB]{uGrHlGH(T:9 p|bmTc3 0UN endstream endobj 171 0 obj <> endobj 172 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 173 0 obj <>stream hތVnF}W[\$ZմHP("vhPCQ#.)ɗa.g̙ݯ-D&,Fs$>6¯d\RG8[ 窐s 7C%Q2 16~dG +2,ffUtZi\ )XCULm V._XI}&9ϓg2[*S 2i/U`:ޛHee*& qǧ~iXqUVg,!`7\ky:uBPh@rjTM3+H0S0uUJBh}GLNj$mٶuU޶7P'qrݠݶ{j[.@!($Uqsw[^݆ԏ} rnwz!D} 1a0u`Z뮮\%?PX1YƲJ31.׮o HIr_).x #ibmmlf뻲%*%zۖ/`A D΁H[Tu[0}}5lp2዁֏-"aU}S*[X.-GOa0N0,z9#v5_!mhWK'/ EgEbVcpeZ˄;/ozXgaK#IعKd,LXpZҤ]`pO(ˏ DCerNhjXH4;ZBZ /2xQI:N2$LI})\81akbW߻eYS5ex"[lP4fq?nK}g(hEM3 ^X3Yq''X Ra#X?9Z+5ZiÆ#XQT0>!)) 0 aȊTa@ũtnRO̍LyAJ' ~ΡHZl[o3s%5fUaG,F!\C˞ X=k˩]fXexGt%Oϗ`"tbO$ endstream endobj 174 0 obj <>stream hUoh[U?$/miӵ5i7ڴieMmB)ݦ-86i2q}:_76P~eŏ!$_|={9^bDTF'ItO_|fd݆5C,Џͥ#ݷB ks [D4FgGDà4."~zk|1 "a~m!ؐϹ]M oBKȄ'Ri5q7a˲3dVe4g9+=;K=y5!s.ijw0ZiWguJ,M ZFVqWv]d16-~AxS~*+-e%fd4s9.EVOr87zm!>M46ZU^Ou-@z{=XVc!4vS#m"q)5XWB௱Wd~ش֦:W[^[.d9x=n/fnl obaI͝Ďep^6CWyL\p7uX5'r_üOO7Q2EU2d.rn>6.O>"Hx5sdw(Hmaq=F=~Hu䇨sRxl;E*ppSb5Ydo5:f#9Xi&5;T=e] a]49j ~BTvV;;٥G/Y٫czF7հ:Tu,ήM:Ve^6L |P<&#Jb~I8VbGN,źe%~/g`PLɩh&>R"O"] Tgdzbd> endobj 176 0 obj <>/DW 1000/Type/Font>> endobj 177 0 obj <>stream hTPn0 [t- ^CDjJqt y#eZr7{aeጣ#(XgmL:Ln#N- JcΑWxxјWuIHR,B6:| A^_rW * [A7y0cEWݍ9yNߌd CV!. Aj endstream endobj 178 0 obj <> endobj 179 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 180 0 obj <>stream hެYێ7}W@Ӽ_2Y,6대İ0ddF$g {d4c7od.NlbcڱlMtzv?ۨIZӈƱq!tTນc/%m31 Ґ0ȸъGϊÐ׃fg |:ͥǕc堞HhIfsL=LLgJ0}.0<`a'&,MGS6^ޭ_L5M0udr<8Z DAHZY0fYՋCOZ!c?B`bo:G3Ù0*6_WK*5Cb}|&wó 4W'"{-8g9y,OdǻIV<zW} @J0LD-tt" :jwx~#C|L+E7($D.81/af'D|}$BOiv۱;v-nW [~lmWz]v/,G 2 m@%$n[Wj5/_y7}eK1璉k\Ґm`,|΀L[a*nݧu%-[+7v}I$prn7QpIRf{68Ծ<w bViC-}( u1lqAV:~VgXd, {/LrBC>c"Hy'ķ㤃W.";L% myrw]T*؞Al#/"ۯTb=9yU>ԕℚJ&',a2eMbJRLh0\ (,1ΧzD̏l$aOɭ,ˌړ#LTVD{~hTJ((]dШXb+'A (œb T MRʗφC/]i*=nPnwRW!)aӨact^z"NN1'!4&|ĥ{G%I Zx^i:H,,˪4(h dGȧ!Ls&&Dop9,}C|r!I$5'Ұ8ީJ9%[KS<7jp ;4 =#|k(%ȕ \b$HoѧvLzZ~ͻ͟8I#(>cN:DXSȠdVfơlK Ϭ֬bGvUK:R" ǯc04;F_*F@,z4-')ozLYt}3BHs~Ȃ]z|->}BˈaЏyjںfSЫ՘їذ$ 62TwD/O<4eg*YjJ2Hsy,!heGQxjmgCYzc<2 y^S/ MUD{գAWP)*ʺ~їP Y{[m܌aqQUxO8fd<\!vN‘TOA,Q{ p_KK*rkGNf'7.54I2ɓ{6ʙ [5u馲Y'0=}UQ*]c.o,y]~R;*ӟ~WP?6ȭPh8 }h _U^# ˾kK6y%`*,zjNu)d}Pj\>RiMG(j) ]ZG(\Vr -D:=js܋wTVscbutz<-:de_@i"P.4CjMQX)RrJ"Z(bWжH |ct"1]CK3tBeu"2^ǽmm" h<]H c-*:m?,NS.(`ebe:%F>ژe*Q)sSt@= q'ZLa9`4 w p z/e9$79A>7O ]X+ODzlKT_}u#< WD n fZN}A lE(L*#,`=CvBUe]ǩ8$7ikU{ƺ5m>%zY) |f8*P`X@-_54jTɜJ}Ձ.cgsɴn N<)28.?髬hX@!ە/-зbg|HrTuhr'DN> endobj 182 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 183 0 obj <>stream hެX[o~_1;i)UT@ZYtHQ&e ewŋ^Μw.*VcڱZ%خt|~ 4(.4sRD^\u{ƅAu߁WWF1[mX+ 1[ȧ?#e-,`JI̓gMZNsiC`qb3' il٢SU e.~x] Lްŷ Kz~OOj/7(K9] XIFN\xCHί=i ]Ϳzo`{]_Ip1 uhi\3rpl7t_וno{ DՉ'tG.gZ=<D^v]%umPvOW%i; SѢp 0C)Q|7dò[=~&߃" x!a3$lfV@`SYCi8_޳_{i?7lgYK)oϕ6L ++.5]Uu}GcDkuLCeD2I{40b\_Wg-~ͺ}޿65RrWn3AuuYc)`a/Dʹc\NKe.E?E-lysE-:96>ygȍn_#npn|\mfq\xkU0BJVI*RUIOJ!ɥEq:8WjM!Vbz^>nw|1r!?2EHT*4ٶ< ivG+9z-1l4J4b^$t؜/u,EvݰuwZe#{/u:˼@QR\DF7++BLu6F*KU+r.rdv(H@SG0 l;½rMJm|~NZ6RyO(v9fyU£zNL Xp" QƸvUdEI핚@jUliaD+QǾ(!T*.'C@궂xRG O!Ug8"UH!*C}Ki|V!I@)'o}&IꘟOL٨>%lb EE)$JQC E5MRw RkHK;#ZvumUPH%:&yΙơi&''UgC]>F!1Q\\Lr]D\(Gq̹#t,,"84{umY><;L:x5a(ӛP2KDb`s{TA 1iEi0:dUzӾdN49,GpnNz5UOzD P6mUjKVMJ1#zs>Yfύ@q~ DǓp 2̖tVJ  tې4i~95tlqC0ҫI!R:߰kę\/\p1m-6zW``. endstream endobj 184 0 obj <> endobj 185 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 186 0 obj <>stream hYۊG}ǖKXdL$KHZke$텅eΚdeF->e{U$>\\yjU[ =7AݫUkN>0[^/~u*`c~QU}ēp pxPs|he^GX}G H64l-ūçewL~UOŗxqW}T&gobVз7w0I%L=I_JZwk krHg^sP'vb2֖Hspj{~Y"lrgVO{':m?oɛ6Jb<>~3ዬNf;ynCYrp]sRpY]9q %e{r\H&'>0 m. RH.ТׅRp1* '\eܐ☤ q]F6:EMzz . KuQ(.HZ\]!r30 {P(Jk,*)zX 7H,N6z0q8 '0' , t36N#IG\nA'((ەrdK I p*IJ) :B3͈=`pgPWw{ZM 5fզ׷@AITaPDR2HK*j+QyS!؍x㪏IldT.^ W߂+@p.0 5q*~#@)/b-~?@2Y&b'$j/n&lb>ԈxxΑRdumYiԯQ#YTY | Y"b[TQb9鄐8i%f _T&M1*rH:6?aKZM^"N#eey5|Y5t ^a66se] ߢa,TPkF Z,"ұNZdR|6- a=HY$ZDm#$ }SIӡcL _ @ҩC)!2F,s9{|uꕳyCgu$dȸ|7 B+CdEx[psAL1/#1l .qrț*]#J@O.67В)QY`8y <@FpPʙ? 9Ms 5zΠ7'n4rCW҆H:UȮ< vC7ݠsfڊ4j#{@({:=Noξ4  .H2g.\HoQu7#2x9TGb7oI @!Lr%NrAl&9pclW9s88.q<3 Q^@B>Z5mM:}GG)/;WhDZrϩJJ ԡ<ȨC!= Q2h4q PFMDE:ȨPuqU ҔhJ2PfȂ6Ua0T`8Ti`Iq{.Ev84i(32 eYTQW"AC$o(C>2xmP5 6Za< MAE@iz5rPA^D>v-0V.H/3qDUܻ.2a ] y o]Jwč Z%nT GWˀ{'luY/c2pp+;$O>1A=o>n7f]x;'r^{m7ϯETY;V;BH1_ fo-{|{#z{?=V~:|0DEۿw/~~͇ƌW^A9"UGľ|:U ŞTnzoh;q˷?=,> endobj 188 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 189 0 obj <>stream hޔX[oF~篘sa(qMA%HJ}؇,)"9s~$[zǴc5y%ئt|~;U\hb ~ӊ_|Xe\*boa^7Ohi,[1,y5x6s %5okE04mq\96_ 4Lz6}~_L3%DÖ ڃPl0l6aipM}G~y1<ըK9g  $*wr΂!'S/G :vqg3)KwS?dZA[$Lz67]&e~mAՉO L<e;쉲J"H-J OʴBQ㈔n1b\?{qyHr!Oմ.fE^?./]5ʴײm,&}-ioO94`|@V5IX[MDbd/.~f}7ewu϶gq{ެv-ۭ]( [o_]_mA2]AbY-z}Xm*O#,aCJC5KHfٌc;bo=w}=Öbdm#CoY*'s<~ЭmcF'PvePu "z@(_>XKp @<WDr"CnnHR3b,췴VdT,@IH0K∅JF Q\:z⭃L/be8@S$6Af^˺;lA|ܺ=eޱg-T@*+ȿ>TF@YD#ʕB`m ~8xA,.иV_<|X:j=JvP6-l4$12y)a9!MmRU޷Y  >R9NRJX$YRrOh!uL@䔉IU[CY t/Arj8Կ]2P#6VzE__y4bE?t ƚLǭSf&&0zzX;L[QTF+4F!0b1. Ahqʌʚ(Au092M'092ChlXo ac^w32->_W0p]ȡOh7k4YJ0SE 677|(k0d~{FQ&W͔mMH*N(Pk?c Yw) ?tR|2)@50E )ǹljO˥fȥT1dX*GҲ0qI QxP^:E 0j/ QN`gntpЏSRwW>O"=1>F\#OOVkC*ezil=aKpZ= y?VZ۝q4!b]ڿ\Qةk M8::+<1\֝ ZEr7G!IIC0hІW۩YSAm8)@[7{<lEoY,JT?H߬ӣ l&&04NqBm7+xHsh/K},D9|7 endstream endobj 190 0 obj <> endobj 191 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 192 0 obj <>stream hޤTn0+(͝7(4. ! U[HֿHIIN᠗Bɡ޼yPw"e4  V'Mt~O3N8ws|1v"|oJ|3E`tdȱq8Q@b|)h%bdҰPPZ &\Cތ\1yc NM205HJOQF;׋xz>TCb1O],Rb%R!wXAt_IEYa>8<p Wwc1lP6h)gD3Sae$#*3"8܎:4\P` =p!ҵLS;6}ט-z _z^6uq2-,hbz!v 8Lc'K,ܑ07L͛Yka-ڢ۪ܴ˄m($%*?i$!4XH(M>j[,7-ܯ͢ZtKxIPY\7Q~ypD<)Nd~}T1<1l,E^lcqM> dz.Fإտ*:n͢va endstream endobj 193 0 obj <> endobj 194 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 195 0 obj <>stream h|TN@|WG7{_TUXxp4))?]Ie/3g<3sĠH BC$)H&w-'Tf7xcr~0%92?%$&b̰9Qkc1 h b0PPZ א7=/$Af@^byb>r)MGra (IU*!?*W&ڕ+|{/H4"⚤@BRP]s-ǩtO@5*(%һ'[`&p{O!8 <)%YC%DLDnQFB1"~ ka{ 7> endobj 197 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 198 0 obj <>stream hޤVMSHWQ* )V6$ VAȲ,KݞIƘÖ)F_p1hú{ : #1EDxmw\Gl g!tG76Kk/&[h߻]Q^-t (ތͽ1-d Em''*ٻc(-/׿wI_"q+uΛY1DLk"$"2lf*ʦvqyw}K'Ȓ,M˕Vf __I$Pp|2r >٬AɨQiՖ=ju&ꈥkf}Ӏef_)vDe}Ll c70ṷͬ8[8]fu&gY^v}VݷeA9cx~̤'i}?-ԺDX?p:a g$u4>L=~܌Ŗʕ!#`ƃY&)+Gxn&FQ(I͠ CsuQUԋn^iIu McMWL\)6PjZ|r <bbbyUÆ0+J3mɧK{wKoyOz?FƙBY鏿N`*ϸ endstream endobj 199 0 obj <> endobj 200 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 201 0 obj <>stream hެVn6SK{]4 k-zQBG,7/9$uXaC");D@ ,( 2aW%*lw?@ગ+BBc?KyKRO! ӏD|#y3<9s+$%`bx2i!x d!Ϥ>eLP94/< o~^*~!dI˜ eN# 3IhHd.PS[Hxt뺬;s*h~z7xAFu$=MW~_un20YQkES d K6C $B`K9~FA>D* 7P7vgຸmQAy]m@H["d IZܱZ>`;Q ƓAk F[. :7 .cL ɗ@ݪ)ka_nObjC SQj |CRˮ@kq&RavR CP9C] `_|@jC?`D9pq?9i۫jEwPma[oXU^H&E /m?a(sbif#Z&D 1MH;uc|_EicrfDq"*)SD/(ˏ4&#aa{PD6'z~xa5zvj^gqROb02RQB`Xm3 d O,d@PIPߋrba6hq9LN,S0Ɲ0K& 3 ۑЊk@ ZŹ,K!4QQ&ӷPi [F1L.1r/Ւ؆WAڏĦS@LOVS)bN[Wnuks`miv3\ÊRQ͊Vޙ0JKlmof?Hb>]UtծFt0P( *n.ڙj( nzxٟ]tp"XMFDgpޯ-S> endobj 203 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 204 0 obj <>stream hެWێ6}WQn#."&@-]yHz$7~oϐ,M4$.5s8sfs!ٌvL;VY#X[O WزjP\hbikuiBNm=O${F1ڰZ2O?Ρ'~2u1d1$HyvD[*jWSE]M`AB yXf4qbuЬf=-7|4W,m[,RO#j-ږ3~fUsHM]K4t~^hAtRRa,$A?Xhq=Mc(26T^?1-WItY*FeuIyQ)㽬"?r*߁݀U ̵X(*2|T=Rbn4R;ԛx6PoٌS%"+7s٬쏞BWgs}<šh0 i+(4P2)wT]=hC[mI sB Cmz~Auekhވh>⫌"Ҡ tr$aуtO'͇2kNjK^k@&1^f }>Ek|MI42t7=Ys(,BŔ9Z~Vvd*d=%=Q'^~d[ۂ27]nfQ-FoKVoRV}rU_(JCp lѠIotd0T8b4mgu 9gK }|0A)J\Nܣ=ʠWhfQ--U"+WU ч ^} 6Hqcb2~%($r\Y8_jd.F/9 c2Uԩ3ҁn#gWY9D'sW=5yG endstream endobj 205 0 obj <> endobj 206 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 207 0 obj <>stream hޤVnF}W#U_"@E:ily@є͔mIvfwIɱ0,x/=sf]z(,TFspö+TYMA2 iGlg\)y)zWh 1JcQDÂb^a8ָ^!)XP hˤz=TL8[^?k핝_U& EEVe$ :? 7-`9obQiʹظWݚMC̗IRVMrhurAY .O|sԡ\=9_M+OˈD|zxc|JP3gI!V07"w""ǃ_580Biŏ"?2T2Qݫ!#ke/ _?#ҨNBTPH!g3TATRTzPOHGLpVg}n@胺hwUKOW^ endstream endobj 208 0 obj <>stream h{ xTEvw!!ݡ5ltV%aP$"A26.:vb@g@PqQmqrDg}GSSUHQ F݆v͎˾)mH}K"J=ue^| {W\vuSGMawAiU*,O/F|CO5wwLjD~)(zսD/Y͉bs!bҬ*9&XHwsU՜CwOi-dXc@)S,x!t!hyH5 C | ykH_H|2'9wҍ$QIDgLq8SmmGtzv3(b=F;hHZJ.r"F]iaq4vR+h~N hWZL1ԎhͦUby5MEԋ4G2&6~zvh/'г4WoRgĸmQơwhUFDe(A]24^eROEA+@*7C!J4ZC;EO1@̡+ yCwSmǯHoQ~(%Q'l}bpbaC.Z@+u>MUOFS#כSKNcPڇ{9zO.rksH]p1VvZ* Ut]H=%˦r{}~զ =I}AM}ZV9Q#?_sOB/Y"^#ů4qX*nwWī3'G˙6MR_^/2+\55/ ߛ }XIkQ}PhO1FI<,!WŇsVK4?J^+*!Zk,kQ-=}'um6-3QWSo=yOt<^5,kXPװЇh/^ {*EG_ AL3ĕbZFF<Z qe]dO/wW[mr<(Z-VK:jK*mvZ i/k>ԾӎgѺWogY}~VTԘ`d|vr-qջr_}{uOYz?qH[iM$}T TI,d1O訞~^~PQ"JinjoџS>o6)I[%l<.YL&Q5)Sʬ;? IaSeB %;U2ɩK2()|9ӹ RՋ#^U/+PEcNKC_QB_HTBL)(DrM Uѝ;Qmt8jS+Z![AB¢PK2&UF,+*LIK+)$ 'ȟR"T Bno:׆Vj;YYG+V+'M( i9Yȷ0Ozx|A(q55K}#C[^4WfW#hĒRrBb1qMVVE̩ EjfTkkB4꺴%jFB)I-fu[SC:wkn5lmX4&Q\J]%[Vp!JRGz7L 1 UG *j2㇌8[T$ʈzҨjwܡPǎ")_{vtM@|4m;oW4ZwM'Yf}49]CCv;! c8$4FC !OfظV- V?\eKF/Tm[2޻1vZi)vMB)'4 iH?RzZ8Wh}ˣ~fz(Rd4Y?xMk4Ke55ѧAլ O|!ތPMV?e{OLcܩ]MMW\SQ3 N5;39Eԛ;WWkbڀXV:lGvFI! *kVGP\\f*d( C R<4^Z8'-^@瘂eڣdyg^[0 ~>Nqbzl"6B T` ]k2tCkC q!?x6o(0 (e?dwp\1Q{4k@~h*GՇf? jf {>eo{uQUρ.; v}/Оjԥi @ dZK L`nD8(-BKt Y\K( 4HGlIOvEY^i\:vNUƒp ?~4*lXAZ R!4=b/PRca?0TThҡ%Jui'n_G!T @˹<ȿ+9Cf ;$H+Í')m*!PH28Pzfa#$@_h jJ_3J? hCMU?1NIs=B3mq<^XgQZ'mS3U=S?ScOpn9aC@@rºc¦9auFu}Ch~Yᚌ9e= >&GP@]n> /i;r8wGлb܂<@Mva[ {-rrF#!v[aLa@4`b~a0M6/E7P ѓ%1"^nOy.m-o ZNIcr^ -bps%:Iyηu gcBJI6K_s==M#23NQNy~9Hxq#iXz+4l F?>a8txs+7|׸ zYK->5qQͲ|5ݡѱ|Qhq 9Pw=ў(LmVIRG &/y]5Qk*Z{jȥq(Úʔy81kwS%׃}﹚b< 'Pwa$P4֫6CJ/8L"n rCgA۠(nU[EX-+F){KZgqCA1@7˂xj~ s29yLۂühAJ4hÙ5.mLםٞj,*rͤU20O"݈ cw9{yr9n.2l#xq+Re`;km0-yD;,&Xƶ@w ?J gQo/{kȡ k}!MRc9uݣD}/ݣJ-+]ےikE_FWZNT57AOkkC|D㵱[K|Tq } uV  ̲>Ey}JyQr:e@M'%X:DA]б iWC;iO]#BHd/p8zШQ y C~s`-":xWACAwC ]zѱo LzۮLocWj?"яYmf@ _ ލX'& _9P- @Nϼ6g^7D!~6u4rhؙA{a>?q(!lʦlG-moʎED-ʶ3ۯl; AW!L̓p+jYN_y%>Wo~"lsҞt%(b.njy;@yLn<ӴiM!|Skuecö_TZwg>4_=k5k~9Ǿ9} ]/6,l!6{:{ E=\jU >3b0c\>#uԾK3H\1z tP]h*ֽE"|w>jԹQ4w^%_Rw]`\Υ;D:nu𧫺TUb:\"y~-~k*6R6nuXZ}Hm4EkN Ql__@~[woХνu>MV\FCni=ancC46Ӄa!pLށR#( 0"8m;@\]#>ӌHH4?矡g;[9όr-]$DJ"~/(9=D9Ea}l؛>:g07mw+60發^ jsI4Ma8V^I+o;φV 7nw'Xc/ Yeo}xvۃur^]`vo&RkisVYw&5kvn9ܨR+JMdϛ"COh~ja|<Խ ymm9 ]⻓y4z_ R彛va϶x>wwe3~M{f.QMzuM>oiu͢()64%*|~w*Z U6nj JZ}< ʌӱn0.AT SwN=:Gv(^]iYT"w}zWV{L˨2chv(96ӔFmAZo%"ǎj)33>~6ߦauie=:v=nmϺw` Mu-Rc(ڥxJdVv,^`R&t<c|.oX?nsr8bnO`|'j޷!p;~K4zg7Ug㏤Ns q}˱#>e}æklE+g{v5z^jw9dNRӴ~ٝ}3?NRip4ێe}9?7\ ~Op&0ܗ ?+\7#Fe^hƗ66244 _ g~_W{,('6 7F'^Q? X +&iwvAzOk,ۏmSeFϡvureAL-lЮO[6ng`$[% T+69MVaoʰ ;}U/I۱lOPT{KAw^[8?MSORk?mn:i@1K1'5_4׍6Xo~c;Hzm,l{ث,4|jO˙{(I/ }:)IIDyfh77|mS5Porϫ:_y?SozubHÎ ّ_@7p;6Wa$%0DX+1ɏ4A ~vM\,*UgT^Z>҃NIE%n#.k ,2a*JŮrsgS>Oc}Z\ 8658]!1{\jub]n*'Voo2Jzo8TnY-EO[cMٹBZq\ }O`b;ƲxՀ2ycTKT" 0kyNUk> M%-rǭ9HP Թd>ʘrˎOQr-ܣf֜ҫ 5_ђKnA=8j~)kixXM?Z nQS,A0粗lrK}ҡ 8[8w7XKZ5g.m~e 9i;Gݾ}^-uSeXw<0ǩj?Ih9{9gAO_KkozT~ߚ})֡.wv֦7P'duƺ% <t:mwv.hi[fCR|޸ $M# hZ#4 \J9. hn끲[g+$;:ܢCGZp%~o :Y4>#;4:&{w^+* X!K뱀dqZu0d&Q$[u1ͳ)P< Vx8}A #|u޼Vr|Z_/*|^їsm W>_KyMN|zkzk ݌oW Ln\rlWWG"O^XB^YG+ mP`7Y'pη.S2W /2o .d޸.d^.d^~ \ɬ2O?GÅO\D^g _^t-ZZҵkG?\{:vD du Dpn*/ E0G/,L"'Eo4EPH"V`f`D@LC"E?fXMΧaN؅~T|,ᤶLmk͞7P>Ϣ,Y$,7&t;fŷ+ LG*@lu =}Y&mRj7ضbx[EZoi^/bc(*/J$oa땷x]uOz`@DZ{R酔 +R"Zl]f'Nьcmz gOz{-۽.ZzӧDw>W.D:|&۽IK zGeDzjݛz7ǒq{Y# !Ueoӫ^L trv/rg;^ww'iix<.7tK ]$_HLZ,)%Sd/]^D2"_B%CJP{įjܐ\V/htY08%_PhxU WSbkrs7S\xO:xMhuIiYhsP6;6%K}vѢ+&e;QԋJ|+AcRr,,G>O[Kn%Kg(PrQQJN,W[^TXdZZT̀LFiJfo ˄+TMU""RHHV"cOtE7,W9iL%sȑ9W%+2_T/*B+ Njs/eVL2餪P04_7 8&.*WTXu {Ƽ.qFpbr^z!zq^8*/R:>C,U6V緊_)o);al&Y塦P A:q5;J/-{2;(|ʚ{uՔX4W?^ n}P`Ra\PҒPen7\P_פIQbv/35Qy9̋OmZ (*m\.BmKFKLǣƗ-Cu9*X-D],uv0je\Z1i?nyܸ1i<rtܧ>0|2fFh&&-h(['iMǝG,:p#ˈ@2m[|HzFfR+W&f 撜ɉ;LI]/19prN_ntI"AwZϴK4)^?nk5<֯Nyyyyyyyy͘5 o7grƀe"Bl@RYJa\ %;9fW6vibo7(-lL 7o޼ݙnAAAAAAAAAaɟכPz@`E46GE;E'^[snwZ݁~y4j53bZMPP Mi<}Xڗ:D$hI4@GMjS9"Sh>V /G jK:X|:d;a3Ce=w-d ce:5A z<*LmtoiS'VuQQTv]MΪ*+T,W'=fs籮١N2й׌eˇfR;U6}v0g7`~7*U"o&׵_6m{ɘ9VnyH`Kr7l ?>){žW}*H endstream endobj 209 0 obj <> endobj 210 0 obj <>/DW 1000/Type/Font>> endobj 211 0 obj <>stream hTP=o0 +<.E*!=.Rq"}`[~{> endobj 213 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 214 0 obj <>stream h[r}W#ʮ~JRɲ˪[H *_.PYQ,Y=t,~b,SuFs$gWˉO.'64Ȟ+fdG'v-v\)^w `ov-5J3'4c\~rdE6yE^m/g@eg/鏜e4-ziz1}=9fqƜ 8O.'=G'`ū ϊדnhI{oorw {[۷Rȁ˟&Of3 (o |{f`$9-)?<543 X=2 (#z'4mҢhT5A[{`FAC`$QHbjڰqJuPwHJs0#,>#bW= H ÌB`d$Bg&kȧCFϡĘQ$L^JD> 3 o=:je@FqQ̎={p0 R S>a=)M #;{Q_F!#D=JьL`G!cϭKcهaӸ?Cdd\tƎ]&CqQE0􇶛wcӱT~Tt@v/N+T['3`8x =;L1:K=y]pzB2BhWT&F' p4^7䝏FJp7\Px҅1'RNE}FYr \I5$n, ;pQ7 68 7ҊMRD聤W@xAZJ$-]&MR+EM: &J #HOz }@}KJd'·QrIeVJ^\r^&J棹ܮETiv4KmQVI(*HHnf Jø!sSÓP+(~fdҪcɀ*AI>K^ӏȘRObE`&[;;E2 Óч*,2(,hAa8L3˴ x Xf,n-,hWų2O.,hWYrC2EcQiTYy!\2D3f3O\<3bS(" ( jJ5Lkk uitNC5O|T0L5* 9r+4itäن95l -4p eL6Qn)>YqZ Gx!lBTã*;>Ur *9,E#=#A MS! Z @G ԅ P+AB!D?" =$P^4uHh$~$~H+?!m>1PWv!QF9aNc)9z 2`TU R(Ki5 **Ɗ+ [qF\Ρ*(J WPXi),,f,Gp֩ K pb t2%B8HTCO*'I/(^%㏄ޓ %@ J, ) 0=e$X5hsξ-dFB RR]"]]b۷د (16 t %M||HbzS-s<Ҳ&#c2< rfeLEG(qQaTތL L[}bQ$hh", eD`^gZPJ|0X%< WCķ*1:mVm}0od ]9ց7%Kȸc%qc.D]!%tK-B9e51ksJ;DVnrG,,F4NzHHY`޳Ğ\۲cRݜvqRLKGcpO< |qѮ5.+qG'{\)rBxdxV6P`(4=|Ֆ6){9fx~=~^]ίW ͒j{6?[W'e ly~1ѷ+p`npT3ҍ0.rǃ2n\Rࡦ1SM :v6s槛cxȷKGshnz~ۭzٝЕ8܌&Cmi@`I#z@k~d_%|MzgrCX5ͯ!aԷz=_邼%cP+l>7 -4 b|fgۛyJ`A- endstream endobj 215 0 obj <> endobj 216 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 217 0 obj <>stream hބU]o6}ׯT1tl(V, hCZ,jrb؏hR10Isϥ#5D:5 $Z1H޾.§Lo(Pd&JÝj ʃ!3j0X@GUR3 \{P{QLlTO)"&w^Ԝ*{X7LM~~ IQ,`2*Œ90fšM>\ 9 xX GbכEdf];Qi'կcqWub/ʗS[ٔ* Lgg icJÖD'WjPzI̞*#v+}GͻzfY:,^\y(~5'dhֻjXo=BPl@1nAA΃!8o+>lMA躪9$9.x > endobj 219 0 obj <>/ColorSpace<>/Font<>/ProcSet[/PDF/Text/ImageB]/ExtGState<>>> endobj 220 0 obj <>stream hێ$ٙ8`2;$H 4$6ɡ ]=s?jiOVe2C`7z27z>\a6Y/Op;~/ou>ܞ_~;m^~_[ny?5?Vq{]br?U֗ӘwLht{w?T//ϗ;.~貸_.~,+.pY~tY>^pY>/,^eq_,^eq߮,^e{ Ų%\˾\˾pY,.eK, ʩbYn,}/Xb}/Xb.eO,U.q^e16]c_K,ƾpY}-.1,ƾΗjy(P E)/B^(Iy(P E)/B^(Iy!TA-/J^(*y!RBQ E)/J^(*y!RBQ R^PBQ R^pH R^PTB䅢R^PtPB䅢B!/*y(元Z^PBeay!t겠결鲰PTBBeay!tⲰ결鲠PBBeAy!r결결ᲰPBBeay!t결Wu. E)/.,(/D]B!/,dz$P M!/J^hz"%/J^h y!TB)y)䅢B^BP M!/B^h y!TBS H B^PRB$"BA %+DBV()U!<* IT"!(9Ԅ"%%H%%#DWJJCPR By@8 H%DB<( AI)%%DB7(\A5() AIIŠH%%jAy,(( rNR9q'H'\q'P%p'P#( p@ rN<9m'P\q'Pp'H((] r@U rN&8q'P\q'Pl'P ()1 r@) rN9q'P\q'+ w%R" r y<?TM*y* )DPM3@tR h ) Z@KRB%4 A%PIM Jhz^"% Jh a T@4P@SRB>APIM.tP B%4N*y)TZAĂT HM. *M. i-W]T n,B8h負tt負xtⲠ|teABB4. M. -. * MW]n,&JNh負tಠt겠te16]B,4]tYH[h9tYP]h*yx걼PB䅢B!/PB䅢B!/*y᠖B%/)y(兢B%/)y(P E)/B^(Iy(P E)/B^8P E)/J^(*y!RBQ E)/J^(\I^(Jy!TBQ JR^PA-/B^(Iy!t貰:uYP^\uYX^tYX^(*y!reay!t貰:qYX^]uYX^tYP^(Iy!teay!t負9uYX^]uYX^pYX^(Jy!teay!tರ:uYX^]uYM兢B]". B䅦B%/4= B%/4*yy^BQ M!/B^h y!TB䅦B!/*y)P MBP M!/J^hzJR^h y!TBS ZB^*y)B䅦B%/4= B^PB)yeAye!y˂BMP -]]N\,(/4tYH^teAye!yeAy˂B P M]\N],Uݦ˂B䅦. -. M%/OR^PB(䅒R^PB(䅒B%/B䅢"%/PB䅢"%/*y(P %)/*y(P *y(P E%/DJ^(Jy(P E : E)/J^(Jy!BI R^8P %)/]B. . . E%/D.,,/]B'. . . %)/.,,/]". . . E)/.,,/\B. .qU鲰PB˂Beay!xS]()q!BII e"!+y JSpH* JBOPRjBI JBJPRBB$t"+BA%!DBB()!< A$䃒R"!v頤"\.Ơh ͠$bPPA$􂒒 I <V9p'P)DnDN@9p'P(D( Dn$ .N*9p'HDDnN9l'P(Dن;@I) 9 tȵQ:(P(%)*(UP%J8PIEDJ (J5(PE%DJ(JI T@QPJR(J] T@Q*im T@QJ@P AQJ.tR R&NPBA( BXpP JR/,N] "W]V B7] J8\tYX:,,N\BW]B7]JRC]tYXE,#DN]VBW]B7\VRN]tYXP,,)N]BW]neaa(EȡBy^R M!/+= -!/4JBS 4/JBWzWyB^h yᕞ煦yU煦^y^h yᕞ慖B^xy)Wz"%/+= M«< M!/4JB8$Ճ)CR98$ \I58$E Iɠ$R0() jAIVPrNRPrNNPpŝ`;!%\p'X (9p'X(9m'X(N4PrÝ@aJ.  \q'X(NpH% J JN Jن;!\p'`pwt:)C%4=/B4*yB@Q*M!B h 1 Tj@䀦B!"*I)4PMϫ@dPM! JhzJRh q T@SZB B*)4*Ad B%4=/ B+XPjA\)eAŠe!͠˂AMuP-]]N\,( 4tYHBteAe!eA%˂ZB ՄP M]\N],Uݦ˂B. i -. M!/܎3P M!/J^hz"%/J^h y!TB)y)䅢B^BP M!/B^h y!TBS H B^C]TNّr.JgtwQ9tGʹ(C]p/ItxQ:‘v*yQ:񼨜#^E*ًұ=TNE tS|Q:p/I'СS#W]vtYI#]v,:qY?tea teA)$ՀE5С˂@ea} tea tea(EEЁAea!te16]RO]tYPU,-B^XB䅦B%/4= B%/4*yy^BQ M!/B^h y!TB䅦B!/*y)P MBP M!/J^hzJR^h y!TBS ZB^*y)B䅦B%/4= B^PB)yeAye!y˂BMP -]]N\,(/4tYH^teAye!yeAy˂B P M]\N],Uݦ˂B䅦. -. M!/lwNy!TBS H B^O}y<~<]xG>&o~_=Oݏc7xr//k]Z|~~]> }s{o~OW?v?e,G|y[ x u sk<qx9s]i{f{}O8L{%~!0j[`?׼s~ɭ2?\k|/6/{ uQxFg~t~Y>:%ׯUWJ_Ex-|^v|sgW/R7>mE^E~s=}|}yy^>%Yt1>uT|WY |.x>@6˜? /#}ssTfq;~Ւ~90?r]Gp]׾y\~2fr~/}vE<>J"~z_ꖸmg~p?W-/v ߿\̿E"~0.{5_0ޏO.7 >E<>hkNoXV.8{VByٿプzyOGx/|8xߟ~|_Ň?ǻtz[=ѵ=Kؿվ+=n\ڎ߾폯zǮv;c}w]_oqhF>>m6֟p\v~.vg߻wWv+޺uiR6ڎ;g|YIw~}P?8.!pݎ_]/ͮqB~ѥd6Ϻ]gY~ 8o'`Y|?Y~z_%g_tvէ/~ʨcwKff)vǀ:y2K}nߏ!zYyw􊞧^q$}M<ǗX||w]#v<ԅm!wt^UeOy1]ϲ/5s5.#l³7_>rlW4m޽x/Mpy%;;/=e}l;"̶_JxWyy>7Z=nW񹬗++u]g)cS,JiT g޼_dv9>z}ԃw _}}e_y%Kվ̭v/x97xr#C||(ކm/+Q|'O~_?O_/x\/~S1O>|گ{]{{?vYo^W\u:e࣭zu<˛54*^[nn׺޺EOe[WG/lcQ#}Eo_O6Woӵ}r~~헶=tr0tj^<_ۃuێݛ+˯yގ}I!a+Zݏvo~~@_ǧ^gͥn}f{.,Q|Qȅ7 fjKNMXƇ+L}ŷE=m_kѯ|׵.f@Qq$WzM>GCm,ǑgCn%hs_vN޼mَ'jh }VoxW.@>l'G.k8:wZkO?Y9?(g-oE%h3%ww8<Ƹ'X.8,>(Z:_b{#6}0sϼJR;,aAɟtނ!@0,@ݶ,,D_D.yǰ]$+ƪ+<W1 l"e ".X}geD}~$E2SjʽmºCSBŶ{6!jtvyi`Ā 9gLTR3j;d2mUwX\h|ţʄ@(|_RmQ"L O|o/(p ۙb5NZ{GJhzs`f6OV8Gk!S}EtS0(cA91\}%%GB^٘W2FM .=1c6DXŒ]1X;ٳ,i^1T?ksOSz I_VdOaȖ.v Ly| pz M "Xڕ2t<ɑf/M#=bwKkt}sIf=2m:,g+@E+ d>~flas2)|t$|o uͽ\*-H%tm0]ִqnvWm~ [!$.0x !YE0Bi2ӃmyY^)*!^LWBM}D._b,HVr~"uG&^*; Hl)[ugNryl=dgZCf|f>PͰ_ԟ+n39)+ǀUb tLY`Ƹ,.Oh>cxgp-ԋo/.{iN $D}եƧTЀeKk? E}C :Q!FuhF"Bag$ 7ڼ~-QcJOƱf=_&UR)hHIV셜UFGRnH xgIy@. s$dIUn7H!nB&iS=Հ9̔2i,&u9jIv¨. M Nc]{TH2 i4\)9 l) =z`Ax'~h+}%=e#> &\w U`7O3dJqqXm/TJhZۜOw7X)-[hAPZ/6^ٓ G+: xu6=H옣"hysl$[yL.|OGpdK 0Ci+yLF)(Ud+ eȵæ'6مm>ݝMD̞h:oA K6}BjoųgB)CA[WМ$<Ր>E-ss ,}G#+s3lsybPqt[:)LՃK#9DÉĂtQo/̕U˕=S2zm.qyn~ȳ<%̅&/9}SnuS3dP OCckI`TQOm?*nBׂ̞X-]wnOJ6Mo%E5D;CmZrZtMlD%8DLj:rx:cAP,CNWڜb6+m}zVN\;6-ikv{; =I!:*h6@g@3 )`4!fYzIo=)&b",=v9LӹZ[:ŗaFh[7Y@l=Zݰw\l$^gλ+M 4a0ZMۃm~M(|m̰/u5;6ӵ\hw{&7mw-nPXg9SŶdd[E~ ۲f Y0A.*4FeQ3Ε"rx(g[O k!}@ەS 5[ *U߶eoF p\U<2z `%*'+A X]~PB$SIbVx^n9Xk@V@뚏sur[q\d`+꾛j @l;l4t 3ޯ se}0Fdt(fn,ofQPFAg䪶ճ1(qT7G2Dbd6 hD  #7jDAFeppWter 9jCә͢1idRk>qEY\7G`s/\H}P:})GT-p!NZ?9~[FtOō׳ ^JPޠJPbXK|o(?jS6=Q珏})o_Gg_w~?Oo|:>rG!|o>~[i3 endstream endobj 221 0 obj <>stream hn6+yt쪏V'ħHR\XU @SD,NV$"b?LCo> ӻ["붥@=Y* ?ct "`@תxdY.:Q/~GI;r':5f8V*c\y:x:#dBBu Ji"؎swAptC:]UP+pB=>\[,1Wg}8]mʻ2808kad})n NApf9[D.,T+'@{N&:L\@I~)n*2bQ%wbiPKoAdw-\罻yLڠOMKN26I!$*̯=lܸ{ظ?71@}@~??߂DF> endobj 223 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 224 0 obj <>stream hYnF}W#ch*~Pk"#[ѿRe4eF42;3LȬwB;QX#LoW:o#J)g#aB{J6oJ|  ;#_l^hL>Ta^OEe<}}H ȉ;{1 `y/ F6i֗qR( 7 RU*r56v8'ʬXb}hCxII=tJь^Y-/r2QT&TDaUS(^<vJ˻,/pR^fy*PQR~"Q+eykJN(S394_6;j-5J0$pB$AE؝PTmI` yA_A@r8BWXPb E+ Qxx)2Gb+gGżu 8b›"qo].{49=^@iܣˍMiCemoȏ<QF'[ XCj bXK{׸~57%q?SM,+ZoIFsX05Lw䶾ҨAAƌČN X-`Y)8( kFt6\6vQzNK{հx]2-}iH?N+'6f br!cYawRa#T̎+ r0Tt)D^^l63بKU1b{l L˻.[_`*L ZE`+AT0Ht]OI-٨xӔSxDUE׌7HwgOJK'gJ c`AI3mO/kҏѤO$9HR:hOxKs"6xڤDtl]=wPLǗ I$&¡D0KR5p|}y\}3/NO_ҘUt h'R%ߨadY~8;wtB> endobj 226 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 227 0 obj <>stream hޤTN0}WcRvP UH<BwdA?8N>TY/93w "e4  иH;fPqHqO~lP*2_mg Hr  1?ϨHf``16A,%K$,a LeHM|=ѣ㓤ȌK ϸqJm fAUVB)0|hzAl(z5@JD(F̬@uL|a7c8 A ͔P,š\[k̖rF0C1ֿ âbDqLk~Fy5pg0Dii0`+鱆* t0Q(DS 0` # oכLS;Mox j+\Zj]]!uTM.a6VjOH'qߣGa.'=~fWxx:ªᠨa[[ ivBw`Y Y%xY0E=B JJRh@`t0} endstream endobj 228 0 obj <> endobj 229 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 230 0 obj <>stream hޤV]S8}X˒t[څq]ǦSWB!Cs9=`PBkBAK SXpOV_P4 PCv8:m-JE8ݔ $ͤM9X<[1&8bLqGi*1 #(&Hb X $WFxl1 i]#.8f~C,4n4&%&6ҷ؆ eCGQN1aq7"Fi j[\##mC=3S(~DxosJa<)%X1|Z40䁈f9H8*_ JP@&@2 YE|\)YHmf!MWua~?LDsC6e@ lV:1bt QH2ݡ8HkYэ2-I-Kn4ݮQ&8^- t (ޤ{z֓HvMoGqW 1}K$nE?y3+fkMdD$٦ʺgcB҉6dL]gE3+sk>:;NY]7 m=jUmپdP9 3M[tzt⁖HjvkwI"A.ٶf>$!l~|u=#$߹-?[[7PP\;.ٍq['L7MY9pǷOj/|ȭU%Eq> endobj 232 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 233 0 obj <>stream hތTɎF+4V$q#eDjD͖Fp{]\ A AիJIh  F@uM}B S{|z.Εz c~IQ_ b>}(*Z0XCޭϋhS=$":ͥs0+ECEd&S(*L/Se6J,.>"% g)f KiqzöWÛzob3VūRK9BP]v*K1Q+i춯+#(8p7N~aNm4љ ‚ZE W9O 6+1À2娘ΝȂd":~U6=e;,bשCic&v5p F( V3 g:ʠj"iFf]kS[k"hΧVBF(aĉuupvW}96l.CaKQњf]m6~;Wu |DkB-::(L6-Hm= ɱx?ġ˹j륋C < 0lR endstream endobj 234 0 obj <> endobj 235 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 236 0 obj <>stream hޔێ6si(z]46("A.Y*ĒȃR Ea$e?S&8 Ba4'9L'we4HX!9x7zƹ RތC{C%( NhC>2L˖?e.K{E80!LZ( JR pP^>f+z-9yYm;ex OqCa4f ^}nN\1jKZ歃yR(Krg^S˄:i%Hx޼K XFB})b<~E)#)'[*4G>9 v{4Diyδf:r.Ʀ@4aFh0':~6djvCmC56d: BN."4γ xFW9ZB+j~X#x*O 2ө, endstream endobj 237 0 obj <> endobj 238 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 239 0 obj <>stream hތTn0 }W.fE72 { ( C 븭 ;i~;Jݭ݆A$!ux{¡ RC+F0xh  $h. ý8bP@NWPç(˥ÕC++CJ(K 6%u0ȵ6m*MCzQZBS d*BP\?7fa/|RVk&sƝU;œ߂pK8`<ru\=VIѨ9Uv;"f0x\5s^2YZj-9k4; aBɀ{ ceϛEƤ̆ 0uj}WvF|VqA 5 "3@w>)PHΘbœl.$Ge:bq3S8^p?Ď("?䑇]uݼO]W sÁXen^+}vbw,U\on*h< cnw?B$ p7 endstream endobj 240 0 obj <> endobj 241 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 242 0 obj <>stream hdTMo0 W /K2l:,+(QSqi;ҲH'LB ,s43]\qJ)_.Εzv|^It(_ 8i 1n0?=G3;XL.?&IIsi\dVs9˕$)2 ËK\ϊ;2av(>2 RUX~>3}N+{ɥ,AʽA(ۗϽğHuz]Lj}ś߁HK|Hi `2U5-Uk#b=Q1InhovA;AZ6eÀ9Xc E:9"jlAQ e%FP6-ctn"z'yܖǰ(eUꈜMR{丠4qs#fzXAoQ3}D VɼKL$𞚋:8uL,Us-tu|tc߿c !~8J(HiD:&ʘ,͜_6ٟ,53w1k@oe[6<';-i߮ܔ =ɥp%15O7=>v[E{y·' endstream endobj 243 0 obj <> endobj 244 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 245 0 obj <>stream hތMO@+*yRCӪ**Kcc{fS)T;w? X)O*rOL+|1_(c q9|[rXD ,WA 5V?> endobj 247 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 248 0 obj <>stream hޤV]S8}X˒t[څq]ǦSWB`' s$g (4.ឬ?i +|qt*[ q·)EH I s̱ybL =qŘ$ Tb@:GPL@ IR ]""cӻ G\qJ$XiXhLJLl$ ʆ^˯bbn=lkqE#1&qնGFgz:g2,Q0=>b?0 p+JIM>g1.W[N;dA{ DS f?` #$. %E(5NC/*R标l*p٬t%c6A.(e Cq6Bǣe5[N[h߻]1L,q>-Zf-;?;h Q I-1-d Em' *ٻ(cH܊z~fV&ךp5H6MueS;Ǽ;>ǥmdxV+`><{b)v<95_}]fUQ.d۲}ɠs!V)<2FQ}H/$yq."z- lVX2$z,qÓ.W 51O R(<:§w$fbypTa{ ߪkU'.9-mnՃ=L{?3 ay.g?N`1bϕ endstream endobj 249 0 obj <> endobj 250 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 251 0 obj <>stream h[r$7r}ﯨzp"vHe6V CDʼX$G'(&'l-)@&2~݈g+eMdS=6*~synoUY!'7omuXM <DF +'4u>~~#Jȏ5w~fh GSjaByxM02?mod/K{NkoܠYca۷/~>S>f钶UktNr)פO{w4z[ JV*T.قV>X :بZam1ΨE<ـ8}Vp>WQ?|oֹDAA@t28OY_HN6/4Bn #}Ża-*ULYن">Aĸ%꠽qKhKKnOkSjGN":VoCuq5sNmmz?T7?hxQ4YFS-n  =!H=!|5F752ɘ%*;vF:e@ƞv:ͭXS8uG] I\\8xV=ڮXqן$a_?jeVjtq;Q6.C!+rcDo"0hiI;,+T7@6r׃GrϪ18ֻ]ogZa`-ͪMy=-> JF3$#}88)΂W2棞eO0Uǂ`Z8X i*$ǚT?`l?H呫d:vPftX5SSHSjM_s#EԚpBOXc`R֣)֡weⶏm VQj?pu,&;nFU:67Wk!vgMsĩ9g~1OxeHHnu"5M~ìjyGGWl?(t(GK"^}h -= )x"IB;qiSE)KSOzii xSjn%D[vGOpԳa%8En%Cp v]"MyF˺ @ҨmժhH#65ÊGqpqsDO0O1joeSv~^"Bw'cu꺗4@.yS䥝5,0O-U\,`BiNJ 5.J[_7 H܎=CkbBf6NPqND_䀦T0F('D5wYq{;@FhGu:ʤ6f[-ҳ= H9pny?xćNpug0Z-` G𡈟PKqZʏbnwyGiM DLd2+$? DBpV2PX,|Q!e&,&iP2S0Xv pֽfp| uc?;qjR5FF7,N/l'-!gv̜A78CD9>*LY,ء mlEF-P%w# 4QfǑ-NLm<4x/W"$!SCD[h(vUi$Ձh.άahzz00ԅBr dܦԳ*BQ!h&@N.ө:\+ZSȫO}=6/]4rrl Y4G^(B|0)w?, >`Haa0BuNuk_D_p`P|HYiG A 5VfMDfAð..oEqD*ijn-9DW?/^`Տ]FSDˆ^mLD"fT"|;jݸQQf )l![-#؉2ǪJ[Y5{%c{B-O'`iH);1FQ42@pA5TXM'DO@MYZ)9.8Qw`maHٟCQISs)~; DUf%] );@ϑҋ؉Pv(ؘPe%9b ?.(1#єqp/Hݶ3XQ$o"̘/HH $z~TaDIA0#uq uJLt<J W>g-]Ya˜A@{HYrk^Ax{C}(qN,rHs⴪4WS^ .~}ӥIQ"3՞yB.91?4֐ۮ`"r3I͞IE3>R1H"uWR^1 FБEY5 b'Mq; 98uR:{+^'^'}Jۤۤ/xۤTN"W|tum]ymaۤǘ7#^6iZ&CEld(w ?1KC^ŴL ŚōzQnߖGT&uϠ+wGRIEG) GN6#t=Cl.m_\(HG!+S-Z/bjq'4Z7^IbXg|!yt X<zG[ytKRF/<&^?߽OǦ WƥC 4}<)QE`=Fqk#SӦ_`O/U?m~苳"3ُo60aaC= T !CmGno0u#j~_ m endstream endobj 252 0 obj <> endobj 253 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 254 0 obj <>stream h޴Vr6}W#)!v6q[MQTHڎ$olEo"aw9 O BC$)T'ڕw WCN88v;nY!P*B<5c=`t㻏"*Q[G7"A1AB A L!HMh=£ 3%h={>r9I 05Xe%DQ@;;#|zJl"}Xm V+tOt/m%e?f8<pwߡŔ,!YKkpF0Cc ''#3E8p#SWn,(A;+- z mZ_4:8t0xMNr:# JPSVޑ]~7i@\!ZUrylZډ eDx+s@Q˗*'7n3QB΃S#\Bf(1s0 Kܚ2|1&nfBVCQ>C &W)!Ol$ڄSI+Cs(CI W)(xBq́Iо V-bޕ~*!IA >CP'[{oSjshJ;o %FԌ_奈fVoـH Ye"ʝsqN(/ه?-ߠYUT#8iA?n6iy( 8=iB i|TL5Re ĭjg)Y[^L i r_&y2]MEWSA)W0HyYat9P6K^~Nx> endobj 256 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 257 0 obj <>stream h޴[s[+HuL:ٹmFQ78A2p!v8tiunIJtm,aL%c uZ'^yF<::(KMj+1L4X *͞x!$mR|/)O#2ݞx?|(thFJO!þp9pMYkCi Cq_>6a@|Nb¢M$-A%}WTWNXAU<˽<4RBk( xqÓ7R;d442Pp pCl@Aƭ8 "6`Q$Ix 'OҼ"aU$ IYP?\&+0lu0ֆ< h;u-Y0ͣo"ؐ,D,.J ՁPT,tj=6 P1e px4Y$4?þ,c[0t\Dr- 1 +ݛuwwx?D:F'=U:S fz+ҙ‰߰tp NEg'PR=xpRgӐڌMд{=`شMJ rTkhR`*205֘=T;Ǹ2AucҐJ+RfTf1O147 'rZ䷉@U_Fq)F* ,;<)Bqc)Qױ|K_4`419Y֫ݼ&0%6z<1}LLGAz>ni]WU WJaXiwHCC%~xCFV׷箓Eqxv<;^2rwOvoiYJ j;V&^_ VPB$HԻo? H)?# q HAW8Z-H/e dʸחmF7&/1b=1MJvnd1q;as$`8aϛݍW 8j<|XѕW7R^H#H)b7kx%3eLD΋e09Gweh\e8>&_wx* wvDnn7by"yA֥}_AM@9`O*=УP f"UC'S3,z!xVϽM?R hxko$狒%') endstream endobj 258 0 obj <> endobj 259 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 260 0 obj <>stream hޤUko6_q?E%J*)u]d@L,pD9C{w)Js݀ALR9+ q@(bI!zq n^Aj n >8[[B8mK5 $Ic%0X|^ YKάIC}\}?\\T%T"tߘV,ž(p"#2r7`LzZ_*~Z {`zmcmnc*S vkگXLC2%?B%sֱ2] ;haQnUooC|FW*ؐPu=t4Oxt^k}ѸZLshyf.Oο(.(qy )÷3qln"Nꕿp|ɱz1b_emF$YQ(1t7{e塿ϓH{E"?&ͻX5Sbhd`fq+k,͛,&{|a[8ٖbt/ظ EھPK̷) U]apߝf {3 OѴf8vjn݄ 0Ѷ*0 endstream endobj 261 0 obj <> endobj 262 0 obj <> endobj 263 0 obj <> endobj 264 0 obj <>/DW 1000/Type/Font>> endobj 265 0 obj <>stream hX pTu>] $T1oyB~0)@`vv]5BRVjx%RV܉91`-˕ 5S]# #S E&L?2ζm=Ɔ1 l >/B,T=e5Ȅ]{BW[!Ayt3c-sykWt):A"}GImua $s*c/b~7RTH;wfy?W;|B"%풚ntRzMzMXJeYj?d@si{/iOh/WbUiڇJÔwmrLOEd%BneլmNb{Y7o38;Zހ]f̖sxl}{c+Y1~'UԘ"eJҍ_lJ#Kei *&QEyR~;ISV+ mJr@WĉRT{U2EzzTSTek92JTkڵ^6rUbNR }뺧ybZ.4|NJC!=b|LNkb˱SBH.j/NjW gYN1BҔtLS;Nj.fҦdJ?;7≎-Kv>{ HaK: jFp5{N hdol|ć`KKYo[gOpG?1*+y@~8%ؚ???L"VWχp0p>fǶ^2HԢo/jjPCf5-k@mbz֡w}ݡ:PCmr!CmpVTd$v[e^ 7phv9qC8t̡zҡj*͡i)q L/ 30 Ԗe\kYN|J|T< vj`6wjAm0ݤ/ F}Yz/Su.\I 5X[ٰ~d3bV2+UZk ,~gӣ}a8KM?|ē`r ~ʝjhw5jL[=MX`:h[sF*k>Etb(10Se.x<`eNzW]zoϋ2'v ޽[WQEQp%\ w^ҕ{`";tÜJۤ>PK^gD4)YkSSgfy3}5R&~OR6"Qx>D)+-Y#nnۢ3€&Qp5VQ]\v=uho=7#9 o['g9W(fG]vT9B C+.2_!j9wJpUzlkSmDh|Wld endstream endobj 266 0 obj <> endobj 267 0 obj <> endobj 268 0 obj <> endobj 269 0 obj <>stream hTn0E /[u? Ej }gB#'2a7ky'_o7[ߍ"(7N985:/MDvF:n}ۋ*?&i q+ E ?LL~M< ?t$? )J4fH"G䟺 $4JNu?XI)M?u[ {[mCeD'&%'Zi&6S>2x9 ȲasFlR Y dY,PFR%z) c-%&OT8ߴ(F6I ƨi c7`і)1W~lǒ 4:cu AlnoT#~9sӥ9C> endobj 271 0 obj <> endobj 272 0 obj <>/DW 1000/Type/Font>> endobj 273 0 obj <>stream hޔz`[չwιClY˒%[dYQe ;r  BBXșJ>P /㏁$}JΠ{ܳ+lSڋJysgߚծ?n |UsjdB2^d|} t@ iVRe}BH|݀N4sKfrZ· [NB绖7q;p~w>x &4|OM %@y~t6@.'eyyQ~A:TvD>a;2/(/'/\90^oE SXm. 8h@A6+ Yp<5#r./5`L%@$XG0 Zp10ngH5<x^/` }"3 p> wB|ž*JfA/8 OaE '#T%x:M\=lCdiC<ŒcGl`5<3߇I>g*r,ǴzfhB);!P_m31|gH$&;L4l$vr?yt|Xʈa'W5t#F}9ar"M`-r6]Vl'f!vQʭnG׹wb~ ?)?!\hBYB#>xOul%2ϒ/67hɍ9'oB$UrGf"n$,xGdx_JT2ڹ Q~?3"Dd7݃s-!s;L4MB0NX $bk7ٮI$_A})tm 8 pε0얍M{H*M. =ygac6͈_E!@ѧjw{kt9Ԏvd$uԍS[S]UQ^VZR\TXfz2ܮ4gjÞl&Y&!QiD% f,ĉJE=AvtNգNs]:S™2SΔ$f+f"3ua}[QjR pq9ya+Hz\k44~C:mq :y8Vv& :2Q=p-GߎTliwitswWl#] & VQyE`p`Q1{phv ttyOw)uK.#CcCX%>ʼcjMZ,Q LB\IqV^aMpUp.r?3`UAkK{k"'e G`n""b#a+ ׄhg"mݵEH~[am! z4+vAo^򺃴G96:4C4:r~y%y?(N]RPu/`57/ oiLjѶVtX47vP>?Yit9/ P J =n?\|R b`k.m} x hḰ%c CuڐD:l@ukG^JhcOCP&uvHj/=߫\J Z ^QRKQNP}!jf@_F j>PїtϜ+|rEMO0 ӄaPMPc pNNZ`db܎مs70o<0߆kzd۠K󯃅 ,M>!&r2>ڰTDe|0,Ƶc`E'X5 l{9XdJO%>SߧmҘ%9}ڞ)g|[7a.¼<9|ˮZv˲-\XfQ#ΰYCT#8O\ /Nj`8'zLѢ1i &^h4P h,_!#ѻs`$2TCj?:]%D-"Į8{+[s)0ԩNr=Fw|K>|9䌀%TJ+TBn:xp2Ew6pI XOeD#&I'LmxSs0q3VKZN]#Ew 0ԅOVc٢)52Y{1_A6s,E2!"UV+%'F od׋DJ+j~S(Z:27()(* }H?r'w U~R0u k(1FB08 @*M 7T( $KŲ,+ Yvrk_0p8VX\\X4!ՓfeedT:&'\IK8=i OUqeZXY&y -x7 >Ǝ+N@CPHc!$^_]$yG}~ϙjCs~^m1 qW߯䚢Thi,J2FX^Zc-> BV[1Ξjkt5D 7wTIHK,/I?Qt{RuTzAcϟ;rAp?kv+V螬it 3b!,Wj|SX+7I월۠Yoݪ NAAiJ%9V 38?o E#.IGHA&3?r)yXyA\72bEJ & E5" '#fy2уʲRf5+' KO\% }alIU}2ٟUSɔԐ:--:Wk)fnZ̲g>$9YS=dxDvscO!bڛX~I `v N^ɝ7-&o2bHn3 `JI~n2UAWσqصEG4MG=Yz^{aQL~vo852р2լ)J.2E˨>*(:l~.(1̨YHH1R5.CT5SU9L8ztsEusiN\1I7*;uO[̞'qپbSz.yf}2VCZe }|ի\R;r/']DfYE?eJb)ZX*gֱ3t_rSMޜ&hJS2mBjvHۤMYy}mJS#N䅺:"AUqD#QGbiנDXF3RLYYes{iUw$d5O,|$`lm#%S/-χQغLM K: 7McL($kϝk %ʴVsiPĬ R$aYL,}Dۄ;)KrrKB䌔sw[np$IFP ÊFKa8=F]ݩc( zǩf;6*P*h3Z]\Ş1L3]'s'{ǟu@jC$`8hvH !<^y{ $,zm!4R*|¯$h=&ޙ~JQͬ1$y$E(7)U+ *u(wyRxY".slr^Bb_uKvϝaAf׍_tO_g:̎i;59نR|F$B*\bHI2EH ɥ.; "ݙ"mܹBx> ] LO2'$y]H΄Wg\<#17@֨l27hP&lYo(^s}kۚ4-Dr߽#wObBYEki̜dؓ9 H>@._kt槙('OR޶&s۸_#:ָWpϻ]A\0rWQ Ɇ6CoCg(*aTsOV jz)u[R2Kqʵ۷ ޞb M(?ڼsKǾTwv\17ylnk|xzEG{xo :53\5]k]% B hk#boFshw8REZ1WWG̑|G݈#?A\@ FUqWQP_۾ۢ/'m',7u77;=no|dzX2X,vCG>fάˋ6­䦄Y_=tVn6`F: !Z`Y)˕xCxIG9~#A7`_6Ĭ2]UI|oFu@ڹdІΛikֆyAn%^tǶ+'\C#x[=n{K{gT#[", FΒflv(z%h>Tr?FWBD"ԉwDx-1lpT\Ii8;hqqSkK@6!ij"y݂m·T GW#F$)blk+YM^^*2X 3'`D+ ^Z(%/7VC4u|g( crK=&{)!2잞Ζ޹,%(|$8d;*%jD"p$Z2fE,,A8l1 S=I`.>KxBddt%bΆ7[q"]8"r5|*"wGsu5yhQ5W&$FNbޭ|p=nB(U6_C>NN6lXNX{xք;b,zGf~IrH@18w#wY݈(j3̕&lhEWmOy$O9ɉoKzYplYb $>L$P4{e>.0^ĉB!^BHG.p0 &T1 =ԓwϊ?{嗖yMzGb&=g/8'c'#uj1{1GÏ"ѝ v(mt x`tHH^|~N)pD"џ8 {7_W^gup7-H F8 Bd~s x)ӭ{(FS*J[V W'eqgכ'V %/5`3b,4F#m O%xmX)xk! 8upGoģ N@{sV́sxJ詘ƒWキ?qM\X!k/sē;?ؚڱ;0f~TJ&$Vit N^!Q| 'E(. yx}$#vK$" ^4.G2pW@vԭ/ u}&-'@Lr=^.LDNc$NRSR{2ɰ#==?`ՍahM!<5QQg/ր7͔daTp~VM*myrlF-kLZPˮq^Ԙ]Tiqzr#3YTQa;AL?jpXň J_Qb}.'KCTnSt`2zTU}v ~Gɥe+gYѢ Qdpx蝋m n[տQ6 .XA1(ތ*_B}h +84F{n-7" _ws`e¿C'T}/RH bV>_/z7pi`ڥlR ?C%eD9ީA]/2zaENe:+Jn 9v&n*4KcZw EUEUU\ϣw1WXMF{W!MOyXS.C 0Y3UUY^Y|7,g4㢶HWl'N=h~uZClOد5=J B8V R#)ȧ9 Z6ckG eR<҇,JNGM\0;qTcbzO/DV֍gj8 L 73hoP`TƟYҙ&͌K҉ )n(IY;~c4]j{l5mW?I&KpcIߠǑ;H!Kf&b+Z簾8V~Ssq :4RSГ+cu+U:buOu_>o~o)WyeK.W㲕˗ _Ե|I_):&sr23JRSRS<]]+ss|CsB* RJ a}J+Ad"P<B(ԯd6hRu0y@: H0x28U?xa~%C.CЄM!` @^"P~BSeTr3YX3rj| /c [ώ97x 4E`l endstream endobj 274 0 obj <> endobj 275 0 obj <> endobj 276 0 obj <> endobj 277 0 obj <> endobj 278 0 obj <> endobj 279 0 obj <> endobj 280 0 obj <> endobj 281 0 obj <> endobj 282 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <> endobj 286 0 obj <> endobj 287 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <> endobj 290 0 obj <> endobj 291 0 obj <> endobj 292 0 obj <> endobj 293 0 obj <> endobj 294 0 obj <> endobj 295 0 obj <>stream application/pdf Microsoft PowerPoint - CMLoverview.ppt HP_Administrator 2008-02-24T18:10:10-05:00 PScript5.dll Version 5.2.2 2008-02-24T18:10:10-05:00 Acrobat Distiller 8.1.0 (Windows) uuid:58aa7bb6-7f22-4fbf-b1fb-4d5dc5600b0b uuid:0738ebb4-c105-469a-b0a8-55314cde06ad endstream endobj 296 0 obj <> endobj xref 0 297 0000000000 65535 f 0000039686 00000 n 0000039815 00000 n 0000039940 00000 n 0000041029 00000 n 0000041158 00000 n 0000041336 00000 n 0000042303 00000 n 0000046447 00000 n 0000046577 00000 n 0000046714 00000 n 0000047704 00000 n 0000047836 00000 n 0000047974 00000 n 0000048842 00000 n 0000048974 00000 n 0000049112 00000 n 0000050242 00000 n 0000050374 00000 n 0000050512 00000 n 0000051302 00000 n 0000051434 00000 n 0000051572 00000 n 0000052699 00000 n 0000052831 00000 n 0000052969 00000 n 0000054089 00000 n 0000054221 00000 n 0000054359 00000 n 0000055443 00000 n 0000055575 00000 n 0000055725 00000 n 0000056913 00000 n 0000057045 00000 n 0000057183 00000 n 0000058016 00000 n 0000058148 00000 n 0000058298 00000 n 0000059564 00000 n 0000059696 00000 n 0000059834 00000 n 0000060632 00000 n 0000060764 00000 n 0000060902 00000 n 0000062012 00000 n 0000062144 00000 n 0000062294 00000 n 0000063356 00000 n 0000063488 00000 n 0000063626 00000 n 0000064625 00000 n 0000064757 00000 n 0000064883 00000 n 0000065988 00000 n 0000066120 00000 n 0000066258 00000 n 0000067615 00000 n 0000067747 00000 n 0000067885 00000 n 0000069351 00000 n 0000069483 00000 n 0000069646 00000 n 0000071254 00000 n 0000071386 00000 n 0000071549 00000 n 0000073169 00000 n 0000073301 00000 n 0000073465 00000 n 0000074962 00000 n 0000075094 00000 n 0000075258 00000 n 0000078043 00000 n 0000078175 00000 n 0000078327 00000 n 0000079882 00000 n 0000080014 00000 n 0000080166 00000 n 0000086410 00000 n 0000086542 00000 n 0000086680 00000 n 0000087536 00000 n 0000087668 00000 n 0000087806 00000 n 0000088955 00000 n 0000089087 00000 n 0000089225 00000 n 0000090122 00000 n 0000090254 00000 n 0000090380 00000 n 0000091485 00000 n 0000091617 00000 n 0000091755 00000 n 0000092705 00000 n 0000092837 00000 n 0000092975 00000 n 0000094129 00000 n 0000094261 00000 n 0000094399 00000 n 0000095268 00000 n 0000095401 00000 n 0000095539 00000 n 0000096436 00000 n 0000096571 00000 n 0000096710 00000 n 0000097492 00000 n 0000097627 00000 n 0000097766 00000 n 0000099082 00000 n 0000099217 00000 n 0000099356 00000 n 0000100213 00000 n 0000100348 00000 n 0000100487 00000 n 0000101710 00000 n 0000101845 00000 n 0000101984 00000 n 0000102974 00000 n 0000103109 00000 n 0000103248 00000 n 0000104095 00000 n 0000104230 00000 n 0000104369 00000 n 0000105333 00000 n 0000105468 00000 n 0000105595 00000 n 0000106785 00000 n 0000106920 00000 n 0000107098 00000 n 0000108906 00000 n 0000109041 00000 n 0000109219 00000 n 0000110977 00000 n 0000111238 00000 n 0000111373 00000 n 0000111538 00000 n 0000113426 00000 n 0000113561 00000 n 0000113739 00000 n 0000115377 00000 n 0000115512 00000 n 0000115677 00000 n 0000117946 00000 n 0000118081 00000 n 0000118246 00000 n 0000120082 00000 n 0000120217 00000 n 0000120382 00000 n 0000122085 00000 n 0000122220 00000 n 0000122385 00000 n 0000124382 00000 n 0000124517 00000 n 0000124682 00000 n 0000126195 00000 n 0000126330 00000 n 0000126457 00000 n 0000130706 00000 n 0000130841 00000 n 0000130980 00000 n 0000132422 00000 n 0000132557 00000 n 0000132722 00000 n 0000135231 00000 n 0000135366 00000 n 0000135493 00000 n 0000141772 00000 n 0000141907 00000 n 0000142060 00000 n 0000145430 00000 n 0000145565 00000 n 0000145705 00000 n 0000150837 00000 n 0000150972 00000 n 0000151150 00000 n 0000152605 00000 n 0000154042 00000 n 0000154281 00000 n 0000154488 00000 n 0000154777 00000 n 0000154912 00000 n 0000155077 00000 n 0000157758 00000 n 0000157893 00000 n 0000158058 00000 n 0000160070 00000 n 0000160205 00000 n 0000160332 00000 n 0000162586 00000 n 0000162721 00000 n 0000162886 00000 n 0000165301 00000 n 0000165436 00000 n 0000165575 00000 n 0000166431 00000 n 0000166566 00000 n 0000166705 00000 n 0000167463 00000 n 0000167598 00000 n 0000167725 00000 n 0000168912 00000 n 0000169047 00000 n 0000169224 00000 n 0000170582 00000 n 0000170717 00000 n 0000170882 00000 n 0000172526 00000 n 0000172661 00000 n 0000172851 00000 n 0000174042 00000 n 0000184534 00000 n 0000184781 00000 n 0000184988 00000 n 0000185277 00000 n 0000185412 00000 n 0000185552 00000 n 0000188749 00000 n 0000188884 00000 n 0000189023 00000 n 0000190042 00000 n 0000190177 00000 n 0000190348 00000 n 0000206354 00000 n 0000207309 00000 n 0000207444 00000 n 0000207571 00000 n 0000208958 00000 n 0000209093 00000 n 0000209232 00000 n 0000210101 00000 n 0000210236 00000 n 0000210363 00000 n 0000211552 00000 n 0000211687 00000 n 0000211826 00000 n 0000212755 00000 n 0000212890 00000 n 0000213029 00000 n 0000213929 00000 n 0000214064 00000 n 0000214203 00000 n 0000214964 00000 n 0000215099 00000 n 0000215238 00000 n 0000215967 00000 n 0000216102 00000 n 0000216241 00000 n 0000216919 00000 n 0000217054 00000 n 0000217181 00000 n 0000218369 00000 n 0000218504 00000 n 0000218669 00000 n 0000224123 00000 n 0000224258 00000 n 0000224423 00000 n 0000225580 00000 n 0000225715 00000 n 0000225855 00000 n 0000228373 00000 n 0000228508 00000 n 0000228647 00000 n 0000229730 00000 n 0000229855 00000 n 0000230242 00000 n 0000230484 00000 n 0000230701 00000 n 0000234009 00000 n 0000234238 00000 n 0000234609 00000 n 0000234844 00000 n 0000235302 00000 n 0000235534 00000 n 0000235668 00000 n 0000236088 00000 n 0000245258 00000 n 0000245514 00000 n 0000245943 00000 n 0000246183 00000 n 0000246562 00000 n 0000246919 00000 n 0000247304 00000 n 0000247553 00000 n 0000247687 00000 n 0000247820 00000 n 0000247858 00000 n 0000247884 00000 n 0000248004 00000 n 0000248135 00000 n 0000248268 00000 n 0000248401 00000 n 0000248540 00000 n 0000248683 00000 n 0000248826 00000 n 0000248969 00000 n 0000249112 00000 n 0000249206 00000 n 0000252897 00000 n trailer <> startxref 116 %%EOF codec2-0.0~git20230330.db1c21c/documentation/license.txt000066400000000000000000000645001441116725500224140ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! codec2-0.0~git20230330.db1c21c/documentation/readme.pdf000066400000000000000000001543071441116725500221660ustar00rootroot00000000000000%PDF-1.4 % 43 0 obj <> endobj xref 43 20 0000000016 00000 n 0000001029 00000 n 0000001110 00000 n 0000001240 00000 n 0000001384 00000 n 0000001833 00000 n 0000002403 00000 n 0000002552 00000 n 0000002587 00000 n 0000002830 00000 n 0000003052 00000 n 0000003129 00000 n 0000003390 00000 n 0000006199 00000 n 0000006330 00000 n 0000006617 00000 n 0000009310 00000 n 0000013091 00000 n 0000013321 00000 n 0000000696 00000 n trailer <]>> startxref 0 %%EOF 62 0 obj <>stream xb```"N | cb` شxPûw^ ײLEFfdXJt]WÕ8'fQmEE]R)IWXT2Q"]I*㰥ƖmEK ιxu(fLUSY#,6J Xa`8Xl2\G > endobj 45 0 obj <> endobj 46 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 47 0 obj <> endobj 48 0 obj <> endobj 49 0 obj <> endobj 50 0 obj [/ICCBased 58 0 R] endobj 51 0 obj <> endobj 52 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <> endobj 55 0 obj <>stream hYmo_OBIJ$Z@Vlǭ, *xI/v;/^ą;phrwvfgfWܗG'ӣ.\O8 |{3}1}8:K2Ύlq|1'y8|ۗV׵CDj8_uUId^X BoIf'b&VhgqQ<*1啶 i`L_COlR0 l'@<3#h=*6kqC,ʬbkҨD^Dv_.7 )<DZuzOr@~ qY+-r7Nștg't:a C@j]&$I̋%tͤZeFl <_. pH,zzv h#/UTՅ2E{?k#:?JBgתӪ.l X&!8uTDV/!*˪cX _V׃=V}Ϩo/C|3ۗbCmJmX?AZ<5RP&)&Ѓ"Ie;өU$M\Q*q%Lf<Y,5n~WzLJwyaaL<=u^87teX ]q]#.׌;d0QWVnJzQ0#0IḎz6?hkTe $IkG(")PV8HuDR([hUEԛq(mouPERYJr|}~A\U*C(T4Dϱ}?FPkF% |;džM䏳B!#q 7ꣿJ@t!UA.-L7R#3s^#xc ؤ}Qf"~0iϲ_UtrA^bEe&~qRqx,댹ZkŔbBÅA ԥZiGdqwA=}T?zx ;#|1P<*PSs(0."C@tuz;~'N../X3?BB#H]LO'qVvz1p97\>ۛS[ kU {.%V2$T#}i`"|Iڛ:BU3KpHhv3u$|ҢLMSRMKD =9dJ,5xA 571ٮ{ERbSn8revjGz7ocbR8iN?Ce M3xώUn]Ci Id#.#@Ip&V=|yP)|'iW3`,NZ (@Y0Lϫ.NtX "4Vl/xwkGG$`&FE\8Yb60 V*eکP{WŽ Àa6`8^@|0zWQ4Q*;pzaŨD*Qd_Bޮ BA sk!xuh9p.U-tV9> p>mɚ} z䧰MnGw;l_^I["͡iJiLiF/Q@qyhQ^@M}@SsHHSpSݬo@vedi4vtw8%@FL,@p.R=&ﵳMLCY21( 1'{'C׊  ''`=eM}+Nݒpȹ#* ZT]$m`!?=;n#ǔNWJ,#d?vQN~REʸE>0@W[iUUa4c VȹV DQ3 ]t mwW8s 5Ԧ718lcQ.#V]nܩAi]"DCܽbi LW½綜4L@$DZ=V3}?N+ endstream endobj 56 0 obj <> endobj 57 0 obj <>stream hTP=O0 +<r,--Ol~zϖ#@s=&=9%l8ymڻl"L%i%wp~P !{2?2ү1@AۂQˋfF[Dе?E64!4Jڣ uaqlku+^îb=)<71ĢVB 0Rj endstream endobj 58 0 obj <>stream hޜwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" 3R`̊j[~: w!$E}kyhyRm333: }=#vʉe tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. @JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz endstream endobj 59 0 obj <>stream h8kpǙ_w̎Bf=Hz2i%"!wZ=@: (beg qų|cǩ:| ]&9l0P>?(Ʊ4h庺߻~`0gES^V{{W@Dmҫ @JEP[g_6I~=kcR>@~a; `7ܿai./<`ɮiϢ@8lCwtot>L%?-@7HD'8B8f&3Q$$*kF5ژX-/ǑW'z+.L1߉¥1xc9 h|2 ȅe \$`X۠?a3ء(?!va(S tӡ "a)8q2X fW3R?OigwH ag?B 4aa,Vsp^H!9BgW.̅~v?Q\O׷뿃qƺA鳬o }~9cتp6Ϡ|Ib D} b~`#<{a? 8/URI#:3bTsfbƈ f{7OQ8?Xbd!)#d)i$?&?"ϐP+}~ɦNЅv 3O̲9}v~~@X&a  ׅ1D[>=[gez_a5g 98\U?7v{pF)ދ70& X>B \wblkpzOX09mY WSt?=HCtJL•Heֲ{X;g˞bX T(n!$<- .΋s21MO/KIR@j"&Icp^0'{&~zi!!9`"r75X]c3l7&@ZI87߀O AF %ѣL&r>;f'C#D"Y41D$V*' w]4>ػx~Hwer޴e/N G^2!Gw="i]*Z;n~8M߆U'<{Mn)x=m*+[^VZR͝STXoNNvlNyǬi3R'OKJ4'L#$Q`@C*ZW%K 8PMNaLe,m㖶 KbVʡ _q]U"dJ7G>4: f 2 z(vj{ۃ ֨5؂|!6C Gi<UCKS<e9|-ZJÞax 5RW5Pa5FMLFO)34{-jo[c>hŸvm.~I5of#Cl0^]kǃc/ͪk1XEg[#{0gg5>EQ/MzP>`zmH%r2C3l;fS&k †&D) Ar6NTԥ#4ů`&nT̻@1hւ+ҡxR.eVী;@_T"e?N}2P֬V-/oS )XawFhmVaka-"6hFF_h[գQ/ L_54^wI障=`Nh/Hʷzg\ƭ8hmIܸxBi5nA`7 cθ5! $cSDL2JCBZ]2{b-SDƽ [4M:/OJ/>0a!:]kI:ZvTb w P؁s✬y @z~1ֳ sm`ZE8Zop<GL#_q ,Z$$9?C!\{l>፣#Z>o8U연!Zcy,pȠǹ+\Pم7q!ET+wxgNAં* US4J}̒+|TeFqZ ֭֯=[;dHI+MckVfC2K@ b%M1 ~irnq|n|2T}8wI;ZpGF?8B8Y5u/0(qZ@(-!=Ԃ\ UQTrof(Ei 飮@P*R׵EJM;MJwPz|fT٩4vlQ[{-uu u֦]uog} hp?b"ݠ ?'j@ rN/Dn}둪pNč(iCbpžǫluPk#6B3Љa[Ƿ_]3DcP0CB#ңWroB,|KeD gW<#K}ȑ endstream endobj 60 0 obj <> endobj 61 0 obj <>/DW 1000/Type/Font>> endobj 1 0 obj <> endobj 2 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3 0 obj <>stream h޼Yn;dd㢛fc9XS$K1>pe$;i زHw?^bӝ<;_.cuE"Oo/; Irwv~E"GtYue~8qQ\ \}ggRX|%Њl7q|f;x(Z^ MSډ/gzkGU;%rj $+V9}KYfReWۊwd}'8QՉ./~wE{ϴdq#ٍeL,@Y 88X)PR(0^AbZKkTV kځRBt }xFsȚۺD*Q֛ fڷKfndnQ ~Bu*^D.{۴A1TV3vƵKZ˪rR])[14nTXCƇT-eA#Уu*K,ۓkUקmkO!j5Q*7ftS,7ۆhR;-]1CuXo~ʁէqr!|]}p֔V{GoT`l'K/iྴ_UIhDN #[ZsYܢ"j5,Hb5șlvGEPGQEؕ ;@q;I*mZRb _벬H}Q;h_Fz8MnTp;K6z'K4+z]w.wjBW]O<s4j͍%u4dk:A',ˇa`xX*L'=*mܨ9Ė!#U] _\8c0^`#}al |CZM@x(6 Q1Ƌvc`14hA9(tD`z)|6j͇&n!FPiY|PFc(̀  RSv9d0i)@?JϨ[l6,)LnU>O˺ +ޫ BH'RCώN竼>oȕyXڄq&jXRe6'ű©@5F)t]'$'yZ ċ0 ]=0} ͆. Ic$qC#JK.6X0aBȬ`2C &LuS8iz/o ?g<" ZxNr& {R~ 0++`𦒋S`&`܍8}у -U !K3g~;?D5E0%5`u[`ilyP[]B3U c6\\%R}sZ׃R󊲸0g..2L@YsyDtaVm죳<|L(݇ 8אghovy}WuJѡ{NL axb4ߌ;=LK튺s!xBYQ~Hqqk[cӨM#۰-dB|#;xc>S*^_p p/9#|:Fh횜O|~5'45>B~G~>6آxR5<@w)R/PqeG|hG麢uk@=T`)q3<LIo:nOylh6#:=$B?Vb%}`uFj4C+iY#1ɡ4XjNn%Z4qip`hk^=aRt| ;Il\JCő.No{tk$040V[%(wm׈@:8+Ŏi h*_;E OnN39Qf x*aOBhy ,LBڌ^s%zAZ__YO5gXx i4=0UeAK0,8 .t*YnޔJ q#ghJZkN'4!%{Z8+VyыTtteHgG]:>zmnx-ڤmMfa#DA̾Y#\J5uwAl0OUīނ&"v͎$kp9ku7Z4q\‚_WxzpJ}y-DyNi錎7U>0&eAeL32vaUV%ex@$zK q\ѦkgOX+OǏPBSjopgXC^8Ɋq}?׮}{cW! fLuz(ol_Js9z0N'쀛^|m١ ЂðGvd@}l }.+pB+@DǞ`;=bIhE`ߙb'^yN"+ '.4)NUh%5_u_?>3 9y;:Td' gO ^0Lo:S)hS0_跲/k^uG'7AS/#k* endstream endobj 4 0 obj <> endobj 5 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6 0 obj <>stream h޴YnV8L.`'&m]".:K*Iv"nϻs97I)vqH"̙fዿ:bӜ]-^,pb}V 7vXq(g/^6Zb&+,۶#wFYۼ܈(DjFov2E^ 3ɜGQ|qWTi j/Y-V XJq2뼐LdU٦yRiJ6Yڼ*asrO,^V:`@7ġD9@{3\coNQ;(|)l$l+HsKRŅ# *]|ê7iR4]Zx {EVdY'`<) KiZ! Q յlFqD(6.5tu  VT|6nmZ!źpMZ|kKz%hG,ʇ ot`wFMSe9_l- "Nh9 5Pba'J,I M[5/QUdzqxwƁ3C3:3BgZR)?&c8KDoo!DZpKu o08:rY"(0ZU2`]ˍ4f#ӕљxͫF@Y*Qcı?^6;ǑO0Xq<},$:k]0RNBn|!VIz@Kj9|t!Лw}VJ4>ؠTTqr DV_3rKRpY-8 |jL?LC4_kG( b +'}"CCZ3@] ^GdC-T-B/. -+/ y {<я; j`O;[ ohrA#:|T "U fTRpF&au!QˢˬZZYu9~gQ722@HhbuGlkAtf9WwhmZU =2\5R[豜ڷF>DTCJO%]Ů2/r^$r,eQet.oN-|v[7^- OR" ) {.Xzs,kWu_=%o`i\> ,ʚQBNZ*y"kme *N8h[=*VQlYR%ԝ|ŋe)y2!Bl!M}ù5ٕG{ʉ|qJ^漼pGۭzd/k2XS&ӰF%h݊SYfS&qeP( 4ǣ$2 YnkQ_zHHpu wDcOY2Oo"۳>w**0F,qjvU l:>QB_$/%7▫2 p~BK %ksj}M8=?l;͸cX,xU⚶,Ე&8X! `Z0=#Htc"@:N蘊/1T{8(:@43` T6@B)zќW7f-TYchTɨAv9eW;F=.VE#vpTEخ{"m{.%HV JWcH;TS% c'iRyۨPjP.@ ܵo_}Il,kW5fԞ 9.f#E*2WO?0̳1\p#B|U*doJcP~H|IxCV:y1"/AbJ\yy3z+JDƚ:r91!SkQ@,> bS8BHV2o2PgV[lyPX]-=.y5NYb*+AL+ B#O>CC-ljIEt0{x507-U &'5W wFB.XMF3/F0CV8I^<Jя@)_rW&TLHο?B?_gu7+.ϰ?^e׷^>A^iu 2z 'Q 拇15)_9r[WrMP $X'!^tĽ 2LM \]:jDFE'KfU{SО]O!~۴jvؔvhv⤈'Z#E4 x np}0f0gvTžfWKVW}1%9( iۇչ3LΜ[AT 襧[Ș `s\$l@Lw;HdvO ztHl'(|vpHF" jC/GSေi),l\h83R=] Q$8H_dž/fC)kNuyϤ=oc6,<tUwiMGv@#\ O(+ŃSwv7js3'?{ 44:9=l!&ϨGk (wvv`1/<17L>9C?ȬT/ʍ#1 UKֳ/>],Dǭ,KWH3CRQH]aC' rn~WGm$ύ*]*KCOˆ$}j]^YXcVhw]G }eqxgyjZl*yt,C{ szc?ϗb -0gm817mbe)k|j"{ʮ^o: ƚm%~O?ѠcK_5Tҩ6_Q磘f- (i=/͜h[?0a*_˪wbgNM髡!&Ͷ%TZTt:B>gŝ83 ߣ9@<)K5ձg`o| endstream endobj 7 0 obj <> endobj 8 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 9 0 obj <>stream hZO1: V4.^7-pc-` .5XsIӷH2CJhð(m3g\m/^./-prs:v'q4I$wϮH--qDW8X!RZv"q]WmUݢUvJ/_KRP|]hYö|St;+yi-l_VQyWԕ| eŶ U rC>Ox@ l%/:uyW7bh|,E{ F}UlFRZT k-1J W|rCu}։Z]ѷ:"[m (fhF  ~ J~+xzMh l> BMWG|.;%PH,("H, hky'∍ɚ6%iT}J*++ZggNnPonkъ+=g Bg5l+޹G&:>eUaKd1|ȁS@O)xվ킪0Ȣ1Ӛ`4ɉS?7-HɢRY(/εp䛜io 0:dC6\86nT>YHy Cć}/ART5O4==6 #jRy67:HcffRα'7c~=͢T"EiN`+JYqHlȳpZ DF%78by)LJc _#v $F[a-+9>oQFGv]=JJElH=D3!7tWy)|y4'fxM鲬s_sku船k1f̭?Gm@7;ps}8Nj:5?M󥎂kv^(䮽2V7lȡs{Qn5p̀"1O#A7B̻ f#qa{qT  jpDK4 Q>5@y0W-WN\{v 'f.NU|8Cv8g(|bep~x^?,ReT3qxb 2$wfT[?BM:^M˹\ i-mścJjB {hxMAf8¼2P̻>+'wG(U n|! Dk!I{bqeh]kZ߂Dk^嚰ĹhJw:*03 e%5}7Pg6!mt ?jԡfiS8n~LHb&-R53G+E8:Q10gҧ3fSZ/PXЇVri<)[ ,nB `ZsW86&N.-ݮ-XI{E>.px CE&淠 >T?F endstream endobj 10 0 obj <> endobj 11 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 12 0 obj <>stream h޼Zko_1P,,Ǧ[ q6[7 q!PbC Urd%>zP.8ssϽ?_{;{1>{:ٙ:Y*\\Bb8{zŢh+B9b\/.L>{ou:ounE{.ȉ,hR,ԉ;]SQ4N*]jnfb3g>:~Ik1/ZnlG絖'՝?٣ s{K LUe_Y Ztԯ:/ ~錗kQ)-񭶖l;QأI`Tb*Ū٧dRbNjdєr7EމYS(rRYw?EpV9+'-s$D\4E<։]ϸϏ6ӸAlVZ֦1֡9G[7=1o?7M61c9fR_~ꤑl`Q:ah:mXcǺ 䵸 s^ qV ff)|"xrz;MshQ/seÃZm?M,>LnGyN5ߓϞAa?*R&=BC GtҕC.ɬuݰ"'&n'kI~c{+^;Iܻ#9f o^ A 9,S`̽:HDnZ$)JW 6I,O١?`q5| EWg}=|)RGL$yUh7igrK828 xN2:Hp.ӁP9Yz마[%AT[yO((7hi D>d:x2bpP *U y5| `PU|0` G$~r_4<u]11 {H jºtA>{3]#Mn@zeMSPt~B1jSQCiy~1];3?zA s[O%x"CYJdXQA3FͪU~)~9jVɮ>`W_ϼY $&ɖV. FD>$g& (lհSṸN%*3`nYŲay)t#4o嚟`5aPy:,IKrm-1.!8{7 }+'aNHkS^W$tn"B:0Y-ӳ α!p~bt@/0 -bChiQ ~ x!m5;V,W&dGoXt@@5dc}\dc!M+c{G:aup]N ?I7G/J L q\ cXϥ˺K.q u©6\/KW`;Y\x5~J35߉iX}GcaFqf驪j(Z4 EB)$T\)?%9^ߠFÞSe Ô`#vBIŒ:P#zf7G 3n r~NkwRѳ{~XXl{;jg(Q"T"&BjtPHxY[9Y`ul@zqP)l<7 ;?۝ɉ\';Yh[Z1,>/ˢ#d4QL Q@}7!e¬3߆ sEA,\W{j,Jm (y b]ws~ "dj E d1WׁH,5pvHh-`p]#P%ծOO+q}|/Օzis( xbK${zKҾ$D%) {0B|g79P\zpd{D(4ȇ;jy+b 1(7I;qob {)P`*e+'׺ 3O+JҶsU5mmŋˋ_8._~w[zo)Tk; R9DFRψ+:MOo~sM71ۛuax,V [{|n`(CD%ϝ:v6te"DoEGJڃN+7cDR43Q7kHT2,؉t5l< $ endstream endobj 13 0 obj <> endobj 14 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 15 0 obj <>stream hZnYX4oŻ ٦ n0(r$qK/sHJIc^fܾs?];bݜY],pbuV "ϊ}ڑbqwvc7lѤ-)z8޶W.,{?':r"gm;q<ޮNʺF-yIlN8/qq axGRMmU*$/r-ȚZUgBlOʎ/JE?:s+ GCUg N).HR?AD5)86dILd>4Moݚ ~> ~Ŀcᙈ"oZDq K[Jux"dDU/3$م}[I.guU X %ԩeFLތM}5 OS,Tn@Ɯ2]vP.ip%XNTYK5n _`QD #CTSԸ^m/{+:E0 f?C=x\W r†JMFZo&`QAƀ"_&L"zXyκV8ʹꓷ~NdpU wI,K!E;įWRoڜeـ")3swk\T b6"ݴl 詹ouIхS؎ӿƁ(fe0D0M-v(o~ńri&uMB!HjĖh&}6{TsQ&T#dcJ^& VKlkw9Z!sܘBCۂd8St6rz 7#'18~K-s$þ󠴿PAT# D("0é@ZF9_2b#!(YЈ- &z?vti֖fe2Nj"3% ‰+,R~WuCנj!aj%k q5]υ <1ĭJ9DBKrĨm &0N 7T/+$qD]ْ7@M}bGgU )n7%04Q] 3)b&t5Do=:V_F=c\F}rR9ҎB?|g) ,{}J_O}dF]ᨃƼ̈iE>K,Z鐓JOrS6 9z>CGmWQS%7`/_3 ][/9 endstream endobj 16 0 obj <> endobj 17 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 18 0 obj <>stream h޼Xmo8_AuIkqw@n{C=^LǺȒOd IvK 6E gx*d7l:YȦ0|KY~\T#`lN &lZdܝ|ᯙ7NOB?rQ8R ?-az)V=ll^uԸv8 tD['{2Y:,$Wb%NT ͍^:!RD,J9z;G!Jk73ʥhY\vξWWawUM9mѼ߱l.)^L5VWwbJN Z+B>^>gMřP?BqZyVCatI0UBZf>>l+%&)!IW4Ywslaʜ~L(/ϛC;6>qQl2ѹ!h^UGoXc4~=މw]p7痮4\Au1& a rxastEQlEm)Qق)BNyIKDMB`cA4Kf`@ɨ V YlՆa}C0X">֭ATU6hsfT/~z>ey`l{<:9u$m614̟n5kD'oL>{h$;0=]݈ endstream endobj 19 0 obj <> endobj 20 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 21 0 obj <>stream h޼ZmoF_ЧEv9A`)ȕM\N7~.IQ[E2;;/<3=n.6@xb;f*3ϟ"]b9[Q(6gW:'fB'Ll|&',ׇL s.o|!B9(ԳЪN8ӅH"R]Yk^?l֢im)2Uο7>6z"7~SIZĵTW8E]OeTmsA2z/=cӬVIS_,}ҾʧoS H~J\#ÈYYw]2% 6yP\$y]J1h!mKB3\]`FpD?!^v+^w= <) z>HYRej@hZg˰wgA>>kUqA eJ`msP` #p] &<UGRjĮd x+qSg_g ۘA}.9HH\ ]ŵV1 G~1ГKu ԠN̉{gn1fwm[P]+t\-G_OQ=)l9]a+W( {5mG3% dtGֵewplw+?uu]ܨQBg)S`"҃GՀ12|=%_7Hnp|B iO4u&l5oA"V9K|g^ Y@D!] keI^3/SW Cma͢PI}~'vkk;#J=zMEzR prL1ŗ&x 7}aK]m_2Kj@l@$O{'*^,iwPT: lhV@L4R hg\iz !*@5HsUװ2Ip*F),9h7[$$Y q#E<| &y3 G89i_^ΔUAA/\1 +9#OGm25ytp9(fau[UeṔ $rTd2ʺlh{z'Mgń9 &Am\C$ d0$\BG…7ǰ]H,S|^S CA#AͰ^$q&VEFe ..wԑ0J%.ko-boB$fPw졭Y߄ $Mԏ‚ʢ׵jcbh1z{yNB_Ai=ٕ`0YDLa`-H;f1uyLIm"\"Ta@R\2HdjlLVG}8^IpUkX=3FaxtĴPr;imrȕfy_QhsLSwݚƥv%4ρ JfQk8LL؍-]59ɚNׇ|O >QVyK}D龇R4s IDƞC>UlbsUCg20{wWCeLR`@BMvOYAX!s2ϒP !<Զb!:aDw.:'un~͛loIS:47 _VQt]0oh.M3?DM,~C [>/H(c:4H: M\&N{j}=u‘Cۘ\49 } >_sb|boLZlc,Z"[86D%q.BnĝxZ:e1+uC"7 3\BQciɠ@,Oid3=ywcp1G3s3)i$oe+Uٜ&Mmޅ:#[fPNRhLI=#0DU4-߭1<-[V"8y26"ꮉΚ=B9|`_f0)ThOy[y<ފ.~ո">w'vAPaAΑ #喓p{DX? cPU󨇆|2"zԑ(AW˾@`k00 Rq8D`y7߷ҡ<>d@?:T'///mW!cR9{@#8 XlQ~bLeFd]$c.#hdBc7Uy-p燁pm0ٜ_( endstream endobj 22 0 obj <> endobj 23 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 24 0 obj <>stream hެZrF}WL%G HmqRx%AJ Yo_fuB2ӧ{@lɛɫr&\S1S?%tXޞ:7 =1&Nb)O?~GbDN2l~xK[ݏ  /~x-O.IGr)؟}HOlXkaךƼvيu݈~wKmm:FhfU{z%@4N5,u)T bbL `ۭ~n0e*u!;S>N7"|鞽A M@~f C?' 6̶͕ti|!~Dx 6]Ț;o&/]k0tp מZݪ,c~D3#DU ez %r*qSrf :w'|iuЅ ج 0k+hz R0Bֵ:G^RhwKw oΪ0ga:7)JQ }0}Qޱl4_UmSJS.>J7ͩ+Mq5.?}a) ,@zpsz׵,浤/79=d`-:6eVcyP6 GnqBCzq"f h"4 GҜm0lTzVdDZSkv[w1i4~AiY|lrqnܬe^dX}7v46U8ǚk|4Oqm^W?6۾[JCd JXश aS#]9w[n݁P.0-CN~ {C*k-޳{D8Dhnn"H5шBǂi4 ŹՑƦѪ! aSPzoޢ}psEn!Էܪy{FE] +$8XGݜ.tְ琸@"N[ц􁂰=vh1a<=(|ǪOu‰`LX}fyVs &Ef>H!r05ht.z yl0;A1Ȭk{JCdT`anwȌ2͹R\vrȕ*)WyD48v~ X XdlY2bIu#Fpm9(:s&NyfgXIcĶg̶e5sUQ. '0Q37TVNier(MbjQ5|pm_>rMt'슅/*@cX|]_. ,y;&. #lm*'ˍ3HNMw!Ryqp?kG=Q]GqZ 1Vљ#9 lJ2`tUC$E tۨ"W1le[Z008]_`fB^J:< , (Mx-o7L"?>wZts"\B~+FM3C| R.zk9@cm46=v/b$PnpbK78rlp NҬ;P |<f]C'sC3.ؿis#]s-0:z7gů_(Q DU$ <:WEeg#D @=g~ađ4}ks`2̍8 U/[DC>DsF(C%>c̿q|&D_$A/8xlA~Orʏhs1qd(cqz#K :*0kp_dnLAr̤P;HM xD?tvXǤrn'4n&p`SOS7 ͺQ<]5 l20YgZro10VMO^_0nAkp~zQYiO;{BQ!Ժ\/?uk; qbv|xY f\n8(=D{O\ B1y!\ۥNQKGԣڜ"/d(fPʚQ7|$v, )+a0~~aWzё]c,'0[< 7;: \@X[Z>|! 8g`SMXA;%!Fd<}8Dѡ| ̓G( bt.M[JfپK'5&#@ ]-ͤ gvRē֞&IlGByAS|k}"r!ƒb"tJԫ EEꪊ.@U>NO?r>{ 򐏣N1%o(b~PZ~3F\MQoNEpLŵYLEh/Z1 r0'|W^E.bԝihS$Xy"`: ZЬBl:3FrD`a0G[{N\KKYttxuԺJ-\V/#C`kf$ f >P&ϟM*. ab 7Fca>8._7a~ Pcwt\ܬ\!!6H̖4ܬ7{4N.{{CF)>jbUੱmlP@9 V<5fQh{HNܰ{/‡5\#5[x| pa/ݦl/:P2̶mfugk(8};ч"6B0F"=C9@}&>sXC )Z6&R^{_Q!Y3?bo _[~LJr zvF>Ƌ( 7 ?ވgßl;(Ɯ.BTD ) yliBYny}礔H'S49!:dmڂk>nNJ' Ml9:Nshd/^8A"-?oeժOP+|eq>_.p²jҥVi[q,#Í8yx0[/X{I_/_F[WZe endstream endobj 25 0 obj <> endobj 26 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 27 0 obj <>stream hYr}W̋k)d::qY̾X)Hd!Dˀ]7U٭2E\fO>|KWl٫:Xߜ&ķ@Nj'Xߞ\H䚞p3Gsp&Vk>O_Ian ؾ-q\\> ߫[+}˲RvJK,(n:ʦiš-/ΖI,`7qɩhAAZ l lW[v(-y|\;S 8{ANB_eWfUOW̩N\Tݩ7m){s ETEG4%bā͉v7=nWւKisC%rRBqUl P\P8PD.IGY.s`[%}}=OL4?p99&x*.q^VRۉR" X նhζj0wbF̂#okyï#{d=c.sU[ڲcO@lssYU [w+6ZpڷJ[KF J$EJ!h{+\0Ho!tKsSWwYUWe-.JWNV\kQNϛס}cGQh""Kqk?'U?ȃ8 / )嚔@ObH5J/7=EܴY e:,kKؤGnPAT xoxOpWB/$b[V"N) 2/MґxȆq2r7aA:ɸCz<%VNq 2¹@>]a "N1  IW\ca,j̩1 ݪRC + 5lbX~ Ɗ >C̆@4~d܃{̴~U Ҝ[C Ʌ&~ȳ<ܡ7WøxSwG}%uh˺$5+Ǔ1P"t -Jtm`> YM"JƺL``.2wݾ ;ƈd% xK0wc ;i`f,kDzI|qO@9W̟AܟbdPPb[a` Hܧk{S= ޽VFBͅ}"}FU Чأ4q8b:y|1'7`nm }iV-8K7w%'}~ cY;r/&+ U=5He}m)oi EiYJY㴬녅Vvg@ ^ܿ(Z<rEtv>RboZPP^џ ?Ǜ}|T ˜ endstream endobj 28 0 obj <> endobj 29 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 30 0 obj <>stream h޼ZmoF_ȧERMܵDȕĚ"UDNo^vIDZmWٙgyf諟fX5?/|y$cǟM&b:N8up%|hb,)]ȑ3 xA7ͅ+ט=7G|;(;ʴͫR=~C3tGRʸeZum5\$$aEĶ O:?>c>.%WGr0#>|${`ٯ?7?<#5t%-"/[|4<Ϟ)3] UO[MWϐMw#Dn$xy3X %>uխDn;M c_*H<\"2wx?C8[LxWŧSkx"zpF40[Ov0]N8SuW! Z,Y`mp`o8%H^ځ#K*+4Ǘ g/2φM$3ȃrėNܘoCo4_Y:cdY[wiV A,0 E1Zʹy)R3nhU^M&7,%C<خ|֫:W6 fn(P`Mժu. IM (9V]ʷՐ-C:XѸ+d7?΄b&2*Ly@Y3bAG-Umh{=}4V.bOI/ {>CUza|MЂgUh'!bE؁wL@,*mui.5&9yZx7`Y6YB21bNԔ y=D~}P^2#""̬ؗ֞kesVc'9(~IBy\>yv{HNJETd; 'YG IOp+tt}ݘ\ASA%zptU/Mx\PWo m#yB}$2wj˾qA:馄`@T%*/8=AQC5Q6#mQEEu师8n*kNy)Ds.;8@-SurNX[0it9FɶFsU =;̟+&Ĝ`Rfx$^fCncCcNJ_0gEB@۔rϩ{Zm6vوW$-dY!2dߍ^H݌܁8Vߔ{%<\:OAK6VdOq|%LO3Nu%7:iY?t]?Psګjgm TnTwBg`3Lma`J~S5x̐>Ŗ Nz,GHQgN+W\2@'D-"JdޏӇL~+-, btICtQw8 E5]L1nwU)BH$t˗T$ +jUɁ*ˁhQ҉~4#:`XuRe#)A/Gy @M?gE팙I <_T ɖ>yNj}Ud|_ǠKDeѫP!=DъQ. ]_ 8e AD#曤ɫ 7v,do>lT-G2HWt.ͫ3 כrW7[T㌠(]zo'zs}WӁBY7e}FHÌF4 C'S/݀Dha>9;8V2_u5OcA=j2s ;/a> ,'-Є-Me\1Ӝ3uvHѠ y8}߸Wy_1(H3v4X^-#}>%C5֘C7!ugW?g++B%O3/,I8y) {T\)S+)bAo4cc@F.WDl ]H*:Vja{̹kϷ't~q)vgB 0l͐a򟔯%LE8U6 endstream endobj 31 0 obj <> endobj 32 0 obj <>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 33 0 obj <>stream hXkۺ_Tf^!7)mH d%k䫇wfpg8MfJDΙ93g,=vN^&Vj=\&̅t"MEvlF,o.kjU?Μ?r / j1| W/}Ub̄ϟ;"e#Xtx҇QG"LDa;ڧ܈!H@a\]t%l]7.7$⊽d Iv?ݕ~].`l38U%]b$bFˊ;IRɆ8d}kַV]MI.eS~r8TCu%;PN,[ ˄|#[){dVBcBj;% *t5:;DmSUijv}o5*&5 v Y 9k] dam=zf'4j')+xZQVe-I5V2lp4<c P-NyQe,絾cbKm i!K] >ֲ/;eVo a"ħ>k`^31ݲh0Ј56RaƼd+z"M{JԹ'ڙ]uS\9b+5Dva0G"Sࢉ!Ueiv`ډ=ާm$M;-K/5zk *}^ 4D?ZbaMy;by7 S)IS-TJ,edV,k/n=QA!7U|6>BQ:8rkraX>JK)R -GKG|7$I_/+sB4!Zo#:OV HO93%? BwUChb? k5m(#eago*H{gʭ]iU*aVv6>)`uL!s$1c|3 c[h0 m:t4deHkYTd`[AekƔ(jRxj| ]?> KyC~*0 NY-Դ`o7u_oY@VRrF Xd9TXfSOCZ *-TޘsjPC}-.V޺+hbjK7>55*y`.PWRLKPt@} !;#Z 1Ay=k]S}g&T@e3J*N*tK98> ]u=JP.C|S]8[_/S[ V3;fǫTT,CTT$5~]] FCب$9P So{?[ekT g)XH,5}6?~9^Yި{F1# @_ZłX S#::%6nٷt}b3x]\o*i\Nzm"%@{P\++tcahŞF <w(։V PPA3JuRm]+q UaO9s1Փ:VlBz*fJhj+ [cRYQ N:Yd0$|y15;{>>8{}`%~m'2;z,#y1 wbn؊7;y)!98bAkv&oH򩡤&). ]Yr1j,C te}~0g:gM~OM``&sjrSJ` \UE T<˓Vٽ1#uӱyDd'u95AOJ/0E}]d&bN;s6%װ6R~M)3CssPRyi5 _, :ypzrrxxmevT,nQf( ~j\r`rp1ښI> endobj 35 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <> endobj 38 0 obj <> endobj 39 0 obj <> endobj 40 0 obj <> endobj 41 0 obj <>stream application/pdf Microsoft Word - readme.doc HP_Administrator 2008-05-23T00:15:32-04:00 PScript5.dll Version 5.2.2 2008-05-23T00:15:32-04:00 Acrobat Distiller 8.1.0 (Windows) uuid:1f593775-0df4-446e-86a2-b05f5001a8ec uuid:319c47a6-a35c-464d-86e9-9fd18fc746c9 endstream endobj 42 0 obj <> endobj xref 0 43 0000000000 65535 f 0000013527 00000 n 0000013654 00000 n 0000013797 00000 n 0000016756 00000 n 0000016883 00000 n 0000017026 00000 n 0000020175 00000 n 0000020302 00000 n 0000020445 00000 n 0000023211 00000 n 0000023341 00000 n 0000023485 00000 n 0000026648 00000 n 0000026778 00000 n 0000026922 00000 n 0000029903 00000 n 0000030033 00000 n 0000030177 00000 n 0000032609 00000 n 0000032739 00000 n 0000032872 00000 n 0000036331 00000 n 0000036461 00000 n 0000036605 00000 n 0000040387 00000 n 0000040517 00000 n 0000040650 00000 n 0000043549 00000 n 0000043679 00000 n 0000043812 00000 n 0000047116 00000 n 0000047246 00000 n 0000047379 00000 n 0000049580 00000 n 0000050105 00000 n 0000050340 00000 n 0000050376 00000 n 0000050401 00000 n 0000050462 00000 n 0000050590 00000 n 0000050664 00000 n 0000054343 00000 n trailer <> startxref 116 %%EOF codec2-0.0~git20230330.db1c21c/documentation/~$readme.doc000066400000000000000000000002421441116725500224100ustar00rootroot00000000000000MCVMCV0   ( codec2-0.0~git20230330.db1c21c/documentation/~WRL1980.tmp000066400000000000000000002770001441116725500221400ustar00rootroot00000000000000ࡱ> 5@ 0Ubjbj22 "XXU|||||||NNNN<NdzDODODODODOPPPQSSSSSS(RzS|"XPP"X"XS||DODOhqqq"X|DO|DOQq"XQqPq2r6 ||DO8O 0>wN0lFQ~0 2vob28||||L2|TPQ0qRS5PPPSS$'(%q (Welcome to the Coded Modulation Library (CML) by Iterative Solutions. Documentation last updated on Feb. 24, 2008 Contents: Licensing information List of currently supported features. A quick start guide The sim_param structure format. The sim_state structure format. Compiling mex files. Features that will be supported in the (near) future. Revision History (1) Licensing information The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. A copy of the GNU Lesser General Public License is found in the ./cml/documentation directory as the license.txt file. (2) Currently supported features. Simulation of any complex (i.e. two dimensional) modulation, including BPSK, QPSK, M-ary PSK, QAM, HEX, APSK or a user-specified constellation. Simulation of FSK modulation, both orthogonal (integer h) and nonorthogonal (h<1), and with coherent (h=1 only) and noncoherent demodulation. Monte Carlo calculation of the Shannon capacity of any complex M-ary modulation or FSK modulation. For any modulation, either the Coded Modulation (CM) capacity or the Bit Interleaved Coded Modulation (BICM) capacity can be found. Capacity can be found for AWGN or "fully-interleaved" (ergodic) Rayleigh fading. Monte Carlo calculation of the information outage probability where modulation may be constrained or unconstrained (Gaussian input) and where blocklength may be constrained (finite length) or unconstrained (infinite length). Channel may be block Rayleigh fading, ergodic fading, or AWGN, though the last two channels are for blocklength constrained case only. Simulation of coded M-ary modulation, using convolutional codes (NSC or RSC), turbo codes (PCCC), cyclic block codes, or LDPC codes (conforming to the DVB-S2 and 802.16e standards). Generation of S-random interleavers. Support for the cdma2000, UMTS, LTE, and CCSDS binary turbo codes. Support for the tailbiting duobinary convolutional turbo codes (CTC) from the DVB-RCS and mobile WiMAX (802.16e) standards. Support for HSDPA. Iterative demodulation and decoding, also known as BICM with Iterative Decoding (BICM-ID). Simulations run until either a specified number of errors are logged or a specified number of trials are run. When a simulation is halted and then rerun, it will pick up where it left off (unless a flag is set telling it to restart the simulation). Generation of throughput results for hybrid-ARQ systems, including HSDPA. Plotting of the results through a simple interface that only requires the entry of which simulations to plot by entering the indices of their records in the scenario file. The following types of plots are generated: - Shannon capacity vs/ Es/No and Eb/No. - Bit error rate (BER) vs. Es/No and Eb/No for uncoded and coded modulation. - Symbol error rate (SER) vs. Es/No and Eb/No for uncoded modulation. - Frame error rate (FER) vs. Es/No and Eb/No for coded modulation and outage probability. - Normalized throughput vs. Es/No Ability to run simulations locally as a stand-alone DOS executable. (3) Quick start guide Installation: CML is distributed as a zipped source code directory along with a set of optional zipped output directories (containing the results of prior simulations). First extract the cml.X.X.X.zip file, making sure that the directory structure is preserved. There will be a main directory ./cml with several subdirectories under it. This directory will contain the source code and functions required to run the simulations, but will not contain any simulated data. If you would like access to the library of simulated data (output of many hours of simulation runs), then download and extract the desired zip files. Place each directory into the ./cml/output directory. If you are using a PC, then you are done with installation. If you are on a linux machine, then you need to recompile the mex files. To do this, cd to the ./cml/source directory and type make. Startup: Start matlab (version 6.5 or higher) and cd to the ./cml directory. From within matlab, run: CmlStartup This updates the matlab path, and writes the "CmlHome.mat" file into the scenarios directory. You need to type this in everytime you start matlab (after cding to this directory). Running an example simulation and plotting results. Type: edit UncodedScenarios This file contains an array of sim_param structures. Each record in this array corresponds to a single simulation. Note the record number of a few scenarios that you would like to simulate and plot, for instance scenarios 1, 3, 5, and 11 To run a set of scenarios, for instance 1, 3, 5 and 11, type: [sim_param, sim_state] = CmlSimulate('UncodedScenarios', [1 3 5 11]); To plot scenarios 1, 3, 5, and 11 type: [sim_param, sim_state] = CmlPlot('UncodedScenarios', [1 3 5 11]); In order to run new simulations, you may add new elements to the sim_param array, and then run CmlSimulate (if you run CmlPlot before first generating a simulation result using CmlSimulate, then nothing will appear in your plot). You can create your own Scenarios files, containing descriptions of your own simulations. A description of each member of the sim_param structure is in the next section. (4) The sim_param structure format. The parameters associated with the scenario to be simulated are stored in the sim_param structure. Both the CmlPlot and CmlSimulate functions begin by calling the function ReadScenario, which reads the sim_param values stored in the scenario file. Each sim_param structure contains the following members, some of which may be empty (i.e. set to [ ]) if they are not relevant to the particular scenario: sim_type: The type of simulation, can be: 'uncoded' for uncoded modulation. 'coded' for coded modulation. 'capacity' for Shannon capacity. outage to calculate outage probability in block fading. thoughput to plot the throughput of hybrid-ARQ. bwcapacity to determine the min Eb/No as a function of modulation index h under a bandwidth constraint (FSK modulation only). minSNRvsB to determine the min Eb/No required of FSK as a function of bandwidth. bloutage for blocklength constrained outage. 'exit' to generate an EXIT curve (not yet supported). SNR_type: Set to either 'Eb/No in dB' or 'Es/No in dB'. Use Es/No for capacity simulations, while coded and uncoded modulation simulations may use either. framesize: The frame size. If uncoded, capacity, or exit, this is the number of symbols per frame. If coded, this is the number of information bits per frame (except for LDPC codes, where this is the number of code bits). bicm: Flag for Bit Interleaved Coded Modulation = 0 for no BICM, used primarily for calculting the CM capacity. = 1 for BICM but noniterative demodulation. = 2 for BICM-ID, i.e. iterative demodulation and decoding. modulation: The type of modulation. Must be one of the following (case insensitive): FSK, 'BPSK', 'QPSK', 'PSK', 'QAM', 'APSK', 'HEX', or HSDPA Alternatively, set modulation = custom to enable user-defined modulation mod_order: The modulation order, i.e. number of symbols in the signal set. Must be a power of 2, except that values of 0 and 1 are allowed in outage and bloutage simulations to represent 2-D unconstrained modulation (=0) or 1-D unconstrained modulation (=-1). mapping: How the bits are mapped to symbols. It can be one of the following strings: 'gray', 'Antigray', 'quasigray', 'SP', 'SSP', 'MSEW','huangITNr1', 'huangITNr2', 'huangLetterNr1', or 'huangLetterNr2'. Alternatively, it can be a vector of integers. S_matrix: When modulation = custom, this is a length M complex vector containing the signal points in the constellation. h: The modulation index (for FSK modulation only). demod_type: A flag indicating how the max_star function is implemented within the demodulator: = 0 For linear-log-MAP algorithm, i.e. correction function is a straght line. = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ), i.e. correction function = 0. = 2 For Constant-log-MAP algorithm, i.e. correction function is a constant. = 3 For log-MAP, correction factor from small nonuniform table and interpolation. = 4 For log-MAP, correction factor uses C function calls. code_configuration: The code configuration (if any) = 0 for a single convolutional code = 1 for a turbo code (parallel concatenated convolutional code) = 2 for a LDPC code = 3 for HSDPA = 4 for UMTS turbo code, including rate matching = 5 for mobile WiMAX (802.16e) tailbiting duobinary convolutional turbo code (CTC). = 6 for DVB-RCS tailbiting duobinary convolutional turbo code (CTC)\ g1: The generator for the first convolutional encoder nsc_flag1: A flag indicating if the first encoder is NSC or RSC = 0 for recursive systematic convolutional (RSC); required if turbo. = 1 for nonsystematic convolutional (NSC) pun_pattern1: The puncturing pattern for the second encoder. tail_pattern1: The puncturing pattern for the second encoder's tail. g2: The generator for the second convolutional encoder nsc_flag2: A flag indicating if the second encoder is NSC or RSC = 0 for recursive systematic convolutional (RSC); required if turbo. = 1 for nonsystematic convolutional (NSC) pun_pattern2: The puncturing pattern for the second encoder. tail_pattern2: The puncturing pattern for the second encoder's tail. decoder_type: For turbo codes, a flag indicating how the max_star function is implemented within the decoder: = 0 For linear-log-MAP algorithm, i.e. correction function is a straght line.= = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ), i.e. correction function = 0. = 2 For Constant-log-MAP algorithm, i.e. correction function is a constant. = 3 For log-MAP, correction factor from small nonuniform table and interpolation. = 4 For log-MAP, correction factor uses C function calls. For LDPC codes, specifies which of the following decoding algorithms is used: = 0 for sum-product decoding = 1 for min-sum decoding max_iterations: The maximum number of demodulator or decoder iterations. Assumed to be =1 if noniterative coding and modulation is simulated. code_interleaver: The function that must be invoked to generate the code interleaver for a turbo code. Note that this is indirect, as storing the actual interleaver takes up too much space. A saved interleaver could be called by setting this to load interleaver_name.mat where interleaver_name.mat is the filename containing the interleaver coefficients. Note that a length K interleaver should contain the coefficients 0 through K-1 (numbering uses the C convention of starting at 0, not the matlab convention of starting with 1). Alternatively, one of the standardized length-K interleavers can be used by setting code_interleaver as follows: CreateUmtsInterleaver(K) % UMTS interleaver. CreateLTEInterleaver(K) % LTS interleaver. CreateCCSDSInterleaver(K) % CCSDS interleaver. Replace K in the above with the literal value of the desired interleaver size. parity_check_matrix: The function that must be invoked to generate the parity check matrix for an LDPC code. As with code_interleaver, this is indirect, as storing the actual parity check matrix takes up too much space. channel: The channel type. Can be either "AWGN", "Rayleigh", or block. blocks_per_frame: Used by outage simulations or in block fading; number of fading blocks per codeword. N_IR: Size of the virtual IR buffer (used by HSDPA only). P: Number of physical channels (used by HSDPA only). X_set: Sequence of redundancy versions (used by HSDPA only). combining_type: Used by outage simulations; may be code or diversity rate: The spectral efficiency, defined to be number of data bits divided by number of symbols per frame (this parameter is calculated with the ReadScenario function). csi_flag: Flag used by the FSK demodulator = 0 for coherent reception (default) 1 for noncoherent reception w/ perfect amplitude estimates 2 for noncoherent reception without amplitude estimates bwconstraint: Bandwidth constraint. Used only by the bwcapacity simulation type. bwdatabase: Location of the bandwidth database file. Used only by the bwcapacity simulation type. code_bits_per_frame: For code_configuration = 4, specifies how many code bits remain after rate matching. SNR: A vector containing the SNR points to test. New points can be added or deleted prior to resuming a simulation. filename: Name of the file storing the state. comment: A text comment describing the scenario. legend: What gets printed in the figure legened. linetype: What type of line to use when plotting. plot_iterations: A vector specifying which iterations to plot. save_rate: The simulation state is saved every "save_rate" frames or once all frames have been simulated for a particular SNR point (if not defined, default is 100). reset: Reset flag. = 0 to resume, = 1 to restart, max_trials: Vector containing maximum number of frames to simulate at each SNR point. Simulation at that SNR point halts once this number of frames has been simulated.This number can be incremented prior to resuming the simulation. minBER: Scalar value representing the targeted minimum BER for the simulation. If the simulation is noniterative, it halts once it is reached (no more SNR points considered); For simulations of itereative reception (turbo codes, BICM-ID), the next SNR point will be run, but with fewer iterations (only as many as needed to reach minBER at the last SNR point). minFER: Used by outage simulations; lowest FER to simulate (halts once reached). max_frame_errors: Vector containing maximum number of frame errors at each SNR point. Simulation at that SNR point halts once this number of frame errors has been reached. This number can be incremented prior to resuming the simulation, in order to add more confidence to the simulation (which should smoth out the corresponding curve). compiled_mode: When set to 1, uses the compiled version of SingleSimulate. input_filename: Used by outage simulations with constellation constrained modulation; name of file containing AWGN capacity results. trial_size: Used by outage simulations; is the number of codewords per simulation trial. scenarios: Used by throughput type; is a list of simulation records used to compute the throughput. (5) The sim_state structure format. The state/result of a simulation are stored in the sim_state structure. Let "SNRpoints" be the number of SNRpoints simulated (length of sim_param.SNR vector), let "iter" be the maximum number of iterations (max_iterations), and let "MIpoints" be the number of input mutual information points simulated to create an EXIT curve (for a capacity simulation this is just one, namely input MI = zero). The sim_state structure has the following members: trials: iter by SNRpoints matrix containing the number of frames simulated. capacity_sum: MIpoints by SNRpoints matrix containing the sum of capacities of all simulated symbols. capacity_avg: MIpoints by SNRpoints matrix containing the average capacity of the simulated symbols. frame_errors: iter by SNRpoints matrix containing the number of frame errors logged. Only updated for coded and outage simulation types. symbol_errors: Length SNRpoints vector containing the number of symbol errors logged. Only updated for uncoded modulation. bit_errors: iter by SNRpoints matrix containing the number of bit errors logged. FER: iter by SNRpoints matrix containing the frame error rate. Only updated for coded modulation. SER: Length SNRpoints vector containing the symbol error rate. Only updated for uncoded modulation. BER: iter by SNRpoints matrix containing the bit error rate. throughput: The throughput of hybrid-ARQ, only used by throughput sim_type. min_rate: The minimum rate that achieves the bandwidth constraint min_EsNodB: The minimum EsNo (in dB) min_EbNodB: The minimum EbNo (in dB) (6) Compiling mex files. The mex source files in the ./cml/source directory have been compiled for use on windows platforms. The compiled .dll files are in the ./cml/mex directory. If you are using a different platform, you will need to compile the source files and make sure they get placed in the ./cml/mex directory. This can be done by executing the following statement for each .c file in the ./cml/source directory: >> mex -outdir ../mex If this is the first time that you have run mex on this system, you may need to set it up by running: >> mex setup A makefiles is in the ./cml/source directory to automate the compilation of all mex files. To use it, simply type make at the matlab command prompt. (7) Wishlist: Features that will be supported in the (near) future: Block Turbo Code (BTC) from the WiMAX standard. Ability to generate EXIT curves. Support for serially concatenated convolutional codes (SCCCs). Support for fully asymmetric PCCC codes (currently both constituent encoders need to have the same constraint length). Support for space-time modulation over a MIMO channel. Sliding window SISO decoder. A Graphical User Interface (GUI) for managing the Scenario File. Ability to request additional iterations to be simulated when resuming a simulation of an iteratively decoded system. Support for OFDM. (8) Revision History Version 1.0.0: Oct. 2, 2005 - Initial Release Version 1.0.1: Oct. 17, 2005 The statment "if (errors(max_iterations))" on line 245 causes capacity simulations to exit with an error stating that variable "errors" is not defined. Fixed. The files containing results for QPSK capacity in AWGN (QPSK.mat) and Rayleigh fading (QPSKRayleigh.mat) were corrupt. These simulations were rerun. "CmlSimulate" has been updated to allow BICM capacity simulations for BPSK modulation (although it will give the same result as the CM capacity simulation for BPSK). "CmlPlot" also plots the frame error rate of "coded" simulations and the symbol error rate for "uncoded" simulations. The Quick Start guide in the readme.txt file has been updated to make it clear that you must first run "CmlSimulate" to generate a curve, then run "CmlPlot" to view it. Version 1.1.0: Nov. 11, 2005 "CmlPlot", "CmlSimulate", and "ReadScenario" can now read from multiple scenario files. The new calling syntax is [sim_param, sim_state] = ReadScenario( scenario_filename1, cases1 , scenario_filename2, cases2, ... ) and there is no limit on the number of scenario files (it can be as few as one up to however many you want). The "CmlScenarios" file no longer exists. It has been broken into several scenario files, namely "CapacityScenarios", "Cdma2000Scenarios", "ConvolutionalScenarios", "DVBS2Scenarios", and "UncodedScenarios" A new set of scenarios for the UMTS turbo code, called UmtsScenarios has been included. Results for all 48 simulations listed in UmtsScenarios are included in the ./cml/output/UMTS directory. LDPC Codes: A more general class of LDPC codes can now be handled, instead of just the DVB-S2 codes. The "EncodeDVBS2" function no longer exists and has been replaced with "LdpcEncode". "InitializeDVBS2" now returns the H_1 matrix (in H_rows, H_cols sparse format) rather than the full H matrix. The "MpDecode" function can be given either the full H matrix or just the H_1 matrix. Save Rate: A new parameter is added called "sim_param.save_rate", which determines how often the simulation is saved. Simulations are now saved once every "sim_param.save_rate" frames or once the final frame for a particular SNR has been simulated. The simulation is no longer saved when an error occurs, as this tends to bias the simulation when it is halted. Version 1.2.0: Nov. 29, 2005 HSDPA: Support for HSDPA, which is implemented through function pairs "HarqMatch/HarqDematch", RateMatch/RateDematch",and "BitCollection/BitDecollection". A HSDPA simulation is specified by setting "sim_param.code_configuration = 3". HSDPA simulations require that "sim_param.N_IR", sim_param.X_set", and "sim_param.P" be defined. Also, "Mod2D"has been updated to include the two HSDPA modulations. Simulation results for HSDPA have been generated. The scenario file is "HsdpaScenarios.m", located in the ./cml/scenarios subdirectory, and the results are stored in ./cml/output/HSDPA. Demos: A directory devoted to demos (./cml/demos) has been created. This directory contains a demo for HSDPA (HsdpaDemo) and also a script that plots HsdpaThroughput curves (HsdpaThroughput). "CmlStartup.m" has been updated so that ./cml/demos will be on the path. "CmlSimulate" no longer contains the main simuation logic. All it does now is determine what type of simulation is being run and then calls one of the following new functions: "CapacitySimulate", "UncodedSimulate", and "CodedSimulate". Likewise, the main logic in "ReadScenario" has been divided into new functions "CapacityRead", UncodedRead", and "CodedRead". Stand-alone Turbo Encoder and Decoder: The turbo encoding and decoding logic has been stripped out of "CmlEncode" and "CmlDecode" and made into new functions "TurboEncode" and "TurboDecode". "CodedRead" calculates the following values: rate, symbols_per_frame, and code_bits_per_frame, and saves them in the sim_param structure. These values are used within "CmlPlot" to covert between Es/No (dB) and Eb/No (dB). Now the BER, SER, and FER of coded systems are plotted against not only Eb/No (dB) but also Es/No (dB). UMTS Puncturing: "Puncture" and "Depuncture" have been modified so that the tail comes out according to the ordering in the UMTS standard. Help on c-mex Functions: Information about each mex function can now be obtained by typing "help " at the matlab prompt. This was achieved by creating a .m file for each mex file, where the .m file only contains the help information. These .m files are placed in new directory "./cml/mexhelp". Version 1.2.1: Dec. 5, 2005 "RateMatch" and "RateDematch" are now implemented as c-mex functions. A divide-by-zero problem in "HsdpaThroughput" has been fixed, so now the throughput results are accurate even at low SNR Version 1.2.2: Dec. 13, 2005. HSDPA H-SET 6: Support for HSDPA H-SET 6, which encodes two turbo words in parallel and send them simultaneously over 2*sim_param.P physical channels. In order to provide this support, "TurboEncode" can now accept a data vector whose length is an integer multiple of the interleaver length. If length(data) = B*length(code_interleaver), then "TurboEncode" will return a matrix with B rows, one for each codeword. Likewise, "TurboDecode" can accept an input (input_decoder_c) comprised of B rows, in which case it will decode each row as an independent codeword (although the error count is a single vector that indicates the sum of errors across all codewords). Also, "HarqMatch" has been modified to recognize when the data must be segmented into multiple turbocodewords (whenever the data length after CRC encoding is greater than 5114), and the complementary operations have been updated in "HarqDematch". Simulation results for H-SET 6 in AWGN and fully-interleaved (ergodic) Rayleigh fading have been run. See the "HsdpaScenarios" file (these are records 17 through 32). Version 1.3: Dec. 26, 2005 Outage Probability: Can calculate the information outage probability in Rayleigh block fading using Monte Carlo integration. This required the specification of a new sim_type called outage. In block fading, each block undergoes independent fading, but the channel is AWGN for the duration of the block. So to compute the instantaneous capacity, the capacity of each block is found (for code combining) or the SNRs are added and the corresponding capacity computed (for diversity combining). Capacity is computed for an unconstrained (Gaussian input) using the equation capacity = log2(1+gamma), where gamma is the instantaneous SNR. Whenever the capacity drops below the rate, an outage is logged. Outage simulations are handled by the function OutageSimulate, and the simulation is set up by the OutageRead function. Constellation constrained modulation requires that an AWGN capacity simulation be already run, and capacity values are read from the results using the function CapacityTableLookup (implemented as both .m and c-mex). Rayleigh Block Fading Channel for Coded Modulation: A new channel type called block has been defined for coded simulations. This is Rayleigh block fading, and the number of blocks per codeword is represented by sim_param.blocks_per_frame. Throughput of Hybrid-ARQ: Throughput curves can now be drawn by the CmlPlot function. This requires a new sim_type called throughput, although it is not actually a simulation. Instead, it uses results from coded simulations, where each simulation corresponds to a fixed number of block transmissions. A new variable sim_state.throughput is used to represent the throughput. HsdpaThroughput obsolete: The HsdpaThroughput function has been deleted, the same results can be obtained by running: [sim_param, sim_state] = CmlPlot('ThroughputScenarios', 1:10 ); Setting save_rate to the default value (100) has been moved from the simulation functions (CodedSimulate, UncodedSimulate, CapacitySimulate) to the read functions (CodedRead, UncodedRead, CapacityRead). CodedRead no longer calculates code_bits_per_frame, data_bits_per_frame, and symbols_per_frame, since these values are calculated by CodedRead and are now members of the sim_param structure. Version 1.3.1: Jan. 11, 2006 ConvEncode: Fixed bug at the end of ConvEncode: free(rsc_tail) changed to free(tail). turbo.h: Broke turbo.h into two header files: convolutional.h and siso.h. This way ConvEncode does not need to include the decoding functions in siso.h. Comments: All comments with the C++ syntax ( // and comment until end of line) were changed to the C syntax ( /* and */ ). Recompiled the c-mex functions for windows. Version 1.4.0: Feb. 26, 2006 InitializeDVBS2: The entered code rate only needs to be within 0.01 of the desired value. So, for instance, rate 1/3 could be entered as rate = 0.33. If the rate and length is not valid, an error message is returned to the user. DVBS2Scenarios: Now all 21 DVBS2 LDPC codes are represented as scenarios in this file. Simulation results have been run down to at least BER = 10-2 for all of these cases, and future library updates will include results to lower BER. CmlSimulate and SingleSimulate: The CmlSimulate function has been revised so that inside the main loop it calls a new function called SingleSimulate. SingleSimulate is in charge of simulating a single scenario case, and branches to CapacitySimulate, UncodedSimulate, CodedSimulate, or OutageSimulate depending on how sim_param.sim_type is set. This modification was made to facilitate support for grid computing (which will be released in a future update). CmlSimulate and CodedSimulate: The code_param structure is now created inside CmlSimulate instead of in CodedSimulate. UncodedSimulate: Bug fix. The line condition3 = ~mod( sim_state.trials(snrpoint),save_rate ); has been changed to condition3 = ~mod( sim_state.trials(snrpoint),sim_param.save_rate ); Version 1.4.1: Mar.4, 2006 BlockcodeScenarios: This new scenario file gives examples of APP decoding of cyclic block codes. Filenaming: It is not obvious to some users that every record must have a distinct filename. To make this more obvious, the following statement is placed at the bottom of each Scenario File: % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); Version 1.5.0: Apr. 20, 2006 Support for orthogonal FSK Modulation. UncodedSimulate and CodedSimulate have been consolidated into the single function ModSimulate Version 1.5.1: Apr. 23, 2006 Compiled version of SingleSimulate will run without needing matlab. This was a necessary step for getting CML to run on the grid. Version 1.5.2: Apr. 24, 2006 Fixed a problem with turbo-coded BICM-ID. Saves results to temporary file, then uses movefile (this prevents problems with system crashing during save). Version 1.5.3: May 10, 2006 Support for nonorthogonal full-response FSK (h<1). New function Modulate combines the functionality of FskModulate and Mod2D. Create2D has been replaced with CreateConstellation, which is able to create FSK constellations. Version 1.6: June 5, 2006 Functions that read scenarios (CapacityRead, CodedRead, OutageRead, UncodedRead) have been combined into a single function, SingleRead Phased out sim_param.reset = -1; no longer creates backup files because the fix instituted in version 1.5.2 has eliminated the corrupted file problem. Added bwcapacity and minSNRvsB simulation types. CmlPlot is able to plot results even if sim_param.reset = 1. ThroughputRead replaced with CalculateThroughput; throughput simulation types must first be first run using CmlSimulate, prior to running CmlPlot IntializeSimParam replaced with DefineStructures Packaged using three separate files, one containing the source/runtime code (cml.X.X.X.rar), one containing the library of simulated data (output.X.X.X.rar) and the other for grid support (grid.X.X.X.rar). Version 1.6.1: June 27, 2006 Added support for the CCSDS turbo code through the inclusion of the CreateCcsdsInterleaver c-mex function and the CcsdsScenarios.m file. Added the PN scrambling to HSDPA (implemented as function PnGenerator.m) and corrected a bug in the HarqMatching and HarqDematching functions whereby the offset a used by the two rate matching blocks during the first rate matching were backwards. The HsdpaDemo function has been updated to use the CreateConstellation and Modulation functions (which became outdated with release 1.5.3). Added commas between the two output arguments in the DefineStructures.m function. In SingleRead, the matrices BER, FER, SER, and capacity_avg are initialized to all-zeros before the save file is read. All existing scenario files have been updated so that if their output directory does not exist, it will create it. CmlStartup adds ./cml/grid/mat to the path only if it exists. Version 1.6.2: July 5, 2006 InitializeCodeParam has been revised to properly set up the turbo code used by HSDPA. CmlStartup senses if it is being run on a windows pc or a unix/linux machine. If on windows, it uses \ between directories; if on unix, it uses /. Likewise, the scenario files sense if on a pc or unix machine to determine whether to separate directory names with / or \. If the output directory specified in the scenario file does not exist, it will be created. The make72 and make files in the ./cml/source directory have been merged into a single makefile (simply called make). The new makefile senses if the matlab version is 7.2 or if it is earlier than 7.2, and makes appropriate adjustments based on the matlab version. If run on unix, then the old compiled mex files are deleted before they are recompiled. All .c and .h files have an end-of-line at the end of the file (absences of the end-of-line causes some C compilers to flag a warning message). Version 1.6.3: Jan. 28, 2007 code_configuration = 4 supports UMTS turbo code with rate matching. See record = 53 in "UmtsScenarios.m" for an example. In addition to specifying the "framesize" (which is the message and interleaver length), must also specify the "code_bits_per_frame", which is the codeword length after rate matching. Version 1.7.0: Aug. 6, 2007 Support for the IEEE 802.16a (WiMax) LDPC code. See WiMaxLDPCScenarios.m for an example of usage. Early termination LDPC decoding has been enabled. Instead of distributing the entire ./output directory as a single file, each subdirectory can be separately downloaded. Version 1.7.1: Sep. 9, 2007 Fix in SingleRead to use default value of sim_param if it is not defined. For instance if sim_param(record).max_iterations is not set, will use the default value of 1. Fix InitializeCodeParam to handle block fading. Version 1.8: Oct. 12, 2007 Support for the duobinary turbo codes from the DVB-RCS (code_configuration = 6) and mobile-WiMAX (802.16e) standards (code_configuration = 5). This required the inclusion of the following files: DuobinaryCRSCEncode.c DuobinaryCRSCDecode.c TurboDuobinaryCRSCEncode.m TurboDuobinaryCRSCDecode.m CreateDvbInterleaver.m CreateDvbPuncturingPattern.m CreateWimaxInterleaver.m CreateWimaxPuncturingPattern.m The location of the saved output file stored in sim_param.filename should now be a relative path (relative to cml_home) instead of an absolute path. Version 1.8.1: Nov. 22, 2007 Corrected DVB-RCS turbo code so that the bits produced by the encoder are now in the correct order. Version 1.9: Feb. 24, 2008 Added support for the LTE turbo code, which required the new function CreateLTEInterleaver. Can run bloutage simulations with an unconstrained Gaussian input by setting mod_order = 0. Can specify a custom modulation by setting sim_param.modulation = custom and putting the signal set into the complex vector sim_param.S_matrix. -DFer  & 1 4HNT {v)jʼʼʼʮʮʼʮʮʼʠʠʒ||oohwhFCJPJaJhFCJPJhCJOJPJQJ^Jh^CJOJPJQJ^Jh;kCJOJPJQJ^Jh:TCJOJPJQJ^JhwCJOJPJQJ^JhFCJOJPJQJ^J&hs56CJOJPJQJ\]^J&hF56CJOJPJQJ\]^J+FGst~ # Y j k  0 1 O  & F & Fgdw & FgdwgdsUO =LRPa;o{ & FgdF & Fgd & F{k"#!"p#e$P%Y&W''( *+0,,2-w- & Fgd;k & FgdF & Fgdw & F & FgdFj  ! " B C | } !7!C!!!!!!""p#t#e$o$$$%O%P%Y%%%Y&`&W'`'''(( *2* +F+++0,9,,-2-?-w-y---u.ܮh;kCJOJPJQJ^JhCJOJPJQJ^JhwhFCJPJhwhwCJPJh/CJOJPJQJ^JhFCJPJ^JhwCJOJPJQJ^JhFCJPJhFCJOJPJQJ^J9w--u...1[245C5t5566U7778L889:s::R;  & F80^8`0 & Fgd/ & Fgdw & Fgd & Fu.....///,111[2k2t4444555-5.5/5C5D5[5\5]5^5s5t555516R66666U7Y7777788L8P88899輱h%WhFCJPJh/CJOJPJQJ^J hwhwCJOJPJQJ^JhwhwCJPJhwCJPJhwCJOJPJQJ^JhFCJPJhCJOJPJQJ^JhFCJOJPJQJ^JhFCJPJ^J59::s::::R;Z;;;;;;;<$<T<]<<<@=J=(>.>????AA9BCBBBDD-E9EEEFFFF#G-GtGwGGG;H>HxHHJ KKKKL L L(L0L:LqLLNμh/CJOJPJQJ^JhFCJPJhFCJPJ^Jh%WCJOJPJQJ^Jh%Wh%WCJPJh%WhFCJPJhFCJOJPJQJ^JDR;;;;<T<<@=(>??fAA9BBBBC CQDDDDD-EEFF#G & F#GtGG;HxHHI-IRISITImIJ KKK*L+L,LpLqLLLMxMMMNNgd%W & FNNNNRRTTnVxVWWBZHZ\\^^J_b_|aaeeijjjVloll mnnoooooppVqeqqqArLrQr_r ttt,tttttJuKuvwwֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺֺ֫֙#hFB* CJOJPJQJ^JphhFCJH*OJPJQJ^J&hF56CJOJPJQJ\]^JhFCJPJhFCJOJPJQJ^Jh/CJOJPJQJ^JhCJOJPJQJ^Jzzz0}1}e}f}3~4~R~݁Ӆ.$򲧖ughzCJOJPJQJ^JhF1CJOJPJQJ^J$h%Wh%WCJOJPJQJ^JaJ h%Wh%WCJOJQJ^JaJh%Wh%WCJaJh%WCJOJPJQJ^J#hFB* CJOJPJQJ^Jph&hF56CJOJPJQJ\]^JhFCJOJQJ^JhFCJOJPJQJ^J'x6xxxx7y8yUyyyy z>zzz{{'|\||1}f}4~5~R~~b & F & F & F & Fb+܁݁OÃ%Ӆ!./K$ & F gdzgdz & F gd%WgdF1 & F gd%Wgd%W & F$%@0Kf}ҊghcSTU & F gd/gd/ & F gdgd & F gd & F gdgd$')/0JK]_ef|}ъҊfgSTUŷh/CJOJPJQJ^JhCJOJPJQJ^JhT'CJOJPJQJ^J hhCJOJPJQJ^JhCJOJPJQJ^J 1h/ =!'"'#$%@@@ NormalCJ_HaJmH sH tH DAD Default Paragraph FontViV  Table Normal :V 44 la (k(No List DZ@D Plain TextCJOJQJ^JaJUFGst~#Yjk 01O = L RPa;o{k"#pePYW "#0$$2%w%%u&&&)[*,-C-t--..U///0L0012s22R33334T44@5(677f999::::; ;Q<<<<<-==>>#?t??;@x@@A-ARASATAmAB CCC*D+D,DpDqDDDExEEEFFFFFFFFFFFFFG3HHOIIIJJ^K-LLnNOOOOQBRLS9TTxUVJWXXXXX\Y]Y{Y|Y ]]]]]abVd eeffffgg%hQhRhohViAj llJmKmfmmnno%o'opooooop6pppp7q8qUqqqq r>rrrss't\tt1ufu4v5vRvvwbxx+yyyyyOzz{%}}}}!./K$%@0Kf}҂ghcSTW00p0p0p0p 0p 0p 0 0  0p 0p 0 0 0p0p0 0p0 00p0 00p0  0 0p 0  0 0p 0  0 0  0 0 ( 0  0 p 0 p 0 p0p0p0p0p 0 0  0 p 0 p 0  0 p 0p 0 0 0p 0: 0:p 0:p 00p0p0p0p0p0p0p 0 0p 0 0  0 0 0 0p 0  0 0p 0p 0p 0p 0 p 0!p 0" 0# 0$p 0%p 0&p 0'  0Z* 0Z* 0Z* 0Z*( 0(( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 0B 0C00000000 0D 0E 0F 0G 0H 0I 0J 0K 0L 0M 0N 0O 0P000000000000 0Q( 0R( 0S 0T 0U 0V 0W 0X 0Y@0000000000 0 0 0 0 0000 0 0 0 0 0 000 0  0  0  0  0 0 0 0 0000 0 0000 0 0000 0 0 0 0 0 0000 0 0 0 0 00 0! 0" 0# 0$ 0%00 0& 0'0000000000 0 000 000 0 000 0 000 0 0 0 0 0 0 000 0 0 0 0 0 0 000 0 0 0  0  0 00 000 0 0 000 0 000 0 0? 0? 0? 0? 0? 0? 0? 0? 000 000 0 0 000FGst~#Yjk 01O = L RPa;o{k"#pePYW "#0$$2%w%%u&&&)[*,-C--..U///0L0012s22R33334T44@5(677f999::::; ;Q<<<<<-==>>#?t??;@x@@A-ARASATAmAB CCC*D+D,DpDqDDExEEEFFFFFFFFFFFFFG3HHOIIIJJ^K-LLnNOOOOQBRLS9TTxUVJWXXXXX\Y]Y{Y|Y ]]]]]abVd eeffffgg%hQhRhohViAj llJmKmfmmnno%o'opooooop6pppp7q8qUqqqq r>rrrss't\tt1ufu4v5vRvvwbxx+yyyyyOzz{%}}}}!./K$%@0Kf}gSW00000 0 0 0 0 0 0 0 000000000000 0 0 0 0 0 0 0 0 0 0  0  0  0  0 0000 0 0  0  0  0  0  0 0 0 0 0: 0: 0: 00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  0! 0" 0# 0$ 0% 0& 0' 0K* 0K* 0' 0( 0) 0* 0+ 0, 0- 0. 0/ 00 01 02 03 04 05 06 07 08 09 0: 0; 0< 0= 0> 0? 0@ 0A 0B 0C00000000 0D 0E 0F 0G 0H 0I 0J 0K 0L 0M 0N 0O 0P000000000000 0Q 0R 0S 0T 0U 0V 0W 0X0000000000 0 0 0 0 0000 0 0 0 0 0 000 0  0  0  0  0 0 0 0 0000 0 0000 0 0000 0 0 0 0 0 0000 0 0 0 0 00 0! 0" 0# 0$ 0%00 0& 0'0000000000 0 000 000 0 000 0 000 0 0 0 0 0 0 000 0 0 0 0 0 0 000 0 0 0  0  0 00 000 0 0 000 0  0 00 0 0} 0} 0} 0} 0} 0} 0} 0}@0@ 00ju.9Nw$UGLNORVZO {w-R;#GNYnxb$UHJKMPQSTUWXYUI8@0(  B S  ? LI B A  @ C  A LA @ LB  B  G LJ E LF LG I LO LM  E C  L LE M N I D  J   eOn 2FF JOXlY]6^efahppGqqrDvy}>2wW     rZu 9FFJOXyY]A^efnhppTq rsQvy} J?W 8*urn:schemas-microsoft-com:office:smarttagsdate9*urn:schemas-microsoft-com:office:smarttagsplace8*urn:schemas-microsoft-com:office:smarttagstime 11011121317220200520062007200822232426272829456789DayHourMinuteMonthYear                   5@nu!  ) * 3 p u ( * l s dq8;#)FHRU{ &{*35>BIK['qz!*9BY[ahptPYW_  + 3 !!! "2"b#g#r#|#}######&'1'9'''''(((())**6*[*k*W+k+t++,,,,,,-+-D-Z---:.J...//000000111122V2`2s222233334$4T4]444@5J555(6.66666s7y77777B9G9f9s999999:C:t:}:; ;S;\;m;v;;;;;;;;; <<<<<<<<-=9=;=C=G=P=======>>>">&>/>>>>>??#?-?/?3?7?@?y?}?????'@.@@@D@H@Q@@@@@AA A$A-A7AEAIAbAeAqAtAAAAAAABBBBCCC CCCCCLCOCCCCCCCCCDD0D8DDDDDG GG$GGGGH4H?HHH9I@IIIIIJ J$J/J7JCJJJJJJJcKoKKKKLL+LeLrLLLLLMMMMMMN%NNN OO>PSPVPpPrPPPPQQQ!Q)Q4QQQQQ0R3RiRlRRRRRRSSS-S0SMSXSvSSSTT!T)T6TVTbTTTTTTT U)U0U9UXUcUjUuUyUUUUUUUU!V(VVVRWWWzW}WWWXXqX|XXXXXXXYYYY7ZBZZZZZ'[2[I[X[ \\\&\u\\\ ]K]R]}]]y^^p_t_```aaaaabbc#cDcLcd0dVdedtdddddddddeeegeteveeeeeeeeeeeee f ff$f5f\fefffffffffggg%g=gLgQgWgcgmggg4h9hAjLjQj_jejpjjjjj*k:k>>#?EEFFFFGGH3HIJOOXX]Y|Yt]]ffRhohKmfmoppp8qUqq rrs1ufu5vRvyy}}!/K%@Ё/0JKef|}тhWW     Matthew ValentiMCV Yv$ uqcS>v2H![tP_:$[ie,qJp`zHsnzB|$V f @^`OJPJQJ^Jo( ^`OJQJo(ohpp^p`OJPJQJ^Jo(- @ @ ^@ `OJQJo( ^`OJQJo(o ^`OJQJo( ^`OJQJo( ^`OJQJo(o PP^P`OJQJo(h^`OJPJQJ^Jo(-h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(h^`OJPJQJ^Jo(-h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`OJPJQJ^Jo(-h^`OJQJ^Jo(hHohpp^p`OJQJo(hHh@ @ ^@ `OJQJo(hHh^`OJQJ^Jo(hHoh^`OJQJo(hHh^`OJQJo(hHh^`OJQJ^Jo(hHohPP^P`OJQJo(hHh^`OJPJQJ^Jo(-h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(h^`OJPJQJ^Jo(-h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(h^`OJPJQJ^Jo(-h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo(^`OJPJQJ^Jo(- ^`OJQJo(o pp^p`OJQJo( @ @ ^@ `OJQJo( ^`OJQJo(o ^`OJQJo( ^`OJQJo( ^`OJQJo(o PP^P`OJQJo(^`o(()^`.pLp^p`L.@ @ ^@ `.^`.L^`L.^`.^`.PLP^P`L. ^`OJQJo(  ^`OJQJo(  pp^p`OJQJo(  @ @ ^@ `OJQJo(  ^`OJQJo(  ^`OJQJo(  ^`OJQJo(  ^`OJQJo(  PP^P`OJQJo( h^`OJPJQJ^Jo(-h ^`OJQJo(oh pp^p`OJQJo(h @ @ ^@ `OJQJo(h ^`OJQJo(oh ^`OJQJo(h ^`OJQJo(h ^`OJQJo(oh PP^P`OJQJo( HsYJp2H![f_:$[$iecSuzB| b bZ      bZ        bZ        bZ        bZ        bZ        bZ        bZ        .l-        eh0 pT_02RܑI.4]X`,ppJbZ        .2 p,3&p,3&4OMZ3p,3&4O.Vjp,3&%WtK^T'F1:T;kw/sFz@U@@UnknownG:Ax Times New Roman5Symbol3& :Cx ArialG5  jMS Mincho-3 fg?5 :Cx Courier New;Wingdings"qhԜ&'oqDoqD%24 3QH(?:TCWelcome to the Iterative Solutions Coded Modulation Library (ISCML) MCV8         Oh+'00 <H d p | DWelcome to the Iterative Solutions Coded Modulation Library (ISCML)elc lclclc Normal.dottMCV39Microsoft Word 10.0@x&@t>w@ b @t>woq՜.+,0, hp|   mDA DWelcome to the Iterative Solutions Coded Modulation Library (ISCML) Title  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry F>w1Table\jWordDocument"SummaryInformation(DocumentSummaryInformation8CompObjj  FMicrosoft Word Document MSWordDocWord.Document.89qcodec2-0.0~git20230330.db1c21c/mat/000077500000000000000000000000001441116725500161345ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/mat/BitCollection.m000066400000000000000000000057231441116725500210530ustar00rootroot00000000000000function y = BitCollection( systematic_t, parity_1_t, parity_2_t, N_row ) % BitCollection performs the bit collection operation (used in HSDPA encoder) % % The calling syntax is: % y = BitCollection( systematic_t, parity_1_t, parity_2_t, N_row ) % % y = the punctured codeword formed by collecting the systematic and parity bits % % systematic_t = the punctured systematic bits % parity_1_t = the punctured upper parity bits % parity_2_t = the punctured lower parity bits % N_row = Number of rows in the internal matrix (2 for QPSK and 4 for QAM) % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Dec. 13, 2005 % % Function BitCollection is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % calculate constant values N_t_sys = length( systematic_t ); N_t_p1 = length( parity_1_t ); N_t_p2 = length( parity_2_t ); % more constant values N_data = N_t_sys + N_t_p1 + N_t_p2; N_col = N_data/N_row; N_r = floor( N_t_sys/N_col ); N_c = N_t_sys - N_r*N_col; % initialize the internal matrix w = zeros( N_row, N_col ); % feed in systematic bits if (N_t_sys > 0) % are there any systematic bits? if (N_c == 0) w(1:N_r,:) = reshape( systematic_t, N_r, N_col ); else w(1:N_r+1,1:N_c) = reshape( systematic_t(1:N_c*(N_r+1) ), N_r+1, N_c ); w(1:N_r, N_c+1:N_col ) = reshape( systematic_t( N_c*(N_r+1)+1:N_t_sys), N_r, N_col - N_c ); end end % feed in parity bits if ( (N_t_p1+N_t_p2) > 0 ) % are there any parity bits? parity_temp(1,:) = parity_2_t(1:N_t_p1); parity_temp(2,:) = parity_1_t; parity = reshape( parity_temp, 1, 2*N_t_p1 ); if ( N_t_p2 > N_t_p1 ) parity( N_t_p1 + N_t_p2 ) = parity_2_t( N_t_p2 ); end if (N_c == 0) w(N_r+1:N_row,:) = reshape( parity, N_row-N_r, N_col ); else if (N_row > N_r+1) w(N_r+2:N_row,1:N_c) = reshape( parity(1:N_c*(N_row-N_r-1)), N_row-N_r-1, N_c ); end w(N_r+1:N_row,N_c+1:N_col) = reshape( parity( N_c*(N_row-N_r-1)+1:N_t_p1+N_t_p2), N_row-N_r, N_col-N_c ); end end % form the codeword as a row vector y = reshape( w, 1, N_data ); codec2-0.0~git20230330.db1c21c/mat/BitDecollection.m000066400000000000000000000075021441116725500213610ustar00rootroot00000000000000function [systematic_t, parity_1_t, parity_2_t] = BitDecollection( x, N_row, s, N_TTI, N_IR ); % BitDecollection reverses the bit collection operation (used in HSDPA decoder) % % The calling syntax is: % [systematic_t, parity_1_t, parity_2_t] = BitDecollection( x, N_row, s, N_TTI, N_IR ); % % systematic_t = the punctured systematic bits % parity_1_t = the punctured upper parity bits % parity_2_t = the punctured lower parity bits % % x = the received, punctured codeword % N_row = Number of rows in the internal matrix (2 for QPSK and 4 for QAM) % s = RV flag that determines if priority placed on systematic (1) or parity (0) bits % N_TTI = Length of the unpunctured turbo codeword % N_IR = Size of the virtual IR buffer % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Dec. 13, 2005 % % Function BitDecollection is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % calculate constant values N_data = length( x ); N_sys = N_TTI/3; % N_sys should be multiple of 3. % Figure out N_p1 and N_p2 N_p1 = floor( (N_IR - N_sys)/2 ); N_p2 = ceil( (N_IR - N_sys)/2 ); % more parameter if (s==1) N_t_sys = min( N_sys, N_data ); else N_t_sys = max( N_data - (N_p1+N_p2), 0 ); end N_t_p1 = floor( (N_data - N_t_sys)/2 ); N_t_p2 = ceil( (N_data-N_t_sys)/2 ); % more constant values N_col = N_data/N_row; N_r = floor( N_t_sys/N_col ); N_c = N_t_sys - N_r*N_col; % initialize storage if (N_t_sys > 0) systematic_t = zeros(1,N_t_sys); else systematic_t = []; end parity_temp = zeros(1,N_t_p1+N_t_p2); y = reshape( x, N_row, N_col ); % extract systematic bits if (N_t_sys > 0) % are there any systematic bits? if (N_c == 0) % First N_r rows are the systematic bits systematic_t = reshape( y(1:N_r,:), 1, N_t_sys ); else % First N_c columns contain systematic bits in first N_r + 1 rows systematic_t(1:N_c*(N_r+1)) = reshape( y(1:N_r+1,1:N_c), 1, N_c*(N_r+1) ); % Remaining columns contain systematic bits in first N_r rows systematic_t(N_c*(N_r+1)+1:N_t_sys) = reshape( y(1:N_r,N_c+1:N_col), 1, N_r*(N_col-N_c) ); end end % extract parity bits if ( N_t_p1 + N_t_p2 > 0 ) % are there any parity bits? if (N_c == 0) % Last N_row-N_r rows are the parity bits parity_temp = reshape( y(N_r+1:N_row,:), 1, N_t_p1 + N_t_p2 ); else if (N_row > N_r+1) % First N_c columns contain parity bits in last N_row-N_r-1 rows (if they exist) parity_temp(1:N_c*(N_row-N_r-1) ) = reshape( y(N_r+2:N_row,1:N_c), 1, N_c*(N_row-N_r-1) ); end % Last N_col-N_c columns contain parity bits in last N_row-N_r rows parity_temp(N_c*(N_row-N_r-1)+1:N_t_p1+N_t_p2 ) = reshape( y(N_r+1:N_row,N_c+1:N_col), 1, (N_col-N_c)*(N_row-N_r) ); end end % create parity streams parity = reshape( parity_temp(1:2*N_t_p1), 2, N_t_p1 ); parity_1_t = parity(2,:); parity_2_t = parity(1,:); parity_2_t(N_t_p2) = parity_temp(N_t_p1+N_t_p2); codec2-0.0~git20230330.db1c21c/mat/BtcDecode.m000066400000000000000000000106671441116725500201400ustar00rootroot00000000000000function [detected_data, errors] = BTCDecode( symbol_likelihood, data, grows, gcolumns, k_per_row, k_per_column, B, Q, max_iterations, decoder_type ) % BTCEncode decodes a block turbo code % % The calling syntax is: % [detected_data, errors] = BTCDecode( symbol_likelihood, data, grows, gcolumns, k_per_row, k_per_column, B, Q, max_iterations, decoder_type ) % % detected_data = a row vector containing hard decisions on the detected data % errors = a column vector containing the number of errors per iteration % % symbol_likelihood = the decoder input, in the form of bit LLRs % data = the row vector of data bits (used to count errors and for early halting of iterative decoding) % grows = the generator used to encode the rows % gcolumns = the generator used to encode the columns % k_per_row = number of data bits per row % k_per_column = number of data bits per column % B = number of zeros padded before data but not transmitted % Q = number of zeros padded before data and transmitted % max_iterations = the number of turbo iterations % decoder_type = the decoder type % = 0 For linear-log-MAP algorithm, i.e. correction function is a straght line. % = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ), i.e. correction function = 0. % = 2 For Constant-log-MAP algorithm, i.e. correction function is a constant. % = 3 For log-MAP, correction factor from small nonuniform table and interpolation. % = 4 For log-MAP, correction factor uses C function calls. % % Copyright (C) 2008, Matthew C. Valenti and Sushma Mamidipaka % % Last updated on May 22, 2008 % % Function BtcDecode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % intialize error counter errors = zeros( max_iterations, 1 ); padded_data = [ zeros(1,B) symbol_likelihood ]; % Determine size of the codeword M= k_per_column+length(gcolumns)-1; N= k_per_row+length(grows)-1; % Turn into a rectangular matrix channel_llr = reshape( padded_data, N, M )'; % RSC code code_type = 0; % Initialize Z Z = channel_llr; extrinsic_info = zeros(size(Z)); input_u_rows = zeros( 1, N-length(grows)+1 ); input_u_cols = zeros( 1, M-length(gcolumns)+1 ); % Decode for turbo_iter = 1:max_iterations % Decode each row for m = 1:M input_c = channel_llr(m,:) + extrinsic_info(m,:); [output_u, output_c] = SisoDecode(input_u_rows, input_c, grows, code_type, decoder_type ); Z(m,:) = output_c - extrinsic_info(m,:); end % Decode each column for n = 1:N input_c = [Z(:,n)]'; [output_u, output_c] = SisoDecode(input_u_cols, input_c, gcolumns, code_type, decoder_type ); extrinsic_info(:,n) = (output_c-input_c)'; % used for hard decision % or hard decisions on the data bits for this column % could be made here output_columns(:,n) = output_c'; end output_codeword = output_columns(1:M-length(gcolumns)+1,1:N-length(grows)+1); % Turn into a row vector output_codeword = reshape(output_codeword', 1, prod(size(output_codeword))); % Stripping out the first B+Q bits output_codeword(1:B+Q)=[]; % Count errors detected_data = (sign(output_codeword)+1)/2; error_positions = xor( detected_data, data ); errors(turbo_iter) = sum(sum(error_positions)); % fprintf('iteration %d, number errors = %d\n', turbo_iter, errors(turbo_iter) ); % Exit if all the errors are corrected if (errors(turbo_iter)==0) break; end end codec2-0.0~git20230330.db1c21c/mat/BtcEncode.m000066400000000000000000000044601441116725500201440ustar00rootroot00000000000000function codeword = BtcEncode( data, grows, gcolumns, k_per_row, k_per_column, B, Q ) % BTCEncode encodes a data sequence using a block turbo encoder. % % The calling syntax is: % codeword = BtcEncode( data, grows, gcolumns, k_per_row, k_per_column, B, Q ) % % codeword = the codeword generated by the encoder, % % data = the row vector of data bits % grows = the generator used to encode the rows % gcolumns = the generator used to encode the columns % k_per_row = number of data bits per row % k_per_column = number of data bits per column % B = number of zeros padded before data but not transmitted % Q = number of zeros padded before data and transmitted % % Copyright (C) 2008, Matthew C. Valenti and Sushma Mamidipaka % % Last updated on May 22, 2008 % % Function BtcEncode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % create a matrix of data bits padded with B+Q zeros at the beginning padded_data = [zeros( 1, B+Q ) data]; % turn data into rectangular matrix data_matrix = reshape( padded_data, k_per_row, k_per_column )'; % Encode each row for i=1:k_per_column encoded_rows(i,:) = ConvEncode( data_matrix(i,:), grows, 0); end % Encode each column for i=1:size( encoded_rows, 2 ) encoded_columns(:,i)=ConvEncode( encoded_rows(:,i)', gcolumns, 0)'; end % Turn into a row vector codeword = reshape( encoded_columns', 1, prod( size( encoded_columns ) ) ); % Strip out first B bits of codeword codeword = codeword( B+1:length(codeword) ); codec2-0.0~git20230330.db1c21c/mat/CalculateMinSNR.m000066400000000000000000000103621441116725500212400ustar00rootroot00000000000000function [sim_param, sim_state] = CalculateMinSNR( sim_param, sim_state, code_param ) % CalculateThroughput determines that capacity of FSK under bandwidth % constraints, by returning min Eb/No (dB) as a function of h. % % The calling syntax is: % [sim_param, sim_state] = CalculateMinSNR( sim_param, sim_state ) % % Required inputs/outputs: % sim_param = A structure containing simulation parameters. % % Required output % sim_state = A structure containing the simulation state. % % Required input % code_param = A structure contining derived information. % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2006-2007, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function CalculateMinSNR is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA epsilon = 1e-4; % a small number % read in the simulation results [read_param, read_state] = ReadScenario( sim_param.input_filename, sim_param.scenarios ); number_records = length( sim_param.scenarios ); % read in the database % should contain a BwMatrix matrix with three columns % First column is M, second is h, and third is uncoded BW load( sim_param.bwdatabase ); % go through each record for record=1:number_records % store the h value sim_param.h(record) = read_param(record).h; % for this h and M, determine the bandwidth from the database M_values = find( BwMatrix(:,1) == read_param(record).mod_order ); h_values = find( abs(BwMatrix(:,2) - read_param(record).h) < epsilon); Matching_row = min( intersect( M_values, h_values ) ); bandwidth = BwMatrix( Matching_row, 3 ); % determine the minimum allowable code rate min_rate = bandwidth/log2(read_param(record).mod_order)/sim_param.bwconstraint; sim_state.min_rate(record) = min_rate; % determine which Es/No point corresponds to the min_rate r = read_state(record).capacity_avg; rindex = find( r>epsilon & r< 1-epsilon); if ( ( min_rate < 1 )&(length(rindex)>1) ) best_EsNodB = interp1( r(rindex), read_param(record).SNR(rindex), min_rate ); % convert to Eb/No (dB) best_EsNo = 10.^(best_EsNodB/10); best_EbNo = best_EsNo/(min_rate*log2( read_param(record).mod_order )); best_EbNodB = 10*log10( best_EbNo ); % see if a higher rate is actually better EsNo = 10.^( read_param(record).SNR/10 ); rindex = find( r >= min_rate & r < 1-epsilon); rvalues = r( rindex ); EbNo = (EsNo(rindex)./rvalues)/log2( read_param(record).mod_order ); EbNodB = 10*log10( EbNo ); if ( min( EbNodB ) < best_EbNodB ) [y,i] = min(EbNodB); best_EbNodB = y; min_rate = rvalues(i); EsNodB_rindex = read_param(record).SNR(rindex); best_EsNodB = EsNodB_rindex(i); % fprintf( 'best rate is %f\n', min_rate ); end sim_state.min_EbNodB(record) = best_EbNodB; sim_state.min_EsNodB(record) = best_EsNodB; sim_state.best_rate(record) = min_rate; else sim_state.min_EbNodB(record) = NaN; sim_state.min_EsNodB(record) = NaN; sim_state.best_rate(record) = NaN; end end % save results save_state = sim_state; save_param = sim_param; save( code_param.filename, code_param.save_flag, 'save_state', 'save_param'); codec2-0.0~git20230330.db1c21c/mat/CalculateMinSNRvsB.m000066400000000000000000000050771441116725500217220ustar00rootroot00000000000000function [sim_param, sim_state] = CalculateMinSNRvsB( sim_param, sim_state ) % CalculateMinSNRvsB determines the minimum SNR as a function of BW % constraint B. % % The calling syntax is: % [sim_param, sim_state] = CalculateMinSNRvsB(( sim_param, sim_state ) % % Required inputs/outputs: % sim_param = A structure containing simulation parameters. % % Required output % sim_state = A structure containing the simulation state. % % Required input % code_param = A structure contining derived information. % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2006-2007, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function CalculateMinSNR is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % read in the simulation results [read_param, read_state] = ReadScenario( sim_param.input_filename, sim_param.scenarios, [] ); number_records = length( sim_param.scenarios ); % go through each record for record=1:number_records sim_param.bwconstraint(record) = read_param(record).bwconstraint; % determine the minimum Eb/No [value, index] = min( read_state(record).min_EbNodB ); if ( length(index) > 0 ) sim_state.min_EbNodB(record) = read_state(record).min_EbNodB(index(1)); sim_param.h(record) = read_param(record).h(index(1)); sim_state.best_rate(record) = read_state(record).best_rate(index(1)); else sim_state.min_EbNodB(record) = NaN; sim_param.h(record) = NaN; sim_state.best_rate(record) = NaN; end end % save results save_state = sim_state; save_param = sim_param; save( code_param.filename, code_param.save_flag, 'save_state', 'save_param'); codec2-0.0~git20230330.db1c21c/mat/CalculateThroughput.m000066400000000000000000000060421441116725500223030ustar00rootroot00000000000000function [sim_param, sim_state] = CalculateThroughput( sim_param, sim_state, code_param ) % CalculateThroughput determines the throughput of hybrid-ARQ % % The calling syntax is: % sim_param, sim_state] = CalculateThroughput( sim_param, sim_state ) % % Required inputs/outputs: % sim_param = A structure containing simulation parameters. % % Required output % sim_state = A structure containing the simulation state. % % Required input % code_param = A structure contining derived information. % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2005-2007, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function CalculateThroughput is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % read in the simulation results [read_param, read_state] = ReadScenario( sim_param.input_filename, sim_param.scenarios ); number_records = length( sim_param.scenarios ); % initialize sim_param.SNR_type = 'Es/No in dB'; sim_param.SNR = read_param(1).SNR; for record=1:number_records % make SNR is stored as Es/No if ( read_param(record).SNR_type(2) ~= 's' ) error( 'SNR type must be Es/No in dB' ); end % make sure all the simulations have the same SNR values if sum( read_param(record).SNR ~= sim_param.SNR ) error( 'All records must have the same SNR vector' ); end end % create a cmf matrix fer = zeros( number_records, length( sim_param.SNR ) ); pmf = fer; blocks = fer; sim_state.throughput = zeros(1,length(sim_param.SNR)); for (m=1:number_records) % assume SNR vectors are the same [FER_rows, FER_cols] = size( read_state(m).FER ); fer(m,:) = read_state(m).FER( FER_rows, : ); pmf(m,:) = (1-fer(m,:)).*prod( fer(1:m-1,:), 1 ); blocks(m,:) = m*pmf(m,:); end % this is for numerical stability (avoids NaN due to divide by zero) temp_indices = find( sum(blocks) ); sim_state.throughput(temp_indices) = (1-fer(number_records, temp_indices )).^2./sum(blocks(:,temp_indices)); % save results save_state = sim_state; save_param = sim_param; save( code_param.filename, code_param.save_flag, 'save_state', 'save_param'); codec2-0.0~git20230330.db1c21c/mat/CmlChannel.m000066400000000000000000000065131441116725500203230ustar00rootroot00000000000000function [symbol_likelihood] = CmlChannel( s, sim_param, code_param, EsNo ) % CmlChannel sends the signal vector s over a channel, resulting in % sufficient statistics in symbol_likelihood % % The calling syntax is: % [symbol_likelihood] = CmlChannel( s, sim_param, code_param, EsNo ) % % symbol_likelihood = M row matrix of likelihoods % s = a row vector containing encoded/modulated symbols % sim_param = A structure containing simulation parameters. % code_param = A structure containing the code paramaters. % EsNo = Ratio of Es/No (linear units -- not dB). % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on May 6, 2006 % % Function CmlChannel is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % determine the noise variance variance = 1/(2*EsNo); % create the fading coefficients if (code_param.channel_type==1) % Ergodic Rayleigh fading a = sqrt(0.5)*( randn( 1, code_param.symbols_per_frame) + j*randn( 1, code_param.symbols_per_frame) ); elseif ( code_param.channel_type==2 ) % Rayleigh block fading for block_count=1:sim_param.blocks_per_frame a( (block_count-1)*code_param.symbols_per_block+1: block_count*code_param.symbols_per_block) = sqrt(0.5)*(randn(1,1) + j*randn(1,1))*ones(1, code_param.symbols_per_block ); end else % AWGN a = ones(1,code_param.symbols_per_frame); end % Add noise and then demodulate if (code_param.bpsk) % BPSK noise = sqrt(variance)*randn(1, code_param.symbols_per_frame ); r = abs(a).*s + noise; symbol_likelihood = -2*r.*abs(a)/variance; % This is the LLR elseif (code_param.fsk) % FSK % repeat fading coefficient since this is a multidimensional modulation for i=1:sim_param.mod_order a_matrix(i,:) = a; end % permutation matrix, to handle non-natural mappings. perm_matrix( code_param.mapping + 1, : ) = eye( sim_param.mod_order ); noise = sqrt(variance)*( randn(sim_param.mod_order,code_param.symbols_per_frame) + j*randn(sim_param.mod_order,code_param.symbols_per_frame) ); r = a_matrix.*s + code_param.fil_noise*noise; symbol_likelihood = DemodFSK( perm_matrix*r, EsNo, sim_param.csi_flag, a ); else % Complex modulation noise = sqrt(variance)*( randn(1,code_param.symbols_per_frame) + j*randn(1,code_param.symbols_per_frame) ); % complex noise r = a.*s + noise; symbol_likelihood = Demod2D( r, code_param.S_matrix, EsNo, a ); end codec2-0.0~git20230330.db1c21c/mat/CmlDecode.m000066400000000000000000000220111441116725500201250ustar00rootroot00000000000000function [detected_data, errors] = CmlDecode( symbol_likelihood, data, sim_param, code_param ) % CmlDecode demaps and decodes a single received codeword % % The calling syntax is: % [detected_data, errors] = CmlDecode( symbol_likelihood, data, max_iterations, sim_param, code_param ) % % Outputs: % detected_data = a row vector containing the detected data % errors = a column vector containing the number of errors per iteration % % Required inputs: % symbol_likelihood = a M-row matrix containing the symbol log-likelihoods % data = the row vector of data bits (used to count errors and for early halting of iterative decoding) % sim_param = A structure containing simulation parameters. % code_param = A structure containing the code paramaters. % % Copyright (C) 2005-2008, Matthew C. Valenti % % Last updated on May 22, 2008 % % Function CmlDecode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if (code_param.coded) % default values bicm_iterations = 1; turbo_iterations = 1; % initialize some parameters [M,L] = size(symbol_likelihood); switch sim_param.code_configuration case {0} % convolutional [N1,K1] = size( sim_param.g1 ); input_decoder_u = zeros(1, code_param.data_bits_per_frame ); % stays at zero if ( length(code_param.max_iterations) ) bicm_iterations = code_param.max_iterations; end case {1,4} % PCCC [N1,K1] = size( sim_param.g1 ); if ( sim_param.bicm == 2 ) % bicm-id bicm_iterations = code_param.max_iterations; else turbo_iterations = code_param.max_iterations; end [N2,K2] = size( sim_param.g2 ); input_decoder_u = zeros(1, code_param.data_bits_per_frame ); case {3} % HSDPA % BICM-ID not supported bicm_iteration = 1; turbo_iterations = code_param.max_iterations; % Number of H-ARQ transmissions M_arq = length(sim_param.X_set); end % initialize errors vector errors = zeros(turbo_iterations*bicm_iterations,1); % initialize the extrinsic decoder input input_somap_c = zeros(1, code_param.code_bits_per_frame ); for bicm_iter=1:bicm_iterations % demodulate if (code_param.bpsk) input_decoder_c = symbol_likelihood; else bit_likelihood = Somap( symbol_likelihood, sim_param.demod_type, input_somap_c ); input_decoder_c = bit_likelihood(1:code_param.code_bits_per_frame); end % deinterleave (BICM) if sim_param.bicm input_decoder_c = Deinterleave( input_decoder_c, code_param.bicm_interleaver); end % decode switch sim_param.code_configuration case {0} % convolutional % depuncture if necessary if ( length (sim_param.pun_pattern1 ) ) depunctured_output = Depuncture( input_decoder_c, sim_param.pun_pattern1, sim_param.tail_pattern1 ); input_c = reshape( depunctured_output, 1, prod( size( depunctured_output ) ) ); else input_c = input_decoder_c; end % decode if ( sim_param.decoder_type < 0 ) % fprintf( 'Viterbi decoding\n' ); detected_data = ViterbiDecode( input_c, sim_param.g1, sim_param.nsc_flag1, sim_param.depth ); else [output_decoder_u, output_decoder_c] = SisoDecode( input_decoder_u, input_c, sim_param.g1, sim_param.nsc_flag1, sim_param.decoder_type ); detected_data = (sign(output_decoder_u)+1)/2; end % count errors error_positions = xor( detected_data, data ); errors(bicm_iter) = sum( error_positions ); % exit if all the errors are corrected or if a Viterbi decoder if (errors(bicm_iter)==0)||( sim_param.decoder_type < 0 ) return; end % repuncture if necessary if ( length (sim_param.pun_pattern1 )&&(sim_param.bicm > 0) ) output_decoder_c = reshape( output_decoder_c, N1, length(output_decoder_c)/N1 ); output_decoder_c = Puncture( output_decoder_c, sim_param.pun_pattern1, sim_param.tail_pattern1 ); end case {1,4} % PCCC [detected_data, turbo_errors, output_decoder_c, output_decoder_u ] = TurboDecode( input_decoder_c, data, turbo_iterations, sim_param.decoder_type, code_param.code_interleaver, code_param.pun_pattern, code_param.tail_pattern, sim_param.g1, sim_param.nsc_flag1, sim_param.g2, sim_param.nsc_flag2, input_decoder_u ); errors( (bicm_iter-1)*turbo_iterations+1:bicm_iter*turbo_iterations ) = turbo_errors; % exit if all the errors are corrected if (turbo_errors(turbo_iterations)==0) return; else % determine new input_decoder_u input_decoder_u = output_decoder_u; end case {2} % LDPC [x_hat errors] = MpDecode( -input_decoder_c, code_param.H_rows, code_param.H_cols, code_param.max_iterations, sim_param.decoder_type, 1, 1, data ); detected_data = x_hat(code_param.max_iterations,:); return; % BICM-ID is not supported for LDPC codes. case {3} % HSDPA % Dematch each H-ARQ transmission LLR_buffer = zeros(code_param.number_codewords,code_param.N_TTI); harq_input = reshape( input_decoder_c, code_param.number_codewords*code_param.N_data, M_arq )'; for harq_transmission=1:M_arq [LLR] = HarqDematch( reshape( harq_input(harq_transmission,:), code_param.U, code_param.number_codewords*sim_param.P)', sim_param.X_set(harq_transmission), sim_param.N_IR, code_param.N_TTI, code_param.number_codewords ); % update the virtual buffer LLR_buffer = LLR_buffer + LLR; end % Decode [detected_data, errors, output_decoder_c ] = TurboDecode( LLR_buffer, data, turbo_iterations, sim_param.decoder_type, code_param.code_interleaver, code_param.pun_pattern, code_param.tail_pattern, sim_param.g1, sim_param.nsc_flag1, sim_param.g2, sim_param.nsc_flag2 ); % BICM-ID not currently supported, so return return; case {5,6} % CTC code from WiMAX (5) or DVB-RCS (6) [x_hat errors] = TurboDuobinaryCRSCDecode( input_decoder_c, code_param.code_interleaver, code_param.pun_pattern, data, code_param.max_iterations, sim_param.decoder_type); detected_data = x_hat; return; % BICM-ID is not supported for Wimax CTC code. case {7} % BTC [detected_data, errors] = BtcDecode( input_decoder_c, data, sim_param.g1, sim_param.g2, sim_param.k_per_row, sim_param.k_per_column, sim_param.B, sim_param.Q, code_param.max_iterations, sim_param.decoder_type ); return; % BICM-ID is not supported end % turn LLR into extrinsic info input_somap_c = output_decoder_c - input_decoder_c; % deinterleave if sim_param.bicm input_somap_c = Interleave( input_somap_c, code_param.bicm_interleaver ); end end else % Convert to bit_likelihood if (code_param.bpsk) % BPSK bit_likelihood = symbol_likelihood; % This is the LLR else bit_likelihood = Somap( symbol_likelihood, sim_param.demod_type ); end detected_data = (sign(bit_likelihood)+1)/2; % hard decision % count errors error_positions = xor( detected_data(1:code_param.data_bits_per_frame), data ); errors = sum( error_positions ); endcodec2-0.0~git20230330.db1c21c/mat/CmlEncode.m000066400000000000000000000075051441116725500201520ustar00rootroot00000000000000function [s, codeword] = CmlEncode( data, sim_param, code_param ) % CmlEncode encodes and modulates a single codeword % % The calling syntax is: % [s, codeword] = CmlEncode( data, sim_param, code_param ) % % Outputs: % s = a row vector containing encoded and modulated symbols % codeword = the codeword generated by the encoder % % Required inputs: % data = the row vector of data bits % sim_param = A structure containing simulation parameters. % code_param = A structure containing the code paramaters. % % Copyright (C) 2005-2008, Matthew C. Valenti % % Last updated on May 22, 2008 % % Function CmlEncode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if (code_param.coded) switch sim_param.code_configuration case {0} % convolutional code codeword = ConvEncode( data, sim_param.g1, sim_param.nsc_flag1 ); % puncture [DOES NOT CURRENTLY WORK FOR TAIL-BITING CODES] if ( length (sim_param.pun_pattern1 ) ) [N,K] = size( sim_param.g1 ); codeword = reshape( codeword, N, length(codeword)/N ); codeword = Puncture( codeword, sim_param.pun_pattern1, sim_param.tail_pattern1 ); end case {1,4} % PCCC codeword = TurboEncode( data, code_param.code_interleaver, code_param.pun_pattern, code_param.tail_pattern, sim_param.g1, sim_param.nsc_flag1, sim_param.g2, sim_param.nsc_flag2 ); case {2} % LDPC codeword = LdpcEncode( data, code_param.H_rows, code_param.P_matrix ); case {3} % HSDPA % generate a turbo codeword turbo_codeword = TurboEncode( data, code_param.code_interleaver, code_param.pun_pattern, code_param.tail_pattern, sim_param.g1, sim_param.nsc_flag1, sim_param.g2, sim_param.nsc_flag2 ); % Rate Match according to the redundancy version M_arq = length(sim_param.X_set); for harq_transmission=1:M_arq [channel_streams] = HarqMatch( turbo_codeword, sim_param.X_set(harq_transmission), sim_param.N_IR, code_param.modulation, sim_param.P ); harq_codeword(harq_transmission,:) = reshape( channel_streams', 1, code_param.number_codewords*code_param.N_data); end codeword = reshape( harq_codeword', 1, M_arq*code_param.N_data*code_param.number_codewords ); case {5,6} % CTC code from WiMAX (5) or DVB-RCS (6) codeword = TurboDuobinaryCRSCEncode( data, code_param.code_interleaver, code_param.pun_pattern ); case {7} % BTC code codeword = BtcEncode( data, sim_param.g1, sim_param.g2, sim_param.k_per_row, sim_param.k_per_column, sim_param.B, sim_param.Q ); end % BICM interleave if ( length(code_param.bicm_interleaver) >= 1 ) codeword = Interleave( codeword, code_param.bicm_interleaver ); end else codeword = data; end % modulate s = Modulate( codeword, code_param.S_matrix ); codec2-0.0~git20230330.db1c21c/mat/CmlPlot.m000066400000000000000000000505721441116725500176750ustar00rootroot00000000000000function [sim_param, sim_state] = CmlPlot( varargin ) % CmlPlot plots simulation results % % The calling syntax is: % [sim_param, sim_state] = CmlPlot( scenario_filename, cases ) % % Outputs: % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % Note: See readme.txt for a description of the structure formats. % % Required inputs: % scenario_filename = the name of the file containing an array of sim_param structures. % cases = a list of the array indices to plot. % % Note: Multiple scenario files can be specified. In this case, the argument list % should contain each scenario file to be used followed by the list of array indices % to read from that file. % % Example: % [sim_param, sim_state] = CmlPlot( 'Scenario1', [1 2 5], 'Scenario2', [1 4 6] ); % % Copyright (C) 2005-2006, Matthew C. Valenti % % Last updated on June 4, 2006 % % Function CmlPlot is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % setup structures are retrieve data % give an extra argument to force sim_param.reset = 0 [sim_param, sim_state] = ReadScenario( varargin{:}, [] ); number_cases = length( sim_param ); % determine the simulation types sim_types = zeros( 8, number_cases ); for ( case_number=1:number_cases ) if ( strcmp( sim_param(case_number).sim_type, 'capacity' ) ) sim_types(1,case_number) = 1; % capacity simulation elseif ( strcmp( sim_param(case_number).sim_type, 'exit' ) ) sim_types(2,case_number) = 1; % EXIT elseif ( strcmp( sim_param(case_number).sim_type, 'uncoded' ) ) sim_types(3,case_number) = 1; % uncoded modulation elseif ( strcmp( sim_param(case_number).sim_type, 'coded' ) ) sim_types(4,case_number) = 1; % coded modulation elseif ( strcmpi( sim_param(case_number).sim_type, 'outage' )|strcmpi( sim_param(case_number).sim_type, 'bloutage' ) ) sim_types(5,case_number) = 1; % outage probability elseif ( strcmp( sim_param(case_number).sim_type, 'throughput' ) ) sim_types(6,case_number) = 1; % throughput of hybrid-ARQ elseif ( strcmp( sim_param(case_number).sim_type, 'bwcapacity' ) ) sim_types(7,case_number) = 1; % capacity of FSK under BW constraint elseif ( strcmp( sim_param(case_number).sim_type, 'minSNRvsB' ) ) sim_types(8,case_number) = 1; % Min SNR as a function of B end end fig_number = 0; % first plot capacity vs. Eb/No and Es/No, if there are any capacity curves requested if ( sum( sim_types(1,:) ) ) fig_number = fig_number + 1; figure( fig_number ); for (i=find( sim_types(1,:) == 1 ) ) EsNo = 10.^(sim_param(i).SNR/10); % assume SNR is Es/No in dB EbNo = EsNo./(sim_state(i).capacity_avg*log2(sim_param(i).mod_order)); EbNodB = 10*log10( EbNo ); plot( EbNodB, log2(sim_param(i).mod_order)*sim_state(i).capacity_avg, sim_param(i).linetype ); hold on; end % compute unconstrained (Gaussian input) capacity EsNodB = sim_param(i).SNR; EsNo = 10.^(EsNodB/10); cap_unconstrained = log2(1+EsNo); EbNo = EsNo./cap_unconstrained; EbNodB = 10*log10( EbNo ); legend( sim_param( find( sim_types(1,:) == 1 ) ).legend ); % uncomment if you want to show unconstrained % plot( EbNodB, cap_unconstrained, '-.'); % legend( sim_param( find( sim_types(1,:) == 1 ) ).legend, 'Unconstrained', 2 ); xlabel( 'Eb/No in dB' ); ylabel( 'Capacity' ); hold off; % Eb/No vs. Capacity (useful for FSK modulation) fig_number = fig_number + 1; figure( fig_number ); for (i=find( sim_types(1,:) == 1 ) ) EsNo = 10.^(sim_param(i).SNR/10); % assume SNR is Es/No in dB EbNo = EsNo./(sim_state(i).capacity_avg*log2(sim_param(i).mod_order)); EbNodB = 10*log10( EbNo ); plot( sim_state(i).capacity_avg, EbNodB, sim_param(i).linetype ); hold on; end ylabel( 'Eb/No in dB' ); xlabel( 'Rate' ); hold off; % plot capacity vs. Es/No fig_number = fig_number + 1; figure( fig_number ); for (i=find( sim_types(1,:) == 1 ) ) plot( sim_param(i).SNR, log2(sim_param(i).mod_order)*sim_state(i).capacity_avg, sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(1,:) == 1 ) ).legend ); % uncomment if you want to show unconstrained % plot( EsNodB, cap_unconstrained, '-.'); % legend( sim_param( find( sim_types(1,:) == 1 ) ).legend, 'Unconstrained', 2 ); xlabel( 'Es/No in dB' ); ylabel( 'Capacity' ); hold off; end % next plot BER vs. Eb/No if this is a coded or uncoded simulation if ( sum( sum( sim_types(3:4,:) ) ) ) % plot BER vs. Eb/No fig_number = fig_number + 1; figure( fig_number ); % BER of uncoded modulation for (i=find( sim_types(3,:) == 1 ) ) % Can only plot against Eb/No (add logic later) if ( sim_param(i).SNR_type(2) ~= 'b' ) error( 'Uncoded modulation results must use SNR_type of Eb/No in dB' ); end figure( fig_number ); semilogy( sim_param(i).SNR, sim_state(i).BER, sim_param(i).linetype ); hold on; end % BER of coded modulation for (i=find( sim_types(4,:) == 1 ) ) % Convert to Eb/No (dB) if stored as Es/No (dB) if ( sim_param(i).SNR_type(2) ~= 'b' ) % This is Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); else EbNodB = sim_param(i).SNR; end % only plot the last iteration if ( length( sim_param(i).max_iterations ) ) max_iter = sim_param(i).max_iterations; else max_iter = 1; end semilogy( EbNodB, sim_state(i).BER( max_iter, : ), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(3,:) == 1 ) ).legend, sim_param( find( sim_types(4,:) == 1 ) ).legend, 0 ); xlabel( 'Eb/No in dB' ); ylabel( 'BER' ); for (i=find( sim_types(4,:) == 1 ) ) if ( length( sim_param(i).plot_iterations ) ) % Convert to Eb/No (dB) if stored as Es/No (dB) if ( sim_param(i).SNR_type(2) ~= 'b' ) % This is Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); else EbNodB = sim_param(i).SNR; end % plot the other iterations semilogy( EbNodB, sim_state(i).BER(sim_param(i).plot_iterations,:), sim_param(i).linetype ); end end hold off; % Now plot against Es/No, if uncoded if sum( sim_types(4,:) ) fig_number = fig_number + 1; figure( fig_number ); for (i=find( sim_types(4,:) == 1 ) ) % see if Es/No is defind, otherwise derive if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; % Convert to Es/No EbNo = 10.^(EbNodB/10); EsNo = sim_param(i).rate*EbNo; EsNodB = 10*log10(EsNo); else % This is already in Es/No EsNodB = sim_param(i).SNR; end % only plot the last iteration if ( length( sim_param(i).max_iterations ) ) max_iter = sim_param(i).max_iterations; else max_iter = 1; end % Plot FER versus Es/No in dB figure( fig_number ); semilogy( EsNodB, sim_state(i).BER( max_iter, : ), sim_param(i).linetype ); hold on; end figure( fig_number ); legend( sim_param( find( sim_types(4,:) == 1 ) ).legend, 0 ); xlabel( 'Es/No in dB' ); ylabel( 'BER' ); for (i=find( sim_types(4,:) == 1 ) ) if ( length( sim_param(i).plot_iterations ) ) % see if Es/No is defind, otherwise derive if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; % Convert to Es/No EbNo = 10.^(EbNodB/10); EsNo = sim_param(i).rate*EbNo; EsNodB = 10*log10(EsNo); else % This is Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); end % plot the other iterations figure( fig_number ); semilogy( EsNodB, sim_state(i).BER(sim_param(i).plot_iterations,:), sim_param(i).linetype ); end end figure( fig_number ); hold off; end end % Plot the SER if uncoded if ( sum( sum( sim_types(3,:) ) ) ) % plot SER vs. Eb/No fig_number = fig_number + 1; figure( fig_number ); % SER of uncoded modulation for (i=find( sim_types(3,:) == 1 ) ) % Convert to Eb/No (dB) if stored as Es/No (dB) if ( sim_param(i).SNR_type(2) ~= 'b' ) error( 'The SNR should be stored as Eb/No' ); end semilogy( sim_param(i).SNR, sim_state(i).SER, sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(3,:) == 1 ) ).legend, 0 ); xlabel( 'Eb/No in dB' ); ylabel( 'SER' ); hold off; end % Plot the FER of coded and outage simulations if ( sum( sum( sim_types(4:5,:) ) ) ) % First plot FER vs. Eb/No fig_number = fig_number + 1; figure( fig_number ); % Outage Probability for (i=find( sim_types(5,:) == 1 ) ) % If stored as Es/No, convert to Eb/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; else % This is stored as Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); end % Plot FER versus Eb/No in dB figure( fig_number ); semilogy( EbNodB, sim_state(i).FER, sim_param(i).linetype ); hold on; end % FER of coded modulation for (i=find( sim_types(4,:) == 1 ) ) % If stored as Es/No, convert to Eb/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; else % This is stored as Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); end % only plot the last iteration if ( length( sim_param(i).max_iterations ) ) max_iter = sim_param(i).max_iterations; else max_iter = 1; end % Plot FER versus Eb/No in dB figure( fig_number ); semilogy( EbNodB, sim_state(i).FER( max_iter, : ), sim_param(i).linetype ); hold on; end figure( fig_number ); legend( sim_param( find( sim_types(5,:) == 1 ) ).legend, sim_param( find( sim_types(4,:) == 1 ) ).legend, 0 ); xlabel( 'Eb/No in dB' ); ylabel( 'FER' ); % Now plot the other iterations for (i=find( sim_types(4,:) == 1 ) ) if ( length( sim_param(i).plot_iterations ) ) % make sure that we get both Es/No and Eb/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; else % This is stored as Es/No EsNodB = sim_param(i).SNR; % Convert to Eb/No EsNo = 10.^(EsNodB/10); EbNo = EsNo./sim_param(i).rate; EbNodB = 10*log10(EbNo); end % plot the other iterations figure( fig_number ); semilogy( EbNodB, sim_state(i).FER(sim_param(i).plot_iterations,:), sim_param(i).linetype ); end end figure( fig_number ); hold off; % plot FER vs. Es/No fig_number = fig_number + 1; figure( fig_number ); % Outage Probability for (i=find( sim_types(5,:) == 1 ) ) % If stored as Eb/No, convert to Es/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; % Convert to Es/No EbNo = 10.^(EbNodB/10); EsNo = sim_param(i).rate*EbNo; EsNodB = 10*log10(EsNo); else % This is Es/No EsNodB = sim_param(i).SNR; end % Plot FER versus Es/No in dB figure( fig_number ); semilogy( EsNodB, sim_state(i).FER, sim_param(i).linetype ); hold on; end % FER of coded modulation for (i=find( sim_types(4,:) == 1 ) ) % If stored as Eb/No, convert to Es/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; % Convert to Es/No EbNo = 10.^(EbNodB/10); EsNo = sim_param(i).rate*EbNo; EsNodB = 10*log10(EsNo); else % This is Es/No EsNodB = sim_param(i).SNR; end % only plot the last iteration if ( length( sim_param(i).max_iterations ) ) max_iter = sim_param(i).max_iterations; else max_iter = 1; end % Plot FER versus Es/No in dB figure( fig_number ); semilogy( EsNodB, sim_state(i).FER( max_iter, : ), sim_param(i).linetype ); hold on; end figure( fig_number ); legend( sim_param( find( sim_types(5,:) == 1 ) ).legend, sim_param( find( sim_types(4,:) == 1 ) ).legend, 0 ); xlabel( 'Es/No in dB' ); ylabel( 'FER' ); % Now plot the other iterations for (i=find( sim_types(4,:) == 1 ) ) if ( length( sim_param(i).plot_iterations ) ) % If stored as Eb/No, convert to Es/No if ( sim_param(i).SNR_type(2) == 'b' ) % This is Eb/No EbNodB = sim_param(i).SNR; % Convert to Es/No EbNo = 10.^(EbNodB/10); EsNo = sim_param(i).rate*EbNo; EsNodB = 10*log10(EsNo); else % This is Es/No EsNodB = sim_param(i).SNR; end % plot the other iterations figure( fig_number ); semilogy( EsNodB, sim_state(i).FER(sim_param(i).plot_iterations,:), sim_param(i).linetype ); end end figure( fig_number ); hold off; end % plot throughput vs. Es/No, if there are any throughput curves requested if ( sum( sim_types(6,:) ) ) fig_number = fig_number + 1; figure( fig_number ); % plot throughput vs. Es/No for (i=find( sim_types(6,:) == 1 ) ) plot( sim_param(i).SNR, sim_state(i).throughput, sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(6,:) == 1 ) ).legend, 2 ); xlabel( 'Es/No in dB' ); ylabel( 'Normalized throughput' ); hold off; end % plot min Eb/No vs. h for nonorthogonal FSK under BW constraints. if ( sum( sim_types(7,:) ) ) fig_number = fig_number + 1; figure( fig_number ); % plot min Eb/No vs. h for (i=find( sim_types(7,:) == 1 ) ) [Y,I] = sort( sim_param(i).h ); plot( sim_param(i).h(I), sim_state(i).min_EbNodB(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(7,:) == 1 ) ).legend, 2 ); xlabel( 'h' ); ylabel( 'min Eb/No (in dB)' ); hold off; fig_number = fig_number + 1; figure( fig_number ); % plot min Eb/No vs. rate for (i=find( sim_types(7,:) == 1 ) ) [Y,I] = sort( sim_state(i).best_rate ); plot( sim_state(i).best_rate(I), sim_state(i).min_EbNodB(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(7,:) == 1 ) ).legend, 2 ); xlabel( 'code rate r' ); ylabel( 'min Eb/No (in dB)' ); hold off; end % plot min Eb/No vs. B for nonorthogonal FSK under BW constraint B. if ( sum( sim_types(8,:) ) ) fig_number = fig_number + 1; figure( fig_number ); % plot min Eb/No vs. B for (i=find( sim_types(8,:) == 1 ) ) [Y,I] = sort( sim_param(i).bwconstraint ); plot( sim_param(i).bwconstraint(I), sim_state(i).min_EbNodB(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(8,:) == 1 ) ).legend, 2 ); xlabel( 'Bandwidth B' ); ylabel( 'min Eb/No (in dB)' ); hold off; fig_number = fig_number + 1; figure( fig_number ); % plot eta vs. min Eb/No for (i=find( sim_types(8,:) == 1 ) ) [Y,I] = sort( sim_param(i).bwconstraint ); % plot( sim_state(i).min_EbNodB(I), 1./sim_param(i).bwconstraint(I), sim_param(i).linetype ); plot( 1./sim_param(i).bwconstraint(I), sim_state(i).min_EbNodB(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(8,:) == 1 ) ).legend, 2 ); % ylabel( '\eta' ); % xlabel( 'minimum Eb/No in dB' ); xlabel( '\eta in bps/Hz' ); ylabel( 'Minimum Eb/No in dB' ); hold off; fig_number = fig_number + 1; figure( fig_number ); % plot optimal h vs. B for (i=find( sim_types(8,:) == 1 ) ) [Y,I] = sort( sim_param(i).bwconstraint ); plot( sim_param(i).bwconstraint(I), sim_param(i).h(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(8,:) == 1 ) ).legend, 2 ); xlabel( 'Bandwidth B' ); ylabel( 'optimal h' ); hold off; fig_number = fig_number + 1; figure( fig_number ); % plot optimal rate vs. B for (i=find( sim_types(8,:) == 1 ) ) [Y,I] = sort( sim_param(i).bwconstraint ); plot( sim_param(i).bwconstraint(I), sim_state(i).best_rate(I), sim_param(i).linetype ); hold on; end legend( sim_param( find( sim_types(8,:) == 1 ) ).legend, 2 ); xlabel( 'Bandwidth B' ); ylabel( 'optimal rate' ); hold off; endcodec2-0.0~git20230330.db1c21c/mat/CmlSimulate.m000066400000000000000000000074001441116725500205320ustar00rootroot00000000000000function [sim_param, sim_state] = CmlSimulate( varargin ) % CmlSimulate runs a set of simulations. % % The calling syntax is: % [sim_param, sim_state] = CmlSimulate( scenario_filename, cases ) % % Outputs: % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % Note: See readme.txt for a description of the structure formats. % % Required inputs: % scenario_filename = the name of the file containing an array of sim_param structures. % cases = a list of the array indices to simulate. % % Note: Multiple scenario files can be specified. In this case, the argument list % should contain each scenario file to be used followed by the list of array indices % to read from that file. % % Example: % [sim_param, sim_state] = CmlSimulate( 'Scenario1', [1 2 5], 'Scenario2', [1 4 6] ); % % Copyright (C) 2005-2007, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function CmlSimulate is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % setup structures and retrieve data [sim_param, sim_state] = ReadScenario( varargin{:} ); number_cases = length( sim_param ); % determine location of CmlHome load( 'CmlHome.mat' ); for ( case_number=1:number_cases ) fprintf( '\n\nRecord %d\n', case_number ); % Initialize code_param [sim_param(case_number), code_param] = InitializeCodeParam( sim_param(case_number), cml_home ); if ( ( strcmp( sim_param(case_number).sim_type, 'throughput' ) ) ) % calculate the throughput [sim_param(case_number), sim_state(case_number)] = CalculateThroughput( sim_param(case_number), sim_state(case_number), code_param ); elseif ( ( strcmp( sim_param(case_number).sim_type, 'bwcapacity' ) ) ) % calculate the bandwidth constrained capacity of CPFSK [sim_param(case_number), sim_state(case_number)] = CalculateMinSNR( sim_param(case_number), sim_state(case_number), code_param ); elseif ( ( strcmp( sim_param(case_number).sim_type, 'minSNRvsB' ) ) ) % calculate the throughput fprintf( '\n minSNRvsB\n\n' ); [sim_param(case_number), sim_state(case_number)] = CalculateMinSNRvsB( sim_param(case_number), sim_state(case_number), code_param ); else % Call SingleSimulate for this case % determine if mat or exe is called if ( sim_param(case_number).compiled_mode == 0 ) % run the matlab version sim_state(case_number) = SingleSimulate( sim_param(case_number), sim_state(case_number), code_param ); else % run the compiled exe in stand-alone mode save('SimSetup.mat','code_param'); save_param = sim_param(case_number); save_state = sim_state(case_number); save('SimState.mat','save_param','save_state'); !SingleSimulate & end end endcodec2-0.0~git20230330.db1c21c/mat/CmlTouch.m000066400000000000000000000051701441116725500200330ustar00rootroot00000000000000function [sim_param, sim_state] = CmlTouch( varargin ) % CmlTouch touches files, useful for upgrading to new version. % % The calling syntax is: % [sim_param, sim_state] = CmlTouch( scenario_filename, cases ) % % Outputs: % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % Note: See readme.txt for a description of the structure formats. % % Required inputs: % scenario_filename = the name of the file containing an array of sim_param structures. % cases = a list of the array indices to simulate. % % Note: Multiple scenario files can be specified. In this case, the argument list % should contain each scenario file to be used followed by the list of array indices % to read from that file. % % Example: % [sim_param, sim_state] = CmlTouch( 'Scenario1', [1 2 5], 'Scenario2', [1 4 6] ); % % Copyright (C) 2005-2006, Matthew C. Valenti % % Last updated on Mar. 15, 2006 % % Function CmlSimulate is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % setup structures and retrieve data [sim_param, sim_state] = ReadScenario( varargin{:} ); number_cases = length( sim_param ); for ( case_number=1:number_cases ) % Initialize code_param (will be [] if not a coded simulation) code_param = InitializeCodeParam( sim_param(case_number) ); sim_param(case_number).rate = code_param.rate; % needed for CmlPlot to work correctly fprintf( '\n' ); fprintf( sim_param(case_number).comment ); fprintf( '\n' ); % save save_state = sim_state(case_number); save_param = sim_param(case_number); save(sim_param(case_number).filename, code_param.save_flag, 'save_state', 'save_param' ); endcodec2-0.0~git20230330.db1c21c/mat/CreateConstellation.m000066400000000000000000000326641441116725500222670ustar00rootroot00000000000000function [S, mapping] = CreateConstellation( mod_type, varargin ) % CreateConstellation creates a K-dimensional signal constellation with M points. % % The calling syntax is: % S = CreateConstellation( mod_type, M, label_type, h ) % % S = the K by M complex signal constellation. % K is dimensionality, and M is number of symbols % % mod_type = the modulation type, as a string % must be 'BPSK', 'QPSK', 'PSK', 'QAM', 'APSK', 'HEX', 'HSDPA', or 'FSK' % [M] = the number of points in the constellation % must be a power of 2 % not needed for 'BPSK' (M=2), 'QPSK' (M=4), or 'HEX' (M=16). Default for 'FSK' is M=2. % [label_type] = the labelling type, may be a string or a vector. % strings must be 'gray', 'Antigray', 'SP', 'SSP', 'MSEW', % 'huangITNr1', 'huangITNr2', 'huangLetterNr1', or 'huangLetterNr2' % not needed for BPSK, QPSK, HSDPA, HEX, APSK, or orthogonal FSK (h=1). % [h] = modulation index. Used only for FSK modulation. Default h=1. % % Copyright (C) 2005-2007, Matthew C. Valenti and Shi Cheng % % Last updated on Dec. 27, 2007 % % Function CreateConstellation is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % Optional argument: M if (length(varargin)>=1) M = varargin{1}; % make sure that M is a power of 2. if ( nargin > 1 ) m = log(M)/log(2); if ( rem(m,1) ) error( 'M must be a power of 2' ); end end else % default value M = 2; end % Optional argument: Label Type if (length(varargin)>=2) label_type = varargin{2}; if ~ischar( label_type ) if (length( label_type ) ~= M ) error( 'Length of label_type must be M' ); elseif (sum( sort( label_type ) ~= [0:M-1] ) > 0) % revised 2-22-07 error( 'Label_type must contain integers 0 through M-1' ); else mapping = label_type; end end else % default value mapping = 0:M-1; label_type = mapping; end % Optional argument: h if (length(varargin)>=3) h = varargin{3}; else % default value h = 1; end % HSDPA modulation if ( strcmpi( mod_type, 'HSDPA' ) ) if (M==4) % QPSK temp = [1 1 1 -1 -1 1 -1 -1]'; S = (temp(1,:) + sqrt(-1)*temp(2,:))/sqrt(2); mapping = [0:3]; elseif (M==16) % 16-QAM for point=0:15 temp = point; for i=4:-1:1 bit_vector(4-i+1) = fix( temp/(2^(i-1)) ); temp = temp - bit_vector(4-i+1)*2^(i-1); end iq = (-1).^bit_vector; % S(1,point+1) = (iq(1)*(2-iq(3)) + sqrt(-1)*iq(2)*(2-iq(4)) )/sqrt(5); S(1,point+1) = (iq(1)*(2-iq(3)) + sqrt(-1)*iq(2)*(2-iq(4)) )/sqrt(10); end else error( 'Modulation order must be 4 or 16 for HSDPA' ); end elseif ( strcmpi( mod_type, 'BPSK' ) ) S = [1 -1]; % BPSK mapping = 0:1; elseif ( strcmpi( mod_type, 'QPSK' ) ) S = [1 +j -j -1]; % QPSK mapping = 0:3; elseif ( strcmpi( mod_type, 'PSK' ) ) % PSK modulation temps = exp( j*2*pi * [0:M-1]/M); if isstr( label_type ) switch label_type case 'gray' mapping = [0,1]; for m = 2:log2(M) mapping = [mapping, 2^(m-1) + fliplr( mapping )]; end case 'SP' if (M == 8) mapping = [ 0,1,2,3,4,5,6,7]; elseif (M == 4) mapping = [0,1,2,3]; else error( 'SP coded PSK only supported for M=4 or 8' ); end case 'SSP' if M == 8 mapping = [ 0, 5, 2, 7 , 4, 1, 6, 3]; else error( 'SSP coded PSK only supported for M=8' ); end case 'MSEW' if M == 8 mapping = [ 0,3,5,6,1,2,4,7]; else error( 'MSEW coded PSK only supported for M=8' ); end otherwise error('labeling or symbol set size not supported for PSK'); end end S( mapping + 1) = temps; % corrected on 7-25-06 elseif ( strcmpi( mod_type, 'HEX' ) ) % HEX modulation % only 16-HEX is supported if ( nargin > 1 ) if (M ~= 16) error( 'Only 16-HEX supported' ) end end % fixed mapping S = transpose( [0 -2 2 4 (-1 +j*sqrt(3) ) (-3 +j*sqrt(3) ) ( 1 +j*sqrt(3) ) ( 3 +j*sqrt(3) ) ( 1 -j*sqrt(3) ) (-1 -j*sqrt(3) ) ( 3 -j*sqrt(3) ) (-3 -j*sqrt(3) ) (-2 +j*2*sqrt(3) ) ( -j*2*sqrt(3) ) ( +j*2*sqrt(3) ) (-2 -j*2*sqrt(3) ) ] ); % normalize temps = S/sqrt( mean( abs(S).^2 ) );; % fix mapping S(mapping+1) = temps; elseif ( strcmpi(mod_type, 'APSK' ) )% APSK modulation % inner ring is QPSK temps = [+1 +j -1 -j]; % mapping is fixed if (M==16) rho = 2.85; % this could be varied % outer ring is 12-PSK w/ radius rho temps(5:16) = rho*exp( j*2*pi*[0:11]'/12); % mapping = [3 11 9 1 6 2 10 14 15 13 12 8 0 4 5 7]; elseif (M==32) rho1 = 2.84; % these could be varied rho2 = 5.27 % middle and outer rings temps(5:16) = rho1*exp( j*2*pi*[0:11]'/12); temps(17:32) = rho2*exp( j*2*pi*[0:15]'/16 ); mapping = [24 8 0 16 29 28 12 13 9 1 5 4 20 21 17 25 ... 26 30 14 10 15 11 3 7 2 6 22 18 23 19 27 31]; else error( 'APSK requires M=16 or 32' ); end % mapping is fixed S(mapping+1) = temps; % normalize S = S/sqrt( mean( abs(S).^2 ) ); elseif ( strcmpi( mod_type, 'QAM') )% QAM modulation if ( M == 32) % the mapping is not right here (just CM capacity) S(1:4) = [ ((-3:2:3)'+j*5) ]; S(5:10) = [ ((-5:2:5)'+j*3) ]; S(11:16) = [ ((-5:2:5)'+j*1) ]; S(17:32) = conj(S(1:16)); % normalize temps = S/sqrt( mean( abs(S).^2 ) ); % mapping is fixed (added on 12-27-07) S(mapping+1) = temps; return; end t = (- sqrt(M) +1) :2: (sqrt(M) - 1); temps = ones( sqrt(M), 1) * t; temps = temps - j*temps'; temps = reshape( temps.', 1, M); % fprintf( 'Energy = %f\n', mean( abs(temps/2).^2 ) ); if (isstr( label_type )&(nargin>=3) ) switch label_type case 'gray' if M == 16 mapping = [ 15, 11, 3, 7, 14, 10, 2, 6, 12, 8, 0, 4, 13, 9, 1, 5 ]; S( mapping + 1) = temps; elseif M == 64 submapping = [0, 1, 3, 2, 6, 7, 5, 4]; tempmapping = ones(sqrt(M), 1) *submapping; tempmapping = sqrt(M)*tempmapping + flipud( tempmapping.'); mapping = reshape( tempmapping.', 1, M); S( mapping + 1) = temps; elseif M == 256 submapping = [ [0, 1, 3, 2, 6, 7, 5, 4] , 8+[0, 1, 3, 2, 6, 7, 5, 4]]; tempmapping = ones(sqrt(M), 1) *submapping; tempmapping = sqrt(M)*tempmapping + flipud( tempmapping.'); mapping = reshape( tempmapping.', 1, M); S( mapping + 1) = temps; else error( 'Gray mapping for QAM only supported for M=16,64, or 256' ); end case 'SP' if M == 16 mapping = [ 8, 13, 12, 9, 15, 10, 11, 14, 4, 1, 0, 5, 3, 6, 7, 2]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'MSP' if M == 16 mapping = [ 8, 11, 12, 15, 1, 2, 5, 6, 4, 7, 0, 3, 13, 14, 9, 10]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'MSEW' if M == 16 mapping = [ 2, 1, 7, 4, 8, 11, 13, 14, 5, 6, 0, 3, 15, 12, 10, 9]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'Antigray' if M == 16 mapping = [ 2, 14, 6, 10, 1, 13, 5, 9, 3, 15, 7, 11, 0, 12, 4, 8]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'huangITNr1' if M == 16 mapping = [ 7, 14, 1, 11, 13, 4, 8, 2, 10, 3, 15, 5, 0, 9, 6, 12]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'huangITNr2' if M == 16 mapping = [ 12, 10, 5, 6, 15, 9, 3, 0, 2, 4, 14, 13, 1, 7, 8, 11]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'huangLetterNr1' if M == 16 mapping = [ 13, 7, 1, 11, 14, 4, 2, 8, 3, 9, 15, 5, 0, 10, 12, 6]; S( mapping + 1) = temps; else error( 'Modulation not supported' ); end case 'huangLetterNr2' if M == 16 mapping = [ 12, 15, 10, 9, 5, 6, 3, 0, 11, 8, 13, 14, 2, 1, 4, 7]; else error( 'Modulation not supported' ); end otherwise error('labeling or symbol set size not supported for QAM'); end end S( mapping + 1) = temps; % normalize S = S/sqrt( mean( abs(S).^2 ) ); elseif ( strcmpi( mod_type, 'FSK' ) ) if (h==1) % orthogonal FSK temps = eye( M ); else % nonorthogonal FSK for m = 1:M for n = 1:M temps(n,m) = sinc((m-n)*h)* exp(-j*pi*(m-n)*h); end end end if isstr( label_type ) if ( strcmpi( label_type, 'gray' ) ) mapping = [0,1]; for m = 2:log2(M) mapping = [mapping, 2^(m-1) + fliplr( mapping )]; end elseif ( strcmpi( label_type, 'mv' ) ) if ( M == 8 ) mapping = [6 1 0 3 2 5 4 7]; elseif ( M == 16 ) mapping = [0 2 14 12 11 9 5 7 6 4 8 10 13 15 3 1]; else error( 'dt mapping only supported for M=8 and M=16' ); end elseif ( strcmpi( label_type, 'dt' ) ) if ( M == 8 ) % mapping = [6 1 0 3 2 5 4 7]; mapping = [2 1 4 3 6 5 0 7]; elseif ( M == 16 ) % mapping = [0 2 14 12 11 9 5 7 6 4 8 10 13 15 3 1]; mapping = [0 15 1 14 9 6 8 7 10 5 11 4 3 12 2 13]; else error( 'dt mapping only supported for M=8 and M=16' ); end elseif ( strcmpi( label_type, 'gray2' ) ) if ( M ~= 8 ) error( 'gray2 mapping only supported for M=8' ); else mapping = [0 1 5 7 3 2 6 4]; end elseif ( strcmpi( label_type, 'gray3' ) ) if ( M ~= 8 ) error( 'gray3 mapping only supported for M=8' ); else mapping = [0 1 5 4 6 7 3 2]; end elseif ( strcmpi( label_type, 'gray4' ) ) if ( M ~= 8 ) error( 'gray4 mapping only supported for M=8' ); else mapping = [0 1 5 4 6 2 3 7]; end elseif ( strcmpi( label_type, 'gray5' ) ) if ( M ~= 8 ) error( 'gray5 mapping only supported for M=8' ); else mapping = [0 1 3 7 5 4 6 2]; end elseif ( strcmpi( label_type, 'gray6' ) ) if ( M ~= 8 ) error( 'gray6 mapping only supported for M=8' ); else mapping = [0 1 3 2 6 4 5 7]; end elseif (strcmpi( label_type, 'reversegray' ) ) if (M==8) mapping = [0 1 3 2 7 6 4 5]; elseif (M==16) mapping = [0 1 3 2 7 6 4 5 15 14 12 13 8 9 11 10] else error( 'reversegray mapping only supported for M=8 or 16' ); end else % natural mapping mapping = 0:M-1; end end % mapping: rearrange rows S( :, mapping + 1 ) = temps; else error('Modulation and/or labeling not supported'); end codec2-0.0~git20230330.db1c21c/mat/CreateDvbInterleaver.m000066400000000000000000000053461441116725500223620ustar00rootroot00000000000000function code_interleaver = CreateDvbInterleaver(Nbits) % CreateDvbInterleaver intializes an interleaver for use with the duobinary % tailbiting turbo code from the DVB-RCS standard % % The calling syntax is: % code_interleaver = CreateDvbInterleaver(Nbits) % % code_interleaver = a structure with the following members % code_interleaver.subblk_intl = subblock bit-wise interleaver, 1 by Nbits/2 vector % code_interleaver.info_intl = information interleaver over GF(2), % a row vector of length Nbits. % % Nbits = number of bits (i.e. twice the number of couples) % valid range = {48 64 212 220 228 424 432 440 848 856 864 752} % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Oct. 12, 2007 % % Function CreateDvbInterleaver is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA N = Nbits/2; %% N is the number of couples NN= [ 48, 64, 212 220, 228, 424, 432, 440, 848, 856, 864, 752].'; PP=[11, 24, 0, 24; 7, 34, 32, 2; 13, 106, 108, 2; 23, 112, 4, 116; 17, 116, 72, 188; 11, 6, 8, 2; 13, 0, 4, 8; 13, 10, 4, 2; 19, 2, 16, 6; 19, 428, 224, 652; 19, 2, 16, 6; 19, 376, 224, 600]; Nindex = find( NN== N); if (length(Nindex) ~= 1) disp('Wrong interleaver size of WiMax CTC'); end P0 = PP(Nindex, 1); P1 = PP(Nindex, 2); P2 = PP(Nindex, 3); P3 = PP(Nindex, 4); x= zeros(2,N); x(1:2*N) = 1:2*N; %% intra-couple shifting t = 1:2:N; x(1,t) = 2*t; x(2,t) = 2*t -1; y= zeros(2,N); for index = 0: N-1 if mod(index,4) == 0 P = 0; elseif mod(index,4) ==1 P = N/2 +P1; elseif mod(index,4) ==2 P = P2; else P = N/2 +P3; end i = mod( P0* index + P +1, N); y(:, index+1) = x(:,i+1); end code_interleaver.info_intl = reshape(y, 1, Nbits); % create subblock interleaver code_interleaver.subblk_intl= []; codec2-0.0~git20230330.db1c21c/mat/CreateDvbPuncturingPattern.m000066400000000000000000000047461441116725500236010ustar00rootroot00000000000000function pun_pattern = CreateDvbPuncturingPattern( Nbits_pun, Nbits_unpun ) % CreateDvbPuncturingPattern creates the puncturing pattern for use with the duobinary % tailbiting turbo code from the DVB-RCS standard. % % The calling syntax is: % pun_pattern = CreateDvbPuncturingPattern( Nbits_pun, Nbits_unpun ) % % pun_pattern = the puncturing pattern (length Nbits_pun vector) % % Nbits_pun = the number of bits after puncturing % Nbits_unpun = the number of bits prior to puncturing % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Oct. 12, 2007 % % Function CreateDvbPuncturingPattern is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA N = Nbits_unpun/6; if ( abs( Nbits_pun - ceil( N/(1/3) ) * 2 ) < 1E-5) pun_pattern = 1:Nbits_pun; elseif ( abs( Nbits_pun - ceil( N/(2/5) ) * 2 ) < 1E-5) t = reshape( [ [1:2:N]*2-1 ; [1:2:N]*2], 1, N); pun_pattern = [1:4*N, 4*N+t]; elseif ( abs( Nbits_pun - ceil( N/(1/2) ) * 2 ) < 1E-5) pun_pattern = 1:Nbits_pun; elseif ( abs( Nbits_pun - ceil( N/(2/3) ) * 2 ) < 1E-5) t = reshape( [ [1:2:N]*2-1 ; [1:2:N]*2], 1, N); pun_pattern = [1:2*N, 2*N+t]; elseif ( abs( Nbits_pun - ceil( N/(3/4) ) * 2 ) < 1E-5) t = reshape( [ [1:3:N]*2-1 ; [1:3:N]*2], 1, Nbits_pun-2*N); pun_pattern = [1:2*N, 2*N+t]; elseif ( abs( Nbits_pun - ceil( N/(4/5) ) * 2 ) < 1E-5) t = reshape( [ [1:4:N]*2-1 ; [1:4:N]*2], 1, Nbits_pun-2*N); pun_pattern = [1:2*N, 2*N+t]; elseif ( abs( Nbits_pun - ceil( N/(6/7) ) * 2 ) < 1E-5) t = reshape( [ [1:6:N]*2-1 ; [1:6:N]*2], 1, Nbits_pun-2*N); pun_pattern = [1:2*N, 2*N+t]; else disp('DVB interleaver: Wrong punctured size'); end codec2-0.0~git20230330.db1c21c/mat/CreateLTEInterleaver.m000066400000000000000000000100461441116725500222640ustar00rootroot00000000000000function alpha = CreateLTEInterleaver( K ) % CreateLTEInterleaver produces an interleaver according to the UMTS-LTE spec. % % The calling syntax is: % [alpha] = CreateLTEInterleaver( K ) % % alpha = the interleaver in a length K vector % % K = the size of the interleaver. Must be one of the 188 values % listed on table 5.1.3-3 of TS 36.212. % % Copyright (C) 2007, Matthew C. Valenti % % Last updated on Nov. 23, 2007 % % Function CreateLTEInterleaver is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA % table 5.1.3-3 from 36.212 param_table = [40 3 10 48 7 12 56 19 42 64 7 16 72 7 18 80 11 20 88 5 22 96 11 24 104 7 26 112 41 84 120 103 90 128 15 32 136 9 34 144 17 108 152 9 38 160 21 120 168 101 84 176 21 44 184 57 46 192 23 48 200 13 50 208 27 52 216 11 36 224 27 56 232 85 58 240 29 60 248 33 62 256 15 32 264 17 198 272 33 68 280 103 210 288 19 36 296 19 74 304 37 76 312 19 78 320 21 120 328 21 82 336 115 84 344 193 86 352 21 44 360 133 90 368 81 46 376 45 94 384 23 48 392 243 98 400 151 40 408 155 102 416 25 52 424 51 106 432 47 72 440 91 110 448 29 168 456 29 114 464 247 58 472 29 118 480 89 180 488 91 122 496 157 62 504 55 84 512 31 64 528 17 66 544 35 68 560 227 420 576 65 96 592 19 74 608 37 76 624 41 234 640 39 80 656 185 82 672 43 252 688 21 86 704 155 44 720 79 120 736 139 92 752 23 94 768 217 48 784 25 98 800 17 80 816 127 102 832 25 52 848 239 106 864 17 48 880 137 110 896 215 112 912 29 114 928 15 58 944 147 118 960 29 60 976 59 122 992 65 124 1008 55 84 1024 31 64 1056 17 66 1088 171 204 1120 67 140 1152 35 72 1184 19 74 1216 39 76 1248 19 78 1280 199 240 1312 21 82 1344 211 252 1376 21 86 1408 43 88 1440 149 60 1472 45 92 1504 49 846 1536 71 48 1568 13 28 1600 17 80 1632 25 102 1664 183 104 1696 55 954 1728 127 96 1760 27 110 1792 29 112 1824 29 114 1856 57 116 1888 45 354 1920 31 120 1952 59 610 1984 185 124 2016 113 420 2048 31 64 2112 17 66 2176 171 136 2240 209 420 2304 253 216 2368 367 444 2432 265 456 2496 181 468 2560 39 80 2624 27 164 2688 127 504 2752 143 172 2816 43 88 2880 29 300 2944 45 92 3008 157 188 3072 47 96 3136 13 28 3200 111 240 3264 443 204 3328 51 104 3392 51 212 3456 451 192 3520 257 220 3584 57 336 3648 313 228 3712 271 232 3776 179 236 3840 331 120 3904 363 244 3968 375 248 4032 127 168 4096 31 64 4160 33 130 4224 43 264 4288 33 134 4352 477 408 4416 35 138 4480 233 280 4544 357 142 4608 337 480 4672 37 146 4736 71 444 4800 71 120 4864 37 152 4928 39 462 4992 127 234 5056 39 158 5120 39 80 5184 31 96 5248 113 902 5312 41 166 5376 251 336 5440 43 170 5504 21 86 5568 43 174 5632 45 176 5696 45 178 5760 161 120 5824 89 182 5888 323 184 5952 47 186 6016 23 94 6080 47 190 6144 263 480]; % find K in the table index = find( param_table(:,1) == K ); if ( length(index) ~= 1 ) error( 'CreateLTEInterleaver: input K is invalid\n' ); end f1 = param_table( index, 2 ); f2 = param_table( index, 3 ); % create the interleaver for i=0:K-1 % the alpha(i+1) is needed since matlab indexing starts at 1. % for a c-translation change to alpha(i) since c starts at 0. alpha(i+1) = mod( f1*i+f2*i*i, K ); end codec2-0.0~git20230330.db1c21c/mat/CreateWimaxInterleaver.m000066400000000000000000000074211441116725500227300ustar00rootroot00000000000000function code_interleaver = CreateWimaxInterleaver(Nbits) % CreateWimaxInterleaver intializes an interleaver for use with the duobinary % tailbiting turbo code (CTC) from the mobile WiMAX (IEEE 802.16e) standard. % % The calling syntax is: % code_interleaver = CreateWimaxInterleaver(Nbits) % % code_interleaver = a structure with the following members % code_interleaver.subblk_intl = subblock bit-wise interleaver, 1 by Nbits/2 vector % code_interleaver.info_intl = information interleaver over GF(2), % a row vector of length Nbits. % % Nbits = number of bits (i.e. twice the number of couples) % valid range = {24 36 48 72 96 108 120 144 180 192 216 240 480 960 1440 1920 2400} % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Oct. 12, 2007 % % Function CreateWimaxInterleaver is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA N = Nbits/2; %% N is the number of couples NN = [ 24, 36, 48, 72, 96, 108, 120, 144, 180, 192, 216, 240, 480, 960, 1440, 1920,2400].'; PP=[5, 0, 0, 0; %%24 11, 18, 0, 18; %% 36 13, 24, 0, 24; %% 48 11, 6, 0, 6; %% 72 7, 48, 24, 72; %%96 11, 54, 56, 2; %% 108 13, 60, 0, 60; %% 120 17, 74, 72, 2; %%144 11, 90, 0, 90; %% 180 11, 96, 48, 144; %% 192 13, 108, 0, 108; %% 216 13, 120, 60, 180; %% 240 53, 62, 12, 2; %% 480 43, 64, 300, 824; %% 960 43, 720, 360, 540; %% 1440 31, 8, 24, 16; %% 1920 53, 66, 24, 2]; %% 2400 subblk_mJ = [ 3,3; %%24 4,3; %%36 4,3; %%48 5,3; %%72 5,3; %%96 5,4; %%108 6,2; %%120 6,3; %%144 6,3; %%180 6,3; %%192 6,4; %%216 7,2; %%240 8,2; %%480 9,2; %%960 9,3; %%1440 10,2; %%1920 10,3]; %%2400 Nindex = find( NN== N); if (length(Nindex) ~= 1) disp('Wrong interleaver size for WiMax CTC'); end P0 = PP(Nindex, 1); P1 = PP(Nindex, 2); P2 = PP(Nindex, 3); P3 = PP(Nindex, 4); x= zeros(2,N); x(1:2*N) = 1:2*N; %% intra-couple shifting t = 2:2:N; x(1,t) = 2*t; x(2,t) = 2*t -1; y= zeros(2,N); for index = 0: N-1 if mod(index,4) == 0 P = 0; elseif mod(index,4) ==1 P = N/2 +P1; elseif mod(index,4) ==2 P = P2; else P = N/2 +P3; end i = mod( P0* index + P +1, N); y(:, index+1) = x(:,i+1); end code_interleaver.info_intl = reshape(y, 1, Nbits); %% create subblock interleaver m = subblk_mJ(Nindex,1); J = subblk_mJ(Nindex,2); y = zeros(1,N); k = 0; for index = 0:N-1 T = N; while (T>=N) temp = floor(k/J); T = 2^m * mod(k,J) + bin2dec( fliplr( dec2bin(temp,m))); k = k+1; end y(index+1) = T+1; end code_interleaver.subblk_intl= y; codec2-0.0~git20230330.db1c21c/mat/CreateWimaxPuncturingPattern.m000066400000000000000000000030551441116725500241430ustar00rootroot00000000000000function pun_pattern = CreateWimaxPuncturingPattern( Nbits_pun, Nbits_unpun ) % CreateWimaxPuncturingPattern creates the puncturing pattern for use with the duobinary % tailbiting turbo code (CTC) from the mobile WiMAX (IEEE 802.16e) standard. % % The calling syntax is: % pun_pattern = CreateWimaxPuncturingPattern( Nbits_pun, Nbits_unpun ) % % pun_pattern = the puncturing pattern (length Nbits_pun vector) % % Nbits_pun = the number of bits after puncturing % Nbits_unpun = the number of bits prior to puncturing (not used) % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Oct. 12, 2007 % % Function CreateWimaxPuncturingPattern is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA pun_pattern = 1:Nbits_pun; codec2-0.0~git20230330.db1c21c/mat/DefineStructures.m000066400000000000000000000070371441116725500216170ustar00rootroot00000000000000function [sim_param_changeable, sim_param_unchangeable, sim_state_prototype] = DefineStructures % DefineStructures specifies the prototype structures. % % The calling syntax is: % [sim_param_changeable, sim_param_unchangeable, sim_state_prototype] = DefineStructures % % sim_param_changeable = Prototype structure containing simulation parametes that can be changed % sim_param_unchangeable = Prototype structure containing simulation parametes that cannot be changed % sim_state_prototype = Prototype of structure containing simulation results % % Note: See readme.pdf for a description of the structure formats. % % Copyright (C) 2006-2008, Matthew C. Valenti % % Last updated on May 22, 2008 % % Function DefineStructures is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA % unchangeable paramaters and their default values sim_param_unchangeable = struct(... 'sim_type', [], ... 'SNR_type', 'Eb/No in dB', ... 'framesize', [], ... 'bicm', 1, ... 'modulation', 'BPSK', ... 'mod_order', 2, ... 'mapping', 'gray', ... 'h', [], ... 'demod_type', [], ... 'code_configuration', [], ... 'g1', [], ... 'nsc_flag1', [], ... 'pun_pattern1', [], ... 'tail_pattern1', [], ... 'g2', [], ... 'nsc_flag2', [], ... 'pun_pattern2', [], ... 'tail_pattern2', [], ... 'decoder_type', [], ... 'max_iterations', 1, ... 'code_interleaver', [], ... 'parity_check_matrix', [], ... 'channel', 'AWGN', ... 'blocks_per_frame', [], ... 'N_IR', [], ... 'X_set', [], ... 'P', [], ... 'combining_type', [], ... 'rate', [], ... 'csi_flag', [], ... 'bwconstraint', [], ... 'bwdatabase', [], ... 'code_bits_per_frame', [], ... 'S_matrix', [], ... 'k_per_row', [], ... 'k_per_column', [], ... 'B', [], ... 'Q', [], ... 'depth', 6 ); sim_param_changeable = struct( ... 'SNR', [], ... 'filename', [], ... 'comment', [], ... 'legend', [], ... 'linetype', 'k', ... 'plot_iterations', [], ... 'save_rate', 100, ... 'reset', 0, ... 'max_trials', [], ... 'minBER', 1e-8, ... 'minFER', 1e-8, ... 'max_frame_errors', [], ... 'compiled_mode', 0, ... 'input_filename', [], ... 'trial_size', 1, ... 'scenarios', [] ); sim_state_prototype = struct( ... 'trials', [], ... 'capacity_sum', [], ... 'capacity_avg', [], ... 'frame_errors', [], ... 'symbol_errors', [], ... 'bit_errors', [], ... 'FER', [], ... 'SER', [], ... 'BER', [], ... 'throughput', [], ... 'min_rate', [], ... 'best_rate', [], ... 'min_EsNodB', [], ... 'min_EbNodB', [] ); codec2-0.0~git20230330.db1c21c/mat/HarqDematch.m000066400000000000000000000205171441116725500205000ustar00rootroot00000000000000function [code_bits] = HarqDematch( channel_streams, X_RV, N_IR, N_TTI, B ) % HarqDematch reassembles B UMTS turbo codewords from B*P received HSDPA streams % % The calling syntax is: % [code_bits] = HarqDematch( channel_streams, X_RV, N_IR, N_TTI ) % % code_bits = the reassembled, received turbo codewords (input to decoder) % could be multiple rows if a long data sequence was % segmented into multiple turbo codewords % % channel_streams = B*P by U matrix containing bits received over the channel % where U=960 for QPSK and U=1920 for 16-QAM % and B is the number of turbo codewords. % X_RV = The redundancy version (an integer from 0 to 7). % N_IR = Size of the virtual IR buffer % N_TTI = Length of each unpunctured turbo codeword % B = the number of turbo codewords % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on June 21, 2006 % % Function HarqDematch is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % sanity checks if ( rem( N_TTI, 3 ) ) error( 'N_TTI must be a multiple of 3' ); elseif ( N_IR < N_TTI/3 ) error( 'N_IR is not large enough' ); end % interleaver pattern for physical channel (table 7) p_interleaver = [0 20 10 5 15 25 3 13 23 8 18 28 1 11 21 6 16 26 4 14 24 19 9 29 12 2 7 22 27 17]; R2 = 32; C2 = 30; % determine parameters [P_total,U] = size( channel_streams ); % number physical channels per codeword P = P_total/B; number_codewords = B; % an alias % determine modulation from U. if (U == 960) modulation = 0; % QPSK elseif (U == 1920) modulation = 1; % QAM else error( 'U must be either 960 or 1920' ); end N_data = P*U; % Based on X_RV and modulation, determine the Redundancy Version and other parameters if (modulation == 0) % QPSK U = 960; r_max = 4; N_row = 2; LUT = [1 0 0 0 1 1 0 1 1 2 0 2 1 3 0 3]; s = LUT(X_RV+1,1); r = LUT(X_RV+1,2); else % 16-QAM U = 1920; r_max = 2; N_row = 4; LUT = [1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 2 1 0 3 1 1 0]; s = LUT(X_RV+1,1); r = LUT(X_RV+1,2); b = LUT(X_RV+1,3); end % virtual IR buffer should not be larger than input word if ( N_IR > N_TTI ) N_IR = N_TTI; end % some more parameters delta_N = N_IR - N_TTI; N_sys = N_TTI/3; % Figure out N_p1 and N_p2 N_p1 = floor( (N_IR - N_sys)/2 ); N_p2 = ceil( (N_IR - N_sys)/2 ); % more parameter if (s==1) N_t_sys = min( N_sys, N_data ); else N_t_sys = max( N_data - (N_p1+N_p2), 0 ); end N_t_p1 = floor( (N_data - N_t_sys)/2 ); N_t_p2 = ceil( (N_data-N_t_sys)/2 ); % loop over each turbo codeword for codeword_index=1:number_codewords % the channel streams just for this codeword temp_channel_streams = channel_streams( (P*(codeword_index-1)+1):P*codeword_index, : ); % Deinterleave if (modulation == 0) % QPSK % Deinterleave each physical channel for p_count=1:P % write into matrix column-by-column y_prime = reshape( temp_channel_streams( p_count, : ), R2, C2 ); % inter-column permutations y(:,p_interleaver+1) = y_prime; % read out matrix row-by-row temp_channel_streams( p_count, : ) = reshape( y', 1, U ); end else % QAM % Each physical channel must be deinterleaved twice for p_count=1:P % split into two streams w_prime = reshape( temp_channel_streams(p_count,:), 4, U/4 ); z(1,:) = reshape( w_prime(1:2,:), 1, U/2 ); z(2,:) = reshape( w_prime(3:4,:), 1, U/2 ); % deinterleave each substream for substream=1:2 % write into matrix column-by-column y_prime = reshape( z(substream,:), R2, C2 ); % inter-column permutations y(:,p_interleaver+1) = y_prime; % read out matrix row-by-row z_prime( substream, : ) = reshape( y', 1, U/2 ); end % Constellation re-arrangement if (b==0) w_prime(1:2,:) = reshape( z_prime(1,:), 2, U/4 ); w_prime(3:4,:) = reshape( z_prime(2,:), 2, U/4 ); elseif (b==1) % swap MSB with LSB w_prime(1:2,:) = reshape( z_prime(2,:), 2, U/4 ); w_prime(3:4,:) = reshape( z_prime(1,:), 2, U/4 ); elseif (b==2) % Inversion of LSB w_prime(1:2,:) = reshape( z_prime(1,:), 2, U/4 ); % w_prime(3:4,:) = not( reshape( z_prime(2,:), 2, U/4 ) ); w_prime(3:4,:) = -reshape( z_prime(2,:), 2, U/4 ); else % swap then invert LSB w_prime(1:2,:) = - reshape( z_prime(2,:), 2, U/4 ); % w_prime(3:4,:) = not( reshape( z_prime(1,:), 2, U/4 ) ); w_prime(3:4,:) = reshape( z_prime(1,:), 2, U/4 ); end % reassemble temp_channel_streams( p_count, : ) = reshape( w_prime, 1, U ); end end % Reverse the physical channel segmentation w = reshape( temp_channel_streams', 1, N_data); % Decollect the bits [systematic_t, parity_1_t, parity_2_t] = BitDecollection( w, N_row, s, N_TTI, N_IR ); % Second Rate Dematching % depuncture systematic stream X_i = N_sys; e_plus = N_sys; e_minus = abs( N_sys - N_t_sys ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; systematic = RateDematch( systematic_t, X_i, e_ini, e_plus, e_minus ); % depuncture first parity stream X_i = N_p1; e_plus = 2*N_p1; e_minus = 2*abs( N_p1 - N_t_p1 ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; parity_1 = RateDematch( parity_1_t, X_i, e_ini, e_plus, e_minus ); % depuncture second parity stream X_i = N_p2; e_plus = N_p2; e_minus = abs( N_p2 - N_t_p2 ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; parity_2 = RateDematch( parity_2_t, X_i, e_ini, e_plus, e_minus ); % First Rate Dematching X_i = N_sys; e_ini = X_i; % The systematic stream is never punctured streams(1,:) = systematic; % only need first rate matching if IR buffer smaller than the encoder output if ( N_IR < N_TTI ) % depuncture first parity stream % Correction 6-21-2006 % e_plus = X_i; % e_minus = abs( floor( delta_N/2 ) ); e_plus = 2*X_i; e_minus = 2*abs( floor( delta_N/2 ) ); streams(2,:) = RateDematch( parity_1, X_i, e_ini, e_plus, e_minus ); % depuncture second parity stream % Correction 6-21-2006 % e_plus = 2*X_i; % e_minus = 2*abs( ceil( delta_N/2 ) ); e_plus = X_i; e_minus = abs( ceil( delta_N/2 ) ); streams(3,:) = RateDematch( parity_2, X_i, e_ini, e_plus, e_minus ); else streams(2,:) = parity_1; streams(3,:) = parity_2; end % Bit Deseparation code_bits( codeword_index, :) = reshape( streams, 1, 3*X_i ); endcodec2-0.0~git20230330.db1c21c/mat/HarqMatch.m000066400000000000000000000176331441116725500201740ustar00rootroot00000000000000function [channel_streams] = HarqMatch( code_bits, X_RV, N_IR, modulation, P ) % HarqMatch converts a UMTS turbo codeword into P punctured HSDPA streams % % The calling syntax is: % [channel_streams] = HarqMatch( code_bits, X_RV, N_IR, modulation, P ) % % channel_streams = P by U matrix containing bits to be sent over the channel % where U=960 for QPSK and U=1920 for 16-QAM % % code_bits = the output of the turbo encoder, % could contain multiple rows if multiple codewords. % X_RV = The redundancy version (an integer from 0 to 7). % N_IR = Size of the virtual IR buffer % modulation = 0 for QPSK or 1 for QAM % P = number of physical subchannels per turbo codeword % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on June 21, 2006 % % Function HarqMatch is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % interleaver pattern for physical channel (table 7) p_interleaver = [0 20 10 5 15 25 3 13 23 8 18 28 1 11 21 6 16 26 4 14 24 19 9 29 12 2 7 22 27 17]; R2 = 32; C2 = 30; % Based on X_RV and modulation, determine the Redundancy Version and other parameters if (modulation == 0) % QPSK U = 960; r_max = 4; N_row = 2; LUT = [1 0 0 0 1 1 0 1 1 2 0 2 1 3 0 3]; s = LUT(X_RV+1,1); r = LUT(X_RV+1,2); else % 16-QAM U = 1920; r_max = 2; N_row = 4; LUT = [1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 2 1 0 3 1 1 0]; s = LUT(X_RV+1,1); r = LUT(X_RV+1,2); b = LUT(X_RV+1,3); end % determine number of bits and turbo codewords [number_codewords, N_TTI] = size( code_bits ); N_data = P*U; % sanity checks if ( rem( N_TTI, 3 ) ) error( 'N_TTI must be a multiple of 3' ); elseif ( N_IR < N_TTI/3 ) error( 'N_IR is not large enough' ); end % loop over each turbo codeword for codeword_index=1:number_codewords % First Rate Matching X_i = N_TTI/3; % bit separation streams = reshape( code_bits(codeword_index,:), 3, X_i ); % The systematic part does not get punctured systematic = streams(1,:); % only need first rate matching if IR buffer smaller than the encoder output if ( N_IR < N_TTI ) % set up parameters delta_N = N_IR - N_TTI; e_ini = X_i; % puncture first parity stream % Correction 6-21-2006 % e_plus = X_i; % e_minus = abs( floor( delta_N/2 ) ); e_plus = 2*X_i; e_minus = 2*abs( floor( delta_N/2 ) ); parity_1 = RateMatch( streams(2,:), X_i, e_ini, e_plus, e_minus ); % puncture second parity stream % Correction 6-21-2006 % e_plus = 2*X_i; % e_minus = 2*abs( ceil( delta_N/2 ) ); e_plus = X_i; e_minus = abs( ceil( delta_N/2 ) ); parity_2 = RateMatch( streams(3,:), X_i, e_ini, e_plus, e_minus ); else parity_1 = streams(2,:); parity_2 = streams(3,:); end N_sys = X_i; N_p1 = length( parity_1 ); N_p2 = length( parity_2 ); % Second rate matching if (s==1) % Keep as many systematic bits as possible N_t_sys = min( N_sys, N_data ); else % Keep as many parity bits as possible N_t_sys = max( N_data - (N_p1+N_p2), 0 ); end N_t_p1 = floor( (N_data - N_t_sys)/2 ); N_t_p2 = ceil( (N_data-N_t_sys)/2 ); % puncture systematic stream X_i = N_sys; e_plus = N_sys; e_minus = abs( N_sys - N_t_sys ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; systematic_t = RateMatch( systematic, X_i, e_ini, e_plus, e_minus ); % puncture first parity stream X_i = N_p1; e_plus = 2*N_p1; e_minus = 2*abs( N_p1 - N_t_p1 ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; parity_1_t = RateMatch( parity_1, X_i, e_ini, e_plus, e_minus ); % puncture second parity stream X_i = N_p2; e_plus = N_p2; e_minus = abs( N_p2 - N_t_p2 ); e_ini = mod( X_i - floor( r*e_plus/r_max ) - 1, e_plus)+1; parity_2_t = RateMatch( parity_2, X_i, e_ini, e_plus, e_minus ); % bit collection w = BitCollection( systematic_t, parity_1_t, parity_2_t, N_row ); % Physical channel segmentation temp_channel_streams = reshape( w, U, P )'; % Interleave if (modulation == 0) % QPSK % Interleave each physical channel for p_count=1:P % write into matrix row-by-row y = reshape( temp_channel_streams( p_count, : ), C2, R2)'; % inter-column permutations y_prime = y(:,p_interleaver+1 ); % read out of matrix column-by-column temp_channel_streams( p_count, : ) = reshape( y_prime, 1, U ); end else % QAM % Each physical channel gets two interleavings for p_count=1:P % split into two streams w_prime = reshape( temp_channel_streams(p_count,:), 4, U/4 ); z(1,:) = reshape( w_prime(1:2,:), 1, U/2 ); z(2,:) = reshape( w_prime(3:4,:), 1, U/2 ); % interleave each substream for substream=1:2 % write into matrix row-by-row y = reshape( z(substream,:), C2, R2)'; % inter-column permutations y_prime = y(:,p_interleaver+1 ); % read out of matrix column-by-column z_prime(substream,:) = reshape( y_prime, 1, U/2 ); end % reassemble % Constellation re-arrangement if (b==0) w_prime(1:2,:) = reshape( z_prime(1,:), 2, U/4 ); w_prime(3:4,:) = reshape( z_prime(2,:), 2, U/4 ); elseif (b==1) % swap MSB with LSB w_prime(1:2,:) = reshape( z_prime(2,:), 2, U/4 ); w_prime(3:4,:) = reshape( z_prime(1,:), 2, U/4 ); elseif (b==2) % Inversion of LSB w_prime(1:2,:) = reshape( z_prime(1,:), 2, U/4 ); w_prime(3:4,:) = not( reshape( z_prime(2,:), 2, U/4 ) ); % next line is for debugging purposes % w_prime(3:4,:) = -reshape( z_prime(2,:), 2, U/4 ); else % swap then invert LSB w_prime(1:2,:) = reshape( z_prime(2,:), 2, U/4 ); w_prime(3:4,:) = not( reshape( z_prime(1,:), 2, U/4 ) ); % next line is for debugging purposes % w_prime(3:4,:) = -reshape( z_prime(1,:), 2, U/4 ); end temp_channel_streams( p_count, : ) = reshape( w_prime, 1, U ); end end channel_streams( (P*(codeword_index-1)+1):P*codeword_index, : ) = temp_channel_streams; end codec2-0.0~git20230330.db1c21c/mat/InitializeCodeParam.m000066400000000000000000000274731441116725500222040ustar00rootroot00000000000000function [sim_param, code_param] = InitializeCodeParam( sim_param, cml_home ) % InitializeCodeParam sets up the code_param structure, which contains % information derived from the sim_param structure. % % The calling syntax is: % code_param = InitializeCodeParam( sim_param ) % % sim_param = A structure containing simulation parameters. (input and output) % code_param = A structure contining derived information. % % cml_home = location of cml_home directory % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2006-2008, Matthew C. Valenti % % Last updated on May 3, 2008 % % Function InitializeCodeParam is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % initialize code % Initialize code_param (in case it does not get defined) % Fixed 12/7/07 if length( sim_param.rate ) code_param.rate = sim_param.rate; else code_param.rate = []; end % derive the modulation parameters. if ( ( strcmp( sim_param.sim_type, 'coded' ) )||( strcmp( sim_param.sim_type, 'uncoded' ) )... ||( strcmp( sim_param.sim_type, 'capacity' ) )||(strcmpi( sim_param.sim_type, 'bloutage' ) ) ) code_param.bits_per_symbol = log2(sim_param.mod_order); % bpsk is a special case (runs faster that way) code_param.bpsk = 0; code_param.fsk = 0; if ( strcmpi( sim_param.modulation, 'custom' ) ) % custom modulation. Read in S directly from scenario file code_param.S_matrix = sim_param.S_matrix; elseif( sim_param.code_configuration == 3 ) % HSDPA code_param.S_matrix = CreateConstellation( 'HSDPA', sim_param.mod_order ); elseif ( strcmpi( sim_param.modulation, 'FSK' ) ) code_param.fsk = 1; if (length( sim_param.h )==0) sim_param.h = 1; end if ( length( sim_param.mapping ) == 0) sim_param.mapping = 'natural'; end [code_param.S_matrix, code_param.mapping] = CreateConstellation( 'FSK', sim_param.mod_order, sim_param.mapping, sim_param.h ); % Determine noise correlation if ( sim_param.h == 1 ) code_param.fil_noise = eye( sim_param.mod_order ); else % the correlation does not depend on mapping. for m = 1:sim_param.mod_order for n = 1:sim_param.mod_order R(n,m) = sinc((m-n)*sim_param.h)* exp(-j*pi*(m-n)*sim_param.h); end end [U,Delta,V] = svd(R); fil_noise = U*diag( diag(Delta).^0.5); T = abs( fil_noise*fil_noise' - R); if ( max(max(T)) > 1E-10) disp('wrong fil_noise matrix'); end code_param.fil_noise = fil_noise; end elseif ( strcmpi( sim_param.modulation, 'bpsk' ) ) code_param.bpsk = 1; code_param.S_matrix = [1 -1]; else % Not bpsk or HSDPA, so generate the S_matrix code_param.S_matrix = CreateConstellation( sim_param.modulation, sim_param.mod_order, sim_param.mapping ); end end % if iterative, need to determine number of iterations % this has a distinct purpose from max_iterations, as the simulator will % adjust to make smaller when appropriate if ( length(sim_param.max_iterations) ) code_param.max_iterations = sim_param.max_iterations; else code_param.max_iterations = 1; end % defaults code_param.coded = 0; code_param.outage = 0; % derive the code parameters. if strcmp( sim_param.sim_type, 'coded' ) code_param.coded = 1; switch sim_param.code_configuration case {1} % PCCC % create the channel interleaver code_param.code_interleaver = eval( sim_param.code_interleaver ); code_param.data_bits_per_frame = length( code_param.code_interleaver ); % determine the puncturing pattern if ( length (sim_param.pun_pattern1 ) ) % use the pattern in the scenario file code_param.pun_pattern = [sim_param.pun_pattern1 sim_param.pun_pattern2]; code_param.tail_pattern = [sim_param.tail_pattern1 sim_param.tail_pattern2]; else % puncture pattern not defined, so use default [N1,K1] = size( sim_param.g1 ); [N2,K2] = size( sim_param.g2 ); code_param.tail_pattern = ones(N1+N2,K1-1); % send all tail bits once, as in UMTS code_param.pun_pattern = ones(N1+N2,1); code_param.pun_pattern(N1+1,1) = 0; % don't send lower systematic end case {2} % LDPC % Find H_rows and H_cols [code_param.H_rows, code_param.H_cols, code_param.P_matrix ] = eval( sim_param.parity_check_matrix ); code_param.data_bits_per_frame = length(code_param.H_cols) - length( code_param.P_matrix ); case {3} % HSDPA % derived constants K_crc = sim_param.framesize + 24; % add CRC bits % see if there needs to be more than one block code_param.number_codewords = ceil( K_crc/5114 ); % number of blocks data_bits_per_block = ceil( K_crc/code_param.number_codewords ); % length of each block code_param.data_bits_per_frame = code_param.number_codewords*data_bits_per_block; % includes the filler bits, if any code_param.code_interleaver = eval( strcat( 'CreateUmtsInterleaver(', int2str( data_bits_per_block ), ')' ) ); if ( sim_param.mod_order == 4 ) % QPSK code_param.modulation = 0; code_param.U = 960; % sim_param.modulation = 'HSDPA'; else % 16-QAM code_param.modulation = 1; code_param.U = 1920; % sim_param.modulation = 'HSDPA'; end code_param.N_data = code_param.U*sim_param.P; code_param.N_TTI = 3*data_bits_per_block + 12; % Puncturing pattern code_param.pun_pattern = [1 1 0 1]'; % tail pattern code_param.tail_pattern = ones(4,3); % generators sim_param.g1 = [1 0 1 1 1 1 0 1]; sim_param.g2 = sim_param.g1; sim_param.nsc_flag1 = 0; sim_param.nsc_flag2 = 0; case {4} % UMTS Turbo code % generator polynomials for UMTS sim_param.g1 = [1 0 1 1 1 1 0 1]; sim_param.g2 = sim_param.g1; sim_param.nsc_flag1 = 0; sim_param.nsc_flag2 = 0; % the code interleaver sim_param.code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param.framesize ), ')' ); code_param.code_interleaver = eval( sim_param.code_interleaver ); code_param.data_bits_per_frame = length( code_param.code_interleaver ); % the puncturing pattern if length( sim_param.code_bits_per_frame ) [code_param.pun_pattern, code_param.tail_pattern] = UmtsPunPattern( sim_param.framesize, sim_param.code_bits_per_frame ); else code_param.pun_pattern = [1 0 1 1]'; code_param.tail_pattern = ones(4,3); end case {5} % Wimax CTC code code_param.code_interleaver = CreateWimaxInterleaver( sim_param.framesize ); code_param.data_bits_per_frame = sim_param.framesize; code_param.pun_pattern = CreateWimaxPuncturingPattern( sim_param.code_bits_per_frame ); case {6} % DVB-RCS turbo code code_param.code_interleaver = CreateDvbInterleaver( sim_param.framesize ); code_param.data_bits_per_frame = sim_param.framesize; code_param.pun_pattern = CreateDvbPuncturingPattern( sim_param.code_bits_per_frame, 3*sim_param.framesize ); otherwise % convolutional (0) or BTC (7) code_param.data_bits_per_frame = sim_param.framesize; end % Encode a test word in order to determine the length code_param.bicm_interleaver = []; data = zeros(1, code_param.data_bits_per_frame); [s, codeword] = CmlEncode( data, sim_param, code_param ); code_param.code_bits_per_frame = length( codeword ); code_param.symbols_per_frame = length( s ); if ( sim_param.code_configuration == 3 ) code_param.rate = sim_param.framesize/code_param.symbols_per_frame; % HSDPA else code_param.rate = code_param.data_bits_per_frame/code_param.symbols_per_frame; end % check number of symbols per frame for consistency if ( code_param.symbols_per_frame ~= ceil( code_param.code_bits_per_frame / code_param.bits_per_symbol ) ) error( 'Symbols per frame is inconsistent' ); end elseif ( strcmpi( sim_param.sim_type, 'uncoded' )||strcmpi( sim_param.sim_type, 'capacity' ) ) code_param.symbols_per_frame = sim_param.framesize; code_param.data_bits_per_frame = code_param.symbols_per_frame*code_param.bits_per_symbol; code_param.rate = code_param.data_bits_per_frame/code_param.symbols_per_frame; elseif ( strcmpi( sim_param.sim_type, 'bloutage' ) ) code_param.outage = 1; code_param.rate = sim_param.rate; % rate specified by the user. code_param.symbols_per_frame = ceil( sim_param.framesize/sim_param.rate ); code_param.data_bits_per_frame = code_param.symbols_per_frame*log2(sim_param.mod_order); end % determine channel type if (strcmpi( sim_param.channel, 'rayleigh' ) ) code_param.channel_type = 1; elseif (strcmpi( sim_param.channel, 'awgn' ) ) code_param.channel_type = 0; % AWGN elseif (strcmpi( sim_param.channel, 'block' ) ) if strcmp( sim_param.sim_type, 'coded' ) code_param.channel_type = 2; % block fading code_param.symbols_per_block = ceil( code_param.symbols_per_frame/sim_param.blocks_per_frame ); % bug fix below: Sept. 4, 2007 if ( code_param.symbols_per_block*sim_param.blocks_per_frame ~= code_param.symbols_per_frame ) error( 'There must be an integer number of blocks per frame' ); end else error( 'block channel type is only for coded simulations' ); end end % determine matlab version version_text = version; if ( str2num( version_text(1) ) > 6) code_param.save_flag = '-v6'; else code_param.save_flag = '-mat'; end % determine where your root directory is (added 10-12-07) code_param.filename = [cml_home sim_param.filename]; % determine where input filename is for modulation-constrained outage % (added 12-7-07) if (strcmpi( sim_param.sim_type, 'outage' ) ) code_param.input_filename = [cml_home sim_param.input_filename]; end % need to let sim_param know what the rate is (for proper plotting) sim_param.rate = code_param.rate; codec2-0.0~git20230330.db1c21c/mat/InitializeWiMaxLDPC.m000066400000000000000000000164301441116725500220300ustar00rootroot00000000000000% File: InitializeWiMaxLDPC.m % % Description: Initializes the WiMax LDPC encoder/decoder % % The calling syntax is: % [H_rows, H_cols, P] = InitializeWiMaxLDPC( rate, size, ind ) % % Where: % H_rows = a M-row matrix containing the indices of the non-zero rows of H excluding the dual-diagonal portion of H. % H_cols = a (N-M)+z-row matrix containing the indices of the non-zeros rows of H. % P = a z times z matrix used in encoding % % rate = the code rate % size = the size of the code (number of code bits): % = 576:96:2304 % ind = Selects either code 'A' or 'B' for rates 2/3 and 3/4 % = 0 for code rate type 'A' % = 1 for code rate type 'B' % = [empty array] for all other code rates % % Copyright (C) 2007-2008, Rohit Iyer Seshadri and Matthew C. Valenti % % Last updated on June. 23, 2007. % % Function InitializeWiMaxLDPC is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA function [H_rows, H_cols,P]= InitializeWiMaxLDPC(rate, nldpc, ind) epsilon=1e-3; rt_flag=0; if (abs(rate-1/2) 0) if ((rate ==2/3)&&(ind ==0)) H(cnt1:cnt1+z-1, cnt2:cnt2+z-1)=circshift( eye(z),[0,mod(Hbm(i,j),z)]); else H(cnt1:cnt1+z-1, cnt2:cnt2+z-1)= circshift( eye(z),[0,floor(Hbm(i,j)*z/z0)]); end end cnt2=cnt2+z; end cnt1=cnt1+z; end P =eye(z); if ((rate ==3/4) && (ind ==1)) P=inv(circshift( eye(z),[0,floor(80*z/z0)])); end [mldpc, nldpc]=size(H); H_rows=zeros(mldpc, max(row_ind)-2); H_cols=zeros((nldpc-mldpc)+z , max(col_ind)); for i=1:mldpc [a,b]=find(H(i,1:(nldpc-mldpc)+z)==1); H_rows(i,1:length(b))=[b]; end for i=1:(nldpc-mldpc)+z [a1,b1]=find(H(:,i)==1); H_cols(i,1:length(b1))=[a1']; end codec2-0.0~git20230330.db1c21c/mat/PnGenerator.m000066400000000000000000000031061441116725500205360ustar00rootroot00000000000000function sequence = PnGenerator( sequence_length, g ) % PnGenerator creates a PN sequence using polynomial g % % The calling syntax is: % sequence = PnGenerator( sequence_length, g ) % % sequence = the PN sequence % % sequence_length = the length of the sequence % g = the generator polynomial coefficients % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on June 20, 2006 % % Function PnGenerator is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA K = length(g); m = K-1; pun_pattern = [0 1]'; tail_pattern = zeros(2,m); g_encoder = [g [1 zeros(1,m) ] ]; input = [1 zeros(1,sequence_length-1)]; codeword = ConvEncode( input, g_encoder ); sequence = Puncture( reshape( codeword, 2, length(codeword)/2 ), pun_pattern, tail_pattern ); codec2-0.0~git20230330.db1c21c/mat/ReadScenario.m000066400000000000000000000073221441116725500206550ustar00rootroot00000000000000function [sim_param_output, sim_state_output] = ReadScenario( varargin ); % ReadScenario reads simulation parameters from a list of scenario files and the simulation % results from the corresponding stored data files % % The calling syntax is: % [sim_param, sim_state] = ReadScenario( scenario_filename, cases [, ...] ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % Note: See readme.txt for a description of the structure formats. % % scenario_filename = the name of the file containing an array of sim_param structures. % cases = a list of the array indices to read. Set to 'all' to read all the % scenarios in the file. % % Note: Multiple scenario files can be specified. In this case, the argument list % should contain each scenario file to be used followed by the list of array indices % to read from that file. % % Example: % [sim_param, sim_state] = ReadScenario( 'Scenario1', [1 2 5], 'Scenario2', [1 4 6] ); % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function ReadScenario is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA number_of_files = nargin/2; if (floor(number_of_files) ~= number_of_files) % odd number of arguments is a signal to not reset % used when plotting dont_reset = 1; else dont_reset = 0; end % loop over each Scenario file offset = 0; for file=1:number_of_files scenario_filename = varargin{file*2-1}; cases = varargin{file*2}; % clear, then initialize sim_param and sim_state structures clear sim_param sim_state % load the scenario file eval( scenario_filename ); % set cases to 'all' to read all parameters if isstr(cases) sim_param = sim_param; cases=1:length(sim_param); else sim_param = sim_param( cases ); end % load/initialize each scenario num_cases = length( cases ); for (case_number=1:num_cases) fprintf( strcat( 'Initializing case (%d):\t', sim_param(case_number).comment, '\n' ), cases( case_number ) ); if ( ( strcmpi( sim_param(case_number).sim_type, 'throughput' ) )|... ( strcmpi( sim_param(case_number).sim_type, 'bwcapacity' ) ) | ... ( strcmpi( sim_param(case_number).sim_type, 'minSNRvsB' ) ) ) sim_param(case_number).reset = 1; end if dont_reset sim_param(case_number).reset = 0; end [sim_param_out(case_number), sim_state(case_number)] = SingleRead( sim_param(case_number) ); end sim_param_output(offset+1:offset+num_cases) = sim_param_out(1:num_cases); sim_state_output(offset+1:offset+num_cases) = sim_state(1:num_cases); offset = offset + num_cases; end codec2-0.0~git20230330.db1c21c/mat/SimulateCapacity.m000066400000000000000000000103701441116725500215540ustar00rootroot00000000000000function sim_state = SimulateCapacity( sim_param, sim_state, code_param ) % SimulateCapacity runs a single of capacity simulation. % % The calling syntax is: % sim_state = SimulateCapacity( sim_param, sim_state, code_param ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % code_param = A structure contining derived information. % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2005-2006, Matthew C. Valenti % % Last updated on June 6, 2006 % % Function SimulateCapacity is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % make sure that SNR is in terms of Es/No if ( sim_param.SNR_type(2) == 's' ) % Eb/No EsNo = 10.^(sim_param.SNR/10); else % Es/No error( 'The SNR for capacity simulations must be in terms of Es/No in dB' ); end % temporary filename tempfile = 'tempsave.mat'; % simulate for snrpoint = 1:length(EsNo) fprintf( strcat( '\n', sim_param.SNR_type, ' = %f dB\n'), sim_param.SNR(snrpoint) ); %fprintf( 'trials = %d, max_trials = %d\n', sim_state.trials( snrpoint ),sim_param.max_trials( snrpoint ) ) while ( sim_state.trials( snrpoint ) < sim_param.max_trials( snrpoint ) ) % increment the trials counter sim_state.trials(snrpoint) = sim_state.trials(snrpoint) + 1; % generate random data data = round( rand( 1, code_param.data_bits_per_frame ) ); % code and modulate s = CmlEncode( data, sim_param, code_param ); % Put through the channel symbol_likelihood = CmlChannel( s, sim_param, code_param, EsNo(snrpoint) ); % determine capacity if ( sim_param.bicm ) % BICM capacity if (code_param.bpsk) bit_likelihood = symbol_likelihood; % later this should be moved to Somap function else bit_likelihood = Somap( symbol_likelihood, sim_param.demod_type ); end cap = Capacity( bit_likelihood, data ); else % CM capacity cap = Capacity( symbol_likelihood, data ); end sim_state.capacity_sum( snrpoint ) = sim_state.capacity_sum( snrpoint ) + cap; sim_state.capacity_avg( snrpoint ) = sim_state.capacity_sum( snrpoint )/sim_state.trials(snrpoint); % determine if it is time to save (either (1) last frame, or (2) once per save_rate) condition1 = ( sim_state.trials(snrpoint ) == sim_param.max_trials( snrpoint ) ); condition2 = ~mod( sim_state.trials(snrpoint), sim_param.save_rate ); time_to_save = condition1|condition2; if ( time_to_save ) fprintf('.'); save_state = sim_state; save_param = sim_param; % Aded on April 22, 2006 in case system crashes during save save( tempfile, code_param.save_flag, 'save_state', 'save_param'); % Store into local directory (if running locally) if ( sim_param.compiled_mode ) copyfile( tempfile, sim_param.filename, 'f' ); end movefile( tempfile, code_param.filename, 'f'); end end end codec2-0.0~git20230330.db1c21c/mat/SimulateMod.m000066400000000000000000000210711441116725500205360ustar00rootroot00000000000000function sim_state = SimulateMod( sim_param, sim_state, code_param ) % SimulateMod runs a single coded/uncoded modulation simulation scenario % % The calling syntax is: % sim_state = SimulateMod( sim_param, sim_state ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % code_param = A structure contining derived information. % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2005-2007, Matthew C. Valenti % % Last updated on Dec. 23, 2007 % % Function SimulateMod is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % create a random channel (BICM) interleaver if (code_param.coded) if ( sim_param.bicm > 0 ) code_param.bicm_interleaver = randperm(code_param.code_bits_per_frame)-1; end end % determine Es/No if ( sim_param.SNR_type(2) == 'b' ) % Eb/No EbNo = 10.^(sim_param.SNR/10); EsNo = EbNo*code_param.rate; else % Es/No EsNo = 10.^(sim_param.SNR/10); end % temporary filename tempfile = 'tempsave.mat'; % FOR PROFILING RUNTIME t0 = clock; % simulate for snrpoint = 1:length(EsNo) fprintf( strcat( '\n', sim_param.SNR_type, ' = %f dB\n'), sim_param.SNR(snrpoint) ); current_time = fix(clock); fprintf( 'Clock %2d:%2d:%2d\n', current_time(4), current_time(5), current_time(6) ); % loop until either there are enough trials or enough errors while ( ( sim_state.trials( code_param.max_iterations, snrpoint ) < sim_param.max_trials( snrpoint ) )&( sim_state.frame_errors(code_param.max_iterations, snrpoint) < sim_param.max_frame_errors(snrpoint) ) ) % increment the trials counter sim_state.trials(1:code_param.max_iterations, snrpoint) = sim_state.trials(1:code_param.max_iterations, snrpoint) + 1; % generate random data data = round( rand( 1, code_param.data_bits_per_frame ) ); % code and modulate s = CmlEncode( data, sim_param, code_param ); % Put through the channel symbol_likelihood = CmlChannel( s, sim_param, code_param, EsNo(snrpoint) ); if (code_param.outage == 0) % Decode [detected_data, errors] = CmlDecode( symbol_likelihood, data, sim_param, code_param ); % Echo an x if there was an error if ( errors( code_param.max_iterations ) ); fprintf( 'x' ); end % update frame error and bit error counters sim_state.bit_errors( 1:code_param.max_iterations, snrpoint ) = sim_state.bit_errors( 1:code_param.max_iterations, snrpoint ) + errors; sim_state.frame_errors( 1:code_param.max_iterations, snrpoint ) = sim_state.frame_errors( 1:code_param.max_iterations, snrpoint ) + (errors>0); sim_state.BER(1:code_param.max_iterations, snrpoint) = sim_state.bit_errors(1:code_param.max_iterations, snrpoint)./sim_state.trials(1:code_param.max_iterations, snrpoint)/code_param.data_bits_per_frame; sim_state.FER(1:code_param.max_iterations, snrpoint) = sim_state.frame_errors(1:code_param.max_iterations, snrpoint)./sim_state.trials(1:code_param.max_iterations, snrpoint); % if uncoded, update symbol error rate, too. if ~code_param.coded if ( sim_param.mod_order > 2 ) error_positions = xor( detected_data(1:code_param.data_bits_per_frame), data ); % update symbol, frame, and bit error counters sim_state.symbol_errors(snrpoint) = sim_state.symbol_errors( snrpoint) + sum( max( reshape( error_positions, code_param.bits_per_symbol, code_param.symbols_per_frame ),[],1 ) ); sim_state.SER(snrpoint) = sim_state.symbol_errors(snrpoint)/sim_state.trials(snrpoint)/code_param.symbols_per_frame; else sim_state.symbol_errors(snrpoint) = sim_state.bit_errors(snrpoint); sim_state.SER(snrpoint) = sim_state.BER(snrpoint); end end else % determine capacity if ( sim_param.bicm ) % BICM capacity if (code_param.bpsk) bit_likelihood = symbol_likelihood; % later this should be moved to Somap function else bit_likelihood = Somap( symbol_likelihood, sim_param.demod_type ); end % BICM capacity (added log2(mod_order) on 12/23/07) cap = log2(sim_param.mod_order)*Capacity( bit_likelihood, data ); else % CM capacity (added log2(mod_order) on 12/23/07) cap = log2(sim_param.mod_order)*Capacity( symbol_likelihood, data ); end % compare to threshold and update FER counter if ( cap < code_param.rate ) sim_state.frame_errors( 1, snrpoint ) = sim_state.frame_errors( 1, snrpoint ) + 1; sim_state.FER(1, snrpoint) = sim_state.frame_errors(1, snrpoint)./sim_state.trials(1, snrpoint); % Echo an x if there was an error fprintf( 'x' ); end end % determine if it is time to save (either (1) last error, (2) last frame, or (3) once per save_rate) condition1 = ( sim_state.frame_errors(code_param.max_iterations, snrpoint) == sim_param.max_frame_errors(snrpoint) ); condition2 = ( sim_state.trials( code_param.max_iterations, snrpoint ) == sim_param.max_trials( snrpoint ) ); condition3 = ~mod( sim_state.trials(code_param.max_iterations, snrpoint),sim_param.save_rate ); if ( condition1|condition2|condition3 ) % FOR PROFILING RUNTIME % fprintf( '%f\n', etime(clock,t0) ); % t0=clock; fprintf('.'); save_state = sim_state; save_param = sim_param; % Aded on April 22, 2006 in case system crashes during save save( tempfile, code_param.save_flag, 'save_state', 'save_param'); % Store into local directory (if running locally) if ( sim_param.compiled_mode ) copyfile( tempfile, sim_param.filename, 'f' ); end movefile( tempfile, code_param.filename, 'f'); % redraw the BICM interleaver (so that it is uniform) if (code_param.coded) if ( sim_param.bicm > 0 ) code_param.bicm_interleaver = randperm(code_param.code_bits_per_frame)-1; end end end end % halt if BER or FER is low enough if ( ~code_param.outage & ( sim_state.BER(code_param.max_iterations, snrpoint) < sim_param.minBER ) ) % adjust max_iterations to be the last iteration that has not yet dropped below the BER threshold % Logic has changed on 7-28-06 iteration_index = max( find( sim_state.BER(sim_param.plot_iterations,snrpoint) >= sim_param.minBER ) ); if isempty( iteration_index ) break; else code_param.max_iterations = sim_param.plot_iterations( iteration_index ); fprintf( '\nNumber of iterations = %d\n', code_param.max_iterations ); end % elseif ( code_param.outage & ( sim_state.FER(code_param.max_iterations, snrpoint) < sim_param.minFER ) ) % break when the FER is low enough (changed on 12-31-07) elseif ( sim_state.FER(code_param.max_iterations, snrpoint) < sim_param.minFER ) break; end end fprintf( 'Simulation Complete\n' ); current_time = fix(clock); fprintf( 'Clock %2d:%2d:%2d\n', current_time(4), current_time(5), current_time(6) );codec2-0.0~git20230330.db1c21c/mat/SimulateOutage.m000066400000000000000000000125631441116725500212510ustar00rootroot00000000000000function sim_state = SimulateOutage( sim_param, sim_state, code_param ) % SimulateOutage runs a single information outage probability simulation. % % The calling syntax is: % sim_state = SimulateOutage( sim_param, sim_state, code_param ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % code_param = A structure contining derived information. % % Copyright (C) 2005-2007, Matthew C. Valenti and Tarik Ghanim % % Last updated on December 7, 2007 % % Function SimulateOutage is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % load AWGN simulation if(sim_param.mod_order > 0) input_file = load(code_param.input_filename); % changed 12/7/07 capacity_AWGN = input_file.save_state.capacity_avg * log2(sim_param.mod_order); EsNodB_AWGN = input_file.save_param.SNR; % assume SNR is Es/No in dB EsNo_AWGN = 10.^(EsNodB_AWGN/10); % Determine the slope of the capacity curve last_index = length( capacity_AWGN ); slope = ( capacity_AWGN(2:last_index) - capacity_AWGN(1:last_index-1) )./( EsNo_AWGN(2:last_index) - EsNo_AWGN(1:last_index-1) ); end % Initialize variables rate = sim_param.rate; if ( sim_param.SNR_type(2) == 'b' ) % Eb/No EbNo = 10.^(sim_param.SNR/10); EsNo = EbNo.*rate; else % Es/No EsNo = 10.^(sim_param.SNR/10); end L = sim_param.blocks_per_frame; LL = L; if ( sim_param.mod_order == -1) % mod_order == -1 corresponds to 1-D Gaussian input LL = L*2; % account for real symbols only end % determine combining type used type = 0; % 'diversity' if(strcmpi( sim_param.combining_type, 'code' )) type = 1; end % temporary filename tempfile = 'tempsave.mat'; % simulate for snrpoint = 1:size(EsNo,2) fprintf( strcat( '\n', sim_param.SNR_type, ' = %f dB\n'), sim_param.SNR(snrpoint) ); save_counter = 0; while (( sim_state.trials( snrpoint ) < sim_param.max_trials( snrpoint ) )... &( sim_state.frame_errors(snrpoint) < sim_param.max_frame_errors(snrpoint))) % increment the trials counter sim_state.trials(snrpoint) = sim_state.trials(snrpoint) + sim_param.trial_size; save_counter = save_counter + sim_param.trial_size; % Generate i.i.d. exponential SNRs (changed 12/7/07) % gamma = EsNo(snrpoint)*exprnd(1,sim_param.trial_size,L); gamma = -EsNo(snrpoint)*log(rand(sim_param.trial_size,L)); % If this is diversity combining, add the SNRs. if ( type == 0 ) gamma = sum( gamma, 2 ); end if(sim_param.mod_order > 0) % Modulation Constrained Input inst_cap = 1/LL*CapacityTableLookup( EsNo_AWGN, capacity_AWGN, slope, gamma ); else % Unconstrained Gaussian Input inst_cap = 1/LL*sum( log2( 1 + gamma ), 2 ); end outages = sum(inst_cap= sim_param.max_trials( snrpoint ) ); condition2 = ( sim_state.frame_errors(1, snrpoint) >= sim_param.max_frame_errors(snrpoint) ); % condition3 = ~mod( sim_state.trials(snrpoint), sim_param.save_rate ); condition3 = (save_counter > sim_param.save_rate ); time_to_save = condition1|condition2|condition3; if ( time_to_save ) fprintf('.'); save_state = sim_state; save_param = sim_param; % Aded on April 22, 2006 in case system crashes during save save( tempfile, code_param.save_flag, 'save_state', 'save_param'); % Store into local directory (if running locally) if ( sim_param.compiled_mode ) copyfile( tempfile, sim_param.filename, 'f' ); end movefile( tempfile, code_param.filename, 'f'); save_counter = 0; end end % Averaging loop over transmitted codewords(frames) % halt if FER is low enough if ( sim_state.FER(1, snrpoint) < sim_param.minFER ) break; end end % SNR loopcodec2-0.0~git20230330.db1c21c/mat/SimulateUGI.m000066400000000000000000000125361441116725500204510ustar00rootroot00000000000000function sim_state = SimulateUGI( sim_param, sim_state, code_param ) % SimulateUGI simulates the information outage probability of 1 or 2-D % modulation with an unconstrained Gaussian input (UGI) % % The calling syntax is: % sim_state = SimulateUGI( sim_param, sim_state ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % code_param = A structure contining derived information. % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2007, Matthew C. Valenti and David Buckingham % % Last updated on Dec. 30, 2007 % % Function SimulateUGI is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA fprintf( 'Rate = %f\n', code_param.rate ); % determine Es/No if ( sim_param.SNR_type(2) == 'b' ) % Eb/No EbNo = 10.^(sim_param.SNR/10); EsNo = EbNo*(code_param.rate); else % Es/No EsNo = 10.^(sim_param.SNR/10); end % temporary filename tempfile = 'tempsave.mat'; % simulate for snrpoint = 1:length(EsNo) fprintf( strcat( '\n', sim_param.SNR_type, ' = %f dB\n'), sim_param.SNR(snrpoint) ); current_time = fix(clock); fprintf( 'Clock %2d:%2d:%2d\n', current_time(4), current_time(5), current_time(6) ); % constant if ( sim_param.mod_order == 0 ) const = log( 1 + EsNo(snrpoint) ); else const = 1/2*log(1+2*EsNo(snrpoint)); end % Noise standard deviation noise_std = sqrt( 1/(2*EsNo(snrpoint)) ); % loop until either there are enough trials or enough errors while ( ( sim_state.trials( snrpoint ) < sim_param.max_trials( snrpoint ) )&( sim_state.frame_errors( snrpoint) < sim_param.max_frame_errors(snrpoint) ) ) % increment the trials counter sim_state.trials(snrpoint) = sim_state.trials(snrpoint) + 1; % mutual information random vector if ( sim_param.mod_order == 0) % 2-D % normalized (complex) Gaussian input x = sqrt(0.5).*( randn( 1, code_param.symbols_per_frame ) + ... j*randn( 1, code_param.symbols_per_frame ) ); % Additive White (complex) Gaussian noise n = noise_std*( randn( 1, code_param.symbols_per_frame ) + ... j*randn( 1, code_param.symbols_per_frame ) ); % received signal y = x + n; info = const + EsNo(snrpoint)*( (abs(y)).^2/( EsNo(snrpoint) + 1 ) - (abs(y-x)).^2 ); else % 1-D so only consider real-part % normalized real-valued Gaussian input x = randn( 1, code_param.symbols_per_frame ); % Additive White Gaussian noise n = noise_std*randn( 1, code_param.symbols_per_frame ); % received signal y = x + n; info = const + EsNo(snrpoint)*( (y).^2/( 2*EsNo(snrpoint) + 1 ) - (y-x).^2 ); end % Divide by ln(2) to convert from nats to bits for rate comparison result = mean( info )./log(2); % Compare instantaneous capacity with code rate if (result < code_param.rate) % Log error fprintf( 'x' ); sim_state.frame_errors(snrpoint) = sim_state.frame_errors(snrpoint) + 1; sim_state.FER(snrpoint) = sim_state.frame_errors(snrpoint)./sim_state.trials(snrpoint); end % determine if it is time to save (either (1) last error, (2) last frame, or (3) once per save_rate) condition1 = ( sim_state.frame_errors(snrpoint) == sim_param.max_frame_errors(snrpoint) ); condition2 = ( sim_state.trials(snrpoint) == sim_param.max_trials( snrpoint ) ); condition3 = ~mod( sim_state.trials(snrpoint),sim_param.save_rate ); if ( condition1|condition2|condition3 ) fprintf('.'); save_state = sim_state; save_param = sim_param; save( tempfile, code_param.save_flag, 'save_state', 'save_param'); % Store into local directory (if running locally) if ( sim_param.compiled_mode ) copyfile( tempfile, sim_param.filename, 'f' ); end movefile( tempfile, code_param.filename, 'f'); end end % Recalculate FER sim_state.FER(snrpoint) = sim_state.frame_errors(snrpoint)./sim_state.trials(snrpoint); % Check to see if FER is low enough if ( sim_state.FER(snrpoint) < sim_param.minFER ) break; end end codec2-0.0~git20230330.db1c21c/mat/SingleRead.m000066400000000000000000000305041441116725500203310ustar00rootroot00000000000000function [sim_param_out, sim_state] = SingleRead( sim_param_in ) % CodedRead reads a single coded simulation from a file. % % The calling syntax is: % [sim_param, sim_state] = SingleRead( sim_param ) % % Required inputs/outputs: % sim_param = A structure containing simulation parameters. % % Required output % sim_state = A structure containing the simulation state. % % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2005-2007, Matthew C. Valenti % % Last updated on Oct. 12, 2007 % % Function SingleRead is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % the minimum SNR spacing epsilon = 1e-5; % define the structures [sim_param_changeable, sim_param_unchangeable, sim_state_prototype] = DefineStructures; sim_param_out = struct; sim_state = struct; % get a list of field names sim_param_changeable_fieldnames = fieldnames( sim_param_changeable ); sim_param_unchangeable_fieldnames = fieldnames( sim_param_unchangeable ); sim_state_fieldnames = fieldnames( sim_state_prototype ); % variable used for determining if the SNR has changed SNR_has_changed = 0; if isfield( sim_param_in, 'SNR' ) number_new_SNR_points = length( sim_param_in.SNR ); end % make sure that number of trials and number SNR points are the same if isfield( sim_param_in, 'max_trials' ) if ( length( sim_param_in.max_trials ) ~= length( sim_param_in.SNR ) ) error( 'number of trials must match number of SNR points' ); end end % set the changeable parameters to the value in sim_param_in for i=1:length( sim_param_changeable_fieldnames ) if isfield( sim_param_in, sim_param_changeable_fieldnames{i} ) fieldvalue = getfield( sim_param_in, sim_param_changeable_fieldnames{i} ); sim_param_out = setfield( sim_param_out, sim_param_changeable_fieldnames{i}, fieldvalue ); else % if not defined, then set to default fieldvalue = getfield( sim_param_changeable, sim_param_changeable_fieldnames{i} ) ; sim_param_out = setfield( sim_param_out, sim_param_changeable_fieldnames{i}, fieldvalue ); end end % determine where your root directory is (added 10-12-07) load( 'CmlHome.mat' ); % determine if sim_param_in.filename is relative or absolute if ( length( sim_param_in.filename ) >= length( cml_home ) ) temp_string = sim_param_in.filename(1:length(cml_home)); if strcmp( temp_string, cml_home ) % this is an absolute path. strip out cml home sim_param_out.filename = sim_param_in.filename( length(cml_home)+1: length( sim_param_in.filename ) ); end end % determine if a saved file exists fid = fopen( [cml_home sim_param_out.filename], 'r'); % load the file unless the simulation has been reset if ( (fid > 0)&( sim_param_out.reset < 1 ) ) % load the saved file load( [cml_home sim_param_out.filename], '-mat' ); % validate the unchangeable parameters for i=1:length( sim_param_unchangeable_fieldnames ) if isfield( save_param, sim_param_unchangeable_fieldnames{i} ) % fprintf( ['\nValidating ' sim_param_unchangeable_fieldnames{i} '\n' ] ); % see if field is specified in the input scenario if isfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) % test to see if stored is same. Start with length test_length = abs( length( getfield( save_param, sim_param_unchangeable_fieldnames{i} ) ) - length( getfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) ) ); test_value = 1; if ~test_length % test value test_value = sum( abs( getfield( save_param, sim_param_unchangeable_fieldnames{i} ) ) - abs( getfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) ) ); end if test_value % they don't match, trigger a warning % if set to [] in save file, should set it to the default value if ~length( getfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) ) fprintf( ['Warning: Field "' sim_param_unchangeable_fieldnames{i} '" undefined in the scenario file, using default value\n' ] ); save_param = setfield( save_param, sim_param_unchangeable_fieldnames{i}, getfield( sim_param_unchangeable, sim_param_unchangeable_fieldnames{i} ) ); elseif ~length( getfield( save_param, sim_param_unchangeable_fieldnames{i} ) ) fprintf( ['Warning: stored value of field ' sim_param_unchangeable_fieldnames{i} ' is set to [], using default value\n' ] ); save_param = setfield( save_param, sim_param_unchangeable_fieldnames{i}, getfield( sim_param_unchangeable, sim_param_unchangeable_fieldnames{i} ) ); else % otherwise use saved value fprintf( ['Warning: field ' sim_param_unchangeable_fieldnames{i} ' does not match stored value, using stored value\n' ] ); end end else % fprintf( ['Warning: field ' sim_param_unchangeable_fieldnames{i} ' not defined in the scenario file, using stored value\n' ] ); end % set the value to the saved value sim_param_out = setfield( sim_param_out, sim_param_unchangeable_fieldnames{i}, getfield( save_param, sim_param_unchangeable_fieldnames{i} ) ); else % Set to default value when a new value is defined sim_param_out = setfield( sim_param_out, sim_param_unchangeable_fieldnames{i}, getfield( sim_param_unchangeable, sim_param_unchangeable_fieldnames{i} ) ); end end else % setup the "unchangeable" sim_param_out fields for i=1:length( sim_param_unchangeable_fieldnames ) % fprintf( ['\nValidating ' sim_param_unchangeable_fieldnames{i} '\n' ] ); % initialize to default value (Corrected on 9-8-07) sim_param_out = setfield( sim_param_out, sim_param_unchangeable_fieldnames{i}, getfield( sim_param_unchangeable, sim_param_unchangeable_fieldnames{i} ) ); if isfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) if ( length( getfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) ) ) % value is in the scenario file, so use it sim_param_out = setfield( sim_param_out, sim_param_unchangeable_fieldnames{i}, getfield( sim_param_in, sim_param_unchangeable_fieldnames{i} ) ); end end end end % intialize sim_state sim_state = sim_state_prototype; % stuff that is specific to the simulation type if ( strcmpi( sim_param_in.sim_type, 'capacity' ) ) % capacity simulation sim_state.trials = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.capacity_sum = zeros( 1, number_new_SNR_points ); sim_state.capacity_avg = sim_state.trials; elseif ( strcmpi( sim_param_in.sim_type, 'exit' ) ) error( 'EXIT curve generation is not yet supported' ); elseif ( strcmpi( sim_param_in.sim_type, 'uncoded' ) ) % uncoded modulation sim_state.trials = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.frame_errors = zeros( 1, number_new_SNR_points ); sim_state.symbol_errors = zeros( 1, number_new_SNR_points ); sim_state.bit_errors = zeros( 1, number_new_SNR_points ); sim_state.BER = sim_state.trials; sim_state.SER = sim_state.trials; elseif ( strcmpi( sim_param_in.sim_type, 'coded' ) ) % coded modulation sim_state.trials = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.frame_errors = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.bit_errors = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.BER = sim_state.trials; sim_state.FER = sim_state.trials; elseif ( strcmpi( sim_param_in.sim_type, 'bloutage' ) ) % coded modulation sim_state.trials = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.frame_errors = zeros( sim_param_out.max_iterations, number_new_SNR_points ); sim_state.FER = sim_state.trials; elseif ( strcmpi( sim_param_in.sim_type, 'outage' ) ) % outage probability in block fading sim_state.trials = zeros( 1, number_new_SNR_points ); sim_state.frame_errors = zeros( 1, number_new_SNR_points ); sim_state.FER = sim_state.trials; elseif ( strcmpi( sim_param_in.sim_type, 'throughput' ) ) % throughput of hybrid-ARQ if ( (fid > 0)&( sim_param_out.reset < 1 ) ) sim_param_out.SNR = save_param.SNR; end elseif ( strcmpi( sim_param_in.sim_type, 'bwcapacity' ) ) % Bandwidth constrained capacity if ( (fid > 0)&( sim_param_out.reset < 1 ) ) sim_param_out.h = save_param.h; end elseif ( strcmpi( sim_param_in.sim_type, 'minSNRvsB' ) ) % Minimum SNR as a function of bandwidth constraint if ( (fid > 0)&( sim_param_out.reset < 1 ) ) sim_param_out.h = save_param.h; sim_param_out.bwconstraint = save_param.bwconstraint; end else error( 'simulation type not supported\n' ); end % restore the saved sim_state if ( (fid > 0)&( sim_param_out.reset < 1 ) ) % determine if the SNR has changed if ~exist( 'number_new_SNR_points' ) SNR_has_changed = 0; elseif ( length( save_param.SNR ) ~= number_new_SNR_points ) SNR_has_changed = 1; % a different number of SNR points elseif max( save_param.SNR ~= sim_param_in.SNR ) SNR_has_changed = 1; % different SNR points (but same number) end % will need to add or delete SNR points to the state if SNR_has_changed fprintf( 'Warning: SNR vector does not matched saved vector\n' ); end % restore saved state, one structure element at a time for i=1:length( sim_state_fieldnames ) if isfield( save_state, sim_state_fieldnames{i} ) saved_vector = getfield( save_state, sim_state_fieldnames{i} ); if ( SNR_has_changed & ~isempty( saved_vector ) ) % fix 6-11-06 row_count = size( saved_vector, 1 ); new_vector = zeros( row_count, number_new_SNR_points ); % this logic needs to be verified 8-10-06 for j=1:number_new_SNR_points index = find( (save_param.SNR <= sim_param_in.SNR(j) + epsilon)&(save_param.SNR >= sim_param_in.SNR(j)-epsilon) ); if (length( index ) > 1) error( 'Duplicate SNR points in saved sim' ); elseif (length(index) == 1) new_vector(:,j) = saved_vector(:,index); end end sim_state = setfield( sim_state, sim_state_fieldnames{i}, new_vector); else sim_state = setfield( sim_state, sim_state_fieldnames{i}, saved_vector ); end end end end % alphabetize fields sim_param_out = orderfields( sim_param_out ); sim_state = orderfields( sim_state ); if (fid>0) fclose( fid ); end return; codec2-0.0~git20230330.db1c21c/mat/SingleSimulate.m000066400000000000000000000061241441116725500212420ustar00rootroot00000000000000function sim_state = SingleSimulate( varargin ) % Simulate runs a single simulation % % The calling syntax is: % [sim_param, sim_state] = SingleSimulate( sim_param, sim_state, code_param ) % % sim_param = A structure containing simulation parameters. % sim_state = A structure containing the simulation state. % code_param = A structure contining information about the channel code. % Note: See readme.txt for a description of the structure formats. % % Copyright (C) 2006-2007, Matthew C. Valenti % % Last updated on Dec. 30, 2007 % % Function CmlSimulate is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % If there are no input arguments, then look for a .mat file in the local % director with a predetermined file name. % This hook is for future development. if (nargin == 0) load('SimSetup'); % Contains the code_param structure load('SimState'); % Contains sim_param and sim_state sim_param = save_param; sim_state = save_state; code_param.filename = 'SimState.mat'; elseif (nargin == 3) sim_param = varargin{1}; sim_state = varargin{2}; code_param = varargin{3}; else error( 'SingleSimulate must have either 0 or 3 inputs' ); end fprintf( '\n' ); fprintf( sim_param.comment ); fprintf( '\n' ); % randomly seed the random number generators rand('state',sum(100*clock)); randn('state',sum(100*clock)); % close open files (4/22/06) fclose all; % determine the simulation type if ( strcmpi( sim_param.sim_type, 'capacity' ) ) % capacity simulation sim_state = SimulateCapacity( sim_param, sim_state, code_param ); elseif ( ( strcmpi( sim_param.sim_type, 'uncoded' ) )|( strcmpi( sim_param.sim_type, 'coded' ) )| (strcmpi( sim_param.sim_type, 'bloutage') ) ) % uncoded or coded modulation if (sim_param.mod_order>0) sim_state = SimulateMod( sim_param, sim_state, code_param ); else % added 12/30/07 sim_state = SimulateUGI( sim_param, sim_state, code_param ); end elseif ( strcmpi( sim_param.sim_type, 'outage' ) ) % simulates outage probability in block fading sim_state = SimulateOutage( sim_param, sim_state, code_param ); else error( 'Simulation type is not supported' ); end codec2-0.0~git20230330.db1c21c/mat/TurboDecode.m000066400000000000000000000147251441116725500205220ustar00rootroot00000000000000function [detected_data, errors, output_decoder_c, input_upper_u] = TurboDecode( input_decoder_c, data, turbo_iterations, decoder_type, code_interleaver, pun_pattern, tail_pattern, g1, nsc_flag1, g2, nsc_flag2, varargin ) % TurboDecode decodes a received sequence that was encoded by a binary turbo code. % If input_decoder_c has multiple rows, then multiple codewords will be decoded (one for each row). % % The calling syntax is: % [detected_data, errors, output_decoder_c, [output_decoder_u] ] = % TurboDecode( input_decoder_c, data, turbo_iterations, decoder_type, ... % code_interleaver, pun_pattern, tail_pattern, g1, nsc_flag1, g2, ... % nsc_flag2, [input_decoder_u] ) % % detected_data = a row vector containing the detected data % errors = a column vector containing the number of errors per % iteration for all the codewords. % output_decoder_c = the extrinsic information of the code bits % output_decoder_u = the extrinsic information of the systematic bits (optional) % % input_decoder_c = the decoder input, in the form of bit LLRs % this could have multiple rows if the data is longer % than the interleaver % data = the row vector of data bits (used to count errors and for early halting of iterative decoding) % turbo_iterations = the number of turbo iterations % decoder_type = the decoder type % = 0 For linear-log-MAP algorithm, i.e. correction function is a straght line. % = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ), i.e. correction function = 0. % = 2 For Constant-log-MAP algorithm, i.e. correction function is a constant. % = 3 For log-MAP, correction factor from small nonuniform table and interpolation. % = 4 For log-MAP, correction factor uses C function calls. % code_interleaver = the turbo interleaver % pun_pattern = the puncturing pattern for all but the tail % tail_pattern = the puncturing pattern just for the tail % g1 = the first generator polynomial % nsc_flag1 = 0 if first encoder is RSC and 1 if NSC % g2 = the second generator polynomial % nsc_flag2 = 0 if second encoder is RSC and 1 if NSC % [input_decoder_u] = the a priori information about systematic bits (optional input) % % Copyright (C) 2005-2006, Matthew C. Valenti % % Last updated on Apr. 23, 2006 % % Function TurboDecode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % determine some parameters [N1,K1] = size( g1 ); [N2,K2] = size( g2 ); % check interleaver length against data length K_data = length( data ); K_interleaver = length( code_interleaver ); if ( rem( K_data, K_interleaver ) ) error( 'The data length needs to be an integer multiple of the interleaver length' ); end number_codewords = K_data/K_interleaver; data_bits_per_frame = K_data/number_codewords; data = reshape( data, K_interleaver, number_codewords)'; % intialize error counter errors = zeros( turbo_iterations, 1 ); if ( length(varargin) >= 1 ) input_upper_u = varargin{1}; else input_upper_u = zeros( number_codewords, data_bits_per_frame ); end % loop over each received frame for codeword_index=1:number_codewords % depuncture and split depunctured_output = Depuncture( input_decoder_c(codeword_index,:), pun_pattern, tail_pattern ); input_upper_c = reshape( depunctured_output(1:N1,:), 1, N1*length(depunctured_output) ); input_lower_c = reshape( depunctured_output(N1+1:N1+N2,:), 1, N2*length(depunctured_output) ); % decode for turbo_iter=1:turbo_iterations % fprintf( 'Turbo iteration = %d\n', turbo_iter ); % Pass through upper decoder [output_upper_u output_upper_c] = SisoDecode( input_upper_u(codeword_index,:), input_upper_c, g1, nsc_flag1, decoder_type ); % Interleave and extract extrinsic information input_lower_u = Interleave( output_upper_u - input_upper_u(codeword_index,:), code_interleaver ); % Pass through lower decoder [output_lower_u output_lower_c] = SisoDecode( input_lower_u, input_lower_c, g2, nsc_flag2, decoder_type ); % count errors detected_data(codeword_index,:) = Deinterleave( (sign(output_lower_u)+1)/2, code_interleaver ); error_positions = xor( detected_data(codeword_index,:), data(codeword_index,:) ); % exit if all the errors are corrected temp_errors = sum(error_positions); % for debugging % fprintf( 'Codeword: %d, Iteration: %d, Errors: %d\n', codeword_index, turbo_iter, temp_errors ); if (temp_errors==0) break; else errors(turbo_iter) = temp_errors + errors(turbo_iter); % Interleave and extract extrinsic information input_upper_u(codeword_index,:) = Deinterleave( output_lower_u - input_lower_u, code_interleaver ); end end % Combine output_c and puncture % convert to matrices (each row is from one row of the generator) upper_reshaped = [ reshape( output_upper_c, N1, length(output_upper_c)/N1 ) ]; lower_reshaped = [ reshape( output_lower_c, N2, length(output_lower_c)/N2 ) ]; % parallel concatenate unpunctured_word = [upper_reshaped lower_reshaped]; % repuncture output_decoder_c( codeword_index,:) = Puncture( unpunctured_word, pun_pattern, tail_pattern ); end detected_data = reshape( detected_data', 1, K_data); codec2-0.0~git20230330.db1c21c/mat/TurboDuobinaryCRSCDecode.m000066400000000000000000000103761441116725500230500ustar00rootroot00000000000000function [detected_data, errors] = TurboDuobinaryCRSCDecode( llr, code_interleaver, pun_pattern, data, max_iterations, decoder_type) % TurboDuobinaryCRSCDecode deccodes a data sequence that was encoded by a % duobinary tailbiting turbo encoder. % % The calling syntax is: % [detected_data, errors] = TurboDuobinaryCRSCDecode( llr, code_interleaver, pun_pattern, data, max_iterations, decoder_type ) % % detected_data = a row vector containing the detected data % errors = a column vector containing the number of errors per % iteration for all the codewords. % % llr = received LLR of the code bits. % code_interleaver = the turbo interleaver % pun_pattern = the puncturing pattern % data = the row vector of data bits (for early halting) % max_iterations = maximum number of decoder iterations % decoder_type = the decoder type % = 0 For linear-log-MAP algorithm, i.e. correction function is a straght line. % = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ), i.e. correction function = 0. % = 2 For Constant-log-MAP algorithm, i.e. correction function is a constant. % = 3 For log-MAP, correction factor from small nonuniform table and interpolation. % = 4 For log-MAP, correction factor uses C function calls. % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Nov. 16, 2007 % % Function TurboDuobinaryCRSCDecode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA Nbits = length(code_interleaver.info_intl); N = Nbits/2; depun_llr = zeros(1,3*Nbits); if (length(pun_pattern)>1) depun_llr(pun_pattern) = llr; else depun_llr(1:3*Nbits) = llr; end if (length( code_interleaver.subblk_intl ) > 0 ) % for WiMAX temp_llr([1,2],code_interleaver.subblk_intl) = reshape( depun_llr(1:2*N), N, 2).'; temp_llr([3,4],code_interleaver.subblk_intl) = reshape( depun_llr(2*N+1:4*N), 2, N); temp_llr([5,6],code_interleaver.subblk_intl) = reshape( depun_llr(4*N+1:6*N), 2, N); else % for DVB-RCS temp_llr([1,2],:) = reshape( depun_llr(1:2*N), 2, N ); temp_llr([3,4],:) = reshape( depun_llr(2*N+1:4*N), 2, N); temp_llr([5,6],:) = reshape( depun_llr(4*N+1:6*N), 2, N); end X = [ temp_llr([2,1],:); temp_llr(1,:)+temp_llr(2,:)]; %% llr: 01, 10, 11 inz1 = [ temp_llr([5,3],:); temp_llr(3,:)+temp_llr(5,:)]; %% llr: 01, 10, 11 inz2 = [ temp_llr([6,4],:); temp_llr(4,:)+temp_llr(6,:)]; %% llr: 01, 10, 11 couple_index = ceil(code_interleaver.info_intl(1:2:Nbits)/2); code_interleaver_GF4(1:3:3*Nbits/2) = couple_index-1 + code_interleaver.info_intl(1:2:Nbits); code_interleaver_GF4(2:3:3*Nbits/2) = couple_index-1 + code_interleaver.info_intl(2:2:Nbits); code_interleaver_GF4(3:3:3*Nbits/2) = 3*couple_index; poly = [1,0,1,1;1,0,0,1]; inx2 = zeros(3,N); inner_extr = zeros(3,N); detected_data = zeros(1,Nbits); errors = zeros(max_iterations, 1); for it = 1:max_iterations inx1 = X + inner_extr; [outx1, outz1]=DuobinaryCRSCDecode( inx1, inz1, poly, decoder_type); llrx1 = outx1 - inner_extr; inx2(1:3*N) = llrx1( code_interleaver_GF4); [outx2, outz2, out_info]=DuobinaryCRSCDecode( inx2, inz2, poly, decoder_type); detected_data(code_interleaver.info_intl) = (out_info>0)+0; errors(it)= sum( sum(abs(detected_data - data))); if (errors(it) == 0) break; else inner_extr(code_interleaver_GF4) = outx2 - inx2; end endcodec2-0.0~git20230330.db1c21c/mat/TurboDuobinaryCRSCEncode.m000066400000000000000000000047561441116725500230670ustar00rootroot00000000000000function codeword = TurboDuobinaryCRSCEncode( data, code_interleaver, pun_pattern ) % TurboDuobinaryCRSCEncode encodes a data sequence using a duobinary tailbiting % turbo encoder. % % The calling syntax is: % codeword = TurboDuobinaryCRSCEncode( data, code_interleaver, pun_pattern ) % % codeword = the codeword generated by the encoder (a row vector) % % data = the row vector of data bits % code_interleaver = the turbo interleaver % pun_pattern = the puncturing pattern % % Copyright (C) 2007, Matthew C. Valenti and Shi Cheng % % Last updated on Nov. 16, 2007 % % Function TurboDuobinaryCRSCEncode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 % USA Nbits= length(data); N = Nbits/2; poly = [1,0,1,1;1,0,0,1]; couple_data = reshape(data, 2, N); outz = DuobinaryCRSCEncode(couple_data, poly); intl_data = zeros(2,N); intl_data = data(code_interleaver.info_intl); intl_outz = DuobinaryCRSCEncode( intl_data, poly); if (length( code_interleaver.subblk_intl ) > 0 ) % WiMax uses a sub-block interleaver unpun_codeword = [reshape(couple_data(:,code_interleaver.subblk_intl).' ,1,2*N),... reshape( [outz(1,code_interleaver.subblk_intl);intl_outz(1,code_interleaver.subblk_intl)], 1, 2*N),... reshape( [outz(2,code_interleaver.subblk_intl);intl_outz(2,code_interleaver.subblk_intl)], 1, 2*N)]; else % DVB-RCS does not use a sub-block interleaver unpun_codeword = [reshape(couple_data,1,2*N),... reshape( [outz(1,:);intl_outz(1,:)], 1, 2*N),... reshape( [outz(2,:);intl_outz(2,:)], 1, 2*N)]; end if (length(pun_pattern)>1) codeword = unpun_codeword( pun_pattern); else codeword = unpun_codeword( 1:3*Nbits ); end codec2-0.0~git20230330.db1c21c/mat/TurboEncode.m000066400000000000000000000065061441116725500205320ustar00rootroot00000000000000function codeword = TurboEncode( data, code_interleaver, pun_pattern, tail_pattern, g1, nsc_flag1, g2, nsc_flag2 ) % TurboEncode encodes a data sequence using a binary turbo encoder. % If the data length is an integer multiple of the interleaver length, then % multiple codewords are returned, (one per row of the codeword matrix). % % The calling syntax is: % codeword = TurboEncode( data, code_interleaver, pun_pattern, tail_pattern, g1, nsc_flag1, g2, nsc_flag2 ) % % codeword = the codeword generated by the encoder, % will contain multiple rows if the data is longer than the % interleaver % % data = the row vector of data bits % code_interleaver = the turbo interleaver % pun_pattern = the puncturing pattern for all but the tail % tail_pattern = the puncturing pattern just for the tail % g1 = the first generator polynomial % nsc_flag1 = 0 if first encoder is RSC and 1 if NSC % g2 = the second generator polynomial % nsc_flag2 = 0 if second encoder is RSC and 1 if NSC % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Dec. 13, 2005 % % Function TurboEncode is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % determine the size of the two generators [N1,K1] = size( g1 ); [N2,K2] = size( g2 ); % in the future, we will allow constituent codes with different constraint lengths if ( K1 ~= K2 ) error( 'The constraint lengths of the two PCCC constituent codes must be indentical' ); end % check interleaver length against data length K_data = length( data ); K_interleaver = length( code_interleaver ); if ( rem( K_data, K_interleaver ) ) error( 'The data length needs to be an integer multiple of the interleaver length' ); end number_codewords = K_data/K_interleaver; data = reshape( data, K_interleaver, number_codewords)'; for codeword_index=1:number_codewords % Encode in parallel (fixed on 2-1-06) upper_output = ConvEncode( data(codeword_index,:), g1, nsc_flag1 ); lower_output = ConvEncode( Interleave( data(codeword_index,:), code_interleaver), g2, nsc_flag2 ); % convert to matrices (each row is from one row of the generator) upper_reshaped = [ reshape( upper_output, N1, length(upper_output)/N1 ) ]; lower_reshaped = [ reshape( lower_output, N2, length(lower_output)/N2 ) ]; % parallel concatenate unpunctured_word = [upper_reshaped lower_reshaped]; codeword(codeword_index,:) = Puncture( unpunctured_word, pun_pattern, tail_pattern ); end codec2-0.0~git20230330.db1c21c/mat/UmtsPunPattern.m000066400000000000000000000020201441116725500212550ustar00rootroot00000000000000function [pun_pattern, tail_pattern] = UmtsPunPattern( framesize, code_bits_per_frame ) N = 3*framesize+12; X_i = N/3; % This is the combined pun_pattern and tail_pattern total_pattern = zeros(3,X_i); % don't puncture the systematic part total_pattern(1,:) = ones(1,X_i); % set up parameters delta_N = code_bits_per_frame - N; e_ini = X_i; % puncture first parity stream e_plus = 2*X_i; e_minus = 2*abs( floor( delta_N/2 ) ); parity_1 = RateMatch( 1:X_i, X_i, e_ini, e_plus, e_minus ); total_pattern(2,parity_1) = ones( size(parity_1) ); % puncture second parity stream e_plus = X_i; e_minus = abs( ceil( delta_N/2 ) ); parity_2 = RateMatch( 1:X_i, X_i, e_ini, e_plus, e_minus ); total_pattern(3,parity_2) = ones( size(parity_2) ); % bit collection pun_pattern(1,:) = ones(1,framesize); pun_pattern(2,:) = total_pattern(2,1:framesize); pun_pattern(3,:) = zeros(1,framesize); pun_pattern(4,:) = total_pattern(3,1:framesize); tail_pattern = reshape( total_pattern(:,framesize+1:X_i),4, 3 ); codec2-0.0~git20230330.db1c21c/matalt/000077500000000000000000000000001441116725500166355ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/matalt/CapacityTableLookup.m000066400000000000000000000057241441116725500227220ustar00rootroot00000000000000function cap = CapacityTableLookup( EsNo_AWGN, capacity_AWGN, slope, gamma ) % CapacityTableLookup returns the instantaneous capacity for a particular % channel realization by using a precalculated AWGN capacity table. % Since the table does not generally contain capacity values for the exact % SNR, linear interpolation is used to estimate the value. % % The calling syntax is: % cap = CapacityTableLoookup( EsNo_AWGN, capacity_AWGN, slope, gamma ) % % cap = The instantaneous capacity, a column vector with same number of % rows as gamma. % % EsNo_AWGN = The SNR values stored in the table % capacity_AWGN = The AWGN capacity values stored in the table. % slope = The slope of the AWGN capacity curve. % gamma = The instantaneous SNRs for the channel realization. % Each row correpsonds to a distinct codeword, % And the columns correspond to the blocks of that codeword. % % Copyright (C) 2005, Tarik Ghanim and Matthew C. Valenti % % Last updated on Dec. 23, 2005 % % Function CapacityTableLookup is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA % L is the number of blocks per codeword, % while trial_size is the number of codewords per trial [trial_size, L] = size( gamma ); max_SNR = max( EsNo_AWGN ); min_SNR = min( EsNo_AWGN ); max_cap = max( capacity_AWGN ); cap = zeros(size(gamma,1),1); for codeword=1:trial_size for block=1:L if ( gamma(codeword,block) >= max_SNR ) % SNR above smallest value in table; use largest capacity inst_cap(block) = max_cap; elseif ( gamma(codeword,block) > min_SNR ) % Need to interpolate index_below = max( find( EsNo_AWGN < gamma(codeword,block) ) ); correction = slope(index_below)*(gamma(codeword,block)-EsNo_AWGN(index_below)); inst_cap(block) = capacity_AWGN(index_below) + correction; else % SNR below smallest value in table; assume capacity is zero inst_cap(block) = 0; end % add instantaneous capacities cap(codeword) = sum( inst_cap ); end end codec2-0.0~git20230330.db1c21c/matalt/RateDematch.m000066400000000000000000000032521441116725500211760ustar00rootroot00000000000000function y = RateDematch( x, X_i, e_ini, e_plus, e_minus ); % RateDematch reverses the basic UMTS/HSDPA Rate Matching algorithm % % The calling syntax is: % y = RateDematch( x, X_i, e_ini, e_plus, e_minus ); % % y = depunctured output (length X_i) % % x = input consisting of received/punctured bits % X_i = length of the depunctured output % e_ini = parameter used by algorithm % e_plus = parameter used by algorithm % e_minus = parameter used by algorithm % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function RateDematch is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA e = e_ini; y_index = 1; for m=1:X_i e = e - e_minus; if (e<=0) % mark for puncturing e = e + e_plus; y(m) = 0; else y(m) = x(y_index); y_index = y_index + 1; end endcodec2-0.0~git20230330.db1c21c/matalt/RateMatch.m000066400000000000000000000031641441116725500206670ustar00rootroot00000000000000function y = RateMatch( x, X_i, e_ini, e_plus, e_minus ) % RateMatch performs the basic UMTS/HSDPA Rate Matching algorithm % % The calling syntax is: % y = RateMatch( x, X_i, e_ini, e_plus, e_minus ) % % y = output of rate matching algorithm % % x = input to rate matching algorithm (length X_i) % X_i = length of the input % e_ini = parameter used by algorithm % e_plus = parameter used by algorithm % e_minus = parameter used by algorithm % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function RateMatch is part of the Iterative Solutions Coded Modulation % Library (ISCML). % % The Iterative Solutions Coded Modulation Library is free software; % you can redistribute it and/or modify it under the terms of % the GNU Lesser General Public License as published by the % Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA y = []; e = e_ini; y_index = 1; for m=1:X_i e = e - e_minus; if (e<=0) e = e + e_plus; else y(y_index) = x(m); y_index = y_index + 1; end endcodec2-0.0~git20230330.db1c21c/mex/000077500000000000000000000000001441116725500161445ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/mex/.gitignore000066400000000000000000000001071441116725500201320ustar00rootroot00000000000000# Ignore everything in this directory * # Except this file !.gitignore codec2-0.0~git20230330.db1c21c/mexhelp/000077500000000000000000000000001441116725500170155ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/mexhelp/Capacity.m000066400000000000000000000025531441116725500207350ustar00rootroot00000000000000% Capacity determines the ergodic capacity under modulation constraints % % The calling syntax is: % [output] = capacity( input, data ) % % output = Instantaneous capacity of this frame % % input = M by N matrix of symbol likelihoods % where M is the modulation order, or % M=1 is used to indicate that the input is a bitwise LLR. % data = 1 by N*log2(M) vector of data bits % % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Capacity is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/ConvEncode.m000066400000000000000000000030101441116725500212100ustar00rootroot00000000000000% ConvEncode encodes a NSC or RSC convolutional code with a tail. % % The calling syntax is: % [output] = ConvEncode(input, g_encoder, [code_type] ) % % output = code word % % Required inputs: % input = data word % g_encoder = generator matrix for convolutional code % (If RSC, then feedback polynomial is first) % % Optional inputs: % code_type = 0 for recursive systematic convolutional (RSC) code (default) % = 1 for non-systematic convolutional (NSC) code % = 2 for tail-biting NSC code % % Copyright (C) 2005-2008, Matthew C. Valenti % % Last updated on May 21, 2008 % % Function ConvEncode is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/CreateCcsdsInterleaver.m000066400000000000000000000022761441116725500235660ustar00rootroot00000000000000% CreateCcsdsInterleaver produces an interleaver according to the CCSDS spec. % % The calling syntax is: % [alpha] = CreateCcsdsInterleaver( K ) % % alpha = the interleaver in a length K vector % % K = the size of the interleaver % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on June 25, 2006 % % Function CreateCcsdsInterleaver is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/CreateSRandomInterleaver.m000066400000000000000000000025461441116725500240720ustar00rootroot00000000000000% CreateSRandomInterleaver produces a S-random interleaver. % Warning: It can take a significant time to run. % % The calling syntax is: % [alpha] = CreateSRandomInterleaver( K, S ) % % alpha = the interleaver in a length K vector % % K = the size of the interleaver % S = S value (determines amount of spread) % Note: the value of S greatly influences run time. % % Copyright (C) 2005, Matthew C. Valenti and Yufei Wu % % Last updated on Nov. 28, 2005 % % Function CreateSRandomInterleaver is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/CreateUmtsInterleaver.m000066400000000000000000000022731441116725500234540ustar00rootroot00000000000000% CreateUmtsInterleaver produces an interleaver according to the UMTS spec. % % The calling syntax is: % [alpha] = CreateUmtsInterleaver( K ) % % alpha = the interleaver in a length K vector % % K = the size of the interleaver % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function CreateUmtsInterleaver is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Deinterleave.m000066400000000000000000000023071441116725500216040ustar00rootroot00000000000000% Deinterleave reverses the interleaving of one block of data. % % The calling syntax is: % [output] = Deinterleave(input, alpha_code ) % % output = deinterleaved data % % input = interleaved data or LLR values % alpha_code = interleaver pattern % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Deinterleave is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Demod2D.m000066400000000000000000000027411441116725500204150ustar00rootroot00000000000000% Demod2D transforms received symbol values into log-likelihoods % % The calling syntax is: % [output] = Demod2D( input, S_matrix, EsNo, [fade_coef] ) % % output = M by N matrix of symbol log-likelihoods % % Required inputs: % input = 1 by N matrix of (complex) matched filter outputs % S_matrix = M by 1 complex matrix representing the constellation % EsNo = the symbol SNR (in linear, not dB, units) % % Optional inputs: % fade_coef = 1 by N matrix of (complex) fading coefficients (defaults to all-ones) % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Demod2D is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/DemodFSK.m000066400000000000000000000031671441116725500205760ustar00rootroot00000000000000% DemodFSK transforms M-dimensional FSK symbols into ML symbol log-likelihoods % % The calling syntax is: % [output] = FskDemod( input, EsNo, [csi_flag], [fade_coef] ) % % output = M by N matrix of symbol log-likelihoods % % Required inputs: % input = M by N matrix of (complex) matched filter outputs % EsNo = the symbol SNR (in linear, not dB, units) % % Optional inputs: % csi_flag = 0 for coherent reception (default) % 1 for noncoherent reception w/ perfect amplitude estimates % 2 for noncoherent reception without amplitude estimates % fade_coef = 1 by N matrix of (complex) fading coefficients (defaults to all-ones, i.e. AWGN) % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on June 25, 2006 % % Function DemodFSK is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Depuncture.m000066400000000000000000000024551441116725500213170ustar00rootroot00000000000000% Depuncture reverses puncturing by by zero-padding deleted bits. % % The calling syntax is: % [output] = Depuncture(input, pun_pattern, tail_pattern ) % % output = Unpunctured codeword % % input = Punctured codeword % pun_pattern = Puncturing pattern for encoded data bits % tail_pattern = Puncturing pattern for encoded tail bits % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Depuncture is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/InitializeDVBS2.m000066400000000000000000000027201441116725500220360ustar00rootroot00000000000000% InitializeDVBS2 creates H_rows and H_cols matrices for the DVB-S2 LDPC code. % % The calling syntax is: % [H_rows, H_cols] = InitializeDVBS2( rate, size ) % % H_rows = a M-row matrix containing the indices of the non-zero rows of H. % H_cols = a (N-M)-row matrix containing the indices of the non-zeros rows of H. % % rate = the code rate % size = the size of the code (number of code bits): % = 64,800 for normal (n=64,800) % = 16,200 for short (n=16,200) % % Copyright (C) 2005, Matthew C. Valenti and Rohit Iyer Seshadri % % Last updated on Nov. 28, 2005 % % Function InitializeDVBS2 is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Interleave.m000066400000000000000000000023111441116725500212660ustar00rootroot00000000000000% Interleave permutes the order of a block of data according to pattern alpha_code % % The calling syntax is: % [output] = Interleave(input, alpha_code ) % % output = interleaved data % % input = uninterleaved data % alpha_code = interleaver pattern % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Interleave is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/LdpcEncode.m000066400000000000000000000027671441116725500212070ustar00rootroot00000000000000% LdpcEncode encodes an LDPC codeword. Code must be an "eIRA-LDPC" type code, such as the one % in the DVB-S2 standard, or WiMax standard. % % The calling syntax is: % codeword = LdpcEncode( data, H_rows, [P]) % % Where: % codeword = the encoded codeword % % data = a row vector containing the data % H_rows = a M-row matrix containing the indices of the non-zero rows of H excluding the dual-diagonal part. % P = (optional) z times z matrix used to generate the first z check bits for WiMax (default =[]) % % Copyright (C) 2005-2007, Matthew C. Valenti and Rohit Iyer Seshadri % % Last updated on July 10, 2007 % % Function LdpcEncode is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Modulate.m000066400000000000000000000027721441116725500207550ustar00rootroot00000000000000% Modulate transforms bits into K-dimensional channel symbols % % The calling syntax is: % [output] = Modulate( input, S_matrix ) % % output = K by N vector of modulated symbols % % Required inputs: % input = 1 by N*log2(M) vector of data bits % S_Matrix = K by M complex matrix containing the constellation signals % Each Column is one signal, each signal is K-dimensional % % Note: For legacy purposes, S_matrix can be a M by 1 matrix when signal % set can be characterized by a one-dimensional complex value (QAM, etc). % % Copyright (C) 2006, Matthew C. Valenti % % Last updated on June 21, 2006 % % Function Modulate is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/MpDecode.m000066400000000000000000000053001441116725500206510ustar00rootroot00000000000000% MpDecode decodes a block code (e.g. LDPC) using the message passing algorithm. % % The calling syntax is: % [output, errors] = MpDecode(input, H_rows, H_cols, [max_iter], [dec_type], [r_scale_factor], [q_scale_factor], [data] ) % % Required outputs: % output = matrix of dimension maxiter by N that has the decoded code bits for each iteration % % Optional outputs: % errors = (optional) column vector showing the number of (code bit) errors after each iteration. % % Required inputs: % input = the decoder input in LLR form % H_cols = a N row matrix specifying the locations of the nonzero entries in each column of the H matrix. % The number or columns in the matrix is the max column weight. % OR % a K row matrix specifying locations of the nonzero entries in each coulmn of an extended IRA type % sparse H1 matrix % H_rows = a N-K row matrix specifying the locations of the nonzero entries in each row of the H matrix. % The number or columns in the matrix is the max row weight, unless this is for an H1 matrix, % in which case the last n-k columns of the H matrix are equal to a known H2 matrix. % % Optional inputs: % max_iter = the maximum number of decoder iterations (default = 30). % dec_type = the decoder type: % = 0 Sum-product (default) % = 1 Min-sum % = 2 Approximate-min-star % r_scale_factor = amount to scale extrinsic output of c-nodes in min-sum decoding (default = 1) % q_scale_factor = amount to scale extrinsic output of v-nodes in min-sum decoding (default = 1) % data = a vector containing the data bits (used for counting errors and for early halting) (default all zeros) % % Copyright (C) 2005-2007, Matthew C. Valenti and Rohit Iyer Seshadri % % Last updated on July 21, 2007 % % Function Mpdecode is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Puncture.m000066400000000000000000000024651441116725500210070ustar00rootroot00000000000000% Puncture deletes bits at output of encoder according to puncutring pattern % % The calling syntax is: % [output] = Puncture(input, pun_pattern, tail_pattern ) % % output = Punctured sequence % % input = Code bits to be punctured % pun_pattern = Puncturing pattern for encoded data bits % tail_pattern = Puncturing pattern for encoded tail bits % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Puncture is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/SisoDecode.m000066400000000000000000000035661441116725500212260ustar00rootroot00000000000000% SisoDecode performs soft-in/soft-out decodeing of a convolutional code. % % The calling syntax is: % [output_u, output_c] = SisoDecode(input_u, input_c, g_encoder, [code_type], [dec_type] ) % % output_u = LLR of the data bits % output_c = LLR of the code bits % % Required inputs: % input_u = APP of the data bits % input_c = APP of the code bits % g_encoder = generator matrix for convolutional code % (If RSC, then feedback polynomial is first) % % Optional inputs: % code_type = 0 for RSC outer code (default) % = 1 for NSC outer code % dec_type = the decoder type: % = 0 For linear approximation to log-MAP (DEFAULT) % = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ) % = 2 For Constant-log-MAP algorithm % = 3 For log-MAP, correction factor from small nonuniform table and interpolation % = 4 For log-MAP, correction factor uses C function calls (slow) ) % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function SisoDecode is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/Somap.m000066400000000000000000000034211441116725500202520ustar00rootroot00000000000000% Somap performs soft demapping (converts M-ary symbol likelihoods to bitwise LLRs). % % The calling syntax is: % [output] = Somap( input, [demod_type], [extrinsic_info] ) % % output = Length N*log2(M) stream of LLR values % % Required inputs: % input = M by N matrix of symbol likelihoods % % Optional inputs: % demod_type = The type of max_star algorithm that is used % = 0 For linear approximation to log-MAP (DEFAULT) % = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ) % = 2 For Constant-log-MAP algorithm % = 3 For log-MAP, correction factor from small nonuniform table and interpolation % = 4 For log-MAP, correction factor uses C function calls % extrinsic_info = 1 by N*log2(M) vector of extrinsic info (defaults to all-zero) % % Copyright (C) 2005, Matthew C. Valenti % % Last updated on Nov. 28, 2005 % % Function Somap is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USAcodec2-0.0~git20230330.db1c21c/mexhelp/ViterbiDecode.m000066400000000000000000000034011441116725500217010ustar00rootroot00000000000000% ViterbiDecode performs soft-in/hard-out decoding for a convolutional code using the Viterbi algorithm % % The calling syntax is: % [output_u] = ViterbiDecode( input_c, g_encoder, [code_type], [depth] ) % % output_u = hard decisions on the data bits (0 or 1) % % Required inputs: % input_c = LLR of the code bits (based on channel observations) % g_encoder = generator matrix for convolutional code % (If RSC, then feedback polynomial is first) % % Optional inputs: % code_type = 0 for recursive systematic convolutional (RSC) code (default) % = 1 for non-systematic convolutional (NSC) code % = 2 for tail-biting NSC code % depth = wrap depth used for tail-biting decoding % default is 6 times the constraint length % % Copyright (C) 2005-2008, Matthew C. Valenti % % Last updated on May 21, 2008 % % Function ViterbiDecode is part of the Iterative Solutions % Coded Modulation Library. The Iterative Solutions Coded Modulation % Library is free software; you can redistribute it and/or modify it % under the terms of the GNU Lesser General Public License as published % by the Free Software Foundation; either version 2.1 of the License, % or (at your option) any later version. % % This library is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library; if not, write to the Free Software % Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA codec2-0.0~git20230330.db1c21c/scenarios/000077500000000000000000000000001441116725500173415ustar00rootroot00000000000000codec2-0.0~git20230330.db1c21c/scenarios/BlockcodeScenarios.m000066400000000000000000000126471441116725500232650ustar00rootroot00000000000000% File BlockcodeScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for cyclic block codes, % with APP decoding. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'blockcode'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % A cyclic block code is a rate 1 convolutional code with trellis % termination record = 1; % don't change this record number sim_param(record).comment = '(23,12) Nonsystematic Golay code'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 12; % This is k sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; % does not matter for BPSK sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 0 1 1 1 0 0 0 1 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).decoder_type = 0; % log-MAP decoding (i.e. APP) % sim_param(record).filename = strcat( data_directory, 'GolayAWGN.mat'); sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 2e-5; sim_param(record).max_frame_errors = 301*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e3; % (23,12) Golay code in systematic form record = 2; % don't change this record number sim_param(record).comment = '(23,12) Systematic Golay code'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 12; % This is k sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; % does not matter for BPSK sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 0 1 1 1 0 0 0 1 1]; sim_param(record).nsc_flag1 = 0; sim_param(record).decoder_type = 0; % log-MAP decoding (i.e. APP) % sim_param(record).filename = strcat( data_directory, 'GolaySystematicAWGN.mat'); sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 2e-5; sim_param(record).max_frame_errors = 300*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e3; record = 3; % don't change this record number sim_param(record).comment = '(15,10) Nonsystematic Expurgated Hamming code'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 10; % This is k sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; % does not matter for BPSK sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 0 1 1] ; sim_param(record).nsc_flag1 = 1; sim_param(record).decoder_type = 0; % log-MAP decoding (i.e. APP) %sim_param(record).filename = strcat( data_directory, 'HammingAWGN.mat'); sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 2e-5; sim_param(record).max_frame_errors = 301*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e3; record = 4; % don't change this record number sim_param(record).comment = '(15,10) Systematic Expurgated Hamming code'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 10; % This is k sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; % does not matter for BPSK sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 0 1 1] ; sim_param(record).nsc_flag1 = 0; sim_param(record).decoder_type = 0; % log-MAP decoding (i.e. APP) % sim_param(record).filename = strcat( data_directory, 'BluetoothAWGN.mat'); sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 2e-5; sim_param(record).max_frame_errors = 300*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e3; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. codec2-0.0~git20230330.db1c21c/scenarios/BtcScenarios.m000066400000000000000000002226461441116725500221120ustar00rootroot00000000000000% File BtcScenarios % % This is a set of scenarios for the Coded Modulation Library. % % Last updated on May 3, 2008 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'BTC'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end MINBER = 5e-6; MAXTRIALS = 1e9; MAXERRORS = 200; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,6) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 1; sim_param(record).comment = '(12,6) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 3; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,9) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 2; sim_param(record).comment = '(12,9) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 9; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,12) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 3; sim_param(record).comment = '(24,12) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 17; sim_param(record).B = 6; sim_param(record).Q = 0; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,20) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 4; sim_param(record).comment = '(24,20) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 13; sim_param(record).k_per_column = 13; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,18) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 5; sim_param(record).comment = '(36,18) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 26; sim_param(record).B = 9; sim_param(record).Q = 3; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,25) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 6; sim_param(record).comment = '(36,25) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 0 0 1 1]; % row generator (1+X)(1+X+X^6) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 41; sim_param(record).k_per_column = 5; sim_param(record).B = 0; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,23) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 7; sim_param(record).comment = '(48,23) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 22; sim_param(record).B = 8; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,35) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 8; sim_param(record).comment = '(48,35) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 11; sim_param(record).k_per_column = 26; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (60,31) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 9; sim_param(record).comment = '(60,31) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 16; sim_param(record).k_per_column = 16; sim_param(record).B = 4; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 18; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (72,40) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 10; sim_param(record).comment = '(72,40) BTC in AWGN, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:8; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 18; sim_param(record).B = 0; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 20; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = 1:sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,6) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 11; sim_param(record).comment = '(12,6) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 3; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,9) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 12; sim_param(record).comment = '(12,9) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 9; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,12) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 13; sim_param(record).comment = '(24,12) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 17; sim_param(record).B = 6; sim_param(record).Q = 0; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,20) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 14; sim_param(record).comment = '(24,20) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 13; sim_param(record).k_per_column = 13; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,18) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 15; sim_param(record).comment = '(36,18) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 26; sim_param(record).B = 9; sim_param(record).Q = 3; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,25) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 16; sim_param(record).comment = '(36,25) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 0 0 1 1]; % row generator (1+X)(1+X+X^6) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 41; sim_param(record).k_per_column = 5; sim_param(record).B = 0; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,23) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 17; sim_param(record).comment = '(48,23) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 22; sim_param(record).B = 8; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,35) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 18; sim_param(record).comment = '(48,35) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 11; sim_param(record).k_per_column = 26; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (60,31) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 19; sim_param(record).comment = '(60,31) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 16; sim_param(record).k_per_column = 16; sim_param(record).B = 4; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 18; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (72,40) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 20; sim_param(record).comment = '(72,40) BTC in AWGN, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:10; sim_param(record).channel = 'awgn'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 18; sim_param(record).B = 0; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 20; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,6) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 21; sim_param(record).comment = '(12,6) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 3; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,9) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 22; sim_param(record).comment = '(12,9) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 9; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,12) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 23; sim_param(record).comment = '(24,12) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 17; sim_param(record).B = 6; sim_param(record).Q = 0; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,20) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 24; sim_param(record).comment = '(24,20) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 13; sim_param(record).k_per_column = 13; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,18) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 25; sim_param(record).comment = '(36,18) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 26; sim_param(record).B = 9; sim_param(record).Q = 3; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,25) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 26; sim_param(record).comment = '(36,25) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 0 0 1 1]; % row generator (1+X)(1+X+X^6) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 41; sim_param(record).k_per_column = 5; sim_param(record).B = 0; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,23) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 27; sim_param(record).comment = '(48,23) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 22; sim_param(record).B = 8; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,35) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 28; sim_param(record).comment = '(48,35) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 11; sim_param(record).k_per_column = 26; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (60,31) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 29; sim_param(record).comment = '(60,31) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 16; sim_param(record).k_per_column = 16; sim_param(record).B = 4; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 18; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (72,40) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 30; sim_param(record).comment = '(72,40) BTC in RAYLEIGH, log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 18; sim_param(record).B = 0; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 20; sim_param(record).decoder_type = 0; % log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,6) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 31; sim_param(record).comment = '(12,6) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 3; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (12,9) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 32; sim_param(record).comment = '(12,9) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 9; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 10; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,12) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 33; sim_param(record).comment = '(24,12) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 17; sim_param(record).B = 6; sim_param(record).Q = 0; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (24,20) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 34; sim_param(record).comment = '(24,20) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 13; sim_param(record).k_per_column = 13; sim_param(record).B = 4; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 12; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,18) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 35; sim_param(record).comment = '(36,18) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 6; sim_param(record).k_per_column = 26; sim_param(record).B = 9; sim_param(record).Q = 3; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (36,25) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 36; sim_param(record).comment = '(36,25) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 0 0 1 1]; % row generator (1+X)(1+X+X^6) sim_param(record).g2 = [1 1]; % column generator 1+X (SPC code) sim_param(record).k_per_row = 41; sim_param(record).k_per_column = 5; sim_param(record).B = 0; sim_param(record).Q = 5; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 14; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,23) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 37; sim_param(record).comment = '(48,23) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 0 1 0 1 1]; % row generator (1+X)(1+X+X^4) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 9; sim_param(record).k_per_column = 22; sim_param(record).B = 8; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (48,35) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 38; sim_param(record).comment = '(48,35) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1]; % row generator (1+X) (SPC code) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 11; sim_param(record).k_per_column = 26; sim_param(record).B = 0; sim_param(record).Q = 6; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'c--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (60,31) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 39; sim_param(record).comment = '(60,31) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 16; sim_param(record).k_per_column = 16; sim_param(record).B = 4; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 18; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm--'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (72,40) byte code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% record = 40; sim_param(record).comment = '(72,40) BTC in RAYLEIGH, max-log-MAP'; sim_param(record).legend = sim_param(record).comment; % channel parameters sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.25:20; sim_param(record).channel = 'rayleigh'; % channel coding parameters sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 7; % BTC sim_param(record).g1 = [1 1 1 1 0 1 1]; % row generator (1+X)(1+X^2+X^5) sim_param(record).g2 = [1 1 1 1 0 1 1]; % column generator (1+X)(1+X^2+X^5) sim_param(record).k_per_row = 18; sim_param(record).k_per_column = 18; sim_param(record).B = 0; sim_param(record).Q = 4; sim_param(record).framesize = sim_param(record).k_per_row*sim_param(record).k_per_column - sim_param(record).B - sim_param(record).Q; sim_param(record).max_iterations = 20; sim_param(record).decoder_type = 1; % max-log-MAP % modulation parameters sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % saving sim_param(record).filename = strcat( data_directory, ... strcat( 'btc', int2str( (sim_param(record).framesize)/8 ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).save_rate = 1000; % when to halt the simulation sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( 1, length(sim_param(record).SNR) ); % plotting sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k--'; codec2-0.0~git20230330.db1c21c/scenarios/CapacityScenarios.m000066400000000000000000000425671441116725500231410ustar00rootroot00000000000000% File CapacityScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the Shannon capacity % under modulation constraints. % % Last updated on July 4, 2006 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'capacity'; if ispc data_directory = strcat( cml_home, '\output\', base_name, '\' ); else data_directory = strcat( cml_home, '/output/', base_name, '/' ); end if ~exist( data_directory, 'dir' ) mkdir(data_directory); end trials=100; % CM capacity in AWGN % BPSK record = 1; sim_param(record).comment = 'Capacity of BPSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % QPSK record = 2; sim_param(record).comment = 'CM capcity of QPSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 3; sim_param(record).comment = 'CM capacity of 16-QAM in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 4; sim_param(record).comment = 'CM capacity of 16-HEX in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'HEX'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'c-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HEX16CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 250*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 5; sim_param(record).comment = 'CM capacity of 16-APSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'APSK'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'APSK16CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 250*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 6; sim_param(record).comment = 'CM capacity of 32-QAM in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 32; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM32CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 7; sim_param(record).comment = 'CM capacity of 32-APSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'APSK'; sim_param(record).mod_order = 32; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'APSK32CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 250*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % BICM capacity in AWGN % BPSK record = 8; sim_param(record).comment = 'BICM Capacity of BPSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 4; % does not matter for binary modulation sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BPSK_BICM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 9; sim_param(record).comment = 'BICM capacity of 16-QAM in AWGN w/ gray labeling'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 4; sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16BICMAWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 350*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 10; sim_param(record).comment = 'BICM capacity of 16-QAM in AWGN w/ SP'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 4; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16BICMAWGN_SP.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 350*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 11; sim_param(record).comment = 'BICM capacity of 16-APSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'APSK'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 4; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'APSK16BICMAWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % Capacity in Rayleigh fading record = 12; sim_param(record).comment = 'Ergodic Capacity of BPSK in Rayleigh fading'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-30:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BPSKRayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 13; sim_param(record).comment = 'Ergodic CM Capacity of QPSK in Rayleigh fading'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-30:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = []; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSKRayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 14; sim_param(record).comment = 'Ergodic CM Capacity of 16-QAM in Rayleigh fading'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-30:0.5:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16CMRayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % BICM Capacity of HSDPA's QPSK in AWGN % New on Dec. 17, 2005 record = 15; sim_param(record).comment = 'BICM capcity of QPSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'HSDPA'; sim_param(record).mod_order = 4; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; sim_param(record).linetype = 'k:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSK_BICM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 250*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 25; record = 16; sim_param(record).comment = 'CM capacity of 64-QAM in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 1000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM64CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 17; sim_param(record).comment = 'BICM capacity of 16-QAM in AWGN w/ SP'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 4; sim_param(record).linetype = 'bx'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16BICMAWGN_SP_rerun.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 40*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 18; sim_param(record).comment = 'CM capacity of 8-PSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'PSK'; sim_param(record).mod_order = 8; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'PSK8CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 19; sim_param(record).comment = 'CM capacity of 16-PSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'PSK'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'PSK16CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 20; sim_param(record).comment = 'CM capacity of 32-PSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'PSK'; sim_param(record).mod_order = 32; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'PSK32CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 21; sim_param(record).comment = 'CM capacity of 64-PSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'PSK'; sim_param(record).mod_order = 64; sim_param(record).mapping = 'gray'; % does not matter if not BICM sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 4; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'PSK64CM.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = trials*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/CcsdsScenarios.m000066400000000000000000000727701441116725500224420ustar00rootroot00000000000000% File CcsdsScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the turbo code % used by the CCSDS standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'CCSDS'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end record = 1; sim_param(record).comment = 'CCSDS, r=1/2, K=1784'; sim_param(record).framesize = 1784; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 0 1 0]; sim_param(record).tail_pattern2 = [0 0 0 0 0 1 0 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 2; sim_param(record).comment = 'CCSDS, r=1/3, K=1784'; sim_param(record).framesize = 1784; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 ]; sim_param(record).pun_pattern2= [0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 3; sim_param(record).comment = 'CCSDS, r=1/4, K=1784'; sim_param(record).framesize = 1784; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 0 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 0 ]; sim_param(record).tail_pattern1 = [1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 4; sim_param(record).comment = 'CCSDS, r=1/6, K=1784'; sim_param(record).framesize = 1784; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 5; sim_param(record).comment = 'CCSDS, r=1/2, K=3568'; sim_param(record).framesize = 3568; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 0 1 0]; sim_param(record).tail_pattern2 = [0 0 0 0 0 1 0 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 6; sim_param(record).comment = 'CCSDS, r=1/3, K=3568'; sim_param(record).framesize = 3568; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 ]; sim_param(record).pun_pattern2= [0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 7; sim_param(record).comment = 'CCSDS, r=1/4, K=3568'; sim_param(record).framesize = 3568; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 0 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 0 ]; sim_param(record).tail_pattern1 = [1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 8; sim_param(record).comment = 'CCSDS, r=1/6, K=3568'; sim_param(record).framesize = 3568; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 9; sim_param(record).comment = 'CCSDS, r=1/2, K=7136'; sim_param(record).framesize = 7136; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 0 1 0]; sim_param(record).tail_pattern2 = [0 0 0 0 0 1 0 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 10; sim_param(record).comment = 'CCSDS, r=1/3, K=7136'; sim_param(record).framesize = 7136; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 ]; sim_param(record).pun_pattern2= [0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 11; sim_param(record).comment = 'CCSDS, r=1/4, K=7136'; sim_param(record).framesize = 7136; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 0 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 0 ]; sim_param(record).tail_pattern1 = [1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 12; sim_param(record).comment = 'CCSDS, r=1/6, K=7136'; sim_param(record).framesize = 7136; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 13; sim_param(record).comment = 'CCSDS, r=1/2, K=8920'; sim_param(record).framesize = 8920; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 0 1 0]; sim_param(record).tail_pattern2 = [0 0 0 0 0 1 0 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 14; sim_param(record).comment = 'CCSDS, r=1/3, K=8920'; sim_param(record).framesize = 8920; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 ]; sim_param(record).pun_pattern2= [0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 15; sim_param(record).comment = 'CCSDS, r=1/4, K=8920'; sim_param(record).framesize = 8920; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 0 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 0 ]; sim_param(record).tail_pattern1 = [1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 16; sim_param(record).comment = 'CCSDS, r=1/6, K=8920'; sim_param(record).framesize = 8920; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateCcsdsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 ]; sim_param(record).pun_pattern2= [0 1 0 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'CCSDSrate1by', ... int2str( floor( ( sum( sum( sim_param(record).pun_pattern1 ) ) + sum( sum( sim_param(record).pun_pattern2) ) )/size(sim_param(record).pun_pattern1,2) ) ), ... sim_param(record).channel, int2str( sim_param(record).framesize), '.mat' ); sim_param(record).reset = 0;; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, % int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/Cdma2000Scenarios.m000066400000000000000000000320751441116725500225430ustar00rootroot00000000000000% File Cdma2000Scenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the turbo code % used by the cdma2000 standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'cdma2000'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end record = 1; sim_param(record).comment = 'Rate 1/4 cdma2000 turbo code w/ BPSK in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = []; % the intereleaver determines the framesize sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = 'load(''imap12282'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 1 1 ]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [2 2 2 1 1 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k12282rate1by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10 16]; sim_param(record).save_rate = 20; record = 2; sim_param(record).comment = 'Rate 1/4 cdma2000 turbo code w/ gray coded 16-QAM in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = []; % the intereleaver determines the framesize sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = 'load(''imap12282'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 1 1 ]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [2 2 2 1 1 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k12282rate1by4_QAMgray.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10 16]; sim_param(record).save_rate = 20; record = 3; sim_param(record).comment = 'Rate 1/4 cdma2000 turbo code w/ SP-16-QAM in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:0.1:7]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = []; % the intereleaver determines the framesize sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = 'load(''imap12282'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 1 1 ]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [2 2 2 1 1 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k12282rate1by4_QAMsp.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10 16]; sim_param(record).save_rate = 20; % turbo BICM-ID record = 4; sim_param(record).comment = 'Rate 1/4 cdma2000 turbo code w/ SP-16-QAM in AWGN w/ BICM-ID'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:0.1:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = []; % the intereleaver determines the framesize sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = 'load(''imap12282'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 1 1 ]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = [2 2 2 1 1 1 1 1 1]; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k12282rate1by4_QAMsp_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 51*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10 16]; sim_param(record).save_rate = 20; record = 5; sim_param(record).comment = 'Rate 1/5, length 1530 cdma2000 turbo code w/ BPSK in AWGN'; sim_param(record).legend = 'r=1/5,k=1530'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).code_interleaver = 'load(''imap1530'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 1 1 ]; sim_param(record).tail_pattern1 = [3 3 3 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k1530rate1by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 5e-6; sim_param(record).max_frame_errors = 51*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 1e3; record = 6; sim_param(record).comment = 'Rate 1/4, length 1530 cdma2000 turbo code w/ BPSK in AWGN'; sim_param(record).legend = 'r=1/4,k=1530'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).code_interleaver = 'load(''imap1530'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1 1 1 1 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1 1 1 ]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k1530rate1by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 5e-6; sim_param(record).max_frame_errors = 51*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 1e3; record = 7; sim_param(record).comment = 'Rate 1/3, length 1530 cdma2000 turbo code w/ BPSK in AWGN'; sim_param(record).legend = 'r=1/3,k=1530'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k:'; sim_param(record).code_interleaver = 'load(''imap1530'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1]; sim_param(record).tail_pattern1 = [2 2 2 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k1530rate1by3_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 5e-6; sim_param(record).max_frame_errors = 51*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 1e3; record = 8; sim_param(record).comment = 'Rate 1/2, length 1530 cdma2000 turbo code w/ BPSK in AWGN'; sim_param(record).legend = 'r=1/2,k=1530'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [-1:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k:'; sim_param(record).code_interleaver = 'load(''imap1530'')'; sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).pun_pattern2= [0 0 0 1]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).max_iterations = 16; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'cdma2k1530rate1by2_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 5e-6; sim_param(record).max_frame_errors = 51*ones( 1, length(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 1e3; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/ConvolutionalScenarios.m000066400000000000000000000315411441116725500242260ustar00rootroot00000000000000% File ConvolutionalScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for convolutional codes. % % Last updated on Oct. 12, 2007 % determine where to store your files base_name = 'convolutional'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end % determine where your root directory is load( 'CmlHome.mat' ); full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % Convolutional codes w/ BICM record = 1; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ BPSK in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 2; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ gray-coded QAM in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_QAMgray.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 205*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; record = 3; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ SP-QAM in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:13]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_QAMsp.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 151*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % Convlutional codes with BICM-ID record = 4; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ SP-coded QAM in AWGN w/ BICM-ID'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:3 4:0.1:6 6.25:0.25:7 7.5:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; %BICM-ID sim_param(record).max_iterations = 10; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_QAMsp_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 70*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10]; sim_param(record).save_rate = 50; record = 5; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ gray-coded QAM in AWGN w/ BICM-ID'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; %BICM-ID sim_param(record).max_iterations = 10; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_QAMgray_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 61*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10]; sim_param(record).save_rate = 50; record = 6; sim_param(record).comment = 'Rate 2/3 K=7 NSC convolutional code w/ SP-coded QAM in AWGN w/ BICM-ID'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:5 5.1:0.1:6 6.25:0.25:14]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; %BICM-ID sim_param(record).max_iterations = 10; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = [1 1 1 0]; sim_param(record).tail_pattern1 = ones(2,6); sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'convR2by3K7AWGN_QAMsp_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 61*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = [1 2 5 10]; sim_param(record).save_rate = 50; % Viterbi Decoding (NSC) record = 7; sim_param(record).comment = 'Rate 1/2 K=7 NSC convolutional code w/ BPSK in AWGN'; sim_param(record).legend = 'Viterbi decoding (NSC)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_Viterbi.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % Viterbi Decoding (RSC) record = 8; sim_param(record).comment = 'Rate 1/2 K=7 RSC convolutional code w/ BPSK in AWGN'; sim_param(record).legend = 'Viterbi decoding (RSC)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 0; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'convR1by2K7AWGN_Viterbi_RSC.mat'); sim_param(record).reset = 1; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % UMTS convolutional code (rate 1/2) record = 9; sim_param(record).comment = 'Rate 1/2 K=9 NSC convolutional code w/ BPSK in AWGN'; sim_param(record).legend = 'K= 9 Viterbi decoding (NSC)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 504; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).g1 = [1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 0 1 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'UMTSconvR1by2K9AWGN_Viterbi.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR)); sim_param(record).save_rate = 50; % convolutional code (rate 1/2) record = 10; sim_param(record).comment = 'Rate 1/2 K=3 NSC convolutional code w/ BPSK in AWGN'; sim_param(record).legend = 'K =3 Viterbi decoding (NSC)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 504; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).g1 = [1 0 1 1 1 1 ]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'convR1by2K3AWGN_Viterbi.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR)); sim_param(record).save_rate = 50; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/DVBRCSScenarios.m000066400000000000000000000101141441116725500223460ustar00rootroot00000000000000% File DVBRCSScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the convolutional % turbo code used by the DVB-RCS standard % % Last updated on Nov. 22, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'DVBRCS'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end MINBER = 1e-5; num_errors = 100; couples = [ 48, 64, 212 220, 228, 424, 432, 440, 848, 856, 864, 752 ]; % couples = 212; rates = [1/3, 2/5, 1/2, 2/3, 3/4, 4/5, 6/7 ]; % rates = 1/3; decoders = [0 1]; % decoders = 1; colors = ['k' 'r' 'b' 'm' 'c' 'g' 'y']; % This program creates records according to a loop. % the record number depends on the size (number of couples) and rate % of the code, as well as the type of decoder. record = 0; for decoder_index = 1:length(decoders) for couple_index = 1:length(couples) for rate_index = 1:length(rates) % increment the record number record = record + 1; % All cases use QPSK over AWGN in 0.2 dB increments sim_param(record).modulation = 'QPSK'; sim_param(record).mapping = 'gray'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).SNR = [0:0.2:10]; % particular to this rate and number of couples sim_param(record).framesize = 2*couples(couple_index); sim_param(record).code_bits_per_frame = ceil( couples(couple_index)/rates(rate_index) )*2; % filename sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); % select the decoder type sim_param(record).decoder_type = decoders( decoder_index ); sim_param(record).linetype = colors(rate_index); if (decoders( decoder_index ) == 0) sim_param(record).filename = strcat( sim_param(record).filename, 'LogMap'); sim_param(record).linetype = strcat( sim_param(record).linetype, '-' ); elseif (decoders( decoder_index ) == 1) sim_param(record).filename = strcat( sim_param(record).filename, 'MaxLogMap'); sim_param(record).linetype = strcat( sim_param(record).linetype, '--' ); end sim_param(record).filename = strcat( sim_param(record).filename, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/2, sim_param(record).framesize/2, ... sim_param(record).modulation, sim_param(record).channel ); % Same for all sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 6; % DVB-RCS sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); % save every million data bits end end end codec2-0.0~git20230330.db1c21c/scenarios/DVBS2Scenarios.m000066400000000000000000000722321441116725500222140ustar00rootroot00000000000000% File DVBS2Scenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the LDPC code % used by the DVB-S2 standard % % Last updated on July 4, 2006 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'DVBS2'; if ispc data_directory = strcat( cml_home, '\output\', base_name, '\' ); else data_directory = strcat( cml_home, '/output/', base_name, '/' ); end if ~exist( data_directory, 'dir' ) mkdir(data_directory); end MINBER = 1e-5; % Short record = 1; effective_rate = '1/4'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate= ', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate1by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 2; effective_rate = '1/4'; sim_param(record).comment = strcat( 'Rate= ', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate1by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 3; effective_rate = '1/3'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate= ', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate1by3_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 50*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 4; effective_rate = '1/3'; sim_param(record).comment = strcat( 'Rate= ', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate1by3_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 5; effective_rate = '2/5'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate2by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 6; effective_rate = '2/5'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate2by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 7; effective_rate = '1/2'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-0.5:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate1by2_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 8; effective_rate = '1/2'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-0.5:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate1by2_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 9; effective_rate = '3/5'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate3by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 10; effective_rate = '3/5'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate3by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 11; effective_rate = '2/3'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate2by3_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 12; effective_rate = '2/3'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate2by3_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 13; effective_rate = '3/4'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k--'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate3by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 14; effective_rate = '3/4'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-.'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate3by4_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 15; effective_rate = '4/5'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0.5:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm--'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate4by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 16; effective_rate = '4/5'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0.5:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-.'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate4by5_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 17; effective_rate = '5/6'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [1:0.1:5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g--'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate5by6_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 18; effective_rate = '5/6'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [1:0.1:5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-.'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate5by6_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Short record = 19; effective_rate = '8/9'; % since a short code, this is not the actual rate! sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' short DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [1.5:0.1:5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 16200; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b--'; sim_param(record).legend = strcat( 'Short r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2shortRate8by9_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 20; effective_rate = '8/9'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [1.5:0.1:5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-.'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate8by9_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long record = 21; effective_rate = '9/10'; sim_param(record).comment = strcat( 'Rate=', ' ', effective_rate, ' long DVB-S2 LDPC code w/ BPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [1.5:0.1:5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-.'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, 'DVBS2longRate9by10_BPSK.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 5; % Long with QPSK record = 22; effective_rate = '1/4'; sim_param(record).comment = strcat( 'Rate= ', ' ', effective_rate, ' long DVB-S2 LDPC code w/ QPSK in AWGN' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1.5:0.5:-0.5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 64800; sim_param(record).parity_check_matrix = strcat( 'InitializeDVBS2(', effective_rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k:'; sim_param(record).legend = strcat( 'Long r=', ' ', effective_rate ); sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e6*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 100*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; % uncomment the line below to see performance after 1,10,50, and 100 iterations % sim_param(record).plot_iterations = [1 10 50 sim_param(record).max_iterations]; sim_param(record).save_rate = 5; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/FskCapacity.m000066400000000000000000000363361441116725500217330ustar00rootroot00000000000000% File CapacityScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the Shannon capacity % under FSK modulation constraints. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'capacity'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end few_trials = 20; many_trials = 200; epsilon = 1e-3; % AWGN+8FSK % CM Capacity (coherent) record = 1; % coherent sim_param(record).comment = 'CM Capacity of 8-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_8FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 501*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 2; % non-coherent (CSI) sim_param(record).comment = 'CM Capacity of 8-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_8NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 501*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 3; % non-coherent (no CSI) sim_param(record).comment = 'CM Capacity of 8-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_8NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % BICM (log-MAP) record = 4; % coherent sim_param(record).comment = 'BICM-MAP Capacity of 8-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'k--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_8FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 5; % non-coherent (CSI) sim_param(record).comment = 'BICM-MAP Capacity of 8-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'b--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_8NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 6; % non-coherent (no CSI) sim_param(record).comment = 'CM Capacity of 8-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'r--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_8NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % BICM (max-log-MAP) record = 7; % coherent sim_param(record).comment = 'BICM-MLM Capacity of 8-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'k:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_8FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 8; % non-coherent (CSI) sim_param(record).comment = 'BICM-MLM Capacity of 8-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_8NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 9; % non-coherent (no CSI) sim_param(record).comment = 'BICM-MLM Capacity of 8-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 8; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_8NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 10; % coherent sim_param(record).comment = 'CM Capacity of 16-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_16FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 11; % non-coherent (CSI) sim_param(record).comment = 'CM Capacity of 16-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_16NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 12; % non-coherent (no CSI) sim_param(record).comment = 'CM Capacity of 16-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % does not matter if not BICM sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'CM_16NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % BICM (log-MAP) record = 13; % coherent sim_param(record).comment = 'BICM-MAP Capacity of 16-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'k--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_16FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 14; % non-coherent (CSI) sim_param(record).comment = 'BICM-MAP Capacity of 16-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'b--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_16NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 15; % non-coherent (no CSI) sim_param(record).comment = 'CM Capacity of 16-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % MAP sim_param(record).linetype = 'r--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MAP_16NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; % BICM (max-log-MAP) record = 16; % coherent sim_param(record).comment = 'BICM-MLM Capacity of 16-FSK in AWGN'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 0; %coherent sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'k:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_16FSK_AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 17; % non-coherent (CSI) sim_param(record).comment = 'BICM-MLM Capacity of 16-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 1; % noncoherent (CSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_16NFSK_AWGN_CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; record = 18; % non-coherent (no CSI) sim_param(record).comment = 'BICM-MLM Capacity of 16-NFSK in AWGN (NCSI)'; sim_param(record).sim_type = 'capacity'; sim_param(record).SNR = [-20:0.5:20]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).csi_flag = 2; % noncoherent (NCSI) sim_param(record).mod_order = 16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % ML-MAP sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BICM_MLM_16NFSK_AWGN_NCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 500*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 20; codec2-0.0~git20230330.db1c21c/scenarios/FskScenarios.m000066400000000000000000000333621441116725500221200ustar00rootroot00000000000000% File FskScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for FSK modulation % with and without coding. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'fsk'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % uncoded 8NFSK modulation in AWGN record = 1; sim_param(record).comment = 'Uncoded 8-NFSK in AWGN (CSI)'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % max-log-map appropriate for uncoded sim_param(record).linetype = 'm:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'NFSK8AWGNCSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % uncoded 8NFSK modulation in AWGN record = 2; sim_param(record).comment = 'Uncoded 8-NFSK in AWGN (no-CSI)'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 2; % no CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % max-log-map appropriate for uncoded sim_param(record).linetype = 'r*'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'NFSK8AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 100*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % uncoded 8FSK modulation in AWGN (coherent) record = 3; sim_param(record).comment = 'Uncoded 8-FSK in AWGN'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 10000; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 0; % coherent sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % max-log-map appropriate for uncoded sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'FSK8AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 100*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % BICM: Convolutionally coded 8FSK modulation in AWGN (w/ CSI) record = 4; sim_param(record).comment = 'R=1/2 K=7 NSC CC w/ 8NFSK in AWGN (w/ CSI and log-MAP)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5004; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % log-MAP sim_param(record).linetype = 'k:'; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'NFSK8AWGNCC7.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % BICM: Convolutionally coded 8FSK modulation in AWGN (w/ CSI) record = 5; sim_param(record).comment = 'R=1/2 K=7 NSC CC w/ 8NFSK in AWGN (w/ CSI and max-log-MAP)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5004; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 1; % max-log-MAP sim_param(record).linetype = 'b:'; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'NFSK8AWGNCC7maxlog.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % BICM-ID: Convolutionally coded 8FSK modulation in AWGN (w/ CSI) record = 6; sim_param(record).comment = 'R=1/2 K=7 NSC CC w/ 8NFSK in AWGN (w/ CSI and BICM-ID)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5004; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 8; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; % BICM-ID sim_param(record).max_iterations = 4; % BICM-ID iterations sim_param(record).demod_type = 0; %log-MAP sim_param(record).linetype = 'g:'; sim_param(record).g1 = [1 0 1 1 0 1 1 1 1 1 1 0 0 1]; sim_param(record).nsc_flag1 = 1; sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = 0; % log-MAP sim_param(record).filename = strcat( data_directory, 'NFSK8AWGNCC7BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % BICM: Turbo coded 16FSK modulation in AWGN (w/ CSI) record = 7; sim_param(record).comment = 'R=1/3 turbo w/ 16NFSK in AWGN (w/ CSI and log-MAP)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:1:3 3.1:0.1:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 16; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; % BICM sim_param(record).demod_type = 0; % log-MAP sim_param(record).linetype = 'c:'; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).decoder_type = 0; % log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).filename = strcat( data_directory, 'NFSK16AWGNturboR1by3CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 50*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % BICM-ID: Turbo coded 16FSK modulation in AWGN (w/ CSI) record = 8; sim_param(record).comment = 'R=1/3 turbo w/ 16NFSK in AWGN (Iterative Demod/Decoding)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:1:2 2.1:0.1:8]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 16; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 2; % BICM-ID sim_param(record).demod_type = 0; % log-MAP sim_param(record).linetype = 'c-'; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).decoder_type = 0; % log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).filename = strcat( data_directory, 'NFSK16AWGNturboR1by3CSI_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % BICM-ID: Turbo coded 16FSK modulation in Fading (w/ CSI) record = 9; sim_param(record).comment = 'R=1/3 turbo w/ 16NFSK in fading'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:1:4 4.1:0.1:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 16; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; % BICM sim_param(record).demod_type = 0; % log-MAP sim_param(record).linetype = 'b-'; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).decoder_type = 0; % log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).filename = strcat( data_directory, 'NFSK16RayleighturboR1by3CSI.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % BICM-ID: Turbo coded 16FSK modulation in Fading (w/ CSI and BICM-ID) record = 10; sim_param(record).comment = 'R=1/3 turbo w/ 16NFSK in fading (w/ BICM-ID)'; sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR = [0:1:3 3.5:0.1:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 5114; sim_param(record).modulation = 'FSK'; sim_param(record).mod_order = 16; sim_param(record).csi_flag = 1; % w/ CSI sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 2; % BICM-ID sim_param(record).demod_type = 0; % log-MAP sim_param(record).linetype = 'b:'; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).decoder_type = 0; % log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).filename = strcat( data_directory, 'NFSK16RayleighturboR1by3CSI_BICMID.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 30*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; codec2-0.0~git20230330.db1c21c/scenarios/HsdpaScenarios.m000066400000000000000000001607751441116725500224450ustar00rootroot00000000000000% File HsdpaScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the turbo code % used by the UMTS/HSDPA standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'HSDPA'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % AWGN, H-SET 1, First block, QPSK record = 1; sim_param(record).comment = 'HSET-1 in AWGN with QPSK and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -4:0.2:6; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKawgn1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0]; sim_param(record).P = 5; % AWGN, H-SET 1, Second block, QPSK record = 2; sim_param(record).comment = 'HSET-1 in AWGN with QPSK and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:6; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKawgn2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2]; sim_param(record).P = 5; % AWGN, H-SET 1, Third block, QPSK record = 3; sim_param(record).comment = 'HSET-1 in AWGN with QPSK and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:6; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKawgn3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5]; sim_param(record).P = 5; % AWGN, H-SET 1, Fourth block, QPSK record = 4; sim_param(record).comment = 'HSET-1 in AWGN with QPSK and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:6; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKawgn4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5 6]; sim_param(record).P = 5; % AWGN, H-SET 1, First block, QAM record = 5; sim_param(record).comment = 'HSET-1 in AWGN with QAM and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMawgn1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6]; sim_param(record).P = 4; % AWGN, H-SET 1, Second block, QAM record = 6; sim_param(record).comment = 'HSET-1 in AWGN with QAM and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMawgn2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2]; sim_param(record).P = 4; % AWGN, H-SET 1, Third block, QAM record = 7; sim_param(record).comment = 'HSET-1 in AWGN with QAM and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMawgn3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1]; sim_param(record).P = 4; % AWGN, H-SET 1, Fourth block, QAM record = 8; sim_param(record).comment = 'HSET-1 in AWGN with QAM and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMawgn4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1 5]; sim_param(record).P = 4; % Fading, H-SET 1, First block, QPSK record = 9; sim_param(record).comment = 'HSET-1 in ergodic fading with QPSK and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKfade1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0]; sim_param(record).P = 5; % Fading, H-SET 1, Second block, QPSK record = 10; sim_param(record).comment = 'HSET-1 in ergodic fading with QPSK and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKfade2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2]; sim_param(record).P = 5; % Fading, H-SET 1, Third block, QPSK record = 11; sim_param(record).comment = 'HSET-1 in ergodic fading with QPSK and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKfade3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5]; sim_param(record).P = 5; % Fading, H-SET 1, Fourth block, QPSK record = 12; sim_param(record).comment = 'HSET-1 in ergodic fading with QPSK and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QPSKfade4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5 6]; sim_param(record).P = 5; % Fading, H-SET 1, First block, QAM record = 13; sim_param(record).comment = 'HSET-1 in ergodic fading with QAM and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMfade1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6]; sim_param(record).P = 4; % Fading, H-SET 1, Second block, QAM record = 14; sim_param(record).comment = 'HSET-1 in ergodic fading with QAM and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMfade2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2]; sim_param(record).P = 4; % Fading, H-SET 1, Third block, QAM record = 15; sim_param(record).comment = 'HSET-1 in ergodic fading with QAM and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMfade3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1]; sim_param(record).P = 4; % Fading, H-SET 1, Fourth block, QAM record = 16; sim_param(record).comment = 'HSET-1 in ergodic fading with QAM and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset1QAMfade4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 45*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1 5]; sim_param(record).P = 4; % AWGN, H-SET 6, First block, QPSK record = 17; sim_param(record).comment = 'HSET-6 in AWGN with QPSK and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKawgn1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0]; sim_param(record).P = 5; % AWGN, H-SET 6, Second block, QPSK record = 18; sim_param(record).comment = 'HSET-6 in AWGN with QPSK and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKawgn2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2]; sim_param(record).P = 5; % AWGN, H-SET 6, Third block, QPSK record = 19; sim_param(record).comment = 'HSET-6 in AWGN with QPSK and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKawgn3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5]; sim_param(record).P = 5; % AWGN, H-SET 6, Fourth block, QPSK record = 20; sim_param(record).comment = 'HSET-6 in AWGN with QPSK and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKawgn4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5 6]; sim_param(record).P = 5; % AWGN, H-SET 6, First block, QAM record = 21; sim_param(record).comment = 'HSET-6 in AWGN with QAM and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMawgn1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6]; sim_param(record).P = 4; % AWGN, H-SET 6, Second block, QAM record = 22; sim_param(record).comment = 'HSET-6 in AWGN with QAM and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMawgn2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2]; sim_param(record).P = 4; % AWGN, H-SET 6, Third block, QAM record = 23; sim_param(record).comment = 'HSET-6 in AWGN with QAM and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMawgn3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1]; sim_param(record).P = 4; % AWGN, H-SET 6, Fourth block, QAM record = 24; sim_param(record).comment = 'HSET-6 in AWGN with QAM and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMawgn4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1 5]; sim_param(record).P = 4; % Fading, H-SET 6, First block, QPSK record = 25; sim_param(record).comment = 'HSET-6 in ergodic fading with QPSK and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKfade1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0]; sim_param(record).P = 5; % Fading, H-SET 6, Second block, QPSK record = 26; sim_param(record).comment = 'HSET-6 in ergodic fading with QPSK and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKfade2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2]; sim_param(record).P = 5; % Fading, H-SET 6, Third block, QPSK record = 27; sim_param(record).comment = 'HSET-6 in ergodic fading with QPSK and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKfade3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5]; sim_param(record).P = 5; % Fading, H-SET 6, Fourth block, QPSK record = 28; sim_param(record).comment = 'HSET-6 in ergodic fading with QPSK and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -5:0.1:10; sim_param(record).framesize = 6438; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QPSKfade4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [0 2 5 6]; sim_param(record).P = 5; % Fading, H-SET 6, First block, QAM record = 29; sim_param(record).comment = 'HSET-6 in ergodic fading with QAM and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMfade1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6]; sim_param(record).P = 4; % Fading, H-SET 6, Second block, QAM record = 30; sim_param(record).comment = 'HSET-6 in ergodic fading with QAM and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMfade2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2]; sim_param(record).P = 4; % Fading, H-SET 6, Third block, QAM record = 31; sim_param(record).comment = 'HSET-6 in ergodic fading with QAM and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMfade3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1]; sim_param(record).P = 4; % Fading, H-SET 6, Second block, QAM record = 32; sim_param(record).comment = 'HSET-6 in ergodic fading with QAM and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:14; sim_param(record).framesize = 9377; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset6QAMfade4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1 5]; sim_param(record).P = 4; % Block fading, H-SET 1, First block, QPSK record = 33; sim_param(record).comment = 'HSET-1 in block fading with QPSK (First block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QPSK1block.mat' ); sim_param(record).X_set = [0]; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 5; % Block fading, H-SET 1, Second block, QPSK record = 34; sim_param(record).comment = 'HSET-1 in block fading with QPSK (Second block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QPSK2block.mat' ); sim_param(record).X_set = [0 2]; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 5; % Block fading, H-SET 1, Third block, QPSK record = 35; sim_param(record).comment = 'HSET-1 in block fading with QPSK (Third block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QPSK3block.mat' ); sim_param(record).X_set = [0 2 5]; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 5; % Block fading, H-SET 1, Fourth block, QPSK record = 36; sim_param(record).comment = 'HSET-1 in block fading with QPSK (Fourth block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QPSK4block.mat' ); sim_param(record).X_set = [0 2 5 6]; sim_param(record).linetype = 'm-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 3202; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 5; % AWGN, QPSK, rate 7/8 record = 37; sim_param(record).comment = 'Rate 7/8 QPSK in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.1:10; sim_param(record).framesize = 5040; % size of data, not including the CRC sim_param(record).mod_order = 4; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 0; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSKRate7by8AWGN.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 55*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 15204; sim_param(record).X_set = [0]; sim_param(record).P = 6; % AWGN, 16-QAM, rate 7/16 record = 38; sim_param(record).comment = 'Rate 7/16 QAM in AWGN'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).SNR = 0:0.1:10; sim_param(record).framesize = 5040; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 0; sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAMRate7by16AWGN.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 30*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 15204; sim_param(record).X_set = [6]; sim_param(record).P = 6; % Block fading, H-SET 1, First block, QAM record = 39; sim_param(record).comment = 'HSET-1 in block fading with QAM (First block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QAM1block.mat' ); sim_param(record).X_set = [6]; sim_param(record).linetype = 'k:'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 4; % Block fading, H-SET 1, Second block, QAM record = 40; sim_param(record).comment = 'HSET-1 in block fading with QAM (Second block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QAM2block.mat' ); sim_param(record).X_set = [6 2]; sim_param(record).linetype = 'r:'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 4; % Block fading, H-SET 1, Third block, QAM record = 41; sim_param(record).comment = 'HSET-1 in block fading with QAM (Third block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QAM3block.mat' ); sim_param(record).X_set = [6 2 1]; sim_param(record).linetype = 'b:'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 4; % Block fading, H-SET 1, Fourth block, QAM record = 42; sim_param(record).comment = 'HSET-1 in block fading with QAM (Fourth block)'; sim_param(record).filename = strcat( data_directory, 'Hset1QAM4block.mat' ); sim_param(record).X_set = [6 2 1 5]; sim_param(record).linetype = 'm:'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -10:30; sim_param(record).framesize = 4664; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'block'; sim_param(record).decoder_type = 0; % linear-log-MAP sim_param(record).max_iterations = 16; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e8*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-3; sim_param(record).max_frame_errors = 1.3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; sim_param(record).N_IR = 9600; sim_param(record).blocks_per_frame = length( sim_param(record).X_set ); sim_param(record).P = 4; % AWGN, H-SET 7, First block, QAM record = 43; sim_param(record).comment = 'HSET-7 in AWGN with QAM and max-log-MAP decoding (First block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 14411; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset7QAMawgn1block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6]; sim_param(record).P = 4; % this is per turbo codeword % AWGN, H-SET 7, Second block, QAM record = 44; sim_param(record).comment = 'HSET-7 in AWGN with QAM and max-log-MAP decoding (Second block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 14411; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset7QAMawgn2block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2]; sim_param(record).P = 4; % AWGN, H-SET 7, Third block, QAM record = 45; sim_param(record).comment = 'HSET-7 in AWGN with QAM and max-log-MAP decoding (Third block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 14411; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset7QAMawgn3block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1]; sim_param(record).P = 4; % AWGN, H-SET 7, Fourth block, QAM record = 46; sim_param(record).comment = 'HSET-7 in AWGN with QAM and max-log-MAP decoding (Fourth block)'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 3; % HSDPA sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).SNR = -1:0.1:10; sim_param(record).framesize = 14411; % size of data, not including the CRC sim_param(record).mod_order = 16; % Can be 4 or 16 sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; % max-log-map sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm:'; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Hset7QAMawgn4block.mat' ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-4; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = 50; % HSDPA specific parameters sim_param(record).N_IR = 9600; sim_param(record).X_set = [6 2 1 5]; sim_param(record).P = 4; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/LTEScenarios.m000066400000000000000000000156541441116725500220250ustar00rootroot00000000000000% File LTEScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the turbo code % used by the UMTS-LTE standard % % Last updated on Nov. 23, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'LTE'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % global variables MINBER = 1e-9; MINFER = 1e-4; num_errors = 300; % the decoder types decoders = [0 1]; % the list of possible interleaver sizes K_values = [40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256 264 272 280 288 296 304 312 320 328 336 344 352 360 368 376 384 392 400 408 416 424 432 440 448 456 464 472 480 488 496 504 512 528 544 560 576 592 608 624 640 656 672 688 704 720 736 752 768 784 800 816 832 848 864 880 896 912 928 944 960 976 992 1008 1024 1056 1088 1120 1152 1184 1216 1248 1280 1312 1344 1376 1408 1440 1472 1504 1536 1568 1600 1632 1664 1696 1728 1760 1792 1824 1856 1888 1920 1952 1984 2016 2048 2112 2176 2240 2304 2368 2432 2496 2560 2624 2688 2752 2816 2880 2944 3008 3072 3136 3200 3264 3328 3392 3456 3520 3584 3648 3712 3776 3840 3904 3968 4032 4096 4160 4224 4288 4352 4416 4480 4544 4608 4672 4736 4800 4864 4928 4992 5056 5120 5184 5248 5312 5376 5440 5504 5568 5632 5696 5760 5824 5888 5952 6016 6080 6144]; colors = ['k' 'r' 'b' 'm']; % dynamically create the records (since so many to create) record = 0; for decoder_index = 1:length(decoders) for K_index = 1:length(K_values) % increment the record number record = record + 1; % All cases use QPSK over AWGN in 0.2 dB increments sim_param(record).modulation = 'QPSK'; sim_param(record).mapping = 'gray'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; % particular to this framesize sim_param(record).framesize = K_values(K_index); if (K_values(K_index) < 2000 ) sim_param(record).SNR = [-1:0.2:6]; else sim_param(record).SNR = [-0.2:0.1:3]; end % filename sim_param(record).filename = strcat( data_directory, 'lte', sim_param(record).modulation, ... int2str( sim_param(record).framesize), sim_param(record).channel ); % select the decoder type sim_param(record).decoder_type = decoders( decoder_index ); sim_param(record).linetype = colors( mod(record,4)+1 ); % picking a color if (decoders( decoder_index ) == 0) sim_param(record).filename = strcat( sim_param(record).filename, 'LogMap'); sim_param(record).linetype = strcat( sim_param(record).linetype, '-' ); elseif (decoders( decoder_index ) == 1) sim_param(record).filename = strcat( sim_param(record).filename, 'MaxLogMap'); sim_param(record).linetype = strcat( sim_param(record).linetype, '--' ); end sim_param(record).filename = strcat( sim_param(record).filename, '.mat'); % create the comment line sim_param(record).comment = sprintf( 'K=%d %s %s', sim_param(record).framesize, ... sim_param(record).modulation, sim_param(record).channel ); % the number of iterations depends on the framesize sim_param(record).max_iterations = 8+floor(sim_param(record).framesize/600); % turbo coding parameters sim_param(record).code_interleaver = ... strcat( 'CreateLTEInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; % Same for all sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; % binary turbo sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).minFER = MINFER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); % save every million data bits end end codec2-0.0~git20230330.db1c21c/scenarios/OutageScenarios.m000066400000000000000000001017501441116725500226160ustar00rootroot00000000000000% File OutageScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the information outage % probability - independent Rayleigh-faded blocks % % NOTE: - In order to run OutageScenarios under modulation contraints, % the desired modulation should have been simulated in an AWGN % channel using the CML Library, (i.e. run % [sim_param, sim_state] = CmlSimulate( 'CapacityScenarios', record_no) % where the record_no is for the desired modulation ) % - Use the filename that was entered in the previous record as the % input_filename for the 'OutageScenarios' simulation record. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'outage'; if ispc data_directory = strcat( '\output\', base_name, '\' ); % where are the AWGN capacity curves? (changed on Oct. 12, 2007 to relative) data_directory_input = strcat( '\output\capacity\'); else data_directory = strcat( '/output/', base_name, '/' ); % where are the AWGN capacity curves? (changed on Oct. 12, 2007 to relative) data_directory_input = strcat( '/output/capacity/'); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % 2-D UGI, R=2, L=1 record = 1; sim_param(record).comment = '2-D UGI, CC, r = 2, L = 1'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL1r2.mat'); sim_param(record).linetype = 'r:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, R=2, L=2 record = 2; sim_param(record).comment = '2-D UGI, CC, r = 2, L = 2'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL2r2.mat'); sim_param(record).linetype = 'b:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, R=2, L=3 record = 3; sim_param(record).comment = '2-D UGI, CC, r = 2, L = 3'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL3r2.mat'); sim_param(record).linetype = 'k:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, R=2, L=4 record = 4; sim_param(record).comment = '2-D UGI, CC, r = 2, L = 4'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL4r2.mat'); sim_param(record).linetype = 'c:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, R=2, L=10 record = 5; sim_param(record).comment = '2-D UGI, CC, r = 2, L = 10'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 10; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL10r2.mat'); sim_param(record).linetype = 'm:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D gray-coded 16QAM, R=2, L=1 record = 6; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 2, L = 1'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL1r2.mat'); sim_param(record).linetype = 'r-.+'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D gray-coded 16QAM, R=2, L=2 record = 7; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 2, L = 2'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL2r2.mat'); sim_param(record).linetype = 'b-.+'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D gray-coded 16QAM, R=2, L=3 record = 8; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 2, L = 3'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL3r2.mat'); sim_param(record).linetype = 'k-.+'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D gray-coded 16QAM, R=2, L=4 record = 9; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 2, L = 4'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL4r2.mat'); sim_param(record).linetype = 'c-.+'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D gray-coded 16QAM, R=2, L=10 record = 10; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 2, L = 10'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 10; sim_param(record).rate = 2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL10r2.mat'); sim_param(record).linetype = 'm-.+'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:50]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 3e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, R=3.5, L=1 record = 11; sim_param(record).comment = '2-D UGI, CC, r = 3.5, L = 1'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL1r7by2.mat'); sim_param(record).linetype = 'r:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 1e-4; sim_param(record).trial_size = 1000; % 2-D UGI, R=3.5, L=2 record = 12; sim_param(record).comment = '2-D UGI, CC, r = 3.5, L = 2'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL2r7by2.mat'); sim_param(record).linetype = 'b:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 1e-4; sim_param(record).trial_size = 1000; % 2-D UGI, R=3.5, L=3 record = 13; sim_param(record).comment = '2-D UGI, CC, r = 3.5, L = 3'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL3r7by2.mat'); sim_param(record).linetype = 'k:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 1e-4; sim_param(record).trial_size = 1000; % 2-D UGI, R=3.5, L=10 record = 14; sim_param(record).comment = '2-D UGI, CC, r = 3.5, L = 10'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 10; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL10r7by2.mat'); sim_param(record).linetype = 'm:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 1e-4; sim_param(record).trial_size = 1000; % 2-D gray-coded 16QAM, R=3.5, L=1 record = 15; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 3.5, L = 1'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL1r7by2.mat'); sim_param(record).linetype = 'r-.'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 5e-4; sim_param(record).trial_size = 1000; % 2-D gray-coded 16QAM, R=3.5, L=2 record = 16; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 3.5, L = 2'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL2r7by2.mat'); sim_param(record).linetype = 'b-.'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10000; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 5e-4; sim_param(record).trial_size = 1000; % 2-D gray-coded 16QAM, R=3.5, L=3 record = 17; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 3.5, L = 3'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL3r7by2.mat'); sim_param(record).linetype = 'k-.'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10001; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 5e-4; sim_param(record).trial_size = 1000; % 2-D gray-coded 16QAM, R=3.5, L=10 record = 18; sim_param(record).comment = 'Gray coded 16-QAM, CC, r = 3.5, L = 10'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 10; sim_param(record).rate = 7/2; sim_param(record).filename = strcat( data_directory, 'QAM2DCCL10r7by2.mat'); sim_param(record).linetype = 'm-.'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [0:1:40]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e7*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10001; sim_param(record).max_frame_errors = 2100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 5e-4; sim_param(record).trial_size = 1000; % 2-D UGI, L=1, R=3202/2400/L (compare against QPSK H-SET 1) record = 19; sim_param(record).comment = '2-D UGI, CC, L = 1, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL1r3202by2400L.mat'); sim_param(record).linetype = 'r:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=2, R=3202/2400/L (compare against QPSK H-SET 1) record = 20; sim_param(record).comment = '2-D UGI, CC, L = 1, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL2r3202by2400L.mat'); sim_param(record).linetype = 'b:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=3, R=3202/2400/L (compare against QPSK H-SET 1) record = 21; sim_param(record).comment = '2-D UGI, CC, L = 3, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL3r3202by2400L.mat'); sim_param(record).linetype = 'k:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=4, R=3202/2400/L (compare against QPSK H-SET 1) record = 22; sim_param(record).comment = '2-D UGI, CC, L = 4, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL4r3202by2400L.mat'); sim_param(record).linetype = 'c:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QPSK, L=1, R=3202/2400/L (H-SET 1) record = 23; sim_param(record).comment = 'QPSK, CC, L = 1, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QPSKCCL1r3202by2400L.mat'); sim_param(record).linetype = 'r-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 4; sim_param(record).input_filename = strcat( data_directory_input, 'QPSK_BICM.mat'); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QPSK, L=2, R=3202/2400/L (H-SET 1) record = 24; sim_param(record).comment = 'QPSK, CC, L = 2, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QPSKCCL2r3202by2400L.mat'); sim_param(record).linetype = 'b-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 4; sim_param(record).input_filename = strcat( data_directory_input, 'QPSK_BICM.mat'); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QPSK, L=3, R=3202/2400/L (H-SET 1) record = 25; sim_param(record).comment = 'QPSK, CC, L = 3, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QPSKCCL3r3202by2400L.mat'); sim_param(record).linetype = 'k-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 4; sim_param(record).input_filename = strcat( data_directory_input, 'QPSK_BICM.mat'); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QPSK, L=4, R=3202/2400/L (H-SET 1) record = 26; sim_param(record).comment = 'QPSK, CC, L = 4, R=3202/2400/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 3202/2400/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QPSKCCL4r3202by2400L.mat'); sim_param(record).linetype = 'c-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 4; sim_param(record).input_filename = strcat( data_directory_input, 'QPSK_BICM.mat'); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=1, R=4664/1920/L (compare against QAM H-SET 1) record = 27; sim_param(record).comment = '2-D UGI, CC, L = 1, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL1r4664by1920L.mat'); sim_param(record).linetype = 'r:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=2, R=4664/1920/L (compare against QAM H-SET 1) record = 28; sim_param(record).comment = '2-D UGI, CC, L = 2, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL2r4664by1920L.mat'); sim_param(record).linetype = 'b:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=3, R=4664/1920/L (compare against QAM H-SET 1) record = 29; sim_param(record).comment = '2-D UGI, CC, L = 3, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL3r4664by1920L.mat'); sim_param(record).linetype = 'k:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % 2-D UGI, L=4, R=4664/1920/L (compare against QAM H-SET 1) record = 30; sim_param(record).comment = '2-D UGI, CC, L = 4, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'UGI2DCCL4r4664by1920L.mat'); sim_param(record).linetype = 'c:'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QAM, L=1, R=4664/1920/L (H-SET 1) record = 31; sim_param(record).comment = 'QAM, CC, L = 1, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 1; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QAMCCL1r4664by1920L.mat'); sim_param(record).linetype = 'r-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QAM, L=2, R=4664/1920/L (H-SET 1) record = 32; sim_param(record).comment = 'QAM, CC, L = 2, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 2; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QAMCCL2r4664by1920L.mat'); sim_param(record).linetype = 'b-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QAM, L=3, R=4664/1920/L (H-SET 1) record = 33; sim_param(record).comment = 'QAM, CC, L = 3, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 3; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QAMCCL3r4664by1920L.mat'); sim_param(record).linetype = 'k-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QAM, L=4, R=4664/1920/L (H-SET 1) record = 34; sim_param(record).comment = 'QAM, CC, L = 4, R=4664/1920/L'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 4664/1920/sim_param(record).blocks_per_frame; sim_param(record).filename = strcat( data_directory, 'QAMCCL4r4664by1920L.mat'); sim_param(record).linetype = 'c-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 16; sim_param(record).input_filename = strcat( data_directory_input, 'QAM16BICMAWGN' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 7.02e3*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 2e-5; sim_param(record).trial_size = 1e4; % QAM, L=4, R=4664/1920/L (H-SET 1) record = 35; sim_param(record).comment = 'A test'; sim_param(record).sim_type = 'outage'; sim_param(record).blocks_per_frame = 4; sim_param(record).rate = 2; sim_param(record).linetype = 'c-'; sim_param(record).combining_type = 'code'; sim_param(record).SNR = [-10:1:30]; sim_param(record).SNR_type = 'Es/No in dB'; sim_param(record).mod_order = 0; %UGI sim_param(record).filename = strcat( data_directory_input, 'test' ); sim_param(record).legend = sim_param(record).comment; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 1e6; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).minFER = 1e-4; sim_param(record).trial_size = 1e4; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/TailbitingScenarios.m000066400000000000000000001076461441116725500234720ustar00rootroot00000000000000% File TailbitingScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for tail-biting convolutional codes. % % Last updated on May 22, 2008 % determine where to store your files base_name = 'tailbiting'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end % determine where your root directory is load( 'CmlHome.mat' ); full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end MINBER = 1e-5; % 1e-5 MAXTRIALS = 1e9; MAXERRORS = 160; % 100 SAVERATE = 1e5; % QAM mappings mapping_16 = [13 9 1 5 ... 12 8 0 4 ... 14 10 2 6 ... 15 11 3 7]; mapping_64 = [59 51 35 43 11 3 19 27 ... 58 50 34 42 10 2 18 26 ... 56 48 32 40 8 0 16 24 ... 57 49 33 41 9 1 17 25 ... 61 53 37 45 13 5 21 29 ... 60 52 36 44 12 4 20 28 ... 62 54 38 46 14 6 22 30 ... 63 55 39 47 15 7 23 31]; % Rate 1/2, QPSK, 6 Bytes, depth 0 record = 1; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 0'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 0; % tb decoding wrap depth sim_param(record).linetype = 'm--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth0.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 1 record = 2; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 1'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 1; % tb decoding wrap depth sim_param(record).linetype = 'b--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth1.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 2 record = 3; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 2'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 2; % tb decoding wrap depth sim_param(record).linetype = 'r--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth2.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 3 record = 4; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 3'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 3; % tb decoding wrap depth sim_param(record).linetype = 'c--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth3.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 4 record = 5; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 4'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 4; % tb decoding wrap depth sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth4.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 5 record = 6; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 5'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 5; % tb decoding wrap depth sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth5.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 6 record = 7; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 7 record = 8; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 7'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 7; % tb decoding wrap depth sim_param(record).linetype = 'c-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth7.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 6 Bytes, depth 8 record = 9; sim_param(record).comment = 'Rate 1/2, QPSK, 6 Bytes, depth 8'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 6*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 8; % tb decoding wrap depth sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_6bytes_AWGN_depth8.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 12 Bytes, depth 6 record = 10; sim_param(record).comment = 'Rate 1/2, QPSK, 12 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 12*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_12bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 18 Bytes, depth 6 record = 11; sim_param(record).comment = 'Rate 1/2, QPSK, 18 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 18*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_18bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 24 Bytes, depth 6 record = 12; sim_param(record).comment = 'Rate 1/2, QPSK, 24 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 24*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'c-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_24bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 30 Bytes, depth 6 record = 13; sim_param(record).comment = 'Rate 1/2, QPSK, 30 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 30*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'g-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_30bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, QPSK, 36 Bytes, depth 6 record = 14; sim_param(record).comment = 'Rate 1/2, QPSK, 36 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 36*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_QPSK_36bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, 16-QAM, 12 Bytes, depth 6 record = 15; sim_param(record).comment = 'Rate 1/2, 16-QAM, 12 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 12*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'b--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_16QAM_12bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, 16-QAM, 24 Bytes, depth 6 record = 16; sim_param(record).comment = 'Rate 1/2, 16-QAM, 24 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 24*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'c--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_16QAM_24bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, 16-QAM, 36 Bytes, depth 6 record = 17; sim_param(record).comment = 'Rate 1/2, 16-QAM, 36 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'k--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_16QAM_36bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, 64-QAM, 18 Bytes, depth 6 record = 18; sim_param(record).comment = 'Rate 1/2, 64-QAM, 18 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 18*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'm:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_64QAM_18bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 1/2, 64-QAM, 36 Bytes, depth 6 record = 19; sim_param(record).comment = 'Rate 1/2, 64-QAM, 36 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'k:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = []; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate1by2_64QAM_36bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 2/3, 64-QAM, 24 Bytes, depth 6 record = 20; sim_param(record).comment = 'Rate 2/3, 64-QAM, 24 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:14]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 24*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'c:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate2by3_64QAM_24bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, QPSK, 9 Bytes, depth 6 record = 21; sim_param(record).comment = 'Rate 3/4, QPSK, 9 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 9*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'r-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_QPSK_9bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, QPSK, 18 Bytes, depth 6 record = 22; sim_param(record).comment = 'Rate 3/4, QPSK, 18 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 18*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'm-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_QPSK_18bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, QPSK, 27 Bytes, depth 6 record = 23; sim_param(record).comment = 'Rate 3/4, QPSK, 27 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 27*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'c-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_QPSK_27bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, QPSK, 36 Bytes, depth 6 record = 24; sim_param(record).comment = 'Rate 3/4, QPSK, 36 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 36*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'k-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_QPSK_36bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, 16-QAM, 18 Bytes, depth 6 record = 25; sim_param(record).comment = 'Rate 3/4, 16-QAM, 18 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 18*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'm--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_16QAM_18bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, 16-QAM, 36 Bytes, depth 6 record = 26; sim_param(record).comment = 'Rate 3/4, 16-QAM, 36 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'k-*'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_16QAM_36bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % Rate 3/4, 64-QAM, 27 Bytes, depth 6 record = 27; sim_param(record).comment = 'Rate 3/4, 64-QAM, 27 Bytes, depth 6'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 0; sim_param(record).SNR = [0:0.25:18]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 27*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).depth = 6; % tb decoding wrap depth sim_param(record).linetype = 'g:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).g1 = [1 1 1 1 0 0 1 1 0 1 1 0 1 1 ]; sim_param(record).nsc_flag1 = 2; % 2 for tail-biting sim_param(record).pun_pattern1 = [1 0 1 1 1 0]; sim_param(record).tail_pattern1 = []; sim_param(record).decoder_type = -1; % Viterbi sim_param(record).filename = strcat( data_directory, 'tb_rate3by4_64QAM_27bytes_AWGN_depth6.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = MAXTRIALS*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = MAXERRORS*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = SAVERATE; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/ThroughputScenarios.m000066400000000000000000000141371441116725500235450ustar00rootroot00000000000000% File ThroughputScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The records in this file are used to plot Throughput of hybrid-ARQ. % % NOTE: - These records do not specify simulations that are run. % The file can only be used with CmlPlot, not with CmlSimulate. % It requires that simulations already be run for each block % transmission. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'throughput'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end record = 1; sim_param(record).comment = 'H-SET 1, AWGN, QPSK'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [1:4]; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_AWGN_QPSK.mat'); record = 2; sim_param(record).comment = 'H-SET 1, AWGN, QAM'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [5:8]; sim_param(record).linetype = 'c-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_AWGN_QAM.mat'); record = 3; sim_param(record).comment = 'H-SET 1, Ergodic Fading, QPSK'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [9:12]; sim_param(record).linetype = 'k-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_Rayleigh_QPSK.mat'); record = 4; sim_param(record).comment = 'H-SET 1, Ergodic Fading, QAM'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [13:16]; sim_param(record).linetype = 'g-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_Rayleigh_QAM.mat'); record = 5; sim_param(record).comment = 'H-SET 6, AWGN, QPSK'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [17:20]; sim_param(record).linetype = 'b-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET6_AWGN_QPSK.mat'); record = 6; sim_param(record).comment = 'H-SET 6, AWGN, QAM'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [21:24]; sim_param(record).linetype = 'c-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET6_AWGN_QAM.mat'); record = 7; sim_param(record).comment = 'H-SET 6, Ergodic Fading, QPSK'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [25:28]; sim_param(record).linetype = 'k-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET6_Rayleigh_QPSK.mat'); record = 8; sim_param(record).comment = 'H-SET 6, Ergodic Fading, QAM'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [29:32]; sim_param(record).linetype = 'g-.'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET6_Rayleigh_QAM.mat'); record = 9; sim_param(record).comment = 'H-SET 1, Block fading, QPSK'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [33:36]; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_Block_QPSK.mat'); record = 10; sim_param(record).comment = 'H-SET 1, Block fading, QAM'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'HsdpaScenarios'; sim_param(record).scenarios = [39:42]; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HSET1_Block_QAM.mat'); record = 11; sim_param(record).comment = 'Unconstrained Throughput, Block Fading'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'OutageScenarios'; sim_param(record).scenarios = [19:22]; sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Unconstrained_Block_QPSK.mat'); record = 12; sim_param(record).comment = 'QPSK-Constrained Throughput, Block Fading'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'OutageScenarios'; sim_param(record).scenarios = [23:26]; sim_param(record).linetype = 'r--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Block_QPSK.mat'); record = 13; sim_param(record).comment = 'Unconstrained Throughput, Block Fading'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'OutageScenarios'; sim_param(record).scenarios = [27:30]; sim_param(record).linetype = 'm:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Unconstrained_Block_QAM.mat'); record = 14; sim_param(record).comment = 'QAM-Constrained Throughput, Block Fading'; sim_param(record).sim_type = 'throughput'; sim_param(record).input_filename = 'OutageScenarios'; sim_param(record).scenarios = [31:34]; sim_param(record).linetype = 'm--'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'Block_QAM.mat');codec2-0.0~git20230330.db1c21c/scenarios/UmtsScenarios.m000066400000000000000000002665301441116725500223320ustar00rootroot00000000000000% File UmtsScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the turbo code % used by the UMTS standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'UMTS'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % AWGN record = 1; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 40 bits, max-log-MAP'; sim_param(record).SNR = 0:0.25:4.5; sim_param(record).framesize = 40; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).plot_iterations = [1:8]; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 2; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 40 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.25:4.5; sim_param(record).framesize = 40; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-7; sim_param(record).max_frame_errors = 205*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 3; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 40 bits, log-MAP'; sim_param(record).SNR = 0:0.25:6; sim_param(record).framesize = 40; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 4; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 190 bits, max-log-MAP'; sim_param(record).SNR = 0:0.25:3.25; sim_param(record).framesize = 190; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-7; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 5; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 190 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.25:3.25; sim_param(record).framesize = 190; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-7; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 6; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 190 bits, log-MAP'; sim_param(record).SNR = 0:0.25:3.25; sim_param(record).framesize = 190; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-7; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 7; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 530 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:2.2; sim_param(record).framesize = 530; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1000001*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 8; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 530 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:2.2; sim_param(record).framesize = 530; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 9; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 530 bits, log-MAP'; sim_param(record).SNR = 0:0.2:2.2; sim_param(record).framesize = 530; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 10; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 640 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:2; sim_param(record).framesize = 640; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 150*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 11; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 640 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:2; sim_param(record).framesize = 640; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 12; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 640 bits, log-MAP'; sim_param(record).SNR = 0:0.2:4; sim_param(record).framesize = 640; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'm-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 50*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 13; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 1060 bits, max-log-MAP'; sim_param(record).SNR = 0:0.15:1.8; sim_param(record).framesize = 1060; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 14; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 1060 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.15:1.8; sim_param(record).framesize = 1060; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 15; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 1060 bits, log-MAP'; sim_param(record).SNR = 0:0.15:1.8; sim_param(record).framesize = 1060; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 16; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 2020 bits, max-log-MAP'; sim_param(record).SNR = 0:0.125:1.5; sim_param(record).framesize = 2020; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 17; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 2020 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.125:1.5; sim_param(record).framesize = 2020; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 18; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 2020 bits, log-MAP'; sim_param(record).SNR = 0:0.125:1.5; sim_param(record).framesize = 2020; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 19; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 3460 bits, max-log-MAP'; sim_param(record).SNR = 0:0.1:1.2; sim_param(record).framesize = 3460; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 20; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 3460 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.1:1.2; sim_param(record).framesize = 3460; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 21; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 3460 bits, log-MAP'; sim_param(record).SNR = 0:0.1:1.2; sim_param(record).framesize = 3460; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 22; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 5114 bits, max-log-MAP'; sim_param(record).SNR = 0:0.1:1.0; sim_param(record).framesize = 5114; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 23; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 5114 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.1:1.0; sim_param(record).framesize = 5114; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 24; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 5114 bits, log-MAP'; sim_param(record).SNR = 0:0.1:1.0; sim_param(record).framesize = 5114; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); % Rayleigh record = 25; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 40 bits, max-log-MAP'; sim_param(record).SNR = 0:0.5:6; sim_param(record).framesize = 40; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 26; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 40 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.5:6; sim_param(record).framesize = 40; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 27; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 40 bits, log-MAP'; sim_param(record).SNR = 0:0.5:6; sim_param(record).framesize = 40; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 8; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 28; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 190 bits, max-log-MAP'; sim_param(record).SNR = 0:0.25:5; sim_param(record).framesize = 190; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 29; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 190 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.25:5; sim_param(record).framesize = 190; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 30; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 190 bits, log-MAP'; sim_param(record).SNR = 0:0.25:5; sim_param(record).framesize = 190; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 9; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 31; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 530 bits, max-log-MAP'; sim_param(record).SNR = 0:0.25:4; sim_param(record).framesize = 530; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 32; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 530 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.25:4; sim_param(record).framesize = 530; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 33; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 530 bits, log-MAP'; sim_param(record).SNR = 0:0.25:4; sim_param(record).framesize = 530; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 34; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 640 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 640; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 35; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 640 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 640; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 36; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 640 bits, log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 640; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 10; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 37; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 1060 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:2.6; sim_param(record).framesize = 1060; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 38; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 1060 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:2.4; sim_param(record).framesize = 1060; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 39; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 1060 bits, log-MAP'; sim_param(record).SNR = 0:0.2:2.4; sim_param(record).framesize = 1060; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 11; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 40; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 2020 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 2020; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 41; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 2020 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 2020; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 42; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 2020 bits, log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 2020; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 43; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 3460 bits, max-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 3460; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 44; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 3460 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 3460; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 45; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 3460 bits, log-MAP'; sim_param(record).SNR = 0:0.2:3; sim_param(record).framesize = 3460; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 13; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 46; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 5114 bits, max-log-MAP'; sim_param(record).SNR = 0:0.15:2.4; sim_param(record).framesize = 5114; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 1; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 47; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 5114 bits, constant-log-MAP'; sim_param(record).SNR = 0:0.15:2.4; sim_param(record).framesize = 5114; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 2; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 40*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 48; sim_param(record).comment = 'UMTS-TC, BPSK, Rayleigh, 5114 bits, log-MAP'; sim_param(record).SNR = 0:0.15:2.4; sim_param(record).framesize = 5114; sim_param(record).channel = 'Rayleigh'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'k-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(50000/sim_param(record).framesize); record = 49; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 1360 bits, log-MAP'; sim_param(record).SNR = 0:0.15:5; sim_param(record).framesize = 1360; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 50; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 1600 bits, log-MAP'; sim_param(record).SNR = 0:0.15:5; sim_param(record).framesize = 1600; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 14; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 51; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 150 bits, log-MAP'; sim_param(record).SNR = -2:0.25:10; sim_param(record).framesize = 150; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 200*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 52; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, 360 bits, log-MAP'; sim_param(record).SNR = 0:0.25:10; sim_param(record).framesize = 360; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).linetype = 'r-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-8; sim_param(record).max_frame_errors = 100*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); record = 53; sim_param(record).comment = 'UMTS-TC, BPSK, AWGN, rate 2048/3840'; sim_param(record).SNR = 0:0.25:10; sim_param(record).framesize = 2048; sim_param(record).code_bits_per_frame = 3840; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).plot_iterations = [1:12]; sim_param(record).linetype = 'm:'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 4; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), 'rate8by15.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 30*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); % these are only required because they are defined in the other records sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); record = 54; sim_param(record).comment = 'UMTS-TC, QPSK, AWGN, 150 bits, log-MAP'; sim_param(record).SNR = -2:0.25:10; sim_param(record).framesize = 150; sim_param(record).channel = 'awgn'; sim_param(record).decoder_type = 3; sim_param(record).max_iterations = 12; sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).plot_iterations = [1:12]; sim_param(record).linetype = 'b-'; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 1; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).legend = sim_param(record).comment; sim_param(record).code_interleaver = ... strcat( 'CreateUmtsInterleaver(', int2str(sim_param(record).framesize ), ')' ); sim_param(record).g1 = [1 0 1 1 1 1 0 1]; sim_param(record).g2 = sim_param(record).g1; sim_param(record).nsc_flag1 = 0; sim_param(record).nsc_flag2 = 0; sim_param(record).pun_pattern1 = [1 1 1 1]; sim_param(record).pun_pattern2= [0 0 1 1 ]; sim_param(record).tail_pattern1 = [1 1 1 1 1 1]; sim_param(record).tail_pattern2 = sim_param(record).tail_pattern1; sim_param(record).filename = strcat( data_directory, ... strcat( 'umts', int2str(sim_param(record).framesize ), sim_param(record).channel, int2str( sim_param(record).decoder_type ), '_qpsk.mat') ); sim_param(record).reset = 0; sim_param(record).max_trials = 1e10*ones(size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 30*ones( 1, length(sim_param(record).SNR) ); sim_param(record).save_rate = ceil(511400/sim_param(record).framesize); % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' ); codec2-0.0~git20230330.db1c21c/scenarios/UncodedScenarios.m000066400000000000000000000263041441116725500227540ustar00rootroot00000000000000% File UncodedScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for uncoded modulation. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'uncoded'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % uncoded modulation in AWGN record = 1; sim_param(record).comment = 'Uncoded BPSK in AWGN'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:11]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BPSKAWGN.mat'); sim_param(record).reset = 1; sim_param(record).max_trials = 100000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 60*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 10; record = 2; sim_param(record).comment = 'Uncoded QPSK in AWGN'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:11]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSKAWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 210*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 3; sim_param(record).comment = 'Uncoded 16-QAM in AWGN w/ gray labeling'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 220*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 4; sim_param(record).comment = 'Uncoded 16-QAM in AWGN w/ SP'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'SP'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16AWGN_SP.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 170*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 5; sim_param(record).comment = 'Uncoded 16-HEX in AWGN'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'HEX'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'c:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HEX16AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 205*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 6; sim_param(record).comment = 'Uncoded 16-APSK in AWGN'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'APSK'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'APSK16AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % uncoded in Rayleigh fading record = 7; sim_param(record).comment = 'Uncoded BPSK in Rayleigh fading'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:60]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).mapping = []; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'BPSKRayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 60*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 8; sim_param(record).comment = 'Uncoded QPSK in Rayleigh fading'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:60]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QPSKRayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 9; sim_param(record).comment = 'Uncoded 16-QAM in Rayleigh fading'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:60]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM16Rayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 205*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 10; sim_param(record).comment = 'Uncoded 16-HEX in Rayleigh fading'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:60]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'HEX'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'c-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'HEX16Rayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 205*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 11; sim_param(record).comment = 'Uncoded 16-APSK in Rayleigh fading'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:60]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 100000; sim_param(record).modulation = 'APSK'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'quasigray'; sim_param(record).channel = 'Rayleigh'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'APSK16Rayleigh.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 10000*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-6; sim_param(record).max_frame_errors = 200*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; record = 12; sim_param(record).comment = 'Uncoded 64-QAM in AWGN w/ gray labeling'; sim_param(record).sim_type = 'uncoded'; sim_param(record).SNR = [0:0.5:20]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).framesize = 1e4; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b:'; sim_param(record).legend = sim_param(record).comment; sim_param(record).filename = strcat( data_directory, 'QAM64AWGN.mat'); sim_param(record).reset = 0; sim_param(record).max_trials = 1e5*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = 1e-5; sim_param(record).max_frame_errors = 20*ones( size(sim_param(record).SNR) ); sim_param(record).save_rate = 100; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/WiMaxCTCScenarios.m000066400000000000000000001442661441116725500227620ustar00rootroot00000000000000% File WiMaxLDPCScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the convolutional turbo % code used by the mobile WiMAX standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'WiMaxCTC'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end MINBER = 3e-6; num_errors = 200; mapping_16 = [13 9 1 5 ... 12 8 0 4 ... 14 10 2 6 ... 15 11 3 7]; mapping_64 = [59 51 35 43 11 3 19 27 ... 58 50 34 42 10 2 18 26 ... 56 48 32 40 8 0 16 24 ... 57 49 33 41 9 1 17 25 ... 61 53 37 45 13 5 21 29 ... 60 52 36 44 12 4 20 28 ... 62 54 38 46 14 6 22 30 ... 63 55 39 47 15 7 23 31]; % (12,6) QPSK record = 1; sim_param(record).framesize = 6*8; sim_param(record).code_bits_per_frame = 12*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); % save every million data bits sim_param(record).linetype = 'k-'; % (24,12) QPSK record = 2; sim_param(record).framesize = 12*8; sim_param(record).code_bits_per_frame = 24*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (36,18) QPSK record = 3; sim_param(record).framesize = 18*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (48,24) QPSK record = 4; sim_param(record).framesize = 24*8; sim_param(record).code_bits_per_frame = 48*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (60,30) QPSK record = 5; sim_param(record).framesize = 30*8; sim_param(record).code_bits_per_frame = 60*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (72,36) QPSK record = 6; sim_param(record).framesize = 36*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (96,48) QPSK record = 7; sim_param(record).framesize = 48*8; sim_param(record).code_bits_per_frame = 96*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (108,54) QPSK record = 8; sim_param(record).framesize = 54*8; sim_param(record).code_bits_per_frame = 108*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (120,60) QPSK record = 9; sim_param(record).framesize = 60*8; sim_param(record).code_bits_per_frame = 120*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k-'; % (12,9) QPSK (rate 3/4) record = 10; sim_param(record).framesize = 9*8; sim_param(record).code_bits_per_frame = 12*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.5:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (24,18) QPSK (rate 3/4) record = 11; sim_param(record).framesize = 18*8; sim_param(record).code_bits_per_frame = 24*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (36,27) QPSK (rate 3/4) record = 12; sim_param(record).framesize = 27*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (48,36) QPSK (rate 3/4) record = 13; sim_param(record).framesize = 36*8; sim_param(record).code_bits_per_frame = 48*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (60,45) QPSK (rate 3/4) record = 14; sim_param(record).framesize = 45*8; sim_param(record).code_bits_per_frame = 60*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (72,54) QPSK (rate 3/4) record = 15; sim_param(record).framesize = 54*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, ... int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'k--'; % (24,12) 16-QAM record = 16; sim_param(record).framesize = 12*8; sim_param(record).code_bits_per_frame = 24*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r-'; % (48,24) 16-QAM record = 17; sim_param(record).framesize = 24*8; sim_param(record).code_bits_per_frame = 48*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r-'; % (72,36) 16-QAM record = 18; sim_param(record).framesize = 36*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r-'; % (96,48) 16-QAM record = 19; sim_param(record).framesize = 48*8; sim_param(record).code_bits_per_frame = 96*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r-'; % (120,60) 16-QAM record = 20; sim_param(record).framesize = 60*8; sim_param(record).code_bits_per_frame = 120*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r-'; % (24,18) 16-QAM record = 21; sim_param(record).framesize = 18*8; sim_param(record).code_bits_per_frame = 24*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r--'; % (48,36) 16-QAM record = 22; sim_param(record).framesize = 36*8; sim_param(record).code_bits_per_frame = 48*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r--'; % (72,54) 16-QAM record = 23; sim_param(record).framesize = 54*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = mapping_16; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'r--'; % (36,18) 64-QAM record = 24; sim_param(record).framesize = 18*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b-'; % (72,36) 64-QAM record = 25; sim_param(record).framesize = 36*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b-'; % (108,54) 64-QAM record = 26; sim_param(record).framesize = 54*8; sim_param(record).code_bits_per_frame = 108*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b-'; % (36,24) 64-QAM (rate 2/3) record = 27; sim_param(record).framesize = 24*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b:'; % (72,48) 64-QAM (rate 2/3) record = 28; sim_param(record).framesize = 48*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b:'; % (36,27) 64-QAM (rate 3/4) record = 29; sim_param(record).framesize = 27*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:13]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b--'; % (72,54) 64-QAM (rate 3/4) record = 30; sim_param(record).framesize = 54*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:12]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b--'; % (36,30) 64-QAM (rate 5/6) record = 31; sim_param(record).framesize = 30*8; sim_param(record).code_bits_per_frame = 36*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.25:14]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b-.'; % (72,60) 64-QAM (rate 5/6) record = 32; sim_param(record).framesize = 60*8; sim_param(record).code_bits_per_frame = 72*8; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 64; sim_param(record).mapping = mapping_64; sim_param(record).channel = 'AWGN'; sim_param(record).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, '.mat'); sim_param(record).comment = sprintf( '(%d,%d) %s %s', sim_param(record).code_bits_per_frame/8, sim_param(record).framesize/8, ... sim_param(record).modulation, sim_param(record).channel ); sim_param(record).legend = sim_param(record).comment; sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 5; % Wimax CTC sim_param(record).SNR = [0:0.2:13]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; % linear-log-MAP demapper sim_param(record).decoder_type = 0; % linear-log-MAP demapper sim_param(record).max_iterations = 10; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = floor(1e6/sim_param(record).framesize); sim_param(record).linetype = 'b-.'; % now repeat using the max-log-MAP algorithm record_offset = 32; for record=1:32 sim_param(record+record_offset) = sim_param(record); sim_param(record+record_offset).decoder_type = 1; sim_param(record+record_offset).filename = strcat( data_directory, sim_param(record).modulation, int2str( sim_param(record).mod_order), ... 'N', int2str( sim_param(record).code_bits_per_frame), 'comma', int2str( sim_param(record).framesize), ... sim_param(record).channel, 'MAXLOG.mat'); sim_param(record+record_offset).linetype = strcat( sim_param(record).linetype, '+' ); end % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/WiMaxLDPCScenarios.m000066400000000000000000000526551441116725500230730ustar00rootroot00000000000000% File WiMaxLDPCScenarios % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the LDPC code % used by the IEEE 802.16e / Mobile-WiMax standard % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'WiMaxLDPC'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end MINBER = 1e-5; num_errors = 60; % L=2304, R=5/6 record = 1; rate = '5/6'; sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R5by6_L', int2str( sim_param(record).framesize), '_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:3 3.1:0.1:4]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=2304, R=3/4 A record = 2; rate = '3/4'; ind = '0'; %A sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R3by4_L', int2str( sim_param(record).framesize), 'A_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'A in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'A' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:2.4 2.5:0.1:3.5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=2304, R=3/4 B record = 3; rate = '3/4'; ind = '1'; %B sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R3by4_L', int2str( sim_param(record).framesize), 'B_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'B in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'B' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:2.4 2.5:0.1:3.5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r--'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=2304, R=2/3 A record = 4; rate = '2/3'; ind = '0'; %A sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R2by3_L', int2str( sim_param(record).framesize), 'A_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'A in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'A' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:1.6 1.7:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=2304, R=3/4 B record = 5; rate = '2/3'; ind = '1'; %B sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R2by3_L', int2str( sim_param(record).framesize), 'B_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'B in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'B'); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:1.6 1.7:0.1:3]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b--'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=2304, R=1/2 record = 6; rate = '1/2'; sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R1by2_L', int2str( sim_param(record).framesize), '_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:1 1.1:0.1:2]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 200; % L=576, R=5/6 record = 7; rate = '5/6'; sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R5by6_L', int2str( sim_param(record).framesize), '_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'k-'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=3/4 A record = 8; rate = '3/4'; ind = '0'; %A sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R3by4_L', int2str( sim_param(record).framesize), 'A_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'A in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'A' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r-'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=3/4 B record = 9; rate = '3/4'; ind = '1'; %B sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R3by4_L', int2str( sim_param(record).framesize), 'B_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'B in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'B' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'r--'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=2/3 A record = 10; rate = '2/3'; ind = '0'; %A sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R2by3_L', int2str( sim_param(record).framesize), 'A_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'A in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'A' ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6];; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b-'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=3/4 B record = 11; rate = '2/3'; ind = '1'; %B sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R2by3_L', int2str( sim_param(record).framesize), 'B_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ',', ind, ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), 'B in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize), 'B'); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'b--'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=1/2 record = 12; rate = '1/2'; sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R1by2_L', int2str( sim_param(record).framesize), '_AWGN_BPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ BPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).max_iterations = 30; sim_param(record).decoder_type = 0; % min sum sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=2304, R=1/2, MIN-SUM DECODING record = 13; rate = '1/2'; sim_param(record).framesize = 2304; sim_param(record).filename = strcat( data_directory, 'R1by2_L', int2str( sim_param(record).framesize), '_AWGN_BPSK_MinSum.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ BPSK (MIN SUM)' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:1.6 1.7:0.1:2.5]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'BPSK'; sim_param(record).mod_order = 2; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 0; sim_param(record).demod_type = 0; sim_param(record).linetype = 'm-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 1; % min-sum sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 400; % L=576, R=1/2 and QPSK record = 14; rate = '1/2'; sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R1by2_L', int2str( sim_param(record).framesize), '_AWGN_QPSK.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ QPSK' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [-1:0.2:6]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'QPSK'; sim_param(record).mod_order = 4; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; % sum-product sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % L=576, R=1/2 and 16-QAM record = 15; rate = '1/2'; sim_param(record).framesize = 576; sim_param(record).filename = strcat( data_directory, 'R1by2_L', int2str( sim_param(record).framesize), '_AWGN_16QAM.mat'); sim_param(record).parity_check_matrix = strcat( 'InitializeWiMaxLDPC(', rate , ',', int2str( sim_param(record).framesize ), ')' ); sim_param(record).comment = strcat( 'r=', ' ', rate, ' L=', int2str( sim_param(record).framesize ), ' in AWGN w/ 16-QAM' ); sim_param(record).legend = strcat( 'r=', ' ', rate, ' L=', int2str(sim_param(record).framesize) ); sim_param(record).sim_type = 'coded'; sim_param(record).code_configuration = 2; % LDPC sim_param(record).SNR = [0:4 4.2:0.2:10]; sim_param(record).SNR_type = 'Eb/No in dB'; sim_param(record).modulation = 'QAM'; sim_param(record).mod_order = 16; sim_param(record).mapping = 'gray'; sim_param(record).channel = 'AWGN'; sim_param(record).bicm = 1; sim_param(record).demod_type = 0; sim_param(record).linetype = 'g-'; sim_param(record).max_iterations = 100; sim_param(record).decoder_type = 0; % sum-product sim_param(record).reset = 0; sim_param(record).max_trials = 1e9*ones( size(sim_param(record).SNR) ); sim_param(record).minBER = MINBER; sim_param(record).max_frame_errors = num_errors*ones( size(sim_param(record).SNR) ); sim_param(record).plot_iterations = sim_param(record).max_iterations; sim_param(record).save_rate = 250; % To add a new record, cut and paste one of the above records. % Change record number to be one higher than the last used. % Modify parameters as desired. % % Important: Each record must have a unique filename. It is recommended % that for each new record you set % sim_param(record).filename = strcat( data_directory, base_name, int2str(record), '.mat' );codec2-0.0~git20230330.db1c21c/scenarios/hFskAWGNBICMCapacity.m000066400000000000000000000177021441116725500232070ustar00rootroot00000000000000% File hFskAWGNBICMCapacity % % This is a set of scenarios for the Coded Modulation Library. % % The simulations specified in this file are for the Shannon capacity % under modulation constraints. % % Last updated on Oct. 12, 2007 % determine where your root directory is load( 'CmlHome.mat' ); % determine where to store your files base_name = 'FskCapacity'; if ispc data_directory = strcat( '\output\', base_name, '\' ); else data_directory = strcat( '/output/', base_name, '/' ); end full_directory = strcat( cml_home, data_directory ); if ~exist( full_directory, 'dir' ) mkdir( full_directory); end % few_trials = 5; % many_trials = 30; few_trials = 5; many_trials = 11; epsilon = 1e-4; % list of values to simulate % for naming convention, h should be no less than 0.01 apart h = [0.01:0.01:1]; % h = 0.32; M = [4 8]; ,apping = { 'gray', 'natural' }; linetype = { 'g-', 'r-', 'b-', 'k-' }; linetype = circshift( linetype, [0 1] ); minEsNodB = -30; maxEsNodB = 45; spacing_coarse = 0.5; spacing_fine = 0.1; % What is the minimum BW we are interested in? min_bandwidth_constraint = 0.5; % get the BW information load BW99percent % this is the CM capacity in AWGN record = 0; for mcount=1:length(M) for lcount=1:length(mapping) for hcount=1:length(h) record = record + 1; sim_param(record).comment = sprintf( 'BICM capacity of %d-FSK w/ h=%1.2f and %s mapping in AWGN\n', M(mcount), h(hcount), mapping{lcount} ); % particular to this record sim_param(record).h = h(hcount); sim_param(record).mod_order = M(mcount); % create the filename and see if it exists filename = strcat( 'BICM_', int2str( M(mcount) ), 'FSK_h' ); if ( h(hcount) == 1) filename = strcat( filename, '1' ); elseif (abs(h(hcount)-0.9) < epsilon ) filename = strcat( filename, '09' ); elseif (abs(h(hcount)-0.8) < epsilon ) filename = strcat( filename, '08' ); elseif (abs(h(hcount)-0.7) < epsilon ) filename = strcat( filename, '07' ); elseif (abs(h(hcount)-0.6) < epsilon ) filename = strcat( filename, '06' ); elseif (abs(h(hcount)-0.5) < epsilon ) filename = strcat( filename, '05' ); elseif (abs(h(hcount)-0.4) < epsilon ) filename = strcat( filename, '04' ); elseif (abs(h(hcount)-0.3) < epsilon ) filename = strcat( filename, '03' ); elseif (abs(h(hcount)-0.2) < epsilon ) filename = strcat( filename, '02' ); elseif (abs(h(hcount)-0.1) < epsilon ) filename = strcat( filename, '01' ); elseif ( h(hcount) < 0.1 ) filename = strcat( filename, '00', int2str( 100*h(hcount) ) ); else filename = strcat( filename, '0', int2str( 100*h(hcount) ) ); end filename = strcat( filename, '_AWGN_CSI_' ); filename = strcat( filename, mapping{lcount} ); filename = strcat( filename, '.mat' ); % see if the file already exists sim_param(record).filename = strcat( data_directory, filename ); fprintf( strcat ( 'Attempting to open file ', filename, '\n' )); fid = fopen( sim_param(record).filename ); if ( fid > 0 ) fprintf( 'File exists\n\n' ); % load load(sim_param(record).filename); fclose( fid ); % determine the interesting range of SNR r = save_state.capacity_avg; rindex = find( r>epsilon & r< 1-epsilon); if (length(rindex)==0) fprintf( 'rindex is empty\n' ); % create SNR sim_param(record).SNR = minEsNodB:spacing_coarse:maxEsNodB; sim_param(record).max_trials = few_trials*ones( 1, length( sim_param(record).SNR ) ); else % first determine min EsNo (for unconstrained bandwidth) EsNo = 10.^(save_param.SNR(rindex)/10); EbNo = EsNo./(r(rindex)*log2(save_param.mod_order)); [y,index] = min(EbNo); ThisMinEsNodB = 10*log10(EsNo(index)); % then determine max EsNo (for constrained bandwidth) % determine the minimum allowable code rate M_values = find( BwMatrix(:,1) == save_param.mod_order ); h_values = find( abs(BwMatrix(:,2) - save_param.h) < epsilon); Matching_row = min( intersect( M_values, h_values ) ); bandwidth = BwMatrix( Matching_row, 3 ); min_rate = bandwidth/log2(save_param.mod_order)/min_bandwidth_constraint; ThisMaxEsNodB = NaN; if (length(rindex) > 1 ) ThisMaxEsNodB = interp1( r(rindex), save_param.SNR(rindex), min_rate ); end if ( isnan( ThisMaxEsNodB ) ) ThisMaxEsNodB = maxEsNodB; end fprintf( 'h=%1.2f min=%2.1f max=%2.1f\n', save_param.h, ThisMinEsNodB, ThisMaxEsNodB ); fprintf( '\n' ); coarse_spacings = (maxEsNodB-minEsNodB)/spacing_coarse + 1; fine_spacings = spacing_coarse/spacing_fine; % create SNR vector EsNodB = minEsNodB; index = 1; for i=1:coarse_spacings for j=1:fine_spacings fine = (EsNodB >= ThisMinEsNodB - spacing_coarse )&(EsNodB <= ThisMaxEsNodB + spacing_coarse); if (j==1) sim_param(record).SNR(index) = EsNodB; if ( fine ) sim_param(record).max_trials(index) = many_trials; else sim_param(record).max_trials(index) = few_trials; end index = index + 1; elseif ( ( fine | sum( abs( save_param.SNR-EsNodB ) < epsilon ) )&(i 0 ) fprintf( 'File exists\n\n' ); % load load(sim_param(record).filename); fclose( fid ); % determine the interesting range of SNR r = save_state.capacity_avg; rindex = find( r>epsilon & r< 1-epsilon); if (length(rindex)==0) fprintf( 'rindex is empty\n' ); % create SNR sim_param(record).SNR = minEsNodB:spacing_coarse:maxEsNodB; sim_param(record).max_trials = few_trials*ones( 1, length( sim_param(record).SNR ) ); else % first determine min EsNo (for unconstrained bandwidth) EsNo = 10.^(save_param.SNR(rindex)/10); EbNo = EsNo./(r(rindex)*log2(save_param.mod_order)); [y,index] = min(EbNo); ThisMinEsNodB = 10*log10(EsNo(index)); % then determine max EsNo (for constrained bandwidth) % determine the minimum allowable code rate M_values = find( BwMatrix(:,1) == save_param.mod_order ); h_values = find( abs(BwMatrix(:,2) - save_param.h) < epsilon); Matching_row = min( intersect( M_values, h_values ) ); bandwidth = BwMatrix( Matching_row, 3 ); min_rate = bandwidth/log2(save_param.mod_order)/min_bandwidth_constraint; ThisMaxEsNodB = NaN; if (length(rindex) > 1 ) ThisMaxEsNodB = interp1( r(rindex), save_param.SNR(rindex), min_rate ); end if ( isnan( ThisMaxEsNodB ) ) ThisMaxEsNodB = maxEsNodB; end fprintf( 'h=%1.2f min=%2.1f max=%2.1f\n', save_param.h, ThisMinEsNodB, ThisMaxEsNodB ); fprintf( '\n' ); coarse_spacings = (maxEsNodB-minEsNodB)/spacing_coarse + 1; fine_spacings = spacing_coarse/spacing_fine; % create SNR vector EsNodB = minEsNodB; index = 1; for i=1:coarse_spacings for j=1:fine_spacings fine = (EsNodB >= ThisMinEsNodB - spacing_coarse )&(EsNodB <= ThisMaxEsNodB + spacing_coarse); if (j==1) sim_param(record).SNR(index) = EsNodB; if ( fine ) sim_param(record).max_trials(index) = many_trials; else sim_param(record).max_trials(index) = few_trials; end index = index + 1; elseif ( ( fine | sum( abs( save_param.SNR-EsNodB ) < epsilon ) )&(i 0 ) fprintf( 'File exists\n\n' ); % load load(sim_param(record).filename); fclose( fid ); % determine the interesting range of SNR r = save_state.capacity_avg; rindex = find( r>epsilon & r< 1-epsilon); if (length(rindex)==0) fprintf( 'rindex is empty\n' ); % create SNR sim_param(record).SNR = minEsNodB:spacing_coarse:maxEsNodB; sim_param(record).max_trials = few_trials*ones( 1, length( sim_param(record).SNR ) ); else % first determine min EsNo (for unconstrained bandwidth) EsNo = 10.^(save_param.SNR(rindex)/10); EbNo = EsNo./(r(rindex)*log2(save_param.mod_order)); [y,index] = min(EbNo); ThisMinEsNodB = 10*log10(EsNo(index)); % then determine max EsNo (for constrained bandwidth) % determine the minimum allowable code rate M_values = find( BwMatrix(:,1) == save_param.mod_order ); h_values = find( abs(BwMatrix(:,2) - save_param.h) < epsilon); Matching_row = min( intersect( M_values, h_values ) ); bandwidth = BwMatrix( Matching_row, 3 ); min_rate = bandwidth/log2(save_param.mod_order)/min_bandwidth_constraint; ThisMaxEsNodB = NaN; if (length(rindex) > 1 ) ThisMaxEsNodB = interp1( r(rindex), save_param.SNR(rindex), min_rate ); end if ( isnan( ThisMaxEsNodB ) ) ThisMaxEsNodB = maxEsNodB; end fprintf( 'h=%1.2f min=%2.1f max=%2.1f\n', save_param.h, ThisMinEsNodB, ThisMaxEsNodB ); fprintf( '\n' ); coarse_spacings = (maxEsNodB-minEsNodB)/spacing_coarse + 1; fine_spacings = spacing_coarse/spacing_fine; % create SNR vector EsNodB = minEsNodB; index = 1; for i=1:coarse_spacings for j=1:fine_spacings fine = (EsNodB >= ThisMinEsNodB - spacing_coarse )&(EsNodB <= ThisMaxEsNodB + spacing_coarse); if (j==1) sim_param(record).SNR(index) = EsNodB; if ( fine ) sim_param(record).max_trials(index) = many_trials; else sim_param(record).max_trials(index) = few_trials; end index = index + 1; elseif ( ( fine | sum( abs( save_param.SNR-EsNodB ) < epsilon ) )&(i #include #include #include #include "./include/maxstar.h" /* Input Arguments prhs[0] is input prhs[1] is data */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int M; int number_symbols, number_bits, bits_per_symbol; double *input, *output, *data; int i,j,index,temp_int; double cap_sum, temp_cap; /* make sure there are enough inputs */ if (nrhs<2) mexErrMsgTxt("Usage: [output] = capacity( input, data )"); /* read in input received symbols */ number_symbols = mxGetN(prhs[0]); M = mxGetM(prhs[0]); input = mxGetPr(prhs[0]); /* read in data bits */ number_bits = mxGetN(prhs[1]); if ( mxGetM(prhs[1])!=1) mexErrMsgTxt("data must be a row vector"); data = mxGetPr(prhs[1]); /* determine the number of bits per symbol */ if (M == 1) bits_per_symbol = 1; /* input is bitwise LLRs */ else { bits_per_symbol = 0; temp_int = M; while (temp_int>1) { temp_int = temp_int/2; bits_per_symbol++; } } /* printf( "number of symbols = %d\n", number_symbols); printf( "number of bits = %d\n", number_bits ); printf( "M = %d\n", M); printf( "Bits per symbol = %d\n", bits_per_symbol ); */ /* make sure that number of bits is consistent */ if ( number_bits%bits_per_symbol ) mexErrMsgTxt( "Number of bits does not divide log_2(M)" ); if ( (number_symbols*bits_per_symbol) != number_bits ) mexErrMsgTxt( "Number of bits inconsistent with number of symbols" ); /* output is a real scalar */ plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); output = mxGetPr( plhs[0] ); /* determine capacity */ cap_sum = 0; if ( M == 1 ) { /* the input is bitwise LLRs */ for (i=0;i 0 ) cap_sum += max_star4( 0, -input[i] ); else cap_sum += max_star4( 0, input[i] ); } /* printf( "cap_sum = %f\n", cap_sum ); */ output[0] = 1 - cap_sum/(number_symbols*log(2)); } else { for (i=0;i #include #include #include /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { /* declare variables */ double *SNR_table, *capacity_table, *slope, *gamma, *output_p; int table_entries, trial_size, blocks, i, j, index_below; double max_SNR, min_SNR, max_cap, this_gamma, cap; /* Check for proper number of arguments */ if ((nrhs < 4 )||(nlhs > 1)) { mexErrMsgTxt("Usage: cap = CapacityTableLoookup( EsNo_AWGN, capacity_AWGN, slope, gamma )"); } /* first input is the SNR values in the table */ SNR_table = mxGetPr( prhs[0] ); table_entries = mxGetN( prhs[0] ); /* second input is the capacity values in the table */ capacity_table = mxGetPr( prhs[1] ); if ( mxGetN( prhs[1] ) != table_entries ) mexErrMsgTxt( "Table sizes don't match" ); /* third input is the slope */ slope = mxGetPr( prhs[2] ); if ( mxGetN( prhs[2] ) != table_entries-1 ) mexErrMsgTxt( "slope vector is wrong size" ); /* fourth input is the snr values */ gamma = mxGetPr( prhs[3] ); trial_size = mxGetM( prhs[3] ); blocks = mxGetN( prhs[3] ); /* create output */ plhs[0] = mxCreateDoubleMatrix( trial_size, 1, mxREAL ); output_p = mxGetPr( plhs[0] ); /* determine minimum and maximum values */ min_SNR = SNR_table[0]; max_SNR = SNR_table[table_entries-1]; max_cap = capacity_table[table_entries-1]; for (j=0;j= max_SNR ) { cap += max_cap; } else if ( this_gamma > min_SNR ) { /* need to interpolate */ index_below = 0; while ( SNR_table[index_below] < this_gamma ) index_below++; index_below--; cap += capacity_table[index_below] + slope[index_below]*( this_gamma - SNR_table[index_below] ); } } output_p[j] = cap; } return; } codec2-0.0~git20230330.db1c21c/source/ConvEncode.cpp000066400000000000000000000114151441116725500214040ustar00rootroot00000000000000/* file: ConvEncode.c Description: Convolutionally encode with either NSC or RSC code. The calling syntax is: [output] = ConvEncode(input, g_encoder, [code_type] ) output = code word Required inputs: input = data word g_encoder = generator matrix for convolutional code (If RSC, then feedback polynomial is first) Optional inputs: code_type = 0 for recursive systematic convolutional (RSC) code (default) = 1 for non-systematic convolutional (NSC) code = 2 for tail-biting NSC code Copyright (C) 2005-2008, Matthew C. Valenti Last updated on May 21, 2008 Function ConvEncode is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* library of functions */ #include "./include/convolutional.h" /* Input Arguments */ #define INPUT prhs[0] #define GENENCODER prhs[1] #define CODETYPE prhs[2] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *g_array; double *output_p; int DataLength, CodeLength, i, j, index; mwIndex subs[] = {1,1}; int *g_encoder; int nn, KK, mm, code_type, max_states; double elm; int *input_int, *output_int; int *out0, *out1, *state0, *state1, *tail; code_type = 0; /* Default:Code is RSC with terminated trellis */ /* Check for proper number of arguments */ if ((nrhs < 2 )||(nlhs > 1)) { mexErrMsgTxt("Usage: [output] = ConvEncode(input, g_encoder, code_type )"); } else { /* first input is the data word */ input = mxGetPr(INPUT); DataLength = mxGetN(INPUT); /* number of data bits */ /* cast the input into a vector of integers */ input_int = (int*)calloc( DataLength, sizeof(int) ); for (i=0;i #include #include #include /* library of functions */ #include "./include/interleaver.h" /* Input Arguments */ #define INPUT prhs[0] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int DataLength; double *output_p; int *alpha_code; /* interleaver */ int i; /* Check for proper number of arguments */ if (nrhs < 1) { mexErrMsgTxt("[alpha] = CreateCcsdsInterleaver( K )"); } else if (nlhs > 1) { mexErrMsgTxt("[alpha] = CreateCcsdsInterleaver( K )"); } /* initialize the input data */ DataLength = (int) *mxGetPr(INPUT); if ( !( ( DataLength == 1784 )||( DataLength == 3568 )||( DataLength == 7136 )||( DataLength == 8920 ) ) ) mexErrMsgTxt("CreateCcsdsInterleaver: CCSDS Interleaver size must be 7184, 3568, 7136, or 8920"); /* Create the interleaver */ /* printf( "\nMaking interleaver\n" ); */ alpha_code = (int*)calloc( DataLength, sizeof(int) ); CreateCcsdsInterleaver( DataLength, alpha_code ); /* printf( "Done making the interleaver\n" ); printf( "K = %d\n", DataLength ); */ /* Output encoded data */ OUTPUT = mxCreateDoubleMatrix(1, DataLength, mxREAL); output_p = mxGetPr(OUTPUT); for (i=0;i #include #include #include /* library of functions */ #include "./include/srandom.h" /* Input Arguments */ #define LENGTH prhs[0] #define SVAL prhs[1] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int DataLength; double *output_p; int *alpha_code; /* interleaver */ int i; int s_value; /* Check for proper number of arguments */ if (nrhs != 2) { mexErrMsgTxt("[alpha] = CreateSRandomInterleaver( Length, S )"); } else if (nlhs > 1) { mexErrMsgTxt("[alpha] = CreateSRandomInterleaver( Length, S )"); } /* initialize the input data */ DataLength = (int) *mxGetPr(LENGTH); s_value = (int) *mxGetPr(SVAL); /* Create the interleaver */ /* printf( "\nMaking interleaver\n" ); */ alpha_code = (int*)calloc( DataLength, sizeof(int) ); CreateSRandomInterleaver( DataLength, s_value, alpha_code ); /* printf( "Done making the interleaver\n" ); printf( "K = %d\n", DataLength ); */ /* Output encoded data */ OUTPUT = mxCreateDoubleMatrix(1, DataLength, mxREAL); output_p = mxGetPr(OUTPUT); for (i=0;i #include #include #include /* library of functions */ #include "./include/interleaver.h" /* Input Arguments */ #define INPUT prhs[0] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int DataLength; double *output_p; int *alpha_code; /* interleaver */ int *interleaver_input; /* Temporary array used to initialize the interleaver. */ int i; /* Check for proper number of arguments */ if (nrhs < 1) { mexErrMsgTxt("[alpha] = CreateUmtsInterleaver( K )"); } else if (nlhs > 2) { mexErrMsgTxt("[alpha] = CreateUmtsInterleaver( K )"); } /* initialize the input data */ DataLength = (int) *mxGetPr(INPUT); if ( (DataLength < 40)|( DataLength > 5114) ) mexErrMsgTxt("CreateUmtsInterleaver: Input must be between 40 and 5114"); /* Create the interleaver */ alpha_code = (int*)calloc( DataLength, sizeof(int) ); interleaver_input = (int*)calloc( DataLength, sizeof(int) ); for (i=0;i #include #include #include /* Input Arguments */ #define INPUT prhs[0] #define ALPHA prhs[1] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *alpha; double *output_p; int InterleaverLength, i, index; /* Check for proper number of arguments */ if ((nrhs < 2 )||(nlhs > 1)) { mexErrMsgTxt("Usage: [output] = Deinterleave(input, alpha_code )"); } else { /* first input is the data word */ input = mxGetPr(INPUT); InterleaverLength = mxGetN(INPUT); /* number of data bits */ /* second input is the interleaver */ if ( mxGetN(ALPHA) != InterleaverLength ) mexErrMsgTxt("Deinterleave: Error input and alpha_code must be same length"); alpha = mxGetPr(ALPHA); OUTPUT = mxCreateDoubleMatrix(1, InterleaverLength, mxREAL ); output_p = mxGetPr(OUTPUT); /* Interleave */ for(i=0;i #include #include #include /* Input Arguments prhs[0] is input prhs[1] is S_matrix prhs[2] is EsNo prhs[3] is fade_coef */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int M; int number_symbols; float EsNo; double *Sr, *Si , *ar, *ai, *yr, *yi, *output; int i,j; double tempsr, tempsi, Er, Ei; /* make sure there are enough inputs */ if (nrhs<3) mexErrMsgTxt("Usage: [output] = Demod2D( input, S_matrix, EsNo, [fade_coef] )"); /* read in the inputs */ number_symbols = mxGetN(prhs[0]); yr = mxGetPr(prhs[0]); if(!mxIsComplex(prhs[0]) ) yi = (double*)calloc( number_symbols, sizeof(double) ); else yi = mxGetPi(prhs[0]); if (mxGetN(prhs[1])==1) /* column vector */ M = mxGetM( prhs[1] ); else if (mxGetM(prhs[1])==1) /* row vector */ M = mxGetN( prhs[1] ); else mexErrMsgTxt("S_matrix should only have one column or row"); Sr = mxGetPr(prhs[1]); if (!mxIsComplex(prhs[1]) ) Si = (double*)calloc( M, sizeof(double) ); else Si = mxGetPi(prhs[1]); EsNo = (float) *mxGetPr(prhs[2]); if(nrhs>3) { if (mxGetN(prhs[3])!=number_symbols) mexErrMsgTxt("Fading process must be same length as received signal"); ar = mxGetPr(prhs[3]); if (!mxIsComplex(prhs[3]) ) ai = (double*)calloc( number_symbols, sizeof(double) ); else ai = mxGetPi(prhs[3]); } else { ar = (double*)calloc( number_symbols, sizeof(double) ); for (i=0;i3) { if(!mxIsComplex(prhs[3]) ) free(ai); } else { free(ar); free(ai); } } codec2-0.0~git20230330.db1c21c/source/DemodFSK.cpp000066400000000000000000000140131441116725500207520ustar00rootroot00000000000000/* File: DemodFSK.c Description: Transforms M-dimensional FSK symbols into ML symbol log-likelihoods The calling syntax is: [output] = FskDemod( input, EsNo, [csi_flag], [fade_coef] ) Where: output = M by N matrix of symbol log-likelihoods input = M by N matrix of (complex) matched filter outputs EsNo = the symbol SNR (in linear, not dB, units) csi_flag = 0 for coherent reception (default) 1 for noncoherent reception w/ perfect amplitude estimates 2 for noncoherent reception without amplitude estimates fade_coef = 1 by N matrix of (complex) fading coefficients (defaults to all-ones, i.e. AWGN) Copyright (C) 2006, Matthew C. Valenti Last updated on May 6, 2006 Function DemodFSK is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* Input Arguments prhs[0] is input prhs[1] is EsNo prhs[2] is csi_flag prhs[3] is fade_coef */ /* Output Arguments plhs[0] is output */ /* the logI_0 function */ static float logbesseli0(float x) { if (x < 1) return( 0.226*x*x+0.0125*x-0.0012 ); else if (x < 2) return( 0.1245*x*x+0.2177*x-0.108 ); else if (x < 5) return( 0.0288*x*x+0.6314*x-0.5645 ); else if (x < 20) return( 0.002*x*x+0.9048*x-1.2997 ); else return(0.9867*x-2.2053); } /* Function that does the demodulation (can be used in stand-alone C) */ static void FskDemod( float out[], float yr[], float yi[], float ar[], float ai[], float SNR, int csi_flag, int M, int number_symbols ) { int i, j; float a_envelope, y_envelope, y_power, scale_factor; if (csi_flag == 0) { scale_factor = 2*SNR; for (i=0;i 2 ) csi_flag = (int) *mxGetPr(prhs[2]); else csi_flag = 0; /* initialize the fading amplitudes */ ar_float = (float*)calloc( number_symbols, sizeof(float) ); ai_float = (float*)calloc( number_symbols, sizeof(float) ); /* fourth input (optional) are the fading amplitudes */ if(nrhs>3) { if (mxGetN(prhs[3])!=number_symbols) mexErrMsgTxt("Fading process must be same length as received signal"); /* real part of the fading process */ ar = mxGetPr(prhs[3]); /* cast to float */ for (i=0;i #include #include #include /* Input Arguments prhs[0] is input prhs[1] is pun_pattern prhs[2] is tail_pattern */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *pun_pattern, *tail_pattern; /* inputs */ double *output_p; /* output */ int height; /* height of input matrices */ int pun_period; /* period of puncturing pattern */ int tail_period; /* period of tail */ int pun_bits_per_frame; int unpun_bits_per_frame; int pun_bits_in_tail; int unpun_bits_in_tail; int pun_bits_in_payload; int unpun_bits_in_payload; int pun_bits_per_period; int unpun_bits_per_period; int number_pun_periods; /* number of puncture periods */ int partial_period = 0; /* length of last period (if partial) */ int number_fractional_bits; int temp_count; int i, j, count_punctured; /* counting variables */ /* Check for proper number of arguments */ if ((nrhs < 3 )||(nlhs > 1)) { mexErrMsgTxt("Usage: [output] = Puncture(input, pun_pattern, tail_pattern )"); } else { /* first input is the punctured word */ input = mxGetPr(prhs[0]); pun_bits_per_frame = mxGetN(prhs[0]); if ( mxGetM(prhs[0]) != 1 ) mexErrMsgTxt("Input must be a row vector"); /* second input is the puncturing pattern for coded data bits */ pun_pattern = mxGetPr(prhs[1]); pun_period = mxGetN(prhs[1]); height = mxGetM(prhs[1]); unpun_bits_per_period = height*pun_period; /* number of unpunctured bits per payload period */ /* third input is the puncturing pattern for coded tail bits */ tail_pattern = mxGetPr(prhs[2]); tail_period = mxGetN(prhs[2]); if ( ( mxGetM(prhs[2])!=height )&&( tail_period > 0 ) ) mexErrMsgTxt("Number rows in tail_pattern must match the number in pun_pattern"); unpun_bits_in_tail = height*tail_period; /* number of unpunctured bits in the tail */ /* printf( "Height = %d\n", height ); printf( "Puncture Period = %d\n", pun_period ); printf( "Tail Period = %d\n", tail_period ); */ /* determine number of punctured bits per payload period (non-tail) */ pun_bits_per_period = 0; for (i=0;i 0 ) { temp_count = 0; i = 0; /* column */ while (temp_count < number_fractional_bits ) { for (j = 0; j number_fractional_bits ) mexErrMsgTxt( "Incomplete column of puncturing pattern" ); i++; partial_period = i; } } /* printf( "Length of Partial Period = %d\n", partial_period ); */ unpun_bits_in_payload = unpun_bits_per_period*number_pun_periods + height*partial_period; unpun_bits_per_frame = unpun_bits_in_payload + unpun_bits_in_tail; /* printf( "Number of Unpunctured Bits = %d\n", unpun_bits_per_frame ); */ /* set up output */ plhs[0] = mxCreateDoubleMatrix(height, unpun_bits_per_frame/height, mxREAL ); output_p = mxGetPr(plhs[0]); /* unpuncture the coded data bits */ count_punctured = 0; for (j=0;j 0) { output_p[j*pun_period*height+i]+=input[count_punctured]; count_punctured++; temp_count--; } } } if (partial_period > 0) { /* go through last (partial) period */ for (i=0;i 0) { output_p[number_pun_periods*pun_period*height+i]+=input[count_punctured]; count_punctured++; temp_count--; } } } /* depuncture the coded tail bits New 11/21/05: if height = 4, then the tail bits are rearranged to conform to UMTS convention */ if ( height == 4 ) { /* upper RSC's tail bits */ for (i=0;i 0 ) { output_p[unpun_bits_in_payload + i*4+j] += input[count_punctured]; count_punctured++; temp_count--; } } } /* lower RSC's tail bits */ for (i=0;i 0 ) { output_p[unpun_bits_in_payload + i*4+j+2] += input[count_punctured]; count_punctured++; temp_count--; } } } } else { for (i=0;i 0 ) { output_p[unpun_bits_in_payload + i] += input[count_punctured]; count_punctured++; temp_count--; } } } } return; } codec2-0.0~git20230330.db1c21c/source/InitializeDVBS2.cpp000066400000000000000000000147721441116725500222340ustar00rootroot00000000000000/* File: InitializeDVBS2.c Description: Initializes the DVB-S2 LDPC encoder/decoder The calling syntax is: [H_rows, H_cols, [P]] = InitializeDVBS2( rate, size ) Where: H_rows = a M-row matrix containing the indices of the non-zero rows of H. H_cols = a (N-M)-row matrix containing the indices of the non-zeros rows of H. P = (optional) empty matrix. (for consistency with IntializeWiMaxLDPC) rate = the code rate size = the size of the code (number of code bits): = 64,800 for normal (n=64,800) = 16,200 for short (n=16,200) Copyright (C) 2005-2007, Rohit Iyer Seshadri and Matthew C. Valenti Last updated on July 10, 2007. Function InitializeDVBS2 is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include "./include/DVBS2lookup.h" #define epsilon 1e-2 void initalize(int *u,mxArray *plhs[],int nldpc,int kldpc,int mldpc,int Q, int index) { int r,col_ind,row_ind,count,i,j, k,state,op,sum,t,temp,*temp_count, *x, ind; /* used dynamic mem. alloc 4/27 */ int rows, cols,nrows, ncols, *col_index, *row_index, max_col, max_row; double *H_rows_tmp,*H_cols_tmp,*H_rows, *H_cols; temp_count=(int*)calloc((mldpc+5),sizeof(int)); x=(int*)calloc((mldpc+5),sizeof(int)); col_index=(int*)calloc((kldpc+5),sizeof(int)); row_index=(int*)calloc((mldpc+5),sizeof(int)); H_rows_tmp=(double*)calloc((mldpc*40),sizeof(double)); H_cols_tmp=(double*)calloc((kldpc*40),sizeof(double)); rows=165; cols =15; Q=T_short[index][164][14]; /* Accumulate data bits at specific parity locations */ count=0; i=0; while ((i < 165) && (T_short[index][i][1]!=0)){ for (j=0; j< 360;j++){ for (k=1;k<=15;k++){ if ((T_short[index][i][k-1]!=0) || (k==1)){ if (T_short[index][i][1]!=0){ temp=fmod((T_short[index][i][k-1]+(fmod(j,360))*Q),mldpc);/* find the correct parity bit location */ x[temp]=((int)u[count])^((int)x[temp]); /* Accumulate the correponding data bit at that location */ H_cols_tmp[(count)+kldpc*(k-1)]=temp+1; temp_count[temp]= temp_count[temp]+1; ind=temp_count[temp]; H_rows_tmp[(temp)+mldpc*(ind-1)]=count+1; row_index[temp]=ind-1; col_index[count]=k-1; } } } count++; } i++; } max_col=col_index[0]; max_row=row_index[0]; for (i=1;i<=kldpc;i++){ if (max_col <=col_index[i-1]){ max_col=col_index[i-1]; } } for (i=1;i<=mldpc;i++){ if (max_row <=row_index[i-1]){ max_row=row_index[i-1]; } } plhs[0]= mxCreateDoubleMatrix(mldpc,max_row+1,mxREAL); plhs[1]= mxCreateDoubleMatrix(kldpc,max_col+1,mxREAL); /* create output arrays */ H_rows=mxGetPr(plhs[0]); H_cols=mxGetPr(plhs[1]); for (i=1;i<=kldpc;i++) { for (j=1;j<=max_col+1;j++){ H_cols[(i-1)+kldpc*(j-1)]=H_cols_tmp[(i-1)+kldpc*(j-1)]; } } for (i=1;i<=mldpc;i++) { for (j=1;j<=max_row+1;j++) { H_rows[(i-1)+mldpc*(j-1)]=H_rows_tmp[(i-1)+mldpc*(j-1)]; } } free(temp_count); free(u); free(col_index); free(row_index); free(H_rows_tmp); free(H_cols_tmp); return; } void mexFunction(int nlhs,mxArray *plhs[],int nrhs, const mxArray *prhs[]) { double *H_rows,*H_cols,*param,rate,d, *P; int index,nldpc,kldpc,mldpc,Q,R,*u,i,size; /* Error checks */ if (nrhs !=2) { mexErrMsgTxt("2 inputs needed\n"); } else if ((nlhs >3) || (nlhs <2)) { mexErrMsgTxt(" 2 or 3 outputs needed\n "); } /* Assign the variables to corresp. mlab pointers */ rate= mxGetScalar(prhs[0]); size= mxGetScalar(prhs[1]); nldpc=size; if (nlhs ==3) { plhs[2]= mxCreateDoubleMatrix(0,0,mxREAL); P=mxGetPr(plhs[2]); } if (size==16200) { if (fabs(rate - 1.0/4.0) < epsilon ){ kldpc = (int) nldpc*(1.0/5.0); index = 11; } else if (fabs(rate - 1.0/3.0) < epsilon ){ kldpc = (int) nldpc*(1.0/3.0); index = 12; } else if (fabs(rate - 2.0/5.0) < epsilon ){ kldpc = (int) nldpc*(2.0/5.0); index = 13; } else if (fabs(rate - 1.0/2.0) < epsilon ){ kldpc = (int) nldpc*(4.0/9.0); index = 14; } else if (fabs(rate - 3.0/5.0) < epsilon ){ kldpc = (int) nldpc*(3.0/5.0); index = 15; } else if (fabs(rate - 2.0/3.0) < epsilon ){ kldpc = (int) nldpc*(2.0/3.0); index = 16; } else if (fabs(rate - 3.0/4.0) < epsilon ){ kldpc = (int) nldpc*(11.0/15.0); index = 17; } else if (fabs(rate - 4.0/5.0) < epsilon ){ kldpc = (int) nldpc*(7.0/9.0); index = 18; } else if (fabs(rate - 5.0/6.0) < epsilon ){ kldpc = (int) nldpc*(37.0/45.0); index = 19; } else if (fabs(rate - 8.0/9.0) < epsilon ){ kldpc = (int) nldpc*(8.0/9.0); index = 20; } else { mexErrMsgTxt( "This rate is not supported" ); } } else if (size==64800) { if (fabs(rate - 1.0/4.0) < epsilon ){ index = 0; } else if (fabs(rate - 1.0/3.0) < epsilon ){ index = 1; } else if (fabs(rate - 2.0/5.0) < epsilon ){ index = 2; } else if (fabs(rate - 1.0/2.0) < epsilon ){ index = 3; } else if (fabs(rate - 3.0/5.0) < epsilon ){ index = 4; } else if (fabs(rate - 2.0/3.0) < epsilon ){ index = 5; } else if (fabs(rate - 3.0/4.0) < epsilon ){ index = 6; } else if (fabs(rate - 4.0/5.0) < epsilon ){ index = 7; } else if (fabs(rate - 5.0/6.0) < epsilon ){ index = 8; } else if (fabs(rate - 8.0/9.0) < epsilon ){ index = 9; } else if (fabs(rate - 9.0/10.0) < epsilon ){ index = 10; } else { mexErrMsgTxt( "This rate is not supported" ); } kldpc = (int) nldpc*rate; } else { mexErrMsgTxt( "Only lengths 16200 and 64800 are supported" ); } mldpc=nldpc-kldpc; u=(int*)calloc((kldpc+5),sizeof(int)); initalize(u,plhs,nldpc,kldpc,mldpc,Q,index); } codec2-0.0~git20230330.db1c21c/source/Interleave.cpp000066400000000000000000000045761441116725500214710ustar00rootroot00000000000000/* file: Interleave.c Description: Interleave one block of data according to interleaving pattern alpha_code The calling syntax is: [output] = Interleave(input, alpha_code ) output = interleaved data input = uninterleaved data (float or int) alpha_code = interleaver pattern Copyright (C) 2005-2006, Matthew C. Valenti Last updated on Jan. 11, 2006 Function Interleave is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* Input Arguments */ #define INPUT prhs[0] #define ALPHA prhs[1] /* Output Arguments */ #define OUTPUT plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *alpha; double *output_p; int InterleaverLength, i, index; /* Check for proper number of arguments */ if ((nrhs < 2 )||(nlhs > 1)) { mexErrMsgTxt("Usage: [output] = Interleave(input, alpha_code )"); } else { /* first input is the data word */ input = mxGetPr(INPUT); InterleaverLength = mxGetN(INPUT); /* number of data bits */ /* second input is the interleaver */ if ( mxGetN(ALPHA) != InterleaverLength ) mexErrMsgTxt("Interleave: Error input and alpha_code must be same length"); alpha = mxGetPr(ALPHA); OUTPUT = mxCreateDoubleMatrix(1, InterleaverLength, mxREAL ); output_p = mxGetPr(OUTPUT); /* Interleave */ for(i=0;i # include # include # include void encode(double u[],double H_rows[],double *c_in,int nldpc,int kldpc,int mldpc, int wid_Hrows, double P[], int shift) { int count,i,j, k,sum,temp, cnt; int *x,*sum2, *sum_tmp, *tmp; x =(int*)calloc((mldpc+1),sizeof(int)); sum2 =(int*)calloc(shift,sizeof(int)); sum_tmp =(int*)calloc(shift,sizeof(int)); tmp =(int*)calloc(shift,sizeof(int)); for (i=0;ij*shift )&&((int)H_rows[i+mldpc*(k-1)]<=(j+1)*shift)){ count=(int)H_rows[i+mldpc*(k-1)]; tmp[cnt]=((int)c_in[count-1])^((int)tmp[cnt]) ; } } } sum_tmp[cnt]=sum_tmp[cnt]^tmp[cnt]; tmp[cnt]=0; if (((i+1) % shift) ==0){ cnt=0; } else{ cnt++; } } } for (k=0;k3)){ mexErrMsgTxt(" Usage: codeword = LdpcEncode( data, H_rows, [P]) \n"); } else if (nlhs >1){ mexErrMsgTxt(" only 1 output "); } /* default values */ shift=0; P= (double*)calloc(shift,sizeof(int)); /* Assign the variables to corresp. mlab pointers */ u=mxGetPr(prhs[0]); H_rows=mxGetPr(prhs[1]); if (nrhs >2) { P=mxGetPr(prhs[2]); shift=mxGetM(prhs[2]); } kldpc=mxGetN(prhs[0]); mldpc= mxGetM(prhs[1]); wid_Hrows=mxGetN(prhs[1]); nldpc=kldpc+mldpc; /* create output m array */ plhs[0]= mxCreateDoubleMatrix(1,nldpc,mxREAL); /* create output m array */ c_in=mxGetPr(plhs[0]); encode(u,H_rows,c_in,nldpc,kldpc,mldpc, wid_Hrows,P,shift); } codec2-0.0~git20230330.db1c21c/source/Matrix.h000066400000000000000000000000211441116725500202610ustar00rootroot00000000000000#include codec2-0.0~git20230330.db1c21c/source/Modulate.cpp000066400000000000000000000076771441116725500211520ustar00rootroot00000000000000/* File: Modulate.c Description: Complex K-dimensional M-ary modulator The calling syntax is: [output] = Modulate( input, S_matrix ) Where: output = K by N vector of modulated symbols input = 1 by N*log2(M) vector of data bits S_Matrix = K by M complex matrix containing the constellation signals Each Column is one signal, each signal is K-dimensional Note: For legacy purposes, S_matrix can be a M by 1 matrix when signal set can be characterized by a one-dimensional complex value (QAM, etc). Copyright (C) 2005-2006, Matthew C. Valenti Last updated on May 6, 2006 Function Modulate is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* Input Arguments prhs[0] is input prhs[1] is S_matrix */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { int M, K; int number_symbols, number_bits, bits_per_symbol; double *input, *Sr, *Si, *output_r, *output_i; int i,j,temp_int,index; int *data_int; /* make sure there are enough inputs */ if (nrhs<2) mexErrMsgTxt("Usage: [output] = Modulate( input, S_matrix )"); /* read in input bits */ number_bits = mxGetN(prhs[0]); input = mxGetPr(prhs[0]); /* read in the constellation matrix */ /* for legacy purposes, see if it is a single column */ if ( mxGetN( prhs[1] ) == 1 ) { M = mxGetM( prhs[1] ); K = 1; } else { M = mxGetN( prhs[1] ); K = mxGetM( prhs[1] ); } /* get the real part */ Sr = mxGetPr(prhs[1]); /* if not complex, set imagainary part to zero */ if (!mxIsComplex(prhs[1]) ) Si = (double*)calloc( M*K, sizeof(double) ); else Si = mxGetPi(prhs[1]); /* determine the number of bits per symbol for future development: check to make sure M is a power of 2 */ bits_per_symbol = 0; temp_int = M; while (temp_int>1) { temp_int = temp_int/2; bits_per_symbol++; } /* determine the number of output symbols */ number_symbols = number_bits/bits_per_symbol + (number_bits%bits_per_symbol>0); /* read in the input data and cast to int */ data_int = (int*)calloc( number_symbols*bits_per_symbol, sizeof(int) ); for (i=0;i #include #include #include #include /* Input Arguments */ #define INPUT prhs[0] #define HROWS prhs[1] #define HCOLS prhs[2] #define MAXITER prhs[3] #define DECTYPE prhs[4] #define RSCALEFACTOR prhs[5] #define QSCALEFACTOR prhs[6] #define DATA prhs[7] /* Output Arguments */ #define OUTPUT plhs[0] #define ERRORS plhs[1] struct v_node { int degree; float initial_value; int *index; /* the index of a c_node it is connected to */ int *socket; /* socket number at the c_node */ float *message; int *sign; }; struct c_node { int degree; int *index; float *message; int *socket; /* socket number at the v_node */ }; /* Phi function */ static float phi0( float x ) { float z; if (x>10) return( 0 ); else if (x< 9.08e-5 ) return( 10 ); else if (x > 9) return( 1.6881e-4 ); /* return( 1.4970e-004 ); */ else if (x > 8) return( 4.5887e-4 ); /* return( 4.0694e-004 ); */ else if (x > 7) return( 1.2473e-3 ); /* return( 1.1062e-003 ); */ else if (x > 6) return( 3.3906e-3 ); /* return( 3.0069e-003 ); */ else if (x > 5) return( 9.2168e-3 ); /* return( 8.1736e-003 ); */ else { z = (float) exp(x); return( (float) log( (z+1)/(z-1) ) ); } } static float correction( float xinput ) { if (xinput > 2.625 ) return( 0 ); else if (xinput < 1 ) return( -0.375*xinput + 0.6825 ); else return( -0.1875*xinput + 0.5 ); } static float LambdaAPPstar( float mag1, float mag2 ) { if (mag1 > mag2) return( fabs( mag2 + correction( mag1 + mag2 ) - correction( mag1 - mag2 ) ) ); else return( fabs( mag1 + correction( mag1 + mag2 ) - correction( mag2 - mag1 ) ) ); } /* function for doing the MP decoding */ static void ApproximateMinStar( int BitErrors[], int DecodedBits[], struct c_node c_nodes[], struct v_node v_nodes[], int CodeLength, int NumberParityBits, int max_iter ) { int i,j, iter; int sign; float temp_sum; float Qi; float delta, minval, deltaAPP; int mink; for (iter=0;iter 0) v_nodes[i].sign[j] = 0; else v_nodes[i].sign[j] = 1; } } /* detect errors */ if (BitErrors[iter] == 0) break; } } /* function for doing the MP decoding */ static void MinSum( int BitErrors[], int DecodedBits[], struct c_node c_nodes[], struct v_node v_nodes[], int CodeLength, int NumberParityBits, int max_iter, float r_scale_factor, float q_scale_factor, int data[] ) { int i,j, iter, i_prime, j_prime; float min_beta; int sign; float temp_sum; float Qi; for (iter=0;iter 0) v_nodes[i].sign[j] = 0; else v_nodes[i].sign[j] = 1; } } /* count data bit errors, assuming that it is systematic */ for (i=0;i 0) v_nodes[i].sign[j] = 0; else v_nodes[i].sign[j] = 1; } } /* count data bit errors, assuming that it is systematic */ for (i=0;i 2) ) { mexErrMsgTxt("Usage: [output, errors] = MpDecode(input, H_rows, H_cols, max_iter, dec_type, r_scale_factor, q_scale_factor, data )"); } else { /* first input is the received data in LLR form */ input = mxGetPr(INPUT); /* second input is H_rows matrix */ H_rows = mxGetPr( HROWS ); /* third input is H_cols matrix */ H_cols = mxGetPr( HCOLS ); /* derive some parameters */ CodeLength = mxGetN(INPUT); /* number of coded bits */ NumberParityBits = mxGetM( HROWS ); NumberRowsHcols=mxGetM( HCOLS ); shift=(NumberParityBits+ NumberRowsHcols)-CodeLength; if (NumberRowsHcols ==CodeLength){ H1=0; shift=0; } else { H1=1; } if (( CodeLength != NumberRowsHcols ) && (CodeLength-NumberParityBits + shift!= NumberRowsHcols)) mexErrMsgTxt("Error: Number of rows in H_cols must equal number of received bits or number of data bits"); max_row_weight = mxGetN( HROWS ); max_col_weight = mxGetN( HCOLS ); } /* initialize c-node structures */ c_nodes = (struct c_node*)calloc( NumberParityBits, sizeof( struct c_node ) ); /* first determine the degree of each c-node */ if (shift ==0){ for (i=0;i 0 ) { count++; } } c_nodes[i].degree = count; if (H1){ if (i==0){ c_nodes[i].degree=count+1; } else{ c_nodes[i].degree=count+2; } } } } else{ cnt=0; for (i=0;i<(NumberParityBits/shift);i++) { for (k=0;k 0 ) { count++; } } c_nodes[cnt].degree = count; if ((i==0)||(i==(NumberParityBits/shift)-1)){ c_nodes[cnt].degree=count+1; } else{ c_nodes[cnt].degree=count+2; } cnt++; } } } if (H1){ if (shift ==0){ for (i=0;i0){ cnt=0; for (i=0;i<(NumberParityBits/shift);i++){ for (k =0;k 0 ) { count++; } } v_nodes[i].degree = count; } for(i=CodeLength-NumberParityBits+shift;i 0 ) { count++; } } v_nodes[i].degree = count; } } if (shift>0){ v_nodes[CodeLength-1].degree =v_nodes[CodeLength-1].degree+1; } for (i=0;i=CodeLength-NumberParityBits+shift)){ v_nodes[i].index[j]=i-(CodeLength-NumberParityBits+shift)+count; if (shift ==0){ count=count+1; } else{ count=count+shift; } } else { v_nodes[i].index[j] = (int) (H_cols[i+j*NumberRowsHcols] - 1); } /* search the connected c-node for the proper message value */ for (c_index=0;c_index 3 ) { /* fourth input (optional) is maximum number of iterations */ max_iter = (int) *mxGetPr(MAXITER); } if (nrhs > 4 ) { /* fifth input (optional) is the decoder type */ dec_type = (int) *mxGetPr(DECTYPE); } if (nrhs > 5 ) { /* next input is the factor for extrinsic info scaling */ r_scale_factor = (float) *mxGetPr(RSCALEFACTOR); } if (nrhs > 6 ) { /* next input is the factor for extrinsic info scaling */ q_scale_factor = (float) *mxGetPr(QSCALEFACTOR); } DataLength = CodeLength - NumberParityBits; data_int = (int*)calloc( DataLength, sizeof(int) ); if (nrhs > 7 ) { /* next input is the data */ data = mxGetPr(DATA); if ( DataLength != mxGetN(DATA) ) /* number of data bits */ mexErrMsgTxt("Error: Incorrect number of data bits"); /* cast the input into a vector of integers */ for (i=0;i 1 ) { /* second output is a count of the number of errors */ ERRORS = mxCreateDoubleMatrix(max_iter, 1, mxREAL); errors_p = mxGetPr(ERRORS); /* cast to output */ for (i=0;i #include #include #include /* Input Arguments prhs[0] is input prhs[1] is pun_pattern prhs[2] is tail_pattern */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *pun_pattern, *tail_pattern; /* inputs */ double *output_p; /* output */ int height; /* height of input matrices */ int length; /* number of data+tail bits */ int tail_period; /* period of the tail pattern */ int number_data_bits; /* number of data bits */ int pun_period; /* period of puncturing pattern */ int number_pun_bits; /* length after puncturing */ int number_pun_periods; /* number of puncture periods */ int partial_period; /* length of last period (if partial) */ int bits_per_period; /* number punctured bits per period */ int temp_count; int i, j, count_total, count_period; /* counting variables */ /* Check for proper number of arguments */ if ((nrhs < 3 )||(nlhs > 1)) { mexErrMsgTxt("Usage: [output] = Puncture(input, pun_pattern, tail_pattern )"); } else { /* first input is the data word */ input = mxGetPr(prhs[0]); length = mxGetN(prhs[0]); height = mxGetM(prhs[0]); /* second input is the punctuing pattern for coded data bits */ pun_pattern = mxGetPr(prhs[1]); pun_period = mxGetN(prhs[1]); if ( mxGetM(prhs[1])!=height ) mexErrMsgTxt("Number rows in pun_pattern must match the number in input"); /* third input is the puncturing pattern for coded tail bits */ tail_pattern = mxGetPr(prhs[2]); tail_period = mxGetN(prhs[2]); if ( ( mxGetM(prhs[2])!=height )&&( tail_period > 0 ) ) mexErrMsgTxt("Number rows in tail_pattern must match the number in input"); number_data_bits = length - tail_period; /* determine length of punctured output */ bits_per_period = 0; for (i=0;i 0 ) { output_p[count_total] = input[i]; temp_count--; count_total++; } count_period++; if (count_period == pun_period*height) count_period = 0; } /* puncture the coded tail bits New 11/21/05: if height = 4, then the tail bits are rearranged to conform to UMTS convention */ if ( height == 4 ) { /* upper RSC's tail bits */ for (i=0;i 0 ) { output_p[count_total] = input[number_data_bits*height+i*4+j]; temp_count--; count_total++; } } } /* lower RSC's tail bits */ for (i=0;i 0 ) { output_p[count_total] = input[number_data_bits*height+i*4+j+2]; temp_count--; count_total++; } } } } else { for (i=0;i 0 ) { output_p[count_total] = input[number_data_bits*height+i]; temp_count--; count_total++; } } } if (count_total != number_pun_bits ) { printf( "Calculated punctured bits = %d but actual = %d", number_pun_bits, count_total ); mexErrMsgTxt( "Error!" ); } } return; } codec2-0.0~git20230330.db1c21c/source/RateDematch.cpp000066400000000000000000000054361441116725500215500ustar00rootroot00000000000000/* RateDematch reverses the basic HSDPA Rate Matching algorithm The calling syntax is: y = RateDematch( x, X_i, e_ini, e_plus, e_minus ); y = depunctured output (length X_i) x = input consisting of received/punctured bits X_i = length of the depunctured output e_ini = parameter used by algorithm e_plus = parameter used by algorithm e_minus = parameter used by algorithm Copyright (C) 2005, Matthew C. Valenti Last updated on Dec. 3, 2005 Function RateDematch is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *output_p; int X_i, e_ini, e_plus, e_minus; int m, e, index, input_length; /* Check for proper number of arguments */ if ((nrhs < 5 )||(nlhs > 1)) { mexErrMsgTxt("Usage: y = RateDematch( x, X_i, e_ini, e_plus, e_minus )"); } /* first input vector that needs to have rate matching reversed */ input = mxGetPr( prhs[0] ); input_length = mxGetN( prhs[0] ); /* length of input */ /* remaining inputs (all ints) */ X_i = (int) *mxGetPr( prhs[1] ); e_ini = (int) *mxGetPr( prhs[2] ); e_plus = (int) *mxGetPr( prhs[3] ); e_minus = (int) *mxGetPr( prhs[4] ); /* verify that input length is correct development note: eventually this could be replaced by a formula */ e = e_ini; index = 1; for (m=1;m<=X_i;m++) { e -= e_minus; if (e<=0) e += e_plus; else index++; } index--; if ( index != input_length ) mexErrMsgTxt("Input length is invalid"); /* Create output */ plhs[0] = mxCreateDoubleMatrix( 1, X_i, mxREAL ); output_p = mxGetPr( plhs[0] ); /* Dematch */ e = e_ini; index = 1; for (m=1;m<=X_i;m++) { e -= e_minus; if (e<=0) { /* zero pad */ e += e_plus; } else { output_p[m-1] = input[index-1]; index++; } } return; } codec2-0.0~git20230330.db1c21c/source/RateMatch.cpp000066400000000000000000000055431441116725500212360ustar00rootroot00000000000000/* RateMatch performs the basic HSDPA Rate Matching algorithm The calling syntax is: y = RateMatch( x, X_i, e_ini, e_plus, e_minus ) y = output of rate matching algorithm x = input to rate matching algorithm (length X_i) X_i = length of the depunctured output e_ini = parameter used by algorithm e_plus = parameter used by algorithm e_minus = parameter used by algorithm Copyright (C) 2005, Matthew C. Valenti Last updated on Dec. 3, 2005 Function RateMatch is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input, *output_p; int X_i, e_ini, e_plus, e_minus; int m, e, index, input_length, output_length; /* Check for proper number of arguments */ if ((nrhs < 5 )||(nlhs > 1)) { mexErrMsgTxt("Usage: y = RateMatch( x, X_i, e_ini, e_plus, e_minus )"); } /* first input vector that needs to be rate matched */ input = mxGetPr( prhs[0] ); input_length = mxGetN( prhs[0] ); /* length of input */ /* remaining inputs (all ints) */ X_i = (int) *mxGetPr( prhs[1] ); e_ini = (int) *mxGetPr( prhs[2] ); e_plus = (int) *mxGetPr( prhs[3] ); e_minus = (int) *mxGetPr( prhs[4] ); /* verify that input length is correct */ if ( X_i != input_length ) mexErrMsgTxt("Input length is not consistent with X_i"); /* determine output length development note: eventually this could be replaced by a formula */ e = e_ini; index = 1; for (m=1;m<=X_i;m++) { e -= e_minus; if (e<=0) e += e_plus; else index++; } output_length = index-1; /* Create output */ plhs[0] = mxCreateDoubleMatrix( 1, output_length, mxREAL ); output_p = mxGetPr( plhs[0] ); /* Match */ e = e_ini; index = 1; for (m=1;m<=X_i;m++) { e -= e_minus; if (e<=0) { /* zero pad */ e += e_plus; } else { output_p[index-1] = input[m-1]; index++; } } return; } codec2-0.0~git20230330.db1c21c/source/SisoDecode.cpp000066400000000000000000000140521441116725500214020ustar00rootroot00000000000000/* file: SisoDecode.c Description: Soft-in/soft-out decoding algorithm for a convolutional code The calling syntax is: [output_u, output_c] = SisoDecode(input_u, input_c, g_encoder, [code_type], [dec_type] ) output_u = LLR of the data bits output_c = LLR of the code bits Required inputs: input_u = APP of the data bits input_c = APP of the code bits g_encoder = generator matrix for convolutional code (If RSC, then feedback polynomial is first) Optional inputs: code_type = 0 for RSC outer code (default) = 1 for NSC outer code dec_type = the decoder type: = 0 For linear approximation to log-MAP (DEFAULT) = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ) = 2 For Constant-log-MAP algorithm = 3 For log-MAP, correction factor from small nonuniform table and interpolation = 4 For log-MAP, correction factor uses C function calls (slow) Copyright (C) 2005-2006, Matthew C. Valenti Last updated on Jan. 11, 2006 Function SisoDecode is part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include /* library of functions */ #include "./include/maxstar.h" #include "./include/convolutional.h" #include "./include/siso.h" /* Input Arguments */ #define INPUT_U prhs[0] #define INPUT_C prhs[1] #define GENENCODER prhs[2] #define CODETYPE prhs[3] #define DECTYPE prhs[4] /* Output Arguments */ #define OUTPUT_U plhs[0] #define OUTPUT_C plhs[1] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input_u, *input_c, *g_array; /* input arrays */ double *output_u_p, *output_c_p; /* output arrays */ int DataLength, CodeLength, i, j, index; mwIndex subs[] = {1,1}; int *g_encoder; int nn, KK, mm, max_states, code_type, dec_type; double elm; float *input_u_float, *input_c_float; float *output_u_float, *output_c_float; int *out0, *out1, *state0, *state1; /* default values */ code_type = 0; dec_type = 0; /* Check for proper number of arguments */ if (nrhs < 3 ) { mexErrMsgTxt("Usage: [output_u, output_c] = SisoDecode(input_u, input_c, g_encoder, code_type, decoder_type )"); } else { /* first two inputs are the LLRs of the data and code bits */ input_u = mxGetPr(INPUT_U); input_c = mxGetPr(INPUT_C); /* third input specifies the code */ g_array = mxGetPr(GENENCODER); nn = mxGetM(GENENCODER); KK = mxGetN(GENENCODER); mm = KK - 1; max_states = 1 << mm; /* 2^mm */ DataLength = mxGetN(INPUT_U); /* number of data bits */ CodeLength = mxGetN(INPUT_C); /* number of code bits */ /* make sure these agree */ if ( CodeLength != nn*(DataLength+mm) ) mexErrMsgTxt( "SisoDecode: Length of input_u and input_c don't agree" ); /* convert the inputs into float */ input_u_float = (float*)calloc( DataLength, sizeof(float) ); for (i=0;i 3 ) { /* 4th input (optional) is the type of code */ code_type = (int) *mxGetPr(CODETYPE); } if (nrhs > 4 ) { /* 5th input (optional) is the decoder type */ dec_type = (int) *mxGetPr(DECTYPE); } if (nlhs > 2) { mexErrMsgTxt("Usage: [output_u, output_c] = SisoDecode(input_u, input_c, g_encoder, code_type, decoder_type )" ); } /* the outputs */ OUTPUT_U = mxCreateDoubleMatrix(1, DataLength, mxREAL ); output_u_p = mxGetPr(OUTPUT_U); output_u_float = (float*)calloc( DataLength, sizeof(float) ); OUTPUT_C = mxCreateDoubleMatrix(1, CodeLength, mxREAL ); output_c_p = mxGetPr(OUTPUT_C); output_c_float = (float*)calloc( CodeLength, sizeof(float) ); /* create appropriate transition matrices */ out0 = (int*)calloc( max_states, sizeof(int) ); out1 = (int*)calloc( max_states, sizeof(int) ); state0 = (int*)calloc( max_states, sizeof(int) ); state1 = (int*)calloc( max_states, sizeof(int) ); if ( code_type ) { nsc_transit( out0, state0, 0, g_encoder, KK, nn ); nsc_transit( out1, state1, 1, g_encoder, KK, nn ); } else { rsc_transit( out0, state0, 0, g_encoder, KK, nn ); rsc_transit( out1, state1, 1, g_encoder, KK, nn ); } /* Run the SISO algorithm */ siso( output_u_float, output_c_float, out0, state0, out1, state1, input_u_float, input_c_float, KK, nn, DataLength, dec_type ); /* cast to outputs */ for (j=0;j #include #include #include #include "./include/maxstar.h" /* Input Arguments prhs[0] is input prhs[1] is demod_type prhs[2] is ex_info */ /* Output Arguments plhs[0] is output */ /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input; double *llr_in; double *output_p; int demod_type = 0; int M, m, DataLength; int i, j, k, n, mask; int NumberSymbols; float metric; float *den, *num; int temp_int; float *llr; int Number_LLR_bits; /* put the different max_star functions into array so easy to call */ float (*max_star[])(float, float) = { max_star0, max_star1, max_star2, max_star3, max_star4 }; /* Check for proper number of arguments */ if (nrhs == 0) { mexErrMsgTxt("Usage: [output] = Somap( input, [demod_type], [extrinsic_info] )"); } if (nrhs > 0 ) { /* first (and only required) input is M-ary symbols for conversion */ input = mxGetPr(prhs[0]); } if (nrhs > 1) { /* second (optional) input is the demodulator type */ demod_type = (int) *mxGetPr(prhs[1]); if ( (demod_type < 0)||(demod_type > 4) ) mexErrMsgTxt("demod_type must be be 0 through 4"); } /* initialize the input data */ NumberSymbols = mxGetN(prhs[0]); M = mxGetM(prhs[0]); /* determine number of bits per symbol */ m = 0; temp_int = M; while (temp_int>1) { temp_int = temp_int/2; m++; } /* printf( "%d bits per symbol\n", m ); */ if (temp_int < 1) mexErrMsgTxt("Number of symbols M must be a power of 2"); DataLength = m*NumberSymbols; /* total number of bits */ /* allocate memory */ den = (float*)calloc( m, sizeof(float) ); num = (float*)calloc( m, sizeof(float) ); llr = (float*)calloc( DataLength, sizeof(float) ); /* llr input defaults to all-zeros */ if (nrhs > 2) { /* third (optional) input is the llr if not long enough, assume that end is all-zeros */ Number_LLR_bits = mxGetN(prhs[2]); if ( Number_LLR_bits > DataLength ) mexErrMsgTxt("Too many a prior LLR inputs"); llr_in = mxGetPr(prhs[2]); for (k=0;k> 1; } mask = 1 << (m - 1); for (k=0;k> 1; } } for (k=0;k #include #include #include /* library of functions */ #include "./include/convolutional.h" /* Input Arguments */ #define INPUT_C prhs[0] #define GENENCODER prhs[1] #define CODETYPE prhs[2] #define DEPTH prhs[3] /* Output Arguments */ #define OUTPUT_U plhs[0] /* main function that interfaces with MATLAB */ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *input_c, *g_array; /* input arrays */ double *output_u_p; /* output arrays */ int DataLength, CodeLength, i, j, index, depth; mwIndex subs[] = {1,1}; int *g_encoder; int nn, KK, mm, max_states, code_type; double elm; float *input_c_float; int *output_u_int; int *out0, *out1, *state0, *state1; /* Check for proper number of arguments */ if (nrhs < 2 ) { mexErrMsgTxt("Usage: [output_u] = ViterbiDecode( input_c, g_encoder, [code_type], [depth] )"); } else { /* first input is the LLRs of the code bits */ input_c = mxGetPr(INPUT_C); /* second input specifies the code */ g_array = mxGetPr(GENENCODER); nn = mxGetM(GENENCODER); KK = mxGetN(GENENCODER); mm = KK - 1; max_states = 1 << mm; /* 2^mm */ CodeLength = mxGetN(INPUT_C); /* number of code bits */ /* Make sure CodeLength is a multiple of nn */ if ( CodeLength % nn > 0) mexErrMsgTxt("Length of input_c must be a multiple of n, the number of rows in g"); /* default values */ code_type = 0; /* 3rd input (optional) is the type of code */ if (nrhs > 2 ) { code_type = (int) *mxGetPr(CODETYPE); } /* determine the DataLength */ if ( code_type < 2 ) { DataLength = (CodeLength/nn)-mm; } else { DataLength = CodeLength/nn; /* 4th input (optional) is the wrap depth */ if (nrhs > 3) { depth = (int) *mxGetPr(DEPTH); depth = depth*KK; } else { depth = 6*KK; } } /* convert the input into float */ input_c_float = (float*)calloc( CodeLength, sizeof(float) ); for (i=0;i 1) { mexErrMsgTxt("Usage: [output_u] = ViterbiDecode( input_c, g_encoder, [code_type], [depth] )" ); } /* the outputs */ OUTPUT_U = mxCreateDoubleMatrix(1, DataLength, mxREAL ); output_u_p = mxGetPr(OUTPUT_U); output_u_int = (int*)calloc( DataLength, sizeof(int) ); /* create appropriate transition matrices */ out0 = (int*)calloc( max_states, sizeof(int) ); out1 = (int*)calloc( max_states, sizeof(int) ); state0 = (int*)calloc( max_states, sizeof(int) ); state1 = (int*)calloc( max_states, sizeof(int) ); if ( code_type ) { nsc_transit( out0, state0, 0, g_encoder, KK, nn ); nsc_transit( out1, state1, 1, g_encoder, KK, nn ); } else { rsc_transit( out0, state0, 0, g_encoder, KK, nn ); rsc_transit( out1, state1, 1, g_encoder, KK, nn ); } /* Run the Viterbi algorithm */ if ( code_type < 2 ) { Viterbi( output_u_int, out0, state0, out1, state1, input_c_float, KK, nn, DataLength ); } else { ViterbiTb( output_u_int, out0, state0, out1, state1, input_c_float, KK, nn, DataLength, depth ); } /* cast to outputs */ for (j=0;j>1; } return; } /* function parity_counter() Description: Determines if a symbol has odd (1) or even (0) parity Output parameters: (returned int): The symbol's parity = 1 for odd and 0 for even Input parameters: symbol: The integer-valued symbol length: The highest bit position in the symbol This function is used by nsc_enc_bit(), rsc_enc_bit(), and rsc_tail() */ int parity_counter( int symbol, int length ) { int counter; int temp_parity = 0; for (counter=0;counter>1; } return( temp_parity ); } /* Function nsc_enc_bit() Description: Convolutionally encodes a single bit using a rate 1/n encoder. Takes in one input bit at a time, and produces a n-bit output. Input parameters: input The input data bit (i.e. a 0 or 1). state_in The starting state of the encoder (an int from 0 to 2^m-1). g[] An n-element vector containing the code generators in binary form. KK The constraint length of the convolutional code. Output parameters: output_p[] An n-element vector containing the encoded bits. state_out_p[] An integer containing the final state of the encoder (i.e. the state after encoding this bit) This function is used by rsc_encode(), nsc_transit(), rsc_transit(), and nsc_transit() */ static int nsc_enc_bit( int state_out_p[], int input, int state_in, int g[], int KK, int nn ) { /* declare variables */ int state, i; int out = 0; /* create a word made up of state and new input */ state = (input<<(KK-1))^state_in; /* AND the word with the generators */ for (i=0;i>1; return(out); } /* like nsc_enc_bit() but for a RSC code */ static int rsc_enc_bit( int state_out_p[], int input, int state_in, int g[], int KK, int nn ) { /* declare variables */ int state, i, out, a_k; /* systematic output */ out = input; /* determine feedback bit */ a_k = input^parity_counter( g[0]&state_in, KK ); /* create a word made up of state and feedback bit */ state = (a_k<<(KK-1))^state_in; /* AND the word with the generators */ for (i=1;i>1; return(out); } /* function that creates the transit and output vectors */ static void nsc_transit( int output_p[], int trans_p[], int input, int g[], int KK, int nn ) { int nextstate[1]; int state, states; states = (1<<(KK-1)); /* The number of states: 2^mm */ /* Determine the output and next state for each possible starting state */ for(state=0;state= 0) { for (i=LL;i next_section[state0[state]] ) { next_section[state0[state]] = metric; prev_state[t*states+state0[state]] = state; prev_bit[t*states+state0[state]] = 0; } /* hypothesis: info bit is a one */ metric = prev_section[state] + metric_c[ out1[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state1[state]] ) { next_section[state1[state]] = metric; prev_state[t*states+state1[state]] = state; prev_bit[t*states+state1[state]] = 1; } } /* normalize */ max_val = 0; for (state=0;statemax_val){ max_val = next_section[state]; } } for (state=0;state=LL; t--) { state = prev_state[t*states+state]; } for (t=LL-1; t>=0; t--) { output_u_int[t] = prev_bit[t*states+state]; state = prev_state[t*states+state]; } /* free the dynamically allocated memory */ free(prev_section); free(next_section); free(prev_bit); free(prev_state); free(rec_array); free(metric_c); } /* Function ViterbiTb() Description: Uses the Viterbi algorithm to perform hard-decision decoding of a tail-biting convolutional code. Input parameters: out0[] The output bits for each state if input is a 0 (generated by rsc_transit). state0[] The next state if input is a 0 (generated by rsc_transit). out1[] The output bits for each state if input is a 1 (generated by rsc_transit). state1[] The next state if input is a 1 (generated by rsc_transit). r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2). KK The constraint length of the convolutional code. LL The number of data bits. depth head and tail decoding length [Ref. W. Sung, Electronics Letters, vol. 36, no. 7] Output parameters: output_u_int[] Hard decisions on the data bits */ static void ViterbiTb( int output_u_int[], int out0[], int state0[], int out1[], int state1[], float input_c[], int KK, int nn, int LL, int depth ) { int i, t, state, mm, states, max_state; int number_symbols, starting_bit; float metric; float *prev_section, *next_section; int *prev_bit; int *prev_state; float *metric_c; /* Set of all possible branch metrics */ float *rec_array; /* Received values for one trellis section */ float max_val; /* some derived constants */ mm = KK-1; states = 1 << mm; /* 2^mm */ number_symbols = 1 << nn; /* 2^nn */ /* dynamically allocate memory */ prev_section = (float*)calloc( states, sizeof(float) ); next_section = (float*)calloc( states, sizeof(float) ); prev_bit = (int*)calloc( states*(LL+depth), sizeof(int) ); prev_state = (int*)calloc( states*(LL+depth), sizeof(int) ); rec_array = (float*)calloc( nn, sizeof(float) ); metric_c = (float*)calloc( number_symbols, sizeof(float) ); /* initialize trellis */ for (state=0;state next_section[state0[state]] ) { next_section[state0[state]] = metric; if (t>=0) { prev_state[t*states+state0[state]] = state; prev_bit[t*states+state0[state]] = 0; } } /* hypothesis: info bit is a one */ metric = prev_section[state] + metric_c[ out1[ state ] ]; /* store new metric if more than metric in storage */ if ( metric > next_section[state1[state]] ) { next_section[state1[state]] = metric; if (t>=0) { prev_state[t*states+state1[state]] = state; prev_bit[t*states+state1[state]] = 1; } } } /* normalize */ max_val = 0; for (state=0;statemax_val){ max_val = next_section[state]; max_state = state; } } for (state=0;state=LL; t--) { state = prev_state[t*states+state]; } for (t=LL-1; t>=0; t--) { output_u_int[t] = prev_bit[t*states+state]; state = prev_state[t*states+state]; } /* free the dynamically allocated memory */ free(prev_section); free(next_section); free(prev_bit); free(prev_state); free(rec_array); free(metric_c); } codec2-0.0~git20230330.db1c21c/source/include/interleaver.h000066400000000000000000000200711441116725500227670ustar00rootroot00000000000000/* File interleaver.h Description: Functions used to create the UMTS/3GPP and CCSDS interleavers. Copyright (C) 2005-2006, Matthew C. Valenti Last updated on June 24, 2006 Functions gcd and CreateUmtsInterleaver are part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Function gcd() Copyright 2001, Matthew C. Valenti. Description: Finds the greatest common divisor of the two integer-valued inputs. Input parameters: m Input argument one (an integer). n Input argument two (also an integer). Output parameters: out[] The greatest common divisor of m and n. This function is used by UmtsTurboEncode() */ int gcd( int m, int n ) { /* The following is no longer needed 7/29/01 MCV int Rn; do { Rn = a % b; a = b; b = Rn; }while(Rn != 0); return a; */ /* Note: For the UMTS interleaver, the first of these two values is prime. Therefore we just have to check to see if the first number divides into the second one */ if ( n%m == 0 ) { /* printf( "%d",m ); */ return m; } else { /* printf( "x" ); */ return 1; } } /* Function CreateCcsdsInterleaver() Copyright 2006, Matthew C. Valenti. Description: Creates the CCSDS interleaver. Input parameters: input The input data frame of length LL bits. Ideally, this should be a vector containing the integers 0 to L-1 in ascending order. LL The number of data bits in the input frame. Output parameters: output[] The interleaved output. */ void CreateCcsdsInterleaver( int LL, int *output ) { int m, index, k1, k1by2, k2, i, j, t, q, c; int pTable[8] = { 31, 37, 43, 47, 53, 59, 61, 67 }; /* deteremine parameter values */ k1 = 8; k1by2 = 4; if ( ( LL == 1784 )||( LL == 3568 )||( LL == 7136 )||( LL == 8920 ) ) { k2 = (int) (LL/k1); } else { printf( "Error: CCSDS Interleaver size must be 7184, 3568, 7136, or 8920" ); return; } /* determine interleaving pattern */ for (index=0;index q[i-1] ) ) { q[i] = pTable[index]; break; } } } /* Step (6): Permute the q-sequence to make the r-sequence */ r = (int*)calloc( RR, sizeof( int ) ); if ( RR == 5 ) { for (i=0;i= 0 ) { output[index] = InterMatrix[i+j*RR]; index++; } } } free( Matrix ); free( InterMatrix ); free( IntraMatrix ); free( s ); free( q ); free( r ); } codec2-0.0~git20230330.db1c21c/source/include/maxstar.h000066400000000000000000000140251441116725500221300ustar00rootroot00000000000000/* File maxstar.h Description: Performs the max* operations (Jacobian logarithm) defined as: max*( x, y ) = max( x,y) + log( 1 + exp( - |x-y| ) ) There are several versions of this function, max_starX, where "X": X = 0 For linear approximation to log-MAP = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ) = 2 For Constant-log-MAP algorithm = 3 For log-MAP, correction factor from small nonuniform table and interpolation = 4 For log-MAP, correction factor uses C function calls Calling syntax: output = max_starX( delta1, delta2 ) Where: output = The result of max*(x,y) delta1 = T] he first argument (i.e. x) of max*(x,y) delta2 = The second argument (i.e. y) of max*(x,y) Copyright (C) 2005, Matthew C. Valenti Functions max_star0, max_star1, max_star2, max_star3, and max_star4 are part of the Iterative Solutions Coded Modulation Library The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* values for the jacobian logarithm table (DecoderType=4) */ #define BOUNDARY0 0 #define BOUNDARY1 0.4200 #define BOUNDARY2 0.8500 #define BOUNDARY3 1.3100 #define BOUNDARY4 1.8300 #define BOUNDARY5 2.4100 #define BOUNDARY6 3.1300 #define BOUNDARY7 4.0800 #define BOUNDARY8 5.6000 #define SLOPE0 -0.44788139700522 #define SLOPE1 -0.34691145436176 #define SLOPE2 -0.25432579542705 #define SLOPE3 -0.17326680196715 #define SLOPE4 -0.10822110027877 #define SLOPE5 -0.06002650498009 #define SLOPE6 -0.02739265095522 #define SLOPE7 -0.00860202759280 #define VALUE0 0.68954718055995 #define VALUE1 0.50153699381775 #define VALUE2 0.35256506844219 #define VALUE3 0.23567520254575 #define VALUE4 0.14607646552283 #define VALUE5 0.08360822736113 #define VALUE6 0.04088914377547 #define VALUE7 0.01516612536801 /* values for the constant log-MAP algorithm (DecoderType=3) */ #define CVALUE 0.5 #define TVALUE 1.5 /* values for the linear approximation (DecoderType=1) */ #define TTHRESH 2.508 #define AVALUE -0.236 #define BVALUE 0.592 /* Values for linear approximation (DecoderType=5) */ #define AJIAN -0.24904163195436 #define TJIAN 2.50681740420944 /* The linear-log-MAP algorithm */ static float max_star0( float delta1, float delta2 ) { float diff; diff = delta2 - delta1; if ( diff > TJIAN ) return( delta2 ); else if ( diff < -TJIAN ) return( delta1 ); else if ( diff > 0 ) return( delta2 + AJIAN*(diff-TJIAN) ); else return( delta1 - AJIAN*(diff+TJIAN) ); } /* The max-log-MAP algorithm */ static float max_star1( float delta1, float delta2 ) { /* Return the maximum of delta1 and delta2 */ if (delta1 > delta2) return(delta1); else return(delta2); } /* The constant-log-MAP algorithm */ static float max_star2( float delta1, float delta2 ) { /* Return maximum of delta1 and delta2 and in correction value if |delta1-delta2| < TVALUE */ float diff; diff = delta2 - delta1; if ( diff > TVALUE ) return( delta2 ); else if ( diff < -TVALUE ) return( delta1 ); else if ( diff > 0 ) return( delta2 + CVALUE ); else return( delta1 + CVALUE ); } /* Accurate approximation of the log-MAP algorithm using an optimized 8 element nonuniform table with linear interpolation */ static float max_star3( float delta1, float delta2 ) { float diff; diff = (float) fabs( delta2 - delta1 ); if (delta1 > delta2) { if (diff > BOUNDARY8 ) return( delta1 ); else if ( diff > BOUNDARY4 ) { if (diff > BOUNDARY6 ) { if ( diff > BOUNDARY7 ) return( delta1 + VALUE7 + SLOPE7*(diff-BOUNDARY7) ); else return( delta1 + VALUE6 + SLOPE6*(diff-BOUNDARY6) ); } else { if ( diff > BOUNDARY5 ) return( delta1 + VALUE5 + SLOPE5*(diff-BOUNDARY5) ); else return( delta1 + VALUE4 + SLOPE4*(diff-BOUNDARY4) ); } } else { if (diff > BOUNDARY2 ) { if ( diff > BOUNDARY3 ) return( delta1 + VALUE3 + SLOPE3*(diff-BOUNDARY3) ); else return( delta1 + VALUE2 + SLOPE2*(diff-BOUNDARY2) ); } else { if ( diff > BOUNDARY1 ) return( delta1 + VALUE1 + SLOPE1*(diff-BOUNDARY1) ); else return( delta1 + VALUE0 + SLOPE0*(diff-BOUNDARY0) ); } } } else { if (diff > BOUNDARY8 ) return( delta2 ); else if ( diff > BOUNDARY4 ) { if (diff > BOUNDARY6 ) { if ( diff > BOUNDARY7 ) return( delta2 + VALUE7 + SLOPE7*(diff-BOUNDARY7) ); else return( delta2 + VALUE6 + SLOPE6*(diff-BOUNDARY6) ); } else { if ( diff > BOUNDARY5 ) return( delta2 + VALUE5 + SLOPE5*(diff-BOUNDARY5) ); else return( delta2 + VALUE4 + SLOPE4*(diff-BOUNDARY4) ); } } else { if (diff > BOUNDARY2 ) { if ( diff > BOUNDARY3 ) return( delta2 + VALUE3 + SLOPE3*(diff-BOUNDARY3) ); else return( delta2 + VALUE2 + SLOPE2*(diff-BOUNDARY2) ); } else { if ( diff > BOUNDARY1 ) return( delta2 + VALUE1 + SLOPE1*(diff-BOUNDARY1) ); else return( delta2 + VALUE0 + SLOPE0*(diff-BOUNDARY0) ); } } } } /* Exact calculation of the log-MAP algorithm */ static float max_star4( float delta1, float delta2 ) { /* Use C-function calls to compute the correction function */ if (delta1 > delta2) { return( (float) (delta1 + log( 1 + exp( delta2-delta1) ) ) ); } else { return( (float) (delta2 + log( 1 + exp( delta1-delta2) ) ) ); } } codec2-0.0~git20230330.db1c21c/source/include/siso.h000066400000000000000000000202011441116725500214170ustar00rootroot00000000000000/* File siso.h Description: General functions used to implement SISO decoding. Copyright (C) 2005-2006 Matthew C. Valenti Last updated on Mar. 14, 2006 Function siso are part of the Iterative Solutions Coded Modulation Library. The Iterative Solutions Coded Modulation Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* Note: Need to also include convolutional.h and maxstar.h */ /* Function siso() Description: Uses the (max)-log-MAP algorithm to perform soft-input, soft-output decoding of a convolutional code. Input parameters: out0[] The output bits for each state if input is a 0 (generated by rsc_transit). state0[] The next state if input is a 0 (generated by rsc_transit). out1[] The output bits for each state if input is a 1 (generated by rsc_transit). state1[] The next state if input is a 1 (generated by rsc_transit). r[] The received signal in LLR-form. Must be in form r = 2*a*y/(sigma^2). z_in[] The APP input. This is the extrinsic output from the other decoder. KK The constraint length of the convolutional code. LL The number of data bits. DecOpts Decoder termination option = 0 for unterminated and = 1 for terminated. DecoderType = 0 Linear approximation to log-MAP correction function. = 1 For max-log-MAP algorithm (i.e. max*(x,y) = max(x,y) ) = 2 For Constant-log-MAP algorithm = 3 For log-MAP, correction factor using piecewise linear approximation = 4 For log-MAP, correction factor uses C function calls Output parameters: llr[] The log-likelihood ratio of each data bit. z_out[] The extrinsic information of each data bit. This function is used by turbo_decode() */ static void siso( float output_u[], float output_c[], int out0[], int state0[], int out1[], int state1[], float input_u[], float input_c[], int KK, int nn, int LL, int DecoderType ) { int mm; /* Memory of the RSC encoder. */ int max_states; /* Number of states in the RSC encoder. */ int i, k, state;/* Counting variables. */ float num; /* Normalization values. */ float delta1, delta2; /* Arguments passed to max_star operation. */ float num_llr_u, den_llr_u; /* Temporary variable used to compute LLR. */ float *num_llr_c, *den_llr_c; /* Temp variable for LLR of code bits */ int symbol0, symbol1; /* Symbols associated with data 0 and data 1 */ int number_symbols; /* number of symbols */ float *metric_c; /* Set of all possible branch metrics */ float *beta; /* Reverse trellis metrics for the entire trellis. */ float *alpha; /* Forward trellis metric for the current stage only. */ float *alpha_prime; /* Forward trellis metrics for the last stage only. */ float *rec_array; /* Received values for one trellis section */ float sys_in, par_in, app_in; int mask; float (*max_star[])(float, float) = { max_star0, max_star1, max_star2, max_star3, max_star4 }; /* derived constants */ mm = KK-1; max_states = 1 << mm; /* 2^mm */ number_symbols = 1 << nn; /* 2^nn */ /* initialize internal arrays */ alpha = (float*)calloc( max_states, sizeof(float) ); alpha_prime = (float*)calloc( max_states, sizeof(float) ); beta = (float*)calloc( max_states*(LL+KK), sizeof(float) ); /* following has been changed on 3-14-06 */ /* metric_c = (int*)calloc( number_symbols, sizeof(int) ); */ metric_c = (float*)calloc( number_symbols, sizeof(float) ); rec_array = (float*)calloc( nn, sizeof(float) ); num_llr_c = (float*)calloc( nn, sizeof(float) ); den_llr_c = (float*)calloc( nn, sizeof(float) ); /* initialize alphas */ for (state=1;state=0;k--) { if (k>1; } /* data 1 branch (departing) */ delta1 = alpha_prime[state] + metric_c[ symbol1] + beta[k*max_states+state1[state]] + app_in; /* the information bit */ delta2 = num_llr_u; num_llr_u = ( *max_star[DecoderType] )( delta1, delta2 ); mask = 1<<(nn-1); /* go through all the code bits */ for (i=0;i>1; } /* normalize and shift */ alpha_prime[state] = alpha[state] - alpha[0]; } if (k-1 #include #include #include #include #define TRUE 1 #define FALSE 0 #define IM1 (2147483563) #define IM2 (2147483399) #define AM (1.0/IM1) #define IMM1 (IM1-1) #define IA1 (40014) #define IA2 (40692) #define IQ1 (53668) #define IQ2 (52774) #define IR1 (12211) #define IR2 (3791) #define NTAB (32) #define NDIV (1+IMM1/NTAB) #define EPS (1.2e-7) #define RNMX (1.0-EPS) /**************************/ static int first = 1; /* True = 1 */ /**************************/ double ran2(long *idum) /* Generate random number between 0 and 1 (not including 0 or 1) */ { int j; long k; static long idum2 = 123456789; static long iy = 0; static long iv[NTAB]; double temp; /****************************/ if(first) { idum2 = 123456789; iy = 0; for(j=0;j=0;j--) { k = (*idum)/IQ1; *idum = IA1*(*idum-k*IQ1) - k*IR1; if(*idum<0) *idum+=IM1; if(j RNMX) return(RNMX); else return (temp); } double genrand() /* THIS SUBROUTINE GENERATES A RANDOM NUMBER UNIFORMLY DISTRIBUTED BETWEEN 0 AND 1 */ { double noise; static long idum; /* INITIALIZE THE RANDOM NUMBER GENERATOR WITH THE LOCAL TIME */ if(first){ time_t t1; struct tm *tmptr; t1 = time((time_t *) 0); tmptr = localtime(&t1); idum = -(tmptr->tm_mon + tmptr->tm_mday + tmptr->tm_hour + tmptr->tm_min + tmptr->tm_sec); ran2(&idum); first = FALSE; } noise = ran2(&idum); return(noise); } void CreateSRandomInterleaver( int N, /* size of interleaver */ int S, /* S-random parameter */ int *alpha ) { int spacing, i, offset, index, block; int max_swaps, num_swaps; int index_1, index_2, value_1, value_2, test, start, stop; max_swaps= 10*N; num_swaps = 0; /* determine initial spacing */ spacing = floor( sqrt( N ) ); /* printf( "Spacing = %d\n", spacing ); */ /* create the initial interleaver */ offset = 0; block = 0; for (i=0;i= N) { offset = 0; block++; } alpha[i] = spacing*offset + block; offset++; } /* now start swapping positions */ while (num_swaps < max_swaps ) { /* pick two positions at random */ index_1 = (int)floor( N * genrand() ); index_2 = (int)floor( N * genrand() ); /* try again if they are the same */ if (index_1 != index_2){ test = 1; /* first test */ value_1 = alpha[index_2]; if (index_1 < S) start = 0; else start = index_1 - S; if (index_1 >= N - S) stop = N; else stop = index_1 + S; for ( i=start;i= N - S) stop = N; else stop = index_2 + S; for ( i=start;i