Æë³¹¤Òµ´óѧ 2014 ½ì±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
end
........................................................qam16.m................................................................. function x=qam16(y) if y==[0 0 0 0] x=1+j; elseif y==[0 0 1 0] x=1-j; elseif y==[1 0 0 0] x=-1+j; elseif y==[1 0 1 0] x=-1-j; elseif y==[0 1 0 0] x=3+j; elseif y==[0 0 0 1] x=1+3*j; elseif y==[0 1 1 0] x=3-j; elseif y==[0 0 1 1] x=1-3*j; elseif y==[1 0 0 1] x=-1+3*j; elseif y==[1 1 0 0] x=-3+j; elseif y==[1 1 1 0] x=-3-j; elseif y==[1 0 1 1] x=-1-3*j; elseif y==[0 1 0 1] x=3+3*j; elseif y==[1 1 0 1] x=-3+3*j; elseif y==[1 1 1 1] x=-3-3*j; elseif y==[0 1 1 1] x=3-3*j; end
......................................................de_qam16.m................................................ function y=de_qam16(x) %qam½âµ÷£¬X1ÊÇÐòÁг¤¶È£¬K1¾ÍÊÇ2^K1qam % for n=1:4:16
% x=1.4+sqrt(-1)*(-2.6); y=real(x); y1=imag(x);
if (y>=0)&(y<=2) y=1; elseif (y>2) y=3; elseif (y<-2) y=-3; else y=-1; end
if (y1>=0)&(y1<=2) y1=1; elseif (y1>2) y1=3; elseif (y1<-2) y1=-3; else y1=-1; end
x=complex(y,y1);
if x==1+j y=[0 0 0 0]; elseif x==1-j y=[0 0 1 0];
30
Æë³¹¤Òµ´óѧ 2014 ½ì±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
elseif x==-1+j y=[1 0 0 0]; elseif x==-1-j y=[1 0 1 0]; elseif x==3+j y=[0 1 0 0]; elseif x==1+3*j y=[0 0 0 1]; elseif x==3-j y=[0 1 1 0]; elseif x==1-3*j y=[0 0 1 1]; elseif x==-1+3*j y=[1 0 0 1]; elseif x==-3+j y=[1 1 0 0]; elseif x==-3-j y=[1 1 1 0]; elseif x==-1-3*j y=[1 0 1 1]; elseif x==3+3*j y=[0 1 0 1]; elseif x==-3+3*j y=[1 1 0 1]; elseif x==-3-3*j y=[1 1 1 1]; elseif x==3-3*j y=[0 1 1 1]; end
..................................................error_count.m.............................................. function err_num=error_count(source,receive) err_num=0; [m,n]=size(receive); for i=1:m for j=1:n
if receive(i,j) ~=source(i,j) err_num=err_num+1; end end end
..........................................................input_b.m..................................................... function x=input_b(N,NL)%NΪһ¸öofdm·ûºÅÖеÄ×Ó·ûºÅ¸öÊý£¬NLΪһ´Î·ÂÕæËù°üº¬µÄofdm·ûºÅÊý for i=1:NL
input_0=rand(1,4*N); %ÊäÈëµÄ¶þ½øÖÆÊý¾ÝÐòÁÐ for j=1:4*N
if input_0(j)>0.5 input(j,i)=1; else
input(j,i)=0; end end end x=input;
31
Æë³¹¤Òµ´óѧ 2014 ½ì±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
................................................immse_estimation.m.............................................
function
output=lmmse_estimation(input,pilot_inter,pilot_sequence,pilot_num,trms,t_max,snr); %trmsΪ¶à¾ÐŵÀµÄƽ¾ùÑÓʱ£¬t_maxΪ×î´óÑÓʱ,´Ë´¦ËùÓеÄʱ¼ä¶¼ÊÇÒѾ¶Ô²ÉÑù¼ä¸ô×öÁ˹éÒ»»¯ºóµÄ½á¹û
beta=17/9;
[N,NL]=size(input); Rhh=zeros(N,N); for k=1:N for l=1:N
Rhh(k,l)=(1-exp((-1)*t_max*((1/trms)+j*2*pi*(k-l)/N)))./(trms*(1-exp((-1)*t_max/trms))*((1/trms)+j*2*pi*(k-l)/N)); end end
output=zeros(N,NL-pilot_num); i=1; count=0; while i<=NL
Hi=input(:,i)./pilot_sequence;
Hlmmse=Rhh*inv(Rhh+(beta/snr)*eye(N))*Hi; count=count+1;
if count*pilot_inter<=(NL-pilot_num)
for p=((count-1)*pilot_inter+1):count*pilot_inter
output(:,p)=input(:,(i+p-(count-1)*pilot_inter))./Hlmmse; end else
for p=((count-1)*pilot_inter+1):(NL-pilot_num)
output(:,p)=input(:,(i+p-(count-1)*pilot_inter))./Hlmmse; end end
i=i+pilot_inter+1; end
...................................................insert_plot.m................................................ function
[output,count,pilot_sequence]=insert_pilot(pilot_inter,pilot_symbol_bit,map_out_block) % pilot_interΪµ¼Æµ·ûºÅ¼ä¸ô£¬ÒÔofdm·ûºÅ¸öÊýµÄÐÎʽ¸ø³ö£¬ÎªÕûÊý¡£¼ä¸ôÔ½´ó¹À¼ÆÎó²îÔ½´ó
% pilot_symbol_bit ²ÉÓó£Êýµ¼Æµ·ûºÅ£¬ÕâÀï¸ø³öËüµÄ¶þ½øÖÆÐÎʽ
32
Æë³¹¤Òµ´óѧ 2014 ½ì±¾¿Æ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
% map_out_block Ó³ÉäºóµÄÒ»´Î·ÂÕæËù°üº¬µÄ·ûºÅ¿é pilot_symbol=qam16(pilot_symbol_bit); %µ¼Æµ¸´·ûºÅ [N,NL]=size(map_out_block);
output=zeros(N,(NL+fix(NL/pilot_inter))); pilot_sequence=pilot_symbol*ones(N,1); count=0;%¼Ç¼²åÈ뵼ƵÐźŵĴÎÊý i=1;
while i<(NL+fix(NL/pilot_inter))%ÿ¸ôpilot_inter¸ö·ûºÅ²åÈëÒ»¸öµ¼ÆµÐòÁÐ output(:,i)=pilot_sequence; count=count+1;
if count*pilot_inter<=NL
output(:,(i+1):(i+pilot_inter))=map_out_block(:,((count-1)*pilot_inter+1):count*pilot_inter); else
output(:,(i+1):(i+pilot_inter+NL-count*pilot_inter))=map_out_block(:,((count-1)*pilot_inter+1):NL); end
i=i+pilot_inter+1; end
............................................lr_lmmse_estimation.m............................................. function
output=lr_lmmse_estimation(input,pilot_inter,pilot_sequence,pilot_num,trms,t_max,snr,cp);
%trmsΪ¶à¾ÐŵÀµÄƽ¾ùÑÓʱ£¬t_maxΪ×î´óÑÓʱ,´Ë´¦ËùÓеÄʱ¼ä¶¼ÊÇÒѾ¶Ô²ÉÑù¼ä¸ô×öÁ˹éÒ»»¯ºóµÄ½á¹û
beta=17/9;
[N,NL]=size(input); Rhh=zeros(N,N); for k=1:N
Forl=1:N
Rhh(k,l)=(1-exp((-1)*t_max*((1/trms)+j*2*pi*(k-l)/N)))./(trms*(1-exp((-1)*t_max/trms))*((1/trms)+j*2*pi*(k-l)/N)); end end
%ÒÔϹý³ÌÊǶÔRhh¾ØÕó½øÐÐÌØÕ÷Öµ·Ö½â£¬²¢°´ÌØÕ÷Öµ´óСÅŶӣ¬Ñ¡×î´óµÄ16¸öÌØÕ÷Öµ
[U,D]=eig(Rhh);%UΪÂúÖÈÓÏÕó£¬DÊÇÒÔÌØÕ÷ֵΪÖ÷¶Ô½ÇÏߵĶԽÇÕó dlamda=diag(D);%È¡D¶Ô½ÇÔªËØ¹¹³ÉÁÐÏòÁ¿
33

