1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 %This script was tested with GNU Octave, version 3.8.2 or Matlab 9.2.0.538062 (R2017a)
12 % 5MHz 10MHz 15MHz 20 MHz 25 MHz 30 MHz 40 MHz 50MHz 60 MHz 70 MHz 80 MHz 90 MHz 100 MHz
15 % 5MHz 10MHz 15MHz 20 MHz 25 MHz 30 MHz 40 MHz 50MHz 60 MHz 70 MHz 80 MHz 90 MHz 100 MHz
16 [25, 52, 79, 106, 133, 160, 216, 270, 0, 0, 0, 0, 0] % Numerology 0 (15KHz)
17 [11, 24, 38, 51, 65, 78, 106, 133, 162, 0, 217, 245, 273] % Numerology 1 (30KHz)
18 [0, 11, 18, 24, 31, 38, 51, 65, 79, 0, 107, 121, 135] % Numerology 2 (60KHz)
23 % 50Mhz 100MHz 200MHz 400MHz
24 [66, 132, 264, 0] % Numerology 2 (60KHz)
25 [32, 66, 132, 264] % Numerology 3 (120KHz)
28 % total number of tests
32 true, true, true, true, false, true,
42 5, 10, 20, 100, 100, 100
52 false, false, false, false, false, true
57 32, 32, 32, 32, 32, 32
59 path_to_usecase_all = ...
61 "./usecase/mu0_5mhz/";
62 "./usecase/mu0_10mhz/";
63 "./usecase/mu0_20mhz/";
64 "./usecase/mu1_100mhz/";
65 "./usecase/mu3_100mhz/";
66 "./usecase/cat_b/mu1_100mhz/";
69 path_to_usecase_all = cellstr(path_to_usecase_all)
76 %select mu and bw to generate test files
77 for test_num =(1:1:tests_total)
79 sub6=sub6_all(test_num) %false
80 mu=mu_all(test_num) % 0,1, or 3
81 bw=bw_all(test_num) %5,10,20,100 MHz
82 ant_num = ant_num_all(test_num)
83 bfw_gen=bfw_gen_all(test_num)
84 trx = trx_all(test_num)
85 size(path_to_usecase_all)
86 path_to_usecase = path_to_usecase_all(test_num)
88 nSlots=nSlots_all(test_num) % any 40 and 160
96 numRBs = nNumRbsPerSymF1(nNumerology,0+1);
98 numRBs = nNumRbsPerSymF1(nNumerology,1+1);
100 numRBs = nNumRbsPerSymF1(nNumerology,2+1);
102 numRBs = nNumRbsPerSymF1(nNumerology,3+1);
104 numRBs = nNumRbsPerSymF1(nNumerology,4+1);
106 numRBs = nNumRbsPerSymF1(nNumerology,5+1);
108 numRBs = nNumRbsPerSymF1(nNumerology,6+1);
110 numRBs = nNumRbsPerSymF1(nNumerology,7+1);
112 numRBs = nNumRbsPerSymF1(nNumerology,8+1);
114 numRBs = nNumRbsPerSymF1(nNumerology,9+1);
116 numRBs = nNumRbsPerSymF1(nNumerology,10+1);
118 numRBs = nNumRbsPerSymF1(nNumerology,11+1);
120 numRBs = nNumRbsPerSymF1(nNumerology,12+1);
122 disp('Unknown BW && mu')
127 if (mu >=2) && (mu <= 3)
131 numRBs = nNumRbsPerSymF2(nNumerology-1,0+1);
133 numRBs = nNumRbsPerSymF2(nNumerology-1,1+1);
135 numRBs = nNumRbsPerSymF2(nNumerology-1,2+1);
137 numRBs = nNumRbsPerSymF2(nNumerology-1,3+1);
139 disp('Unknown BW && mu')
145 disp('Incorrect Numerology and BW combination.')
154 %ifft_in = load('ifft_in.txt')
157 ifft_in = [[1:1:(numRBs*12)]', [1:1:(numRBs*12)]'];
160 for (i=1:1:nSlots*14-1)
161 ifft_in_1 = ifft_in + i;
162 ant_c = [ant_c; ifft_in_1];
165 %write files for IQ samples
166 for ant = 1:1:ant_num
168 antX_16=int16(antX.');
169 file_name = strcat(path_to_usecase,"ant_", num2str(ant-1),".bin");
171 fileID = fopen(file_name,'w');
172 fwrite(fileID, antX_16, 'int16');
177 disp('Generate BF Weights per RB')
179 %seed to make it repeatable
182 %random channel matrix for single sym on syngle RB
183 H = (rand(trx,ant_num) + 1j*rand(trx,ant_num));
186 % W_dl = H^*(H^TH^*)^-1
187 % W_ul = ((H^H*H)^-1)H^H
188 % where H^* - conjugate
190 % H^H - conjugate transpose
191 W_dl = conj(H)*(transpose(H)*conj(H))^-1; %weights for DL
192 W_ul = ((ctranspose(H)*H)^-1)*ctranspose(H); %weights for UL
196 for ant = 1:1:ant_num
200 % adjust channel per each RB
201 for iPrb = 1:1:numRBs
202 bfw_per_sym = [ bfw_per_sym, [real((W_dl(:, ant).'))*iPrb; imag((W_dl(:, ant).'))*iPrb]];
206 %reuse channel for all symbols
207 for (slot_idx=1:1:nSlots*14)
208 bfw_all_slots = [bfw_all_slots, bfw_per_sym];
211 bfw_all_slots_int = int16(bfw_all_slots./max(max(abs((bfw_all_slots.')))).*2^15);
213 %write files for IQ samples
214 antX_16=bfw_all_slots_int.';
215 file_name = strcat(path_to_usecase,"dl_bfw_ue_", num2str(ant-1),".bin");
217 fileID = fopen(file_name,'w');
218 fwrite(fileID,antX_16, 'int16');
223 % adjust channel per each RB
224 for iPrb = 1:1:numRBs
225 bfw_per_sym = [ bfw_per_sym, [real((W_ul(:, ant).'))*iPrb; imag((W_ul(:, ant).'))*iPrb]];
229 %reuse channel for all symbols
230 for (slot_idx=1:1:nSlots*14)
231 bfw_all_slots = [bfw_all_slots, bfw_per_sym];
234 bfw_all_slots_int = int16(bfw_all_slots./max(max(abs((bfw_all_slots.')))).*2^15);
236 %write files for IQ samples
237 antX_16=bfw_all_slots_int.';
238 file_name = strcat(path_to_usecase,"ul_bfw_ue_", num2str(ant-1),".bin");
240 fileID = fopen(file_name,'w');
241 fwrite(fileID,antX_16, 'int16');