function [ref_c ref_p ref_a] = getRefGain(ofdm_params, spec_occ, s) k0 = ofdm_params.k0; x = ofdm_params.x; y = ofdm_params.y; s = mod(s, ofdm_params.nspf); k = k0 + x*mod(s, y) + x*y*(spec_occ.kmin:1:spec_occ.kmax); k(find(k > spec_occ.kmax)) = []; k(find(k < spec_occ.kmin)) = []; n = mod(s, y); m = floor(s/y); p = (k - k0 - n*x)/(x*y); mag = sqrt(2); ref_a = mag*ones(1,length(k)); ref_c = k; switch ofdm_params.mode case 'A' ref_p = mod(4*ofdm_params.Z(n+1,m+1) + p*ofdm_params.W(n+1,m+1) + p.*p*(1+s)*ofdm_params.Q, 1024); case 'B' ref_p = mod(4*ofdm_params.Z(n+1,m+1) + p*ofdm_params.W(n+1,m+1) + p.*p*(1+s)*ofdm_params.Q, 1024); case 'C' ref_p = mod(4*ofdm_params.Z(n+1,m+1) + p*ofdm_params.W(n+1,m+1) + p.*p*(1+s)*ofdm_params.Q, 1024); case 'D' ref_p = mod(4*ofdm_params.Z(n+1,m+1) + p*ofdm_params.W(n+1,m+1) + p.*p*(1+s)*ofdm_params.Q, 1024); case 'E' ref_c = []; ref_p = []; ref_a = []; error ('Implement Mode E!'); end; % Fix superposition of carriers [freqRef_c, freqRef_p, freqRef_a] = getRefFreq(ofdm_params.mode); [ref_c, ref_p, ref_a] = fix_superposition(ref_c, ref_p, ref_a, freqRef_c, freqRef_p, freqRef_a); if (s == 0) [timeRef_c, timeRef_p, timeRef_a] = getRefTime(ofdm_params.mode); [ref_c, ref_p, ref_a] = fix_superposition(ref_c, ref_p, ref_a, timeRef_c, timeRef_p, timeRef_a); end for b=spec_occ.boost ref_a(find(ref_c == b)) = sqrt(4); end function [new_c, new_p, new_a] = fix_superposition(ref_c, ref_p, ref_a, super_c, super_p, super_a) new_c = ref_c; new_p = ref_p; new_a = ref_a; super_index = 1; for c=super_c curr_index = find(ref_c == c); if (~isempty(curr_index)) new_p(curr_index) = super_p(super_index); new_a(curr_index) = super_a(super_index); end super_index = super_index + 1; end