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

📄 ofdm.m

📁 matlab code for OFDM
💻 M
字号:
%-------------------------------------------------------
% TP de Communications Num閞iques : transmission OFDM
%-------------------------------------------------------

clear all;
close all;

N = 2^15;
M = 4;
Ns = N/M;
Np = 256;
L = 64;
Ntirage = 1;

s = zeros(1, Ns);
sest = zeros(1, Ns);
aEst = zeros(1,N);
x = zeros(1,Ns + L*Ns/Np);
r = zeros(1,Ns);
Teb = zeros(1,10);

% Filtre mod閘isant le canal
%---------------------------
h = [1 -0.7];
H = fft(h,Np) /sqrt(Np);    % DFT de h pour Zero Forcing


% Chaine de communication
%------------------------

for EbN0db = 0:9
    %data = fopen('data.txt','a');
    for k = 1:Ntirage
    
        % G閚閞ation d'une trame binaire uniform閙ent distribu閑
        a = round(rand(1,N));

        % Mise sur constellation : modulation 16-QAM
        for j = 1:Ns
            word = a(1+(j-1)*4:j*4);
            s(j) = MQAM(word);
        end

        sigmas2 = var(s);
        Es = sigmas2;
        sigmab2 = Es/log2(2^M) * 10^(-EbN0db /10);
        
        %-----------------------------------------------
        % Emetteur OFDM
        j = 1:Np;
        index = 1:Np+L;
        while j(end) <= Ns
            ofdmSymb = s(j);                    % S/P
            xk = sqrt(Np)*ifft(ofdmSymb,Np);    % IDFT
            prefix = xk(end-L+1:end);           % pr閒ixe cyclique
            x(index) = [prefix xk];             % P/S
            j = j+Np;
            index = index +Np+L;
        end
        %----------------------------------------------
        
        
        % Passage dans le canal
        xf = canal(x, h);

        % Ajout de Bruit blanc gaussien complexe
        b = bcgaussien (sigmab2, length(xf));
        y = xf + b;
        
        
        %----------------------------------------------
        % R閏epteur OFDM
        j = 1:Np;
        p = 1:Np+L;
        while j(end) <= Ns
            yk = y(p);                    % S/P
            yk = yk(L+1:end);             % suppression du pr閒ixe
            rk = fft(yk,Np) /sqrt(Np);    % DFT
            rkt = rk ./ H;                % ZF
            r(j) = rkt;                   % P/S
            j = j+Np;
            p = p+Np+L;
        end
        %-----------------------------------------------      
        
        
        % D閏ision
        for j=1:Ns
            sest(j) = seuil(r(j));
        end
        
        % Demapping
        for j = 1:Ns
            word = unmapping(sest(j));
            aEst(1+(j-1)*4:j*4) = word;
        end
        
        % Calcul des erreurs bit
        diff = mod(aEst - a, 2);
        Teb(EbN0db +1) = Teb(EbN0db +1) + sum(diff);
    end
    
    % Teb moyen
    Teb(EbN0db +1) = Teb(EbN0db +1) / (Ntirage * N);
    EbN0db
    Teb(EbN0db +1)
    
    % 閏riture des Teb dans un fichier
    %fprintf(data,'%i %f\n',EbN0db,Teb(EbN0db +1));
    %fclose(data);
end

semilogy([0:9],Teb);

⌨️ 快捷键说明

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