- fixed jitter in H estimation
- consider power boost in params - RX: cleaned up - TX: cleaned up git-svn-id: http://moon:8086/svn/matlab/trunk@44 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
+5
-8
@@ -1,18 +1,14 @@
|
|||||||
function W_syms = calcWiener(drm_mode, drm_bw)
|
function W_syms = calcWiener(drm_mode, drm_bw)
|
||||||
% calcWiener('B', '10k');
|
% calcWiener('B', '10k');
|
||||||
fs = 12000;
|
|
||||||
fd_max = 0.1;
|
|
||||||
tau_max = 0.0001;
|
|
||||||
|
|
||||||
[params, spec_occ] = drm_params(drm_mode, drm_bw);
|
[params, spec_occ] = drm_params(drm_mode, drm_bw);
|
||||||
N = params.nu
|
N = params.nu
|
||||||
Ts = params.nu/fs
|
sigm = 10^(-14/10);
|
||||||
dF = 1/Ts
|
|
||||||
|
|
||||||
frames_per_window = 2*params.y
|
frames_per_window = 2*params.y
|
||||||
window_delay = params.y
|
window_delay = params.y
|
||||||
num_symbols_per_frame = params.nspf
|
num_symbols_per_frame = params.nspf
|
||||||
num_carrier_per_symbol = spec_occ.kmax - spec_occ.kmin - 1
|
num_carrier_per_symbol = spec_occ.kmax - spec_occ.kmin
|
||||||
num_symbols_per_frame = num_symbols_per_frame * num_carrier_per_symbol
|
num_symbols_per_frame = num_symbols_per_frame * num_carrier_per_symbol
|
||||||
|
|
||||||
% PHI = auto-covariance-matrix
|
% PHI = auto-covariance-matrix
|
||||||
@@ -38,7 +34,7 @@ for d=0:window_delay-1
|
|||||||
t1_pos = t2_pos(k1);
|
t1_pos = t2_pos(k1);
|
||||||
PHI(k1,k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos));
|
PHI(k1,k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos));
|
||||||
end
|
end
|
||||||
PHI_inv = inv(PHI + eye(length(PHI))*0.0001);
|
PHI_inv = inv(PHI + eye(length(PHI))*sigm);
|
||||||
|
|
||||||
THETA = zeros(1, length(k2_pos));
|
THETA = zeros(1, length(k2_pos));
|
||||||
% THETA
|
% THETA
|
||||||
@@ -47,7 +43,8 @@ for d=0:window_delay-1
|
|||||||
k2 = [1:length(k2_pos)];
|
k2 = [1:length(k2_pos)];
|
||||||
k1_pos = carriers(k1);
|
k1_pos = carriers(k1);
|
||||||
t1_pos = window_delay;
|
t1_pos = window_delay;
|
||||||
THETA(k2) = sinc( (k1_pos-k2_pos)*f_cut_k ).*sinc( (t1_pos-t2_pos)*f_cut_t );
|
THETA(k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos));
|
||||||
W_syms{d+1}(:, k1) = transpose( THETA*PHI_inv );
|
W_syms{d+1}(:, k1) = transpose( THETA*PHI_inv );
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
W_syms
|
||||||
+30
-30
@@ -14,40 +14,40 @@ DRM_MODE_C = 3;
|
|||||||
DRM_MODE_D = 4;
|
DRM_MODE_D = 4;
|
||||||
DRM_MODE_E = 5;
|
DRM_MODE_E = 5;
|
||||||
|
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 2, 'kmax', 102);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 2, 'kmax', 102, 'boost', [2,6,98,102]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 2, 'kmax', 114);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 2, 'kmax', 114, 'boost', [2,6,110,114]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', -102, 'kmax', 102);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', -102, 'kmax', 102, 'boost', [-102,-98,98,102]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', -114, 'kmax', 114);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', -114, 'kmax', 114, 'boost', [-114,-110,110,114]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', - 98, 'kmax', 314);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', - 98, 'kmax', 314, 'boost', [-98,-94,310,314]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', -110, 'kmax', 350);
|
ofdm_spec_occ_drm(DRM_MODE_A, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', -110, 'kmax', 350, 'boost', [-110,-106,346,350]);
|
||||||
|
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 1, 'kmax', 91);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 1, 'kmax', 91, 'boost', [1,3,89,91]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 1, 'kmax', 103);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 1, 'kmax', 103, 'boost', [1,3,101,103]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', - 91, 'kmax', 91);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', - 91, 'kmax', 91, 'boost', [-91,-89,89,91]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', -103, 'kmax', 103);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', -103, 'kmax', 103, 'boost', [-103,-101,101,103]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', - 87, 'kmax', 279);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', - 87, 'kmax', 279, 'boost', [-87,-85,277,279]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 99, 'kmax', 311);
|
ofdm_spec_occ_drm(DRM_MODE_B, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 99, 'kmax', 311, 'boost', [-99,-97,309,311]);
|
||||||
|
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', - 69, 'kmax', 69);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', - 69, 'kmax', 69, 'boost', [-69,-67,67,69]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 67, 'kmax', 213);
|
ofdm_spec_occ_drm(DRM_MODE_C, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 67, 'kmax', 213, 'boost', [-67,-65,211,213]);
|
||||||
|
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', - 44, 'kmax', 44);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', - 44, 'kmax', 44, 'boost', [-44,-43,43,44]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 43, 'kmax', 135);
|
ofdm_spec_occ_drm(DRM_MODE_D, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', - 43, 'kmax', 135, 'boost', [-43,-42,134,135]);
|
||||||
|
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', -106, 'kmax', 106);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_4k5) = struct('spec', '4k5', 'kmin', -106, 'kmax', 106, 'boost', [-106,-102,102,106]);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_9k0) = struct('spec', '9k0', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_10k) = struct('spec', '10k', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_18k) = struct('spec', '18k', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', 0, 'kmax', 0);
|
ofdm_spec_occ_drm(DRM_MODE_E, SPEC_OCC_20k) = struct('spec', '20k', 'kmin', 0, 'kmax', 0, 'boost', []);
|
||||||
|
|
||||||
W1024{DRM_MODE_A,:,:} = [228 341 455; 455 569 683; 683 796 910; 910 0 114; 114 228 341];
|
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];
|
W1024{DRM_MODE_B,:,:} = [512 0 512 0 512; 0 512 0 512 0; 512 0 512 0 512];
|
||||||
|
|||||||
@@ -14,9 +14,14 @@ n = mod(s, y);
|
|||||||
m = floor(s/y);
|
m = floor(s/y);
|
||||||
p = (k - k0 - n*x)/(x*y);
|
p = (k - k0 - n*x)/(x*y);
|
||||||
|
|
||||||
ref_a = sqrt(2)*ones(1,length(k));
|
mag = sqrt(2);
|
||||||
|
ref_a = mag*ones(1,length(k));
|
||||||
ref_c = k;
|
ref_c = k;
|
||||||
|
|
||||||
|
for b=spec_occ.boost
|
||||||
|
ref_a(find(ref_c == b)) = 2*mag;
|
||||||
|
end
|
||||||
|
|
||||||
switch ofdm_params.mode
|
switch ofdm_params.mode
|
||||||
|
|
||||||
case 'A'
|
case 'A'
|
||||||
|
|||||||
+12
-22
@@ -148,15 +148,6 @@ for k=1:K,
|
|||||||
Xlast = X;
|
Xlast = X;
|
||||||
end
|
end
|
||||||
|
|
||||||
df_track = mean(df_track_(10:200))
|
|
||||||
mean_df_fine = mean(df_fine_, 2)
|
|
||||||
mu_Hp = mean(abs(Hp_'))'
|
|
||||||
sigma_Hp = var(abs(Hp_'))'
|
|
||||||
SNR_Hp = -10*log10(sigma_Hp)'
|
|
||||||
|
|
||||||
G = (conj(Hp)*1)./(abs(Hp).^2 * 1 + sigma_Hp)
|
|
||||||
Hp_1 = 1./Hp
|
|
||||||
|
|
||||||
if ~isempty(cp_off_)
|
if ~isempty(cp_off_)
|
||||||
figure;
|
figure;
|
||||||
plot(0:length(cp_off_)-1, cp_off_, 0:length(cp_off_)-1, cp_off*ones(size(cp_off_)), 'r-'); grid; title('cp_{off}')
|
plot(0:length(cp_off_)-1, cp_off_, 0:length(cp_off_)-1, cp_off*ones(size(cp_off_)), 'r-'); grid; title('cp_{off}')
|
||||||
@@ -220,20 +211,16 @@ W = calcWiener(drm_mode, drm_bw);
|
|||||||
|
|
||||||
figure;
|
figure;
|
||||||
% Detect scattered gain pilots
|
% Detect scattered gain pilots
|
||||||
sym_count = 0;
|
start = skip_syms+frame_start
|
||||||
|
symbol_counter = 0;
|
||||||
win_count = 0;
|
win_count = 0;
|
||||||
start = skip_syms+frame_start;
|
H = [];
|
||||||
H = zeros(N, 1);
|
|
||||||
sym_H = [];
|
sym_H = [];
|
||||||
sym_out = [];
|
sym_out = [];
|
||||||
kk = 1;
|
kk = 1;
|
||||||
G = [];
|
|
||||||
bin = c2i(N, 13);
|
|
||||||
Hraw = [];
|
|
||||||
|
|
||||||
symbols_per_frame = 15;
|
symbols_per_frame = ofdm_drm_params.nspf;
|
||||||
symbols_to_delay = ofdm_drm_params.y;
|
symbols_to_delay = ofdm_drm_params.y;
|
||||||
symbol_counter = 0;
|
|
||||||
frames_per_window = 2*ofdm_drm_params.y
|
frames_per_window = 2*ofdm_drm_params.y
|
||||||
H_gain_cell = cell (frames_per_window, 1);
|
H_gain_cell = cell (frames_per_window, 1);
|
||||||
H_gain_carriers_cell = cell (frames_per_window, 1);
|
H_gain_carriers_cell = cell (frames_per_window, 1);
|
||||||
@@ -244,14 +231,16 @@ for k=start:length(Z_)
|
|||||||
n = rem(nn, ofdm_drm_params.y);
|
n = rem(nn, ofdm_drm_params.y);
|
||||||
m = floor(nn/ofdm_drm_params.y);
|
m = floor(nn/ofdm_drm_params.y);
|
||||||
|
|
||||||
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, symbol_counter); symbol_counter = symbol_counter + 1;
|
[carrier_gain, phi_gain, mag_gain] = getRefGain(ofdm_drm_params, ofdm_spec_occ, symbol_counter);
|
||||||
carrier_gain_bins = c2i(N, carrier_gain);
|
carrier_gain_bins = c2i(N, carrier_gain);
|
||||||
Hp = Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).';
|
Hp = Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).';
|
||||||
|
|
||||||
H_gain_cell{win_count+1} = transpose(Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).');
|
H_gain_cell{win_count+1} = transpose(Z_(carrier_gain_bins, k)./(mag_gain.*exp(j*2*pi*phi_gain/1024)).');
|
||||||
ii = 1+mod(0+win_count+(0:frames_per_window-1), frames_per_window);
|
ii = 1+mod(n+(0:frames_per_window-1), frames_per_window);
|
||||||
H_gain = [H_gain_cell{ii}];
|
H_gain = [H_gain_cell{ii}];
|
||||||
H_gain_carriers_cell{win_count+1} = carrier_gain;
|
H_gain_carriers_cell{win_count+1} = carrier_gain;
|
||||||
|
|
||||||
|
str = sprintf('Frame %d, SymCount %d, winCount %d, n=%d', k, symbol_counter, win_count, n);
|
||||||
if length(H_gain) == 208
|
if length(H_gain) == 208
|
||||||
if 1
|
if 1
|
||||||
H = H_gain*W{n+1};
|
H = H_gain*W{n+1};
|
||||||
@@ -259,16 +248,16 @@ for k=start:length(Z_)
|
|||||||
sym_out(:, kk) = ZZ ./ H;
|
sym_out(:, kk) = ZZ ./ H;
|
||||||
if 1
|
if 1
|
||||||
subplot(2, 1, 1)
|
subplot(2, 1, 1)
|
||||||
plot(0:length(H)-1, abs(H)); grid; title('abs(H)'); axis([0 length(H)-1 0 15+0*max(abs(H))]);
|
plot(0:length(H)-1, abs(H)); grid; title('abs(H)'); axis([0 length(H)-1 0 15+0*max(abs(H))]); title(str);
|
||||||
subplot(2, 1, 2)
|
subplot(2, 1, 2)
|
||||||
plot(0:length(H)-1, angle(H)); grid; title('phi(H)'); axis([0 length(H)-1 -4 4]);
|
plot(0:length(H)-1, angle(H)); grid; title('phi(H)'); axis([0 length(H)-1 -4 4]); title(str);
|
||||||
else
|
else
|
||||||
hold on;
|
hold on;
|
||||||
plot(sym_out(:, kk), '+');
|
plot(sym_out(:, kk), '+');
|
||||||
hold off;
|
hold off;
|
||||||
grid; title('Sym');
|
grid; title('Sym');
|
||||||
end
|
end
|
||||||
pause(0.01);
|
pause(0.025);
|
||||||
else
|
else
|
||||||
ii = [H_gain_carriers_cell{1:6}]
|
ii = [H_gain_carriers_cell{1:6}]
|
||||||
H = H_gain;
|
H = H_gain;
|
||||||
@@ -282,6 +271,7 @@ for k=start:length(Z_)
|
|||||||
end
|
end
|
||||||
kk = kk + 1;
|
kk = kk + 1;
|
||||||
win_count = mod(win_count+1, frames_per_window);
|
win_count = mod(win_count+1, frames_per_window);
|
||||||
|
symbol_counter = symbol_counter + 1;
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+53
-53
@@ -47,64 +47,64 @@ x_suffix = zeros(2, Ng);
|
|||||||
|
|
||||||
ofdm_spec_occ.kmin
|
ofdm_spec_occ.kmin
|
||||||
ofdm_spec_occ.kmax
|
ofdm_spec_occ.kmax
|
||||||
|
sym_count = 0;
|
||||||
for k=1:N_frames
|
for k=1:N_frames
|
||||||
for sym_count=0:ofdm_params.nspf-1,
|
X = zeros(N,1);
|
||||||
X = zeros(N,1);
|
|
||||||
|
|
||||||
% Data
|
|
||||||
if WITH_DATA == 1
|
|
||||||
data_i = c2i(N, ofdm_spec_occ.kmin:1:ofdm_spec_occ.kmax);
|
|
||||||
sym = round(M_QAM*rand(1, length(data_i))+0.5);
|
|
||||||
X(data_i) = qlut(sym);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if (sym_count==0) & (WITH_TIME_REF == 1)
|
% Data
|
||||||
[ref_c ref_p ref_a] = getRefTime(ofdm_params.mode);
|
if WITH_DATA == 1
|
||||||
bins = c2i(N, ref_c);
|
data_i = c2i(N, ofdm_spec_occ.kmin:1:ofdm_spec_occ.kmax);
|
||||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
sym = round(M_QAM*rand(1, length(data_i))+0.5);
|
||||||
end;
|
X(data_i) = qlut(sym);
|
||||||
|
end;
|
||||||
|
|
||||||
if WITH_GAIN_REF == 1
|
if WITH_GAIN_REF == 1
|
||||||
[ref_c ref_p ref_a] = getRefGain(ofdm_params, ofdm_spec_occ, sym_count);
|
[ref_c ref_p ref_a] = getRefGain(ofdm_params, ofdm_spec_occ, sym_count);
|
||||||
bins = c2i(N, ref_c);
|
bins = c2i(N, ref_c);
|
||||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if WITH_FREQ_REF == 1
|
if (sym_count==0) & (WITH_TIME_REF == 1)
|
||||||
[ref_c ref_p ref_a] = getRefFreq(ofdm_params.mode);
|
[ref_c ref_p ref_a] = getRefTime(ofdm_params.mode);
|
||||||
bins = c2i(N, ref_c);
|
bins = c2i(N, ref_c);
|
||||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
X(c2i(N, 0)) = 0;
|
if WITH_FREQ_REF == 1
|
||||||
|
[ref_c ref_p ref_a] = getRefFreq(ofdm_params.mode);
|
||||||
% Modulate
|
bins = c2i(N, ref_c);
|
||||||
xu = k_fft*ifft(X, N).';
|
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||||
if WITH_RCWIN == 1
|
end;
|
||||||
x_prefix(1,:) = xu(N-Ng+1:N);
|
|
||||||
x_suffix(1,:) = xu(1:Ng);
|
X(c2i(N, 0)) = 0;
|
||||||
|
|
||||||
x_pw = x_suffix(2,:) .* (1-wng) + x_prefix(1,:) .* wng;
|
% Modulate
|
||||||
|
xu = k_fft*ifft(X, N).';
|
||||||
xs = [x_pw xu];
|
if WITH_RCWIN == 1
|
||||||
|
x_prefix(1,:) = xu(N-Ng+1:N);
|
||||||
x_prefix(2,:) = x_prefix(1,:);
|
x_suffix(1,:) = xu(1:Ng);
|
||||||
x_suffix(2,:) = x_suffix(1,:);
|
|
||||||
else
|
x_pw = x_suffix(2,:) .* (1-wng) + x_prefix(1,:) .* wng;
|
||||||
xs = [xu(N-Ng+1:N) xu];
|
|
||||||
end;
|
xs = [x_pw xu];
|
||||||
xv = [xv xs(1:Ng+N)];
|
|
||||||
|
x_prefix(2,:) = x_prefix(1,:);
|
||||||
if (DO_PLOT == 1)
|
x_suffix(2,:) = x_suffix(1,:);
|
||||||
|
else
|
||||||
|
xs = [xu(N-Ng+1:N) xu];
|
||||||
|
end;
|
||||||
|
xv = [xv xs(1:Ng+N)];
|
||||||
|
|
||||||
|
if (DO_PLOT == 1)
|
||||||
% Xs = fftshift(fft(xs(Ng+1:Ng+N), N)/k_fft);
|
% Xs = fftshift(fft(xs(Ng+1:Ng+N), N)/k_fft);
|
||||||
Xs = fftshift(X);
|
Xs = fftshift(X);
|
||||||
subplot(2, 1, 1)
|
subplot(2, 1, 1)
|
||||||
plot(0:N-1, abs(Xs(1:N)), '-*'); grid; axis([0 N-1 0 2]);
|
plot(0:N-1, abs(Xs(1:N)), '-*'); grid; axis([0 N-1 0 3.0]);
|
||||||
subplot(2, 1, 2)
|
subplot(2, 1, 2)
|
||||||
plot(0:N-1, angle(Xs(1:N)), '-*'); grid; axis([0 N-1 -2*pi 2*pi]);
|
plot(0:N-1, angle(Xs(1:N)), '-*'); grid; axis([0 N-1 -2*pi 2*pi]);
|
||||||
pause(plot_speed);
|
pause(plot_speed);
|
||||||
end
|
end
|
||||||
end;
|
sym_count = mod(sym_count+1, ofdm_params.nspf);
|
||||||
end;
|
end;
|
||||||
hold off;
|
hold off;
|
||||||
grid;
|
grid;
|
||||||
@@ -119,7 +119,7 @@ xup = filter(hlp, 1, xup);
|
|||||||
yc = exp(j*2*pi.*(0:length(xup)-1)*0.25) .* xup;
|
yc = exp(j*2*pi.*(0:length(xup)-1)*0.25) .* xup;
|
||||||
yv = real(yc) + imag(yc);
|
yv = real(yc) + imag(yc);
|
||||||
|
|
||||||
xv = conj(xv')./abs(max(xv));
|
xv = xv.' ./abs(max(xv));
|
||||||
yv = yv'./max(yv);
|
yv = yv'./max(yv);
|
||||||
|
|
||||||
wavwrite(0.9*yv,4*fa,16,'yv.wav')
|
wavwrite(0.9*yv,4*fa,16,'yv.wav')
|
||||||
|
|||||||
Reference in New Issue
Block a user