1.算法描绘
在单载波体系中,载波频率的偏移只会对接纳信号形成一定的幅度衰减和相位旋转,这可以经过均衡等办法来加以克服。而关于多载波体系来说,载波频率的偏移会导致子信道之间发生搅扰。OFDM体系内存在多个正交子载波,其输出信号是多个了信道信号的叠加,因为子信道彼此覆盖,这就对它们之间的正交性提出了严厉的要求。无线信道时变性的一一种具体体现就是多普勒频移,多普勒频移与载波频率以及移动台的移动速度都成正比。信道带宽小于多普勒展宽的移动信道称作快式微信道,信道冲激响应在符号周期内变化很快,即信道的相干时间比发送信道的符号周期要短。多普勒展宽会导敛频率发生弥散(时间性式微),引发信发生畸变。从频域上看,信号失真随发送信道带宽的多普勒扩展的添加而加剧。因而,关于要求子载波保持严厉同步的正父频分复用体系来说,载波的频率偏移所来的影响会愈加严峻,而且假如不采取措施对这种ICI加以克服,会对体系功能带来十分严峻的地板效应,无论怎样添加信号的发射功率也不能显著的添加体系功能。
关于移动无线通信体系来说,无线信道存在时变性,在传输进程中会出现无线信号的频率偏移,例如多普勒频移,或者因为发射机与j接纳机载波频率之间存在的频率误差,都会使得OFDM体系子载波之间的正交性遭到损坏,从而导致ICI。因而怎么减少ICl对体系功能的影响,是OFDM体系功能得到广泛使用的前提条件之一。频率误差对OFDM体系十分个利,在体系设计中起着很重要的作用。另外,消除相位噪声在无线OFDM体系中也是一个很难处理的问题。
因为OFDM体系要使用导频符号来进行信道估量,所以同时使用导频符号和循环前缀进行守时估量。
OFDM是一种子载波彼此混叠的多载波调制,因而它除了具有上述多载波调制的优势外,还具有更高的频谱使用率。OFDM挑选时域彼此正交的子载波,它们虽然在频域互相混叠,却仍能在接纳端被分离出来。
OFDM 收发体系的整个具体工作流程是基带信号(二进制码元)经过信道编码,交错后映射到QPSK 星座,这时变成了复数序列,再经过串并改换变成并行数据流,经过IFFT调制后把数据调制到正交子载波上,完结频谱的正交叠加,再经过并串改换,在符号间刺进循环前缀CP,最后数模转化后把信号搬至工作频率,完结射频载波调制后对其发送。接纳端做降频处理之后把收到的信号数字化,同步到符号守时点和频率误差方位,去除CP,再经FFT 解调出复数序列,再经并串改换、信号逆映射、解交错、信道解码一系列改换恢复出原始数据。
OFDM 整个体系流程中存在符号同步,载波同步,采样同步这三种形式同步。
与单载波体系比较,OFDM体系对同步精度的要求更高,同步误差会在OFDM体系中引起ISI及ICI。下图显示了OFDM体系中的同步要求,而且大约给出各种同步在体系中所处的方位。
发射机与接纳机之间的频率误差导致接纳信号在频域内发生偏移。假如频率误差是子载波间隔的n(n为整数)倍,虽然子载波之间仍然可以保持正交,可是频率选用值现已偏移了n个子载波的方位,形成映射在OFDM频谱内的数据符号的误码率高达0.5。
同步是OFDM体系中十分要害的问题,同步功能的优劣直接影响到OFDM技能能否真正被用于无线通信范畴。在OFDM体系中,存在多种等级的同步:载波同步、符号守时同以及样值同步,其中每一等级的同步都会对OFDM体系功能形成影响。这儿我们首先剖析了OFDM体系内不同等级的同步问题,然后在此基础上介绍了几种分别用于载波同步和符号守时同步的办法。经过剖析可以看到,只需合理地挑选恰当的同步办法,就可以在OFDM体系内实现同步,从而为其在无线通信体系中的使用打下坚实的基础。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB中心程序 `%—————————————————————-
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);
%%——————–假定没有高斯白噪声——————————
% ofdm_noise2=ofdm_receive1;
%—————-依据第一条路径细同步———————————
ofdm_noise3((jk-2)*N_sym_fram+1:(jk-1)*N_sym_fram)=ofdm_noise2;%取细同步后的点作为帧头
%+——————————————————————
%| 频偏补偿
%+——————————————————————
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(-1i2pifd_est(jk).(kkj-1)/FFTLen);
ofdm_offset_fd=ofdm_noise4.*fd_offset;
%ofdm_offset_fd=ofdm_noise4;
%—————-串并转化——————————————–
ofdm_rank=reshape(ofdm_offset_fd,FFTLen+CPLen,sym_num+1);
%—————-去CP————————————————
ofdm_rank_noCP=ofdm_rank((CPLen+1:FFTLen+CPLen),(1:sym_num+1));
%————— FFT————————————————-
ofdm_noCP_FFT=sqrt(8)/sqrt(FFTLen)*fft(ofdm_rank_noCP);
%—————-去除采样时钟—————————————-
for nn=1:sym_num+1
for kk=1:FFTLen
if kk<=FFTLen/2
fs_est_m(kk,nn)=exp(-1i2pi*(kk-1)/FFTLenfs_est(jk)(FFTLen+CPLen)(nn-1))exp(-1ipi(kk-1)fs_est(jk)(FFTLen-1)/FFTLen);
else kk > FFTLen/2;
fs_est_m(kk,nn)=exp(1i2pi*(FFTLen-kk+1)/FFTLenfs_est(jk)(FFTLen+CPLen)(nn-1))exp(1ipi(FFTLen-kk+1)fs_est(jk)(FFTLen-1)/FFTLen);
end
end
end
kkl=(jk-2)(sym_num+1)+1:1:(jk-1)(sym_num+1);
ofdm_rec_FFT(1:FFTLen,kkl)=ofdm_noCP_FFT.*fs_est_m;
%+——————————————————————
%| 残余频偏盯梢
%+——————————————————————
ofdm_rec_FFT2(1:FFTLen,1:sym_num+1)=ofdm_rec_FFT(1:FFTLen,kkl);
cpilot_slot=[10,43,75,105,151,181,213,246];
%———————导频抽取———————————–
for i=1:1:length(cpilot_slot)
ofdm_sfo_pilot((1:sym_num),i)=conj(ofdm_rec_FFT2(cpilot_slot(i),1:sym_num))’;
end
%———————符号间对应差分———————————
ofdm_sfo_pilot_diff=zeros(sym_num-2,length(cpilot_slot));
P_num=floor(length(cpilot_slot)/2);
for l=1:1:sym_num-2
for k=1:1:length(cpilot_slot)
ofdm_sfo_pilot_diff(l,k)=ofdm_sfo_pilot(l+2,k)*conj(ofdm_sfo_pilot(l+1,k)); %去除第一个符号训练序列
end
ofdm_sfo_pilot_C1(l)=sum(ofdm_sfo_pilot_diff(l,(1:P_num)));
ofdm_sfo_pilot_C2(l)=sum(ofdm_sfo_pilot_diff(l,(P_num+1:end)));
end
%———————求残余频偏————————————-
ofdm_sfo_sum_C1(jk)=sum(ofdm_sfo_pilot_C1);
ofdm_sfo_sum_C2(jk)=sum(ofdm_sfo_pilot_C2);`