xref: /openwifi/user_space/arbitrary_iq_gen/single_carrier_gen.m (revision ce08dfae84cc2bca86fc32704c63435bc406745d)
1*ce08dfaeSXianjun Jiao% Author: Xianjun Jiao ([email protected]; [email protected])
2*ce08dfaeSXianjun Jiao% SPDX-FileCopyrightText: 2023 UGent
3*ce08dfaeSXianjun Jiao% SPDX-License-Identifier: AGPL-3.0-or-later
4ce26cc15SXianjun Jiao
5ce26cc15SXianjun Jiaofunction single_carrier_gen(carrier_freq, num_iq)
6ce26cc15SXianjun Jiaoif exist('carrier_freq', 'var')==0 || isempty(carrier_freq)
7ce26cc15SXianjun Jiao  carrier_freq = 1e6;
8ce26cc15SXianjun Jiaoend
9ce26cc15SXianjun Jiao
10ce26cc15SXianjun Jiaoif exist('num_iq', 'var')==0 || isempty(num_iq)
11ce26cc15SXianjun Jiao  num_iq = 512;
12ce26cc15SXianjun Jiaoend
13ce26cc15SXianjun Jiao
14ce26cc15SXianjun Jiaosampling_rate = 20e6;
15ce26cc15SXianjun Jiaosampling_time = 1/sampling_rate;
16ce26cc15SXianjun Jiaot = (0.3+(0:(num_iq-1))).*sampling_time;
17ce26cc15SXianjun Jiaos = exp(2.*pi.*carrier_freq.*t.*1i);
18ce26cc15SXianjun Jiao
19ce26cc15SXianjun Jiao%let's use 14 bits
20ce26cc15SXianjun Jiaoreal_part = round(real(s).*(2^14));
21ce26cc15SXianjun Jiaoimag_part = round(imag(s).*(2^14));
22ce26cc15SXianjun Jiao
23ce26cc15SXianjun Jiaofilename = ['iq_single_carrier_' num2str(carrier_freq) 'Hz_' num2str(num_iq) '.txt'];
24ce26cc15SXianjun Jiaofid = fopen(filename,'w');
25ce26cc15SXianjun Jiaoif fid == -1
26ce26cc15SXianjun Jiao    disp('fopen failed');
27ce26cc15SXianjun Jiao    return;
28ce26cc15SXianjun Jiaoend
29ce26cc15SXianjun Jiaolen = length(s);
30ce26cc15SXianjun Jiaofor j=1:len
31ce26cc15SXianjun Jiao    fprintf(fid, '%d,%d\n', real_part(j), imag_part(j));
32ce26cc15SXianjun Jiaoend
33ce26cc15SXianjun Jiaofclose(fid);
34ce26cc15SXianjun Jiaodisp(['Saved to ' filename]);
35ce26cc15SXianjun Jiao
36ce26cc15SXianjun Jiaofilename = ['iq_single_carrier_' num2str(carrier_freq) 'Hz_' num2str(num_iq) '.bin'];
37ce26cc15SXianjun Jiaofid = fopen(filename,'w');
38ce26cc15SXianjun Jiaoif fid == -1
39ce26cc15SXianjun Jiao    disp('fopen error');
40ce26cc15SXianjun Jiao    return;
41ce26cc15SXianjun Jiaoend
42ce26cc15SXianjun Jiao
43ce26cc15SXianjun Jiaoiq_int16 = [real_part; imag_part];
44ce26cc15SXianjun Jiaoiq_int16 = iq_int16(:);
45ce26cc15SXianjun Jiao
46ce26cc15SXianjun Jiaofwrite(fid, iq_int16, 'int16');
47ce26cc15SXianjun Jiaofclose(fid);
48ce26cc15SXianjun Jiaodisp(['Saved to ' filename]);
49