Initial version
git-svn-id: http://moon:8086/svn/matlab/trunk@2 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
+107
@@ -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')
|
||||
Reference in New Issue
Block a user