⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdmls.m

📁 这是一个基于最小二乘法的信道估计算法
💻 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
        
        
        
            
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -