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

📄 实验程序.txt

📁 OFDM用于有限传输的程序
💻 TXT
字号:
%author:liuqingwei May 12th 2006 9:40 PM.
%OFDM Channel Estimation Based on Comb Pilot
%IFFT_bin_length: IFFT和FFT的点数
%carrier_count: 子载波个数
%bits_per_symbol: 每符号上的比特数
%symbols_per_carrier: 每桢的OFDM符号数
%X:欲发送的二进制比特流
clear all;
IFFT_bin_length=256;
carrier_count=200;
bits_per_symbol=2;
symbols_per_carrier=12;
N_number=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=1:carrier_count;
GI=8;             % guard interval length
N_snr=40;          % 每比特信噪比
snr=8;             %信噪比间隔
%------------------------------------------------------------% vector initialization
X=zeros(1,500);
X1=[];X2=[];X3=[];X4=[];X5=[];X6=[];X7=[];Y1=[];Y2=[];Y3=[];Y4=[];Y5=[];Y6=[];Y7=[];XX=zeros(1,N_number);
dif_bit=zeros(1,N_number);
dif_bit1=zeros(1,N_number);
dif_bit2=zeros(1,N_number);
dif_bit3=zeros(1,N_number);
X=randint(1,N_number);%产生二进制随即序列(非0即1)
%--------------------------------------------------------%QPSK调制:
%(1 1)->pi/4;(0 1)->3*pi/4;(0 0)->-3*pi/4;(1,0)->-pi/4;
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_modulation=zeros(symbols_per_carrier,IFFT_bin_length);
IFFT_modulation(:,carriers)=X2;
IFFT_modulation(:,carriers)=conj(X2);
X4=real(ifft(IFFT_modulation,IFFT_bin_length,2));
%X5=X4.';
for k=1:symbols_per_carrier;
   for i=1:IFFT_bin_length;      
X6(k,i+GI)=X4(k,i);
   end
   for i=1:GI;
      X6(k,i)=X4(k,i+IFFT_bin_length-GI);    
   end
end
%---------------------------------------------------------%并串转换
X7=reshape(X6.',1,symbols_per_carrier*(IFFT_bin_length+GI));
%信道模型:带多普勒频移的瑞利衰落信道
clip_level=0.6;
norm_factor = max(abs(X7));	
X7 = (1/norm_factor) * X7;
for i = 1:length(X7)
	if X7(i) > clip_level
		recv(i) = clip_level;
	end
	if X7(i) < -clip_level
		X7(i) = -clip_level;
	end
end

A=unifrnd(1,50,1,100);
B=unifrnd(0.2,0.8,1,100);
v=size(X7);
copy=zeros(size(X7));
for i=1:100
for j=floor(1+A(i):length(X7))
copy(j)=B(i)*X7(ceil(j-A(i)));
end
end
for i=1:length(X7)
X7=X7+copy(i);
end
Error_ber=[];%误比特率
Error_ber1=[];
Error_ber2=[];
Error_ber3=[];
Error_ser=[];%误符号率
for snr_db=0:snr:N_snr    
code_power=0;    
code_power=[norm(X7)]^2/(length(X7));%信号的符号功率  
  %bit_power=var(X7);    
bit_power=code_power/bits_per_symbol;%比特功率 
    noise_power=10*log10((bit_power/(10^(snr_db/10))));
end
%噪声功率   
 noise=wgn(1,length(X7),noise_power,'complex');
%产生GAUSS白噪声信号  
X7=X7+noise;
Y6=reshape(X7,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=real(fft(Y5,IFFT_bin_length,2));    
 Y3=Y4(:,carriers); 
%并串变换  
YY=reshape(Y3.',1,N_number/bits_per_symbol);  YY1=reshape(Y3.',1,N_number/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); 
   y_real1=sign(real(YY1));
   y_image1=sign(imag(YY1));
   y_re1=y_real1./sqrt(2);
   y_im1=y_image1./sqrt(2); 
    r00=[];
   r01=[];
   r10=[];   r11=[];  
for k=1:length(y_real)    
r00=[r00,[y_real(k),y_image(k)]];
end
 for k=1:length(y_real1)
     r10=[r10,[y_real1(k),y_image1(k)]];  
end
for k=1:length(y_re)    
r01=[r01,[y_re(k),y_im(k)]]; end
 for k=1:length(y_re1)
    r11=[r11,[y_re1(k),y_im1(k)]]; 
end   
XX(find(r01>0))=1;
%------------------------------------------------------------
%计算在不同信噪比下的误比特率并作图
dif_bit=s-r01;  
dif_bit1=s-r11;  
ber_snr=0;    
%纪录误比特数   
 for k=1:N_number;       
if dif_bit(k)~=0;        
ber_snr=ber_snr+1;       
end   
end;
 ber_snr1=0;    
%纪录误比特数   
 for k=1:N_number
      if dif_bit1(k)~=0;          
ber_snr1=ber_snr1+1;    
 end  
 end
 Error_ber=[Error_ber,ber_snr]; Error_ber1=[Error_ber1,ber_snr1];
BER=zeros(1,length(0:snr:N_snr));
BER1=zeros(1,length(0:snr:N_snr));
BER=Error_ber./N_number;
BER1=Error_ber1./N_number;
%------------------------------------------------------------
i=0:snr:N_snr;
semilogy(i,BER,'-*r');
%hold on;
%semilogy(i,BER1,'-og');
%hold on;
grid on;
legend('No Channel Estimation');
hold off

⌨️ 快捷键说明

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