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

📄 shi.txt

📁 OFDM的仿真程序
💻 TXT
字号:
%OFDM仿真程序%
clear
IFFT_bin_length=128;
carrier_count=128;
bits_per_symbol=2;
symbols_per_carrier=10;
N_number=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=1:carrier_count;
N_snr=40;          % 每比特信噪比
snr=8;             %信噪比间隔
%产生发送序列%
X=randint(1,N_number);
%QPSK调制%
s=(X.*2-1)/sqrt(2);
sreal=s(1:2:N_number);simage=s(2:2:N_number);
X1=sreal+j.*simage;
%串并转换%
X2=reshape(X1,carrier_count,symbols_per_carrier).';
%IFFT%
IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);
IFFT_modulation(:,carriers)=X2;
X3=(ifft(IFFT_modulation,IFFT_bin_length,2));
%串并变换%
nu=carrier_count*symbols_per_carrier;
X4=reshape(X3,1,nu);


%经过信道%

fd=100; %多普勒频移
r=6;   %多径数
a=[0.123 0.3 0.5 0.6 0.8 0.9]; %多径的幅度
d=[2 5 6 8 9 13]; %各径的延迟
T=1; %系统采样周期
th=[90 0 72 144 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   
h(d+1)=hh;
%--------------------------------------------------------
channel1=zeros(size(X4));
channel1(1+d(1):length(X4))=hh(1)*X4(1:length(X4)-d(1));
channel2=zeros(size(X4));
channel2(1+d(2):length(X4))=hh(2)*X4(1:length(X4)-d(2));
channel3=zeros(size(X4));
channel3(1+d(3):length(X4))=hh(3)*X4(1:length(X4)-d(3));
channel4=zeros(size(X4));
channel4(1+d(4):length(X4))=hh(4)*X4(1:length(X4)-d(4));
channel5=zeros(size(X4));
channel5(1+d(5):length(X4))=hh(5)*X4(1:length(X4)-d(5));
channel6=zeros(size(X4));
channel6(1+d(6):length(X4))=hh(6)*X4(1:length(X4)-d(6));
%---------------------------------------------------------------
Tx_data=X4+channel1+channel2+channel3+channel4;
Error_ber=[];
Error_ser=[];%误符号率
for snr_db=0:snr:N_snr
code_power=0;
code_power=[norm(Tx_data)]^2/(length(Tx_data));%信号的符号功率  
  %bit_power=var(Tx_data);
bit_power=code_power/bits_per_symbol;%比特功率 
    noise_power=10*log10((bit_power/(10^(snr_db/10))));%噪声功率
end
    noise=wgn(1,length(Tx_data),noise_power,'complex');%产生GAUSS白噪声信号
    Y=Tx_data+noise;
%串并变换%
X5=reshape(Y,10,128);
X6=(fft(IFFT_modulation,IFFT_bin_length,2));
X7=reshape(X6,1,nu);
%QPSK解调%
y_real=sign(real(X7));
y_image=sign(imag(X7));   
y_re=y_real./sqrt(2);   
y_im=y_image./sqrt(2);    
r00=[];      
for k=1:length(y_real);     
r00=[r00,[y_real(k),y_image(k)]];  
end
for i=1:2560
if r00(i)==-1
XX(i)=0;
else 
XX(i)=1;
end
end
XX;
%-------------------------------------------------------------
dif_bit=X-XX; 
ber_snr=0;    
%纪录误比特数    
for k=1:N_number;       
if dif_bit(k)~=0;         
ber_snr=ber_snr+1;      
end   
end;  
 Error_ber=[];
Error_ber=[Error_ber,ber_snr];
BER=zeros(1,length(0:snr:N_snr));
BER=Error_ber./N_number;
%做图%
i=0:snr:N_snr;
semilogy(i,BER,'-*r');
hold on;
grid on;
hold off			   

⌨️ 快捷键说明

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