- added gain refs

git-svn-id: http://moon:8086/svn/matlab/trunk@7 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2014-07-27 18:36:03 +00:00
parent 98fe437a0f
commit e7e6e2f42f
+52 -21
View File
@@ -4,11 +4,12 @@ function [yv xv] = ofdm_tx(N_frames)
close all; close all;
WITH_RCWIN = 1; WITH_RCWIN = 1;
WITH_DATA = 1;
WITH_FREQ_REF = 1; WITH_FREQ_REF = 1;
WITH_TIME_REF = 1; WITH_TIME_REF = 1;
WITH_GAIN_REF = 1;
WITH_DATA = 1;
M_QAM = 16; M_QAM = 4;
RCWIN_ROLLOFF = 0.1; RCWIN_ROLLOFF = 0.1;
% Params % Params
@@ -66,14 +67,30 @@ 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_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_20k) = struct('kmin', 0, 'kmax', 0);
ofdm_params_drm(DRM_MODE_A) = struct('nu', 288, 'ng', 32, 'nspf', 15); W1024{DRM_MODE_A,:,:} = [228 341 455; 455 569 683; 683 796 910; 910 0 114; 114 228 341];
ofdm_params_drm(DRM_MODE_B) = struct('nu', 256, 'ng', 64, 'nspf', 15); W1024{DRM_MODE_B,:,:} = [512 0 512 0 512; 0 512 0 512 0; 512 0 512 0 512];
ofdm_params_drm(DRM_MODE_C) = struct('nu', 176, 'ng', 64, 'nspf', 20); W1024{DRM_MODE_C,:,:} = [465 372 279 186 93 0 931 838 745 652; 931 838 745 652 559 465 372 279 186 93];
ofdm_params_drm(DRM_MODE_D) = struct('nu', 112, 'ng', 88, 'nspf', 24); W1024{DRM_MODE_D,:,:} = [366 439 512 585 658 731 805 878; 731 805 878 951 0 73 146 219; 73 146 219 293 366 439 512 585];
ofdm_params_drm(DRM_MODE_E) = struct('nu', 27, 'ng', 3, 'nspf', 40); W1024{DRM_MODE_E,:,:} = [];
Z1024{DRM_MODE_A,:,:} = [0 81 248; 18 106 106; 122 116 31; 129 129 39; 33 32 111];
Z1024{DRM_MODE_B,:,:} = [0 57 164 64 12; 168 255 161 106 118; 25 232 132 233 38];
Z1024{DRM_MODE_C,:,:} = [0 76 29 76 9 190 161 248 33 108; 179 178 83 253 127 105 101 198 250 145];
Z1024{DRM_MODE_D,:,:} = [0 240 17 60 220 38 151 101; 110 70 78 82 175 150 106 25; 165 7 252 124 253 177 197 142];
Z1024{DRM_MODE_E,:,:} = [];
Q1024{DRM_MODE_A,:,:} = [36];
Q1024{DRM_MODE_B,:,:} = [12];
Q1024{DRM_MODE_C,:,:} = [12];
Q1024{DRM_MODE_D,:,:} = [14];
Q1024{DRM_MODE_E,:,:} = [];
ofdm_params = ofdm_params_drm(DRM_MODE_B) ofdm_params_drm(DRM_MODE_A) = struct('mode', 'MODE_A', 'nu', 288, 'ng', 32, 'nspf', 15, 'W', W1024(DRM_MODE_A), 'Z', Z1024(DRM_MODE_A), 'Q', Q1024(DRM_MODE_A));
ofdm_spec_occ = ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k) ofdm_params_drm(DRM_MODE_B) = struct('mode', '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', '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', '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', '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 = ofdm_params_drm(DRM_MODE_B);
ofdm_spec_occ = ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k);
T = 4/fa; T = 4/fa;
Tu = ofdm_params.nu * T Tu = ofdm_params.nu * T
@@ -91,7 +108,7 @@ SubCarrierspacing_HZ = fa/N_fft
% Source % Source
qlut = qamtable(M_QAM); qlut = qamtable(M_QAM);
k_fft = 2*sqrt(N_fft); k_fft = sqrt(N_fft);
xv = []; xv = [];
xt = zeros(1, Nt); xt = zeros(1, Nt);
@@ -120,6 +137,11 @@ for k=1:N_frames
X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024)); X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024));
end; end;
if WITH_GAIN_REF == 1
[ref_c ref_p ref_a] = getRefGain(ofdm_spec_occ, ofdm_params, s);
X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024));
end;
% Modulate % Modulate
xu = k_fft*ifft(X, N_fft)'; xu = k_fft*ifft(X, N_fft)';
if WITH_RCWIN == 1 if WITH_RCWIN == 1
@@ -235,30 +257,39 @@ switch drmMode
ref_a = []; ref_a = [];
end; end;
function [ref_i ref_p ref_a] = getRefGain(N_fft, spec_occ, drmMode, s) function [ref_c ref_p ref_a] = getRefGain(spec_occ, ofdm_params, s)
switch drmMode
case 1 switch ofdm_params.mode
case 'MODE_A'
ref_c = []; ref_c = [];
ref_p = []; ref_p = [];
ref_a = []; ref_a = [];
case 2 case 'MODE_B'
ref_c = 1 + 2*mod(s,3)+6*(spec_occ.kmin:1:spec_occ.kmax); k0 = 1;
ref_i = c2i(N_fft, ref_c); x = 2;
ref_p = ref_B_p; y = 3;
ref_a = sqrt(2)*ones(1,length(ref_i)); k = (spec_occ.kmin:1:spec_occ.kmax);
ref_c = 1 + 2*mod(s,3)+6*k;
ref_c(find(ref_c > spec_occ.kmax)) = [];
ref_c(find(ref_c < spec_occ.kmin)) = [];
n = mod(s, y);
m = floor(s/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+s)*ofdm_params.Q, 1024);
ref_a = sqrt(2)*ones(1,length(ref_c));
case 3 case 'MODE_C'
ref_c = []; ref_c = [];
ref_p = []; ref_p = [];
ref_a = []; ref_a = [];
case 4 case 'MODE_D'
ref_c = []; ref_c = [];
ref_p = []; ref_p = [];
ref_a = []; ref_a = [];
case 5 case 'MODE_E'
ref_c = []; ref_c = [];
ref_p = []; ref_p = [];
ref_a = []; ref_a = [];