Initial version

git-svn-id: http://moon:8086/svn/matlab/trunk@2 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2014-07-26 07:54:29 +00:00
parent f1114e3b02
commit d5d5df21f9
+107
View File
@@ -0,0 +1,107 @@
% function ofdm_tx(N_data)
function yv = ofdm_tx(N_data)
j = sqrt(-1);
WORK_BANDPASS = 1;
do_evaluate = 0;
% Params
fa = 48000;
fc = fa/4;
F1 = 750;
F2 = 2250;
F3 = 3000;
N_Carrier = 226;
M_qam = 64;
N_lp = 301;
TSym = 21.3330E-3
TGrd = 5.333E-3
TFrm = TSym+TGrd
NGrd = round(TGrd*fa)
NSym = round(TSym*fa)
NFrm = round(TFrm*fa)
N_fft = NSym
bin_c = fix(N_fft*fc/fa)+1;
bin_f1 = fix(N_fft*(fc+F1)/fa)+1;
bin_f2 = fix(N_fft*(fc+F2)/fa)+1;
bin_f3 = fix(N_fft*(fc+F3)/fa)+1;
% Source
qlut = qamtable(M_qam);
s = round(M_qam*rand(N_data,1)+0.5);
% Band pass for transmission
f_lp = N_Carrier*fa/N_fft
hbp = cos(2*pi*(0:N_lp-1)*fc/fa).*sinc((-(N_lp-1)/2:(N_lp-1)/2)*f_lp/fa);
hbp = hbp/sum(hbp.^2).*Hanning(N_lp)';
hlp = sinc((-(N_lp-1)/2:(N_lp-1)/2)*f_lp/fa);
hlp = hlp/sum(hlp.^2).*Hanning(N_lp)';
t = 1;
if (WORK_BANDPASS == 1)
bin_range = N_fft/4-N_Carrier/2:N_fft/4+N_Carrier/2;
else
bin_range = 1:N_Carrier;
end;
N_bins = length(bin_range);
for k=1:N_data/N_bins,
% DC
X = zeros(N_fft,1);
X(1) = 0;
for m=1:N_bins,
% Data
X(bin_range(m)) = qlut(s(t));
t = t + 1;
end;
% Additional carrier
if (WORK_BANDPASS == 1)
X(bin_c) = 1.0;
X(bin_f1) = 1.0 + j*1.0;
X(bin_f2) = 1.0 - j*1.0;
X(bin_f3) = -1.0 + j*1.0;
end;
% Make conj. symmetric in F => real in T
X(N_fft:-1:N_fft/2+1) = conj(X(2:N_fft/2+1));
% Modulate
x = ifft(X);
xgrd = x(NSym-NGrd+1:NSym);
xt = [xgrd' x']';
xv((k-1)*(NFrm)+1:k*(NFrm)) = xt;
if (do_evaluate == 1)
xf = fft(xt(NGrd+1:NSym+NGrd), N_fft);
plot(xf, '+'); grid;
pause;
end;
end;
k_fft = 0.3333*sqrt(N_fft);
% Pulse shape
if (WORK_BANDPASS == 1)
yv = real(filter(hbp,1,k_fft*xv));
% yv = k_fft*xv;
else
yc = cos(2*pi*(0:length(xv)-1)*fc/fa);
yF1 = 1.0/N_fft*cos(2*pi*(0:length(xv)-1)*F1/fa);
yF2 = 1.0/N_fft*cos(2*pi*(0:length(xv)-1)*F2/fa);
yF3 = 1.0/N_fft*cos(2*pi*(0:length(xv)-1)*F3/fa);
yv = yc.*(0.025 + filter(hlp,1,k_fft*xv) + yF1 + yF2 + yF3);
end;
% Output
close all;
figure;
freqz(hlp);
wavwrite(yv,fa,16,'yv.wav')