?? ofdmls.m
字號:
% ofdmls.m
% preparation part
sr = 250000;
m1 = 2;
br = sr*m1;
nd = 6;
ipoint = 8;
para = 52;
noc = 53;
fftlen = 64;
gilen = 16;
knd = 1; % number of konwn channel estimation OFDM symbol
ebn0 = 1;
% fading initialization
tstp = 1/sr/(fftlen+gilen);
itau = 0;
dlvl = 0;
itnd1 = 0;
itnd0 = nd*(fftlen+gilen)*10;
n0 = 6;
now1 = 1;
ith = 0;
fd = 160;
flat = 1;
for iii = 1:30
noe = 0;
nod = 0;
for ii = 1:1200
% generation of the data
data1 = rand(1,nd*para*m1)>0.5;
% modulation of the data
data2 = data1*2-1;
data21 = reshape(data2,para,nd*m1);
for kk = 1:nd
ich1((1:para),kk) = data21((1:para),(kk-1)*2+1);
qch1((1:para),kk) = data21((1:para),kk*2);
end
k = 1/sqrt(2);
ich11 = ich1.*k;
qch11 = qch1.*k;
% ce data generation
kndata = zeros(1,fftlen);
kndata0 = (rand(1,para)>0.5)*2-1;
kndata(2:27) = kndata0(1:26);
kndata(39:64) = kndata0(27:52);
ceich = kndata;
ceqch = zeros(1,fftlen);
% data maping
ich22 = zeros(fftlen,nd);
qch22 = zeros(fftlen,nd);
ich22(2:27,:) = ich11((1:26),:);
qch22(2:27,:) = qch11((1:26),:);
ich22((39:64),:) = ich11((27:52),:);
qch22((39:64),:) = qch11((27:52),:);
ich23 = [ceich' ich22];
qch23 = [ceqch' qch22];
% ifft
x = ich23+i*qch23;
y = ifft(x);
ich24 = real(y);
qch24 = imag(y);
% guard interval
fftlen2 = fftlen+gilen;
ich3 = ich24(fftlen-gilen+1:fftlen,:);
qch3 = qch24(fftlen-gilen+1:fftlen,:);
ich32 = [ich3;ich24];
qch32 = [qch3;qch24];
ich4 = reshape(ich32,1,fftlen2*(nd+1));
qch4 = reshape(qch32,1,fftlen2*(nd+1));
%Attenuation Calculation
spow=sum(ich4.^2+qch4.^2)/nd./52;
attn=0.5*spow*sr/br*10.^(-ebn0/10);
attn=sqrt(attn);
% pass the channel
[ifade,qfade,ramp,rcos,rsin]=sefade(ich4,qch4,itau,dlvl,ith,n0,itnd1,now1,length(ich4),tstp,fd,flat);
itnd1 = itnd1+itnd0; % Updata fading counter
% add the noise
niose1 = randn(1,fftlen2*nd);
noise2 = randn(1,fftlen2*nd);
ich5 = ich4+attn*noise1;
qch5 = qch4+attn*noise2;
% remove the guard interval
ich6 = reshape(ich5,fftlen2,nd);
qch6 = reshape(qch5,fftlen2,nd);
ich61 = ich6((gilen+1:fftlen2),:);
qch61 = qch6((gilen+1:fftlen2),:);
% FFT
rx=ich61+qch61.*i;
ry=fft(rx);
ich7=real(ry);
qch7=imag(ry);
% fading comensation by ce symbol
ceich1 = ich7(:,1);
ceqch1 = qch7(:,1);
ceich0 = ich23(:,1);
ceqch0 = qch23(:,1);
h1 = ceich1./ceich0;
h2 = ceqch1./ceqch0;
ieqv1 = [h1 h1 h1 h1 h1 h1 h1];
qeqv1 = [h2 h2 h2 h2 h2 h2 h2];
ich8 = ich7./ieqv1;
qch8 = qch7./qeqv1;
% ce symbol remove
ich9 = ich8(:,knd+1:nd+1);
qch9 = qch8(:,knd+1:nd+1);
% dc AND ploit data remove
ich10((1:26),:) = ich9((2:27),:);
ich10((27:52),:) = ich9((39:64),:);
qch10((1:26),:) = qch9((2:27),:);
qch10((27:52),:) = qch9((39:64),:);
% demodulation
ich11 = ich10./k;
qch11 = qch10./k;
for j = 1:nd
out1((1:para),(j-1)*m1+1) = ich11((1:para),j);
out1((1:para),j*m1) = qch11((1:para),j);
end
out((1:para),nd*m1) = out1((1:para),nd*m1)>0;
out11 = reshape(out,1,nd*m1*para);
noe = noe+sum(abs(data1-out11));
nod = nod+length(data1);
end
ber(iii) = noe/nod;
fprintf('%d\t%f\n',iii,ber(iii));
ebn0 = ebn0+1;
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -