- 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)
|
||||
% calcWiener('B', '10k');
|
||||
fs = 12000;
|
||||
fd_max = 0.1;
|
||||
tau_max = 0.0001;
|
||||
|
||||
[params, spec_occ] = drm_params(drm_mode, drm_bw);
|
||||
N = params.nu
|
||||
Ts = params.nu/fs
|
||||
dF = 1/Ts
|
||||
sigm = 10^(-14/10);
|
||||
|
||||
frames_per_window = 2*params.y
|
||||
window_delay = params.y
|
||||
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
|
||||
|
||||
% PHI = auto-covariance-matrix
|
||||
@@ -38,7 +34,7 @@ for d=0:window_delay-1
|
||||
t1_pos = t2_pos(k1);
|
||||
PHI(k1,k2) = sinc(f_cut_k*(k1_pos-k2_pos)) .* sinc(f_cut_t*(t1_pos-t2_pos));
|
||||
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
|
||||
@@ -47,7 +43,8 @@ for d=0:window_delay-1
|
||||
k2 = [1:length(k2_pos)];
|
||||
k1_pos = carriers(k1);
|
||||
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 );
|
||||
end
|
||||
end
|
||||
W_syms
|
||||
+30
-30
@@ -14,40 +14,40 @@ DRM_MODE_C = 3;
|
||||
DRM_MODE_D = 4;
|
||||
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_5k0) = struct('spec', '5k0', 'kmin', 2, 'kmax', 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_10k) = struct('spec', '10k', 'kmin', -114, 'kmax', 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_20k) = struct('spec', '20k', 'kmin', -110, 'kmax', 350);
|
||||
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, 'boost', [2,6,110,114]);
|
||||
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, 'boost', [-114,-110,110,114]);
|
||||
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, '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_5k0) = struct('spec', '5k0', 'kmin', 1, 'kmax', 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_10k) = struct('spec', '10k', 'kmin', -103, 'kmax', 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_20k) = struct('spec', '20k', 'kmin', - 99, 'kmax', 311);
|
||||
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, 'boost', [1,3,101,103]);
|
||||
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, 'boost', [-103,-101,101,103]);
|
||||
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, '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_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
||||
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_10k) = struct('spec', '10k', 'kmin', - 69, 'kmax', 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_20k) = struct('spec', '20k', 'kmin', - 67, 'kmax', 213);
|
||||
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, 'boost', []);
|
||||
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, 'boost', [-69,-67,67,69]);
|
||||
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, '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_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
||||
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_10k) = struct('spec', '10k', 'kmin', - 44, 'kmax', 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_20k) = struct('spec', '20k', 'kmin', - 43, 'kmax', 135);
|
||||
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, 'boost', []);
|
||||
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, 'boost', [-44,-43,43,44]);
|
||||
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, '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_5k0) = struct('spec', '5k0', 'kmin', 0, 'kmax', 0);
|
||||
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_10k) = struct('spec', '10k', 'kmin', 0, 'kmax', 0);
|
||||
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_20k) = struct('spec', '20k', 'kmin', 0, 'kmax', 0);
|
||||
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, 'boost', []);
|
||||
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, 'boost', []);
|
||||
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, 'boost', []);
|
||||
|
||||
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];
|
||||
|
||||
@@ -14,9 +14,14 @@ n = mod(s, y);
|
||||
m = floor(s/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;
|
||||
|
||||
for b=spec_occ.boost
|
||||
ref_a(find(ref_c == b)) = 2*mag;
|
||||
end
|
||||
|
||||
switch ofdm_params.mode
|
||||
|
||||
case 'A'
|
||||
|
||||
+12
-22
@@ -148,15 +148,6 @@ for k=1:K,
|
||||
Xlast = X;
|
||||
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_)
|
||||
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}')
|
||||
@@ -220,20 +211,16 @@ W = calcWiener(drm_mode, drm_bw);
|
||||
|
||||
figure;
|
||||
% Detect scattered gain pilots
|
||||
sym_count = 0;
|
||||
start = skip_syms+frame_start
|
||||
symbol_counter = 0;
|
||||
win_count = 0;
|
||||
start = skip_syms+frame_start;
|
||||
H = zeros(N, 1);
|
||||
H = [];
|
||||
sym_H = [];
|
||||
sym_out = [];
|
||||
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;
|
||||
symbol_counter = 0;
|
||||
frames_per_window = 2*ofdm_drm_params.y
|
||||
H_gain_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);
|
||||
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);
|
||||
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)).');
|
||||
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_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 1
|
||||
H = H_gain*W{n+1};
|
||||
@@ -259,16 +248,16 @@ for k=start:length(Z_)
|
||||
sym_out(:, kk) = ZZ ./ H;
|
||||
if 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)
|
||||
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
|
||||
hold on;
|
||||
plot(sym_out(:, kk), '+');
|
||||
hold off;
|
||||
grid; title('Sym');
|
||||
end
|
||||
pause(0.01);
|
||||
pause(0.025);
|
||||
else
|
||||
ii = [H_gain_carriers_cell{1:6}]
|
||||
H = H_gain;
|
||||
@@ -282,6 +271,7 @@ for k=start:length(Z_)
|
||||
end
|
||||
kk = kk + 1;
|
||||
win_count = mod(win_count+1, frames_per_window);
|
||||
symbol_counter = symbol_counter + 1;
|
||||
|
||||
end
|
||||
|
||||
|
||||
+53
-53
@@ -47,64 +47,64 @@ x_suffix = zeros(2, Ng);
|
||||
|
||||
ofdm_spec_occ.kmin
|
||||
ofdm_spec_occ.kmax
|
||||
sym_count = 0;
|
||||
for k=1:N_frames
|
||||
for sym_count=0:ofdm_params.nspf-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;
|
||||
X = zeros(N,1);
|
||||
|
||||
if (sym_count==0) & (WITH_TIME_REF == 1)
|
||||
[ref_c ref_p ref_a] = getRefTime(ofdm_params.mode);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
% 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 WITH_GAIN_REF == 1
|
||||
[ref_c ref_p ref_a] = getRefGain(ofdm_params, ofdm_spec_occ, sym_count);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
if WITH_GAIN_REF == 1
|
||||
[ref_c ref_p ref_a] = getRefGain(ofdm_params, ofdm_spec_occ, sym_count);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
|
||||
if WITH_FREQ_REF == 1
|
||||
[ref_c ref_p ref_a] = getRefFreq(ofdm_params.mode);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
if (sym_count==0) & (WITH_TIME_REF == 1)
|
||||
[ref_c ref_p ref_a] = getRefTime(ofdm_params.mode);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
|
||||
X(c2i(N, 0)) = 0;
|
||||
|
||||
% Modulate
|
||||
xu = k_fft*ifft(X, N).';
|
||||
if WITH_RCWIN == 1
|
||||
x_prefix(1,:) = xu(N-Ng+1:N);
|
||||
x_suffix(1,:) = xu(1:Ng);
|
||||
|
||||
x_pw = x_suffix(2,:) .* (1-wng) + x_prefix(1,:) .* wng;
|
||||
|
||||
xs = [x_pw xu];
|
||||
|
||||
x_prefix(2,:) = x_prefix(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)
|
||||
if WITH_FREQ_REF == 1
|
||||
[ref_c ref_p ref_a] = getRefFreq(ofdm_params.mode);
|
||||
bins = c2i(N, ref_c);
|
||||
X(bins) = ref_a.*(exp(j*2*pi*ref_p/1024));
|
||||
end;
|
||||
|
||||
X(c2i(N, 0)) = 0;
|
||||
|
||||
% Modulate
|
||||
xu = k_fft*ifft(X, N).';
|
||||
if WITH_RCWIN == 1
|
||||
x_prefix(1,:) = xu(N-Ng+1:N);
|
||||
x_suffix(1,:) = xu(1:Ng);
|
||||
|
||||
x_pw = x_suffix(2,:) .* (1-wng) + x_prefix(1,:) .* wng;
|
||||
|
||||
xs = [x_pw xu];
|
||||
|
||||
x_prefix(2,:) = x_prefix(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(X);
|
||||
subplot(2, 1, 1)
|
||||
plot(0:N-1, abs(Xs(1:N)), '-*'); grid; axis([0 N-1 0 2]);
|
||||
subplot(2, 1, 2)
|
||||
plot(0:N-1, angle(Xs(1:N)), '-*'); grid; axis([0 N-1 -2*pi 2*pi]);
|
||||
pause(plot_speed);
|
||||
end
|
||||
end;
|
||||
Xs = fftshift(X);
|
||||
subplot(2, 1, 1)
|
||||
plot(0:N-1, abs(Xs(1:N)), '-*'); grid; axis([0 N-1 0 3.0]);
|
||||
subplot(2, 1, 2)
|
||||
plot(0:N-1, angle(Xs(1:N)), '-*'); grid; axis([0 N-1 -2*pi 2*pi]);
|
||||
pause(plot_speed);
|
||||
end
|
||||
sym_count = mod(sym_count+1, ofdm_params.nspf);
|
||||
end;
|
||||
hold off;
|
||||
grid;
|
||||
@@ -119,7 +119,7 @@ xup = filter(hlp, 1, xup);
|
||||
yc = exp(j*2*pi.*(0:length(xup)-1)*0.25) .* xup;
|
||||
yv = real(yc) + imag(yc);
|
||||
|
||||
xv = conj(xv')./abs(max(xv));
|
||||
xv = xv.' ./abs(max(xv));
|
||||
yv = yv'./max(yv);
|
||||
|
||||
wavwrite(0.9*yv,4*fa,16,'yv.wav')
|
||||
|
||||
Reference in New Issue
Block a user