From dd733db287627c1ad9b3d6d829816f625825985f Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Wed, 29 Apr 2015 19:26:05 +0000 Subject: [PATCH] - c2i: don't remove DC bin - Params: added fileds for k0, x, y - refactored getRefGain git-svn-id: http://moon:8086/svn/matlab/trunk@42 801c6759-fa7c-4059-a304-17956f83a07c --- ofdm/drm/c2i.m | 3 --- ofdm/drm/drm_params.m | 10 ++++---- ofdm/drm/getRefGain.m | 55 +++++++++++++++++++++---------------------- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/ofdm/drm/c2i.m b/ofdm/drm/c2i.m index 96ef92f..bfb22a7 100644 --- a/ofdm/drm/c2i.m +++ b/ofdm/drm/c2i.m @@ -1,5 +1,2 @@ function index = c2i(N, carriers) - ri = []; - ri = [ri find(carriers == 0)]; - carriers(ri) = []; index = mod(carriers, N) + 1; diff --git a/ofdm/drm/drm_params.m b/ofdm/drm/drm_params.m index b0bf7ec..deb69ad 100644 --- a/ofdm/drm/drm_params.m +++ b/ofdm/drm/drm_params.m @@ -65,11 +65,11 @@ Q1024{DRM_MODE_C,:,:} = [12]; Q1024{DRM_MODE_D,:,:} = [14]; Q1024{DRM_MODE_E,:,:} = []; -ofdm_params_drm(DRM_MODE_A) = struct('mode', 'A', 'nu', 288, 'ng', 32, 'nspf', 15, 'W', W1024(DRM_MODE_A), 'Z', Z1024(DRM_MODE_A), 'Q', Q1024(DRM_MODE_A)); -ofdm_params_drm(DRM_MODE_B) = struct('mode', 'B', 'nu', 256, 'ng', 64, 'nspf', 15, 'W', W1024(DRM_MODE_B), 'Z', Z1024(DRM_MODE_B), 'Q', Q1024(DRM_MODE_B)); -ofdm_params_drm(DRM_MODE_C) = struct('mode', 'C', 'nu', 176, 'ng', 64, 'nspf', 20, 'W', W1024(DRM_MODE_C), 'Z', Z1024(DRM_MODE_C), 'Q', Q1024(DRM_MODE_C)); -ofdm_params_drm(DRM_MODE_D) = struct('mode', 'D', 'nu', 112, 'ng', 88, 'nspf', 24, 'W', W1024(DRM_MODE_D), 'Z', Z1024(DRM_MODE_D), 'Q', Q1024(DRM_MODE_D)); -ofdm_params_drm(DRM_MODE_E) = struct('mode', 'E', 'nu', 27, 'ng', 3, 'nspf', 40, 'W', W1024(DRM_MODE_E), 'Z', Z1024(DRM_MODE_E), 'Q', Q1024(DRM_MODE_E)); +ofdm_params_drm(DRM_MODE_A) = struct('mode', 'A', 'nu', 288, 'ng', 32, 'nspf', 15, 'W', W1024(DRM_MODE_A), 'Z', Z1024(DRM_MODE_A), 'Q', Q1024(DRM_MODE_A), 'x', 4, 'y', 5, 'k0', 2); +ofdm_params_drm(DRM_MODE_B) = struct('mode', 'B', 'nu', 256, 'ng', 64, 'nspf', 15, 'W', W1024(DRM_MODE_B), 'Z', Z1024(DRM_MODE_B), 'Q', Q1024(DRM_MODE_B), 'x', 2, 'y', 3, 'k0', 1); +ofdm_params_drm(DRM_MODE_C) = struct('mode', 'C', 'nu', 176, 'ng', 64, 'nspf', 20, 'W', W1024(DRM_MODE_C), 'Z', Z1024(DRM_MODE_C), 'Q', Q1024(DRM_MODE_C), 'x', 2, 'y', 2, 'k0', 1); +ofdm_params_drm(DRM_MODE_D) = struct('mode', 'D', 'nu', 112, 'ng', 88, 'nspf', 24, 'W', W1024(DRM_MODE_D), 'Z', Z1024(DRM_MODE_D), 'Q', Q1024(DRM_MODE_D), 'x', 1, 'y', 3, 'k0', 1); +ofdm_params_drm(DRM_MODE_E) = struct('mode', 'E', 'nu', 27, 'ng', 3, 'nspf', 40, 'W', W1024(DRM_MODE_E), 'Z', Z1024(DRM_MODE_E), 'Q', Q1024(DRM_MODE_E), 'x', 4, 'y', 4, 'k0', 2); drm_mode_index = 0; switch mode diff --git a/ofdm/drm/getRefGain.m b/ofdm/drm/getRefGain.m index 04339e5..b57e028 100644 --- a/ofdm/drm/getRefGain.m +++ b/ofdm/drm/getRefGain.m @@ -1,41 +1,40 @@ -function [ref_c ref_p ref_a] = getRefGain(spec_occ, ofdm_params, sym_count) +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) + 2*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); + +ref_a = sqrt(2)*ones(1,length(k)); +ref_c = k; switch ofdm_params.mode - case 'A' - ref_c = []; - ref_p = []; - ref_a = []; - error ('Implement Mode A!'); + + 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' - k0 = 1; - x = 2; - y = 3; - k = (spec_occ.kmin:1:spec_occ.kmax); - ref_c = 1 + 2*mod(sym_count,3)+6*k; - ref_c(find(ref_c > spec_occ.kmax)) = []; - ref_c(find(ref_c < spec_occ.kmin)) = []; - n = mod(sym_count, y); - m = floor(sym_count/y); - p = (ref_c - k0 - n*x)/(x*y); - ref_p = mod(4*ofdm_params.Z(n+1,m+1) + p*ofdm_params.W(n+1,m+1) + p.*p*(1+sym_count)*ofdm_params.Q, 1024); - ref_a = sqrt(2)*ones(1,length(ref_c)); - - case 'C' - ref_c = []; - ref_p = []; - ref_a = []; - error ('Implement Mode 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 '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_c = []; - ref_p = []; - ref_a = []; - error ('Implement Mode 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; \ No newline at end of file