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

📄 clippingnhmuc_ssber.m

📁 mo phong ber cua OFDM
💻 M
字号:
clear all
tic
Nbit = 10240*3*6;            %so luong bits--64 QAM thi la 102400*6*2
N = 64;                      %so kenh--52 doi voi 802.11a
N_FFT = 64;                  %kich co FFT
N_data = 64;                 %so symbol m-ary tren mot OFDM symbol
Zeropad = 0;                 %chen 0 
S_temp = [];                 %tam
X = [];                      %tam
X_xen=[];                    %tam
CR = [1.0 1.2 1.4];          %
sigma =  0:1:35;             %SNR

                                             MM=1:.05:15;    %PAPR0
                                             ccdf1=zeros(3,length(MM));
                                             ccdf2=zeros(3,length(MM));

Z = rand(1,Nbit);%tao chuoi bits
        for i=1:length(Z)
            if Z(i)>0.5
                Z(i)=1;
            else Z(i)=0;
            end
        end
        Z_backup = Z;
        

 m = 64 ; k = log2(m); %dieu che m-ary******************co chinh lai
 
 % convert from bit sequences Z to symbol sequences S
        Z = reshape(Z,k,length(Z)/k);
        S = zeros(1,size(Z,2));
        for a = 1 : size(Z,2)
            for b = 1 : size(Z,1)
                S(a) = S(a) + Z(b,a)*2^(b-1);
            end
        end

Z = Z_backup;
S1 = S;
%dieu che BPSK
S = qammod(S,m);

%so symbol du lieu tong cong
Nsym = length(S)/N_data;%it bua fai lam tron

for jj = 1:length(sigma)%cac muc SNR khac nhau

    %%%Kenh truyen-AWGN%%%%

sigma1 = 10^(-sigma(jj)/10);
noise = sqrt(sigma1)*randn(1,length(S))+j*sqrt(sigma1)*randn(1,length(S));%length(X)=length(S)

for ii = 1:3%cac muc xen khac nhau

%ii=3
    X       =   []; %xoa X cho muc xen khac
    X_xen   =   []; %Xoa X_xen cho muc xen khac   
   
  for jjj = 1:Nsym %Nsymbol symbols OFDM
    
    %1 symbol OFDM 
    for i = 1: N_data 
    S_temp(i)= S(i+(jjj-1).*N_data);
    end
    %S/P-
    S_SP = reshape(S_temp,N,length(S_temp)/N); 
    %ifft
    S_ifft = ifft(S_SP)*sqrt(N_data);
    %P/S
    S_PS=reshape(S_ifft,1,length(S_temp));
    
    %Tinh nguong clipping
    %A(ii) = CR(ii)*sqrt(2)*std(S_PS);%right
     A(ii) = CR(ii)*sqrt(2)*std(S_PS);
    
    %clipping-------don gian nhung gay meo tin hieu
    for i = 1:length(S_PS)
        if abs(S_PS(i)) > A(ii)
            S_PS_xen(i) = A(ii).*exp(j*angle(S_PS(i)));%S_PS(i)/abs(S_PS(i));%xen bien do, pha giu nguyen
          
        else
            S_PS_xen(i) = S_PS(i);
        end
    end
    clear i;
    %Tinh PAPR cho moi Symbol OFDM
    trungbinh = S_PS*S_PS'/length(S_PS);
    dinh = max(S_PS.*conj(S_PS));
    paprSymbol(ii,jjj) = dinh/trungbinh;
    paprSymboldB(ii,jjj) = 10*log10(paprSymbol(ii,jjj));
     
    %tinh PAPR cho moi symbol OFDM_clipping
    trungbinh = S_PS_xen*S_PS_xen'/length(S_PS_xen);%= mean(S_PS_xen.*conj(S_PS_xen))
    dinh = max(S_PS_xen.*conj(S_PS_xen));
    paprSymbol_xen(ii,jjj) = dinh/trungbinh;
    paprSymbol_xendB(ii,jjj) = 10*log10(paprSymbol_xen(ii,jjj));
    
%tong Nsymbol phat di ne`
X = [X S_PS];               %OFDM
X_xen = [X_xen S_PS_xen];   %OFDM_xen


                                            for iii=1:length(MM);
                                                if paprSymboldB(ii,jjj)>MM(iii);
                                                    ccdf1(ii,iii)=ccdf1(ii,iii)+1;
                                                end
                                                if paprSymbol_xendB(ii,jjj)>MM(iii);
                                                    ccdf2(ii,iii)=ccdf2(ii,iii)+1;
                                                end
                                            end
  end%end cua jjj
  
  

%%%%%%%%%%%%%%%%PHIA THU%%%%%%%%%%%%%%%%
%Y = X + noise;
Y  = awgn(X,sigma(jj),'measured');

%Y_xen = X_xen + noise;
Y_xen  = awgn(X_xen,sigma(jj),'measured');

%%%%%%%%%%%%%%%%OFDM%%%%%%%%%%%%%%%%%%%%
%S/P
Y_SP    =   reshape(Y,N,length(Y)/N);
%FFT
Y_FFT   =   fft(Y_SP)./sqrt(N_data);
%P/S
Y_PS    =   reshape (Y_FFT,1,length(Y));

%M-ary demod
Y_thu   =   qamdemod(Y_PS,m);%*********************co chinh lai

%Chuyen tu symbol sequences -> bit sequences
Y_thu   =   de2bi(Y_thu);
Y_thu   =   reshape(Y_thu',1,length(Z));
%figure(5)
%stem (abs(Y_thu-Z))

%dem loi
dem =   0;
lech    =   abs(Y_thu-Z);
for i   =   1:length(Z)
    if lech(i)~=0
        dem = dem   +   1;
    end
end
sobitloi        =   dem
ber(ii,jj)         =   sobitloi/length(Z)

%%%%%%%%%%%OFDM_xen%%%%%%%%%%%%%%%%%
%S/P
Y_SP_xen         =   reshape(Y_xen,N,length(Y_xen)/N);
%FFT
Y_FFT_xen        =   fft(Y_SP_xen)./sqrt(N_data);
%P/S
Y_PS_xen         =   reshape (Y_FFT_xen,1,length(Y_xen));

%M-ary demod
Y_thu_xen        =   qamdemod(Y_PS_xen,m);%*******************co chinh lai


%Chuyen tu symbol sequences -> bit sequences
Y_thu_xen        =   de2bi(Y_thu_xen);
Y_thu_xen        =   reshape(Y_thu_xen',1,length(Z));


%dem loi
dem              =   0;
lech_xen         =   abs(Y_thu_xen-Z);
for i            =   1:length(Z)
    if lech_xen(i)~=0
        dem = dem+1;
    end
end
sobitloi_xen    =   dem
ber_xen(ii,jj)     =   sobitloi_xen/length(Z)

end%end cua ii
end%end cua jj


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CCDF cach khac
                                    for ii = 1:3;
                                    %ii=1
                                    figure(4)
                                     ccdf0(ii,:) = ccdf1(ii,:)./Nsym;
                                     ccdf3(ii,:) = ccdf2(ii,:)./Nsym;
                                     hold on
                                     semilogy(MM,ccdf0(ii,:),'r-')
                                     legend('goc ')
                                         if ii == 1
                                             semilogy(MM,ccdf3(ii,:),'b-')
                                             legend('clipping CL= ')
                                         elseif ii == 2
                                             semilogy(MM,ccdf3(ii,:),'g-')
                                             legend('clipping CL= ')
                                         else
                                             semilogy(MM,ccdf3(ii,:),'m-')
                                             legend('clipping CL= ')
                                         end
                                     title('clipping CCDF')
                                     xlabel('papr(dB)'),ylabel('ccdf')                                     
                                     hold off
                                     grid on
                                    end
                                     
ber
ber_xen
figure(5)
semilogy(sigma,ber(1,:),'r-*',sigma,ber_xen(1,:),'b->',sigma,ber_xen(2,:),'g-0',sigma,ber_xen(3,:),'m-+');
grid on                                                                  
end











 

⌨️ 快捷键说明

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