1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56Tl5Zu
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
正交频分复用(orthogonal frequency-division multiplexing, OFDM) 技术是一种多载波数字调制技术,它具有抗多径能力强,频谱利用率高等优点,与其他技术结合在一起应用到第四代移动通信中。但OFDM 技术的缺点是对定时同步误差和频率偏差非常敏感。定时偏差会造成相位的旋转,而频率偏移会使OFDM 各子载波间正交性遭到破坏,系统性能急剧恶化。因此准确地时频同步对提升OFDM 系统的整体性能起到非常关键的作用。
4.部分源码
for jk=2:1:num_fram
jk
seed_num=jk;
rand('state',seed_num);
Bits_IN(1:FFTLen*sym_num*M)=rand(1,FFTLen*sym_num*M)>0.5; % 产生OFDM采样点
%-----------------串并转换-----------------------------------------
paradata=reshape(Bits_IN,FFTLen,sym_num*M); %串并转换排成256列
%----------------QPSK调制------------------------------------------
paradata2=paradata.*2-1;
qpsk_i = zeros(FFTLen,sym_num);
qpsk_q = zeros(FFTLen,sym_num);
for jj=1:sym_num
qpsk_i((1:FFTLen),jj)= 1/sqrt(2)*paradata2((1:FFTLen),2*jj-1);
qpsk_q((1:FFTLen),jj)= 1/sqrt(2)*paradata2((1:FFTLen),2*jj);
end
qpsk_out1=qpsk_i+1i*qpsk_q;
%--------------------加连续导频-------------------------------------
[row_num,rank_num]=size(qpsk_out1);
cpilot_slot=[10,43,75,105,151,181,213,246];
cpilot=1/sqrt(2)*(ones(1,rank_num)+1i*ones(1,rank_num));
for ii=1:1:length(cpilot_slot)
qpsk_out1(cpilot_slot(ii),:)=cpilot;
end
%------------------上采样添0---------------------------------------
qpsk_out2=zeros(FFTLen8,sym_num);
qpsk_out2=[qpsk_out1(1:FFTLen/2,:);zeros((FFTLen8-FFTLen),sym_num);qpsk_out1(FFTLen/2+1:end,:)];%添零
%----------------insert pilot加导频--------------------------------
qpsk_add_pilot=zeros(FFTLen,sym_num+1);
qpsk_add_pilot=[tain_qpsk_out,qpsk_out2];
%-----------------2048点IFFT ---------------------------------------
qpsk_out_ifft = sqrt(FFTLen8)*ifft(qpsk_add_pilot);
%----------------加入 guard interval-------------------------------
%----------------取后1/8为循环前缀----------------------------------
qpsk_out_ifft_ext=zeros(FFTLen8+CPLen8,sym_num+1);
qpsk_out_ifft_ext=[qpsk_out_ifft(FFTLen8-CPLen8+1:FFTLen8,:);qpsk_out_ifft];
%---------------并串转换-------------------------------------------
ofdm_out=reshape(qpsk_out_ifft_ext,1,(FFTLen8+CPLen8)*(sym_num+1));
%-------------------------------------------------------------------
delta_samp=1e-4;%归一化采样时钟频偏delta_samp*fs,50ppm
ofdm_samp_index=1:1:length(ofdm_out);
ofdm_samp_cubic_index=1:0.9999:length(ofdm_out);
num_cubic=length(ofdm_samp_index);
ofdm_samp_cubic=interp1(ofdm_samp_index,ofdm_out,ofdm_samp_cubic_index,'cubic');
%----------------------------------------------------------------
EbNo=20;
ofdm_Freq_I=zeros(1,length(ofdm_receive1));
ofdm_Freq_Q=zeros(1,length(ofdm_receive1));
ofdm_noise_I=zeros(1,length(ofdm_receive1));
ofdm_noise_Q=zeros(1,length(ofdm_receive1));
Noise_I=zeros(1,length(ofdm_receive1));
Noise_Q=zeros(1,length(ofdm_receive1));
ofdm_noise=zeros(1,length(ofdm_receive1));
%------------------------------------------------------------------
randn('state',seed_num+2);
Noise_I=sqrt(var(real(ofdm_receive1))*10^(-EbNo/10))*randn(1,length(ofdm_receive1));
randn('state',seed_num+4);
Noise_Q=sqrt(var(real(ofdm_receive1))*10^(-EbNo/10))*randn(1,length(ofdm_receive1));
ofdm_noise2_I=real(ofdm_receive1)+Noise_I;
ofdm_noise2_Q=imag(ofdm_receive1)+Noise_Q;
ofdm_noise2=(ofdm_noise2_I+1i*ofdm_noise2_Q);
fd_est(jk)=fd_residue(jk-1);
fs_est(jk)=fs_residue(jk-1);
%fd_est(jk)=fd;
%fs_est(jk)=-delta_samp;
%--------------去除残余频偏------------------------------------------
ofdm_noise4=ofdm_noise3((jk-2)*N_sym_fram+1:(jk-1)*N_sym_fram);%每一帧符号*帧数
kkj=1:1:N_sym_fram;
fd_offset=exp(-1i*2*pi*fd_est(jk).*(kkj-1)/FFTLen);
ofdm_offset_fd=ofdm_noise4.*fd_offset;
%ofdm_offset_fd=ofdm_noise4;
%-------------------平滑--------------------------------------------
if jk<30
c2=0.25;
else c2=0.05;
end
fs_residue(jk)=fs_residue(jk-1)+c2*fs_residue_jk(jk);
fd_residue(jk)=fd_residue(jk-1)+c2*fd_residue_jk(jk);
fd_est_theory(jk)=fd;
fs_est_theory(jk)=-delta_samp;
end
A_192