gusucode.com > IEEE802.11a协议的无线通信仿真代码与资料 > 802.11a/receiver.m
%**********Receiver**********% function [R_SIGNAL_unpolit1,R_DATA_unpolit1]=receiver(I_data,Q_data,s,N_CBPS,N_SYM) %Number of data subcarriers% Nsd=48; %Number of pilot subcarriers% Nsp=4; %Number of subcarriers total% Nst=52; %Subcarriers frequency spacing% df=0.3125e+6; %IFFT/FFT period% T_fft=1/df; %PLCP preamble duration% T_preamble=16e-6; %Duration of the signal BPSK-OFDM symbol% T_signal=4e-6; %GI duration% T_GI=0.8e-6; %Training symbol GI duration% T_GI2=1.6e-6; %Symbol interval% T_SYM=4e-6; %Short training sequence duration% T_short=8e-6; %Long training sequence duration% T_long=8e-6; %The transition time% T_TR=100e-9; %Sampling rate% sample=20e6; dt=1/sample; t=0:dt:(2*8e-6+36*4e-6)+3*dt; r_out_data_all=I_data+i*Q_data;%接收到的总信号 r_out_signal=r_out_data_all(323:403);%接收到的signal字段 r_out_data=r_out_data_all(404:end);%接收到的data字段 %***********************OFDM解调******************************% R_SIGNAL=zeros(1,53); for k=1:53 for n=1:81 R_SIGNAL(k)=R_SIGNAL(k)+r_out_signal(n)*exp(-j*2*pi*(k-27)*df*((n-1)*dt-T_GI)); end end R_DATA=zeros(1,53*N_SYM); for n=1:N_SYM if n==1 for k=1:53 for m=1:81 R_DATA(k)=R_DATA(k)+r_out_data(m)*exp(-j*2*pi*(k-27)*df*((m-1)*dt-T_GI)); end end else for k=(n-1)*53+1:n*53 K=k-(n-1)*53; for m=(n-1)*80+2:n*80+1 R_DATA(k)=R_DATA(k)+r_out_data(m)*exp(-j*2*pi*(K-27)*df*((m-1)*dt-T_GI)); end end end end %*************************************对解调后的数据进行归一化***********************% signal=max(abs(R_SIGNAL)); data=max(abs(R_DATA)); for k=1:53 R_SIGNAL(k)=R_SIGNAL(k)/signal; end for n=1:53*N_SYM R_DATA(k)=R_DATA(k)/data; end % x=real(R_DATA); % y=imag(R_DATA); % figure(5) % plot(x,y,'r.'); % hold on % grid on % title('BPSK解调后星座图'); %**************************对signal去导频******************************************% R_SIGNAL_unpolit=zeros(1,48); R_SIGNAL_unpolit(1:5)=R_SIGNAL(1:5); R_SIGNAL_unpolit(6:18)=R_SIGNAL(7:19); R_SIGNAL_unpolit(19:24)=R_SIGNAL(21:26); R_SIGNAL_unpolit(25:30)=R_SIGNAL(28:33); R_SIGNAL_unpolit(31:43)=R_SIGNAL(35:47); R_SIGNAL_unpolit(44:48)=R_SIGNAL(49:53); %********************对signalBPSK解调****************************************% for k=1:48 if real(R_SIGNAL_unpolit(k))>=0 R_SIGNAL_unpolit(k)=1; else R_SIGNAL_unpolit(k)=0; end end %************************对data去导频*****************************************% R_DATA_unpolit=zeros(1,48*N_SYM); for n=1:N_SYM R_DATA_unpolit(1+(n-1)*48:5+(n-1)*48)=R_DATA(1+(n-1)*53:5+(n-1)*53); R_DATA_unpolit(6+(n-1)*48:18+(n-1)*48)=R_DATA(7+(n-1)*53:19+(n-1)*53); R_DATA_unpolit(19+(n-1)*48:24+(n-1)*48)=R_DATA(21+(n-1)*53:26+(n-1)*53); R_DATA_unpolit(25+(n-1)*48:30+(n-1)*48)=R_DATA(28+(n-1)*53:33+(n-1)*53); R_DATA_unpolit(31+(n-1)*48:43+(n-1)*48)=R_DATA(35+(n-1)*53:47+(n-1)*53); R_DATA_unpolit(44+(n-1)*48:48+(n-1)*48)=R_DATA(49+(n-1)*53:53+(n-1)*53); end %***************************对dataBPSK解调**********************************% for k=1:48*N_SYM if real(R_DATA_unpolit(k))>=0 R_DATA_unpolit(k)=1; else R_DATA_unpolit(k)=0; end end %*******************************去交织*********************************% R_SIGNAL_polit1=zeros(1,N_CBPS); for k=0:N_CBPS-1 y=k; x=16*y-(N_CBPS-1)*floor(16*y/N_CBPS); R_SIGNAL_unpolit1(y+1)=R_SIGNAL_unpolit(x+1); end R_DATA_unpolit1=zeros(1,N_CBPS); for n=1:N_SYM for k=0:N_CBPS-1 y=k; x=16*y-(N_CBPS-1)*floor(16*y/N_CBPS); R_DATA_unpolit1((n-1)*48+y+1)=R_DATA_unpolit((n-1)*48+x+1); end end %*********************************The end************************%