Á½ÖÖOFDMϵͳÐŵÀ¹À¼ÆËã·¨µÄ±È½ÏÑо¿¼°MATLAB·ÂÕæ-±ÏÒµÂÛÎÄ

2026/4/26 23:12:32

Æë³¹¤Òµ´óѧ 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


Á½ÖÖOFDMϵͳÐŵÀ¹À¼ÆËã·¨µÄ±È½ÏÑо¿¼°MATLAB·ÂÕæ-±ÏÒµÂÛÎÄ.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ
ËÑË÷¸ü¶à¹ØÓÚ£º Á½ÖÖOFDMϵͳÐŵÀ¹À¼ÆËã·¨µÄ±È½ÏÑо¿¼°MATLAB·ÂÕæ-±Ï µÄÎĵµ
Ïà¹ØÍÆ¼ö
Ïà¹ØÔĶÁ
¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÏÂÔØ±¾ÎĵµÐèÒªÖ§¸¶ 10 Ôª

Ö§¸¶·½Ê½£º

¿ªÍ¨VIP°üÔ»áÔ± ÌØ¼Û£º29Ôª/ÔÂ

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºxuecool-com QQ£º370150219