diff --git a/ofdm/ofdm_tx.m b/ofdm/ofdm_tx.m index f978d78..1634cee 100644 --- a/ofdm/ofdm_tx.m +++ b/ofdm/ofdm_tx.m @@ -32,40 +32,40 @@ DRM_MODE_C = 3; DRM_MODE_D = 4; DRM_MODE_E = 5; -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_4k5) = struct('kmin', 2, 'kmax', 102); -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_5k0) = struct('kmin', 2, 'kmax', 114); -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_9k0) = struct('kmin', -102, 'kmax', 102); -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_10k) = struct('kmin', -114, 'kmax', 114); -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_18k) = struct('kmin', - 98, 'kmax', 314); -ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_20k) = struct('kmin', -110, 'kmax', 350); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_4k5) = struct('spec', SPEC_OCC_4k5, 'kmin', 2, 'kmax', 102); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_5k0) = struct('spec', SPEC_OCC_5k0, 'kmin', 2, 'kmax', 114); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_9k0) = struct('spec', SPEC_OCC_9k0, 'kmin', -102, 'kmax', 102); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_10k) = struct('spec', SPEC_OCC_10k, 'kmin', -114, 'kmax', 114); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_18k) = struct('spec', SPEC_OCC_18k, 'kmin', - 98, 'kmax', 314); +ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_20k) = struct('spec', SPEC_OCC_20k, 'kmin', -110, 'kmax', 350); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_4k5) = struct('kmin', 1, 'kmax', 91); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_5k0) = struct('kmin', 1, 'kmax', 103); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_9k0) = struct('kmin', - 91, 'kmax', 91); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k) = struct('kmin', -103, 'kmax', 103); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_18k) = struct('kmin', - 87, 'kmax', 279); -ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_20k) = struct('kmin', - 99, 'kmax', 311); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_4k5) = struct('spec', SPEC_OCC_4k5, 'kmin', 1, 'kmax', 91); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_5k0) = struct('spec', SPEC_OCC_5k0, 'kmin', 1, 'kmax', 103); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_9k0) = struct('spec', SPEC_OCC_9k0, 'kmin', - 91, 'kmax', 91); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k) = struct('spec', SPEC_OCC_10k, 'kmin', -103, 'kmax', 103); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_18k) = struct('spec', SPEC_OCC_18k, 'kmin', - 87, 'kmax', 279); +ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_20k) = struct('spec', SPEC_OCC_20k, 'kmin', - 99, 'kmax', 311); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_4k5) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_5k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_9k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_10k) = struct('kmin', - 69, 'kmax', 69); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_18k) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_20k) = struct('kmin', - 67, 'kmax', 213); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_4k5) = struct('spec', SPEC_OCC_4k5, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_5k0) = struct('spec', SPEC_OCC_5k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_9k0) = struct('spec', SPEC_OCC_9k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_10k) = struct('spec', SPEC_OCC_10k, 'kmin', - 69, 'kmax', 69); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_18k) = struct('spec', SPEC_OCC_18k, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_20k) = struct('spec', SPEC_OCC_20k, 'kmin', - 67, 'kmax', 213); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_4k5) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_5k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_9k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_10k) = struct('kmin', - 44, 'kmax', 44); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_18k) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_20k) = struct('kmin', - 43, 'kmax', 135); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_4k5) = struct('spec', SPEC_OCC_4k5, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_5k0) = struct('spec', SPEC_OCC_5k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_9k0) = struct('spec', SPEC_OCC_9k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_10k) = struct('spec', SPEC_OCC_10k, 'kmin', - 44, 'kmax', 44); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_18k) = struct('spec', SPEC_OCC_18k, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_20k) = struct('spec', SPEC_OCC_20k, 'kmin', - 43, 'kmax', 135); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_4k5) = struct('kmin', -106, 'kmax', 106); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_5k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_9k0) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_10k) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_18k) = struct('kmin', 0, 'kmax', 0); -ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_20k) = struct('kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_4k5) = struct('spec', SPEC_OCC_4k5, 'kmin', -106, 'kmax', 106); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_5k0) = struct('spec', SPEC_OCC_5k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_9k0) = struct('spec', SPEC_OCC_9k0, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_10k) = struct('spec', SPEC_OCC_10k, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_18k) = struct('spec', SPEC_OCC_18k, 'kmin', 0, 'kmax', 0); +ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_20k) = struct('spec', SPEC_OCC_20k, 'kmin', 0, 'kmax', 0); W1024{DRM_MODE_A,:,:} = [228 341 455; 455 569 683; 683 796 910; 910 0 114; 114 228 341]; W1024{DRM_MODE_B,:,:} = [512 0 512 0 512; 0 512 0 512 0; 512 0 512 0 512]; @@ -103,7 +103,7 @@ Ts = Tu+Tg Ng = round(Tg*fa) Nu = round(Tu*fa) Ns = round(Ts*fa) -N_fft = Nu; +N_fft = Nu SubCarrierspacing_HZ = fa/N_fft % TX window @@ -128,18 +128,17 @@ for k=1:N_frames if WITH_DATA == 1 data_i = c2i(N_fft, ofdm_spec_occ.kmin:1:ofdm_spec_occ.kmax); sym = round(M_QAM*rand(1, length(data_i))+0.5); - X(data_i) = 0.10*qlut(sym); + X(data_i) = 0.20*qlut(sym); end; -% X(c2i(N_fft,65)) = 0.20*qlut(round(M_qam*rand(1, 1)+0.5)); if WITH_FREQ_REF == 1 - [ref_c ref_p ref_a] = getRefFreq(DRM_MODE_B, s); + [ref_c ref_p ref_a] = getRefFreq(ofdm_params.mode); X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024)); end; if (s==0) & (WITH_TIME_REF == 1) - [ref_c ref_p ref_a] = getRefTime(DRM_MODE_B); + [ref_c ref_p ref_a] = getRefTime(ofdm_params.mode); X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024)); end; @@ -165,7 +164,7 @@ for k=1:N_frames end; % Modulate on carrier -yc = 0.5*exp(i*2*pi.*(0:length(xv)-1)*fc/fa) .* xv; %filter(hlp,1,xv); +yc = 0.5*exp(i*2*pi.*(0:length(xv)-1)*fc/fa) .* xv; yv = real(yc) + imag(yc); xv = conj(xv'); @@ -178,9 +177,9 @@ function index = c2i(N_fft, carriers) ri = []; ri = [ri find(carriers == 0)]; carriers(ri) = []; - index = mod(-carriers, 1024) + 1; + index = mod(-carriers, N_fft) + 1; -function [ref_c ref_p ref_a] = getRefFreq(drmMode, s) +function [ref_c ref_p ref_a] = getRefFreq(drmMode) ref_A_c = [18 54 72]; ref_A_p = [205 836 215]; @@ -204,27 +203,27 @@ ref_E_p = []; ref_E_a = []; switch drmMode - case 1 + case 'MODE_A' ref_c = ref_A_c; ref_p = ref_A_p; ref_a = ref_A_a; - case 2 + case 'MODE_B' ref_c = ref_B_c; ref_p = ref_B_p; ref_a = ref_B_a; - case 3 + case 'MODE_C' ref_c = ref_C_c; ref_p = ref_C_p; ref_a = ref_C_a; - case 4 + case 'MODE_D' ref_c = ref_D_c; ref_p = ref_D_p; ref_a = ref_D_a; - case 5 + case 'MODE_E' ref_c = ref_E_c; ref_p = ref_E_p; ref_a = ref_E_a; @@ -237,27 +236,27 @@ ref_B_p = [304 108 620 192 704 44 432 588 844 651 651 460 460 944 940 428]; ref_B_a = sqrt(2)*ones(1,16); switch drmMode - case 1 + case 'MODE_A' ref_c = []; ref_p = []; ref_a = []; - case 2 + case 'MODE_B' ref_c = ref_B_c; ref_p = ref_B_p; ref_a = ref_B_a; - case 3 + case 'MODE_C' ref_c = []; ref_p = []; ref_a = []; - case 4 + case 'MODE_D' ref_c = []; ref_p = []; ref_a = []; - case 5 + case 'MODE_E' ref_c = []; ref_p = []; ref_a = [];