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

📄 leng.m

📁 基带OFDM系统的M文件
💻 M
字号:


close all;
clear all;
clc;
IFFT_bin_length=1024;
carrier_count=1000;
bits_per_symbol=2;
symbols_per_carrier=12;



N=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=1:carrier_count;

GI=10;             
N_snr=10;          
snr=3;  
td=1;
%------------------------------------------------------------



E=zeros(1,N);
XX=zeros(1,N);
dif_bit=zeros(1,N);
dif_bit1=zeros(1,N);
dif_bit2=zeros(1,N);
dif_bit3=zeros(1,N);



R=randint(1,N);%***************************************产生二进制随即序列

%--------------------------------------------------------
%************************************************************QPSK调制

s=(R.*2-1)/sqrt(2);
sreal=s(1:2:N);
simage=s(2:2:N);
qpskdata=sreal+j.*simage;



%--------------------------------------------------------
%********************************************************************串并转换
data2=reshape(qpskdata,carrier_count,symbols_per_carrier).';

%---------------------------------------------------------

signal=1:carrier_count;%1:
% signal(pilot)=[];
% X3(:,pilot)=training_symbols;
% X3(:,signal)=X2;
%   %X3=cat(1,training_symbols,X2);
% IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);
IFFT_modulation(:,carriers)=data2;
%IFFT_modulation(:,conjugate_carriers)=conj(X3);
data4=ifft(IFFT_modulation,IFFT_bin_length,2);%********************iff变换  
%data5=data4.';
%**************************************************************加循环前缀)
for k=1:symbols_per_carrier;%
   for i=1:IFFT_bin_length;%
      data6(k,i+GI)=data4(k,i);
   end
   for i=1:GI;
      data6(k,i)=data4(k,i+IFFT_bin_length-GI);    % 
   end
end
%---------------------------------------------------------
%**************************************************************并串转换
X7=reshape(data6.',1,symbols_per_carrier*(IFFT_bin_length+GI));

%---------------------------------------------------------
%***************************************************************多径信道

fd=100; 
r=4;   
a=[0.15 0.4 0.55 0.7 ]; 
d=[ 4 6 8 10]; 
T=1;  
th=[0 72 144 90 216 288]*pi./180;
% h=zeros(1,carrier_count);
hh=[];
    for k=1:r
        
        h1=a(k)*exp(j*((2*pi*T*fd*d(k)/carrier_count)));
        
        hh=[hh,h1];
    end
   
 
% %--------------------------------------------------------
% 
channel1=zeros(size(X7));
channel1(1+d(1):length(X7))=hh(1)*X7(1:length(X7)-d(1));
channel2=zeros(size(X7));
channel2(1+d(2):length(X7))=hh(2)*X7(1:length(X7)-d(2));
channel3=zeros(size(X7));
channel3(1+d(3):length(X7))=hh(3)*X7(1:length(X7)-d(3));
channel4=zeros(size(X7));
channel4(1+d(4):length(X7))=hh(4)*X7(1:length(X7)-d(4));


%---------------------------------------------------------------
Tx_data=X7+channel1+channel2+channel3+channel4;
%---------------------------------------------------------------


%---------------------------------------------------------------
%----------------------------------------------------------------
%********************************************************加高斯白噪声
Error_ber=[];

for snr_db=-20:snr:N_snr       

    code_power=0;
    code_power=[norm(Tx_data)]^2/(length(Tx_data));
   
    bit_power=code_power/bits_per_symbol;
    noise_power=10*log10((bit_power/(10^(snr_db/10))));
    noise=wgn(1,length(Tx_data),noise_power,'complex');
    
    Y7=Tx_data+noise;

%-------------------------------------------------------
  %*********************************************************串并变换
   Y6=reshape(Y7,IFFT_bin_length+GI,symbols_per_carrier).';
   
  %***********************************************************去保护间隔
    for k=1:symbols_per_carrier;
       for i=1:IFFT_bin_length;
           Y5(k,i)=Y6(k,i+GI);
       end
    end
     Y4=fft(Y5,IFFT_bin_length,2);%*********************fft变换
 
 %-------------------------------------------------------------   

  H=[];
  Y2=Y4(:,signal);  
 
  
%-------------------------------------------------------------------

 
 
 
     
             
             
%-------------------------------------------------------------
  %************************************************************并串变换
  YY=reshape(Y2.',1,N/bits_per_symbol);
 
 
%------------------------------------------------------------
%****************************************************************QPSK解调
   y_real=sign(real(YY));
   y_image=sign(imag(YY));
   y_re=y_real./sqrt(2);
   y_im=y_image./sqrt(2); 

 ofdm=[];
   ofdm_data=[];
  for k=1:length(y_real);
     ofdm=[ofdm,[y_real(k),y_image(k)]];
  end;
 
 for k=1:length(y_re);
     ofdm_data=[ofdm_data,[y_re(k),y_im(k)]];
 end;
figure(2)
subplot(211)
stem(ofdm_data)
subplot(212)
stem(s)

%-------------------------------------------------------------
%*************************************************************误比特率

 dif_bit=s-ofdm_data; 


 ber_snr=0;    
    for k=1:N;
       if dif_bit(k)~=0;
         ber_snr=ber_snr+1;
    end;
    end
 Error_ber=[Error_ber,ber_snr];

end

BER=zeros(1,length(0:snr:N_snr));


BER=Error_ber./N;

%-------------------------------------------------------------
% figure(1)
% scatterplot(qpskdata)



%-------------------------------------------------------------画图
figure(3)
i=-20:snr:N_snr;
semilogy(i,BER,'-*g');

xlabel('信噪比');
ylabel('BER');

grid on;
% figure(4)
scatterplot(qpskdata)


fs=1000;
S1=fft(data2,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(20)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;

fs=1000;
S1=fft(Y4,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(19)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;


S1=fft(data4,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(21)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;


S1=fft(Y5,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(22)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;



S1=fft(data6,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(23)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;


S1=fft(Y6,1024); %求出原始信号的傅立叶变换
w=(0:511)/512*(fs/4);
figure(24)
plot(w,abs(S1(1:512)'));
title(' 滤波前' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;


⌨️ 快捷键说明

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