- improved TX and RX
git-svn-id: http://moon:8086/svn/matlab/trunk@5 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
+18
-17
@@ -2,12 +2,14 @@
|
||||
function [yv xv] = ofdm_tx(N_frames)
|
||||
|
||||
close all;
|
||||
M_QAM = 4;
|
||||
RC_ROLLOFF = 0.1;
|
||||
|
||||
WITH_RCWIN = 1;
|
||||
WITH_DATA = 1;
|
||||
WITH_FREQ_REF = 1;
|
||||
WITH_TIME_REF = 0;
|
||||
WITH_TIME_REF = 1;
|
||||
|
||||
M_QAM = 16;
|
||||
RCWIN_ROLLOFF = 0.1;
|
||||
|
||||
% Params
|
||||
fa = 48000;
|
||||
@@ -80,11 +82,11 @@ 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
|
||||
[txwin Nt] = txwin_eval(Nu, Ng, RC_ROLLOFF);
|
||||
[rcwin Nt] = txwin_eval(Nu, Ng, RCWIN_ROLLOFF);
|
||||
|
||||
% Source
|
||||
qlut = qamtable(M_QAM);
|
||||
@@ -102,7 +104,8 @@ for k=1:N_frames
|
||||
% Data
|
||||
if WITH_DATA == 1
|
||||
data_i = c2i(N_fft, ofdm_spec_occ.kmin:1:ofdm_spec_occ.kmax);
|
||||
X(data_i) = 0.20*qlut(round(M_QAM*rand(1, length(data_i))+0.5));
|
||||
sym = round(M_QAM*rand(1, length(data_i))+0.5);
|
||||
X(data_i) = 0.20*qlut(sym);
|
||||
end;
|
||||
% X(c2i(N_fft,65)) = 0.20*qlut(round(M_qam*rand(1, 1)+0.5));
|
||||
|
||||
@@ -117,13 +120,15 @@ for k=1:N_frames
|
||||
X(c2i(N_fft, ref_c)) = 0.20*ref_a.*(exp(2*pi*i*ref_p/1024));
|
||||
end;
|
||||
|
||||
% X(1) = 0.2;
|
||||
|
||||
% Modulate
|
||||
xu = k_fft*ifft(X, N_fft)';
|
||||
xs = [xu(Nu-Ng+1:Nu) xu xu(1:Nt)] .* txwin;
|
||||
xs(1:Nt) = xs(1:Nt) + xt(1:Nt);
|
||||
xt = xs(Ng+Nu+1:Ng+Nu+Nt);
|
||||
if WITH_RCWIN == 1
|
||||
xs = [xu(Nu-Ng+1:Nu) xu xu(1:Nt)] .* rcwin;
|
||||
xs(1:Nt) = xs(1:Nt) + xt(1:Nt);
|
||||
xt = xs(Ng+Nu+1:Ng+Nu+Nt);
|
||||
else
|
||||
xs = [xu(Nu-Ng+1:Nu) xu];
|
||||
end;
|
||||
xv = [xv xs(1:Ng+Nu)];
|
||||
Xs = fft(xs(Ng+1:Ng+Nu), N_fft)/k_fft;
|
||||
plot(fa*(0:N_fft/8-1)/N_fft, abs(Xs(1:N_fft/8)), '-*'); grid;
|
||||
@@ -132,16 +137,12 @@ for k=1:N_frames
|
||||
end;
|
||||
|
||||
% Modulate on carrier
|
||||
yc = 0.5*exp(i*2*pi.*(0:length(xv)-1)*fc/fa) .* filter(hlp,1,xv);
|
||||
yc = 0.5*exp(i*2*pi.*(0:length(xv)-1)*fc/fa) .* xv; %filter(hlp,1,xv);
|
||||
yv = real(yc) + imag(yc);
|
||||
|
||||
xv = xv';
|
||||
xv = conj(xv');
|
||||
yv = yv';
|
||||
|
||||
% Output
|
||||
figure;
|
||||
freqz(hlp);
|
||||
|
||||
wavwrite(0.9*yv,fa,16,'yv.wav')
|
||||
wavwrite(0.9*[real(xv) imag(xv)],fa,16,'xv.wav')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user