目录
一、题目
OFDM系统的同步问题
二、仿真要求
以下题目二选一:
(一)、OFDM系统的CFO估计技术
要求一:OFDM系统的数据传输
①传输的数据随机产生;
②调制方式采用16QAM;
要求二:要求对BER的性能仿真
①设计仿真方案,比较两个CFO的性能(基于CP与基于训练符号 Moose),并画出不同SNR下的两种估计技术的均方差(MSE)性能。
②设计仿真方案,接收信号受到CFO的影响,对比不同SNR下采用CP的CFO技术进行补偿与不进行补偿的BER性能。
(二)、OFDM系统的STO估计技术
要求一:OFDM系统的数据传输
①传输的数据随机产生;
②调制方式采用16QAM;
要求二:要求对BER的性能仿真
①设计仿真方案,比较两个时域估计STO的性能(最大化相关与最小化差值),并画出不同STO值对应的采样点与幅度关系图。
②设计仿真方案,接收信号受到STO的影响,对比不同SNR下采用基于CP的滑动窗STO技术进行补偿与不进行补偿的BER性能。
三、仿真方案详细设计
本次选题为题二——OFDM系统的STO估计技术。
(一)、STO的定义及影响
在OFDM系统中,需要考虑4种同步,分别是符号定时同步、样值频率同步、样值定时同步、载波同步。接收机正常工作之前,OFDM系统至少需要完成两类同步问题,一是时域同步,时域同步要求OFDM系统确定符号边界,并且提取最佳的采样时钟,从而减小载波干扰和码间干扰造成的影响;二是频域同步,频域同步要求系统估计和校正接收信号的载波偏移。
令δ和ε分别表示归一化的符号定时偏差(STO)和载波频率偏差(CFO),当存在大小为δ的STO和大小为ε的CFO时,基带接收信号可以表示为
其中的k+ε是关于频率的,n+δ是关于符号位置的一项。
如果出现符号定时偏差STO,假设实际的δ=3,此时令n=1,若δ=0,得到的应为y[1],但由于实际的δ=3,此时得到的为y[4],但此时接收机会认为得到的y[4]为y[1]。
(二)、STO的估计技术
为了保证OFDM系统的性能,接收机必须利用同步技术来估计STO,即准确地估计出OFDM符号的起始点和结束点。
在OFDM系统中STO不仅能引起相位失真(通过均衡器补偿),还能引起ISI(无法修正),因此为了保证OFDM系统的性能,在接受机必须利用同步技术来估计STO,以便能够准确估计出OFDM符号的起始点。
1、时域STO估计技术
(1)基于CP的STO估计技术
考虑CP的长度为TG(NG个采样)、有效长度为Tsub(Nsub个采样)的OFDM符号,在时域中,通常使用CP或训练符号估计STO。
CP是OFDM符号中的一部分数据的副本。如下图所示B、B’分别表示CP的NG个采样点和OFDM有效数据中的NG个采样点,两者完全相同且相隔Nsub个采样。考虑两个滑动窗w1和为w2,其间隔为Nsub个采样,通过滑动w1和w2,可以搜索两个窗内采样之间的相似度。当OFDM符号的CP落在w1窗内时,两个窗内的NG个采样块之间的相似度达到最大值(差值达最小值),利用最值点可以识别STO。
通过搜索使得w1和w2两个滑动窗之内的差值达到最小时,从而估计出STO,最小化差值法公式如下:
但是当接收系统中存在CFO时,其性能会下降,为了处理CFO,通过最小化w1和w2中差值的平方来估计STO,其公式如下:
利用w1和w2为中两个采样块之间的相关性也可估计STO,即最大化相似性,其公式如下:
(2)基于训练符号的STO估计技术
通过发射训练符号,可以在接受机实现符号同步。与基于CP的方法相比,基于训练符号的方法不受多径影响,但是会降低传输效率。在估计的过程中可以采用两个相同的OFDM训练符号,也可使用具有不同重复周期结构的单个OFDM训练符号。以基于具有重复结构的单个OFDM符号为例,重复周期为Tsub/2时,如下图所示。通过在子载波之间插零,在时域可以产生不同的重复样式。一旦发射机在OFDM符号的两个块上发送重复的训练符号,接收机通过最大化两个滑动窗内采样块之间的相似性,就可以找到STO。通过计算重复的训练信号的相关函数,得到两个采样块之间的相似性。
当重复周期为Tsub/2时,如上图所示,A、B、D部分与接收信号的C部分不同,当滑动窗在C部分时,滑动窗内的采样块相似性达到最大,差异性达到最小。与基于CP的STO估计技术一样,基于训练符列的STO估计有两种。一是通过最小化两滑动窗内采样块之差的平方得到,即
另一种是通过最大化似然函数得到,即
当训练符号的重复周期为Tsub/4时,如图所示,训练符号重复了四次,在第三次和第四次中训练符号取反,通过最大化两滑动窗之间的最大似然函数即可得到STO。
2、频域STO估计技术
接收信号会因为STO产生相位旋转,相位旋转与子载波的频率成比例,所以可以用频域接收信号中相邻子载波的相位差来估计STO
例如,对于所有的k,都有
因此可以估计STO
- 整体流程图
该部分的STO估计是基于CP进行估计的,最小化差值函数STO_by_difference基于CP通过最小化滑动窗w1和w2中差值的平方来估计STO的。最大化相关性函数STO_by_correlation利用w1和w2为中两个采样块之间的相关性估计STO。
四、仿真结果及结论
从上图可知最大化相关性和最小化差值两种方法在时域中估计STO性能,其中第一、二、四的图中最大化相关性能性能优最小化差值的,但是两个差距不大,其中最大化相关性的结果几乎正确结果重叠。
上图为接收信号受到nSTO=-3的延时下进行最大化相似性补偿、最小化差值补偿以及不补偿情况下的BER性能曲线。从上图可以看出进行补偿后的BER性能优于未进行补偿的BER性能,相同信噪比下进行补偿后的误码率小于未进行补偿的误码率,且进行最大化相关性补偿和进行最小化差值的BER曲线重叠,说明最大化相关性和最小化差值估计STO的准确性相近。
五、代码
1、比较两个时域估计STO的性能主函数
%STO_estimation
clear all;clc;
nSTOs=[-3 -3 2 2];%延后位置
M=16; %16QAM调制
Nfft=64; %子载波数
max_iter=100;%迭代次数
Ng=Nfft/4; %保护间隔长度
Nofdm=Nfft+Ng; %ofdm符号长度
com_delay=Nofdm/2; %滑动窗口的起始位置=40
Nsym=3;%一个帧中有3个OFDM符号
for i=1:length(nSTOs)
nSTO=nSTOs(i);
x=[];%初始化OFDM符号
for m=1:Nsym % transmit ofdm signal
X=randi([0,15],1,Nfft); % 随机产生比特流
Xmod=qammod(X,M); % 16QAM调制
xt=ifft(Xmod);
% 加保护间隔
x_g=[xt(Nfft-Ng+1:Nfft),xt];
x=[x x_g];
end
y=x;%无信道影响
y_STO=add_STO(y,nSTO); %加时间误差
Mag_cor=0;Mag_dif=0;
for j=1:max_iter
y_aw=awgn(y_STO,40,'measured');%高斯白白噪声l
%symbol timing acquisition
[ST0_cor, mag_cor]=STO_by_correlation(y_aw,Nfft,Ng,com_delay);%最大化相关
[ST0_dif,mag_dif]=STO_by_difference(y_aw,Nfft,Ng,com_delay);%最小化差值
Mag_cor=Mag_cor+mag_cor;Mag_dif=Mag_dif+mag_dif;
end % end of for loop of iter
[Mag_corr_max,ind_max]=max(Mag_cor);
nc=ind_max-1-com_delay;
[Mag_dif_min,ind_min]=min(Mag_dif);
nd=ind_min-1-com_delay%估值
nn=-com_delay+[0:length(Mag_cor)-1];
subplot(2,2,i);
plot(nn,Mag_cor,'b:',nn,Mag_dif,'r'),hold on
xlabel('Sample'),ylabel('Magnitude');
legend('基于相关的','基于最小差值的')
stem(nc,Mag_cor(nc+com_delay+1),'b')
stem(nd,Mag_dif(nd+com_delay+1),'r');
stem(nSTO,Mag_dif(nSTO+com_delay+1),'k.')
end
2、最小化差值补偿、最大化相似性补偿和未补偿主函数
clear all;
clc;
nSTO=-3;%延时
M=16;%?调制参数16QAM
Nfft=64;%子载波个数
EbN0=[10:15];%信噪比
max_iter=100;%迭代次数
Ng=Nfft/4;%?保护间隔长度,循环前缀长度
Nofdm=Nfft+Ng;%符号持续时间,一个OFDM符号的总长
com_delay=Nofdm/2;%?滑动窗口的起始位置40
Nsym=3;%一帧有三个OFDM符号
for k=1:1:length(EbN0)
Neb1=0;%?初始化错误码元个数
Neb2=0;
Neb3=0;
x=[];%初始化OFDM符号
X1=[];
for m=1:Nsym % transmit ofdm signal
X=randi([0,15],1,Nfft); % 随机产生比特流
X1=[X1,X];
Xmod=qammod(X,M); % 16QAM调制
xt=ifft(Xmod);
% 加保护间隔
x_g=[xt(Nfft-Ng+1:Nfft),xt];
x=[x x_g];
end
y=x;%无信道影响
y_STO=add_STO(y,nSTO); %加时间误差
Mag_dif=0;Mag_cor=0;
%%%%%%%%%%%% 信道 %%%%%%%%%%%%
for j=1:max_iter
y_aw=awgn(y_STO,EbN0(k),'measured');%高斯白白噪声l
%symbol timing acquisition
[ST0_cor, mag_cor]=STO_by_correlation(y_aw,Nfft,Ng,com_delay);%最大化相关
[ST0_dif,mag_dif]=STO_by_difference(y_aw,Nfft,Ng,com_delay);%最小化差值
Mag_dif=Mag_dif+mag_dif;
Mag_cor=Mag_cor+mag_cor;
end % 迭代结束
[Mag_dif_min,ind_min]=min(Mag_dif);
nd=ind_min-1-com_delay;%估值
[Mag_corr_max,ind_max]=max(Mag_cor);
nc=ind_max-1-com_delay;
%%%%%%%%%%%%%%%%%%%%%%%% 最小化差值进行补偿的 %%%%%%%%%%%%%%%%%%%%%%%%
kk1=1:Nfft;
kk2=1:Nofdm+nd-1;
for j=1:Nsym
if j==1
y1=y_aw(kk2);%判断是否是第一帧
y2=y1(Ng+nd:end);%去cp
kk3=kk2(end)+1:kk2(end)+Nofdm;
else
y1=y_aw(kk3);
y2=y1(Ng+1:end);
kk3=kk3+Nofdm;
end %if判断结束
y1_b=fft(y2);
Y_mode1(kk1)=y1_b;
kk1=kk1+Nfft;
end %OFDM符号数判断结束
%%%%%%%%%%%%%%%%%%%%%%%% 最大化相似性进行补偿的 %%%%%%%%%%%%%%%%%%%%%%%%
kk6=1:Nfft;
kk7=1:Nofdm+nd-1;
for j=1:Nsym
if j==1
y1=y_aw(kk7);%判断是否是第一帧
y2=y1(Ng+nd:end);%去cp
kk3=kk7(end)+1:kk7(end)+Nofdm;
else
y1=y_aw(kk3);
y2=y1(Ng+1:end);
kk3=kk3+Nofdm;
end %if判断结束
y1_b=fft(y2);
Y_mode3(kk6)=y1_b;
kk6=kk6+Nfft;
end %OFDM符号数判断结束
%%%%%%%%%%%%% 无补偿的 %%%%%%%%%%%%%%%%%%%%%%%%
kk4=1:Nfft;
kk5=1:Nofdm;
for i=1:Nsym
y2=y_aw(kk5);
y2_1=y2(Ng+1:end);
y2_b=fft(y2_1);
Y_mode2(kk4)=y2_b;
kk5=kk5+Nofdm;
kk4=kk4+Nfft;
end
X_r1=qamdemod(Y_mode1,M);%?解调,逆映射
X_r2=qamdemod(Y_mode2,M);
X_r3=qamdemod(Y_mode3,M);
Neb1=Neb1+sum(sum(de2bi(X_r1,4)~=de2bi(X1,4)));%错误的比特数
Neb2=Neb2+sum(sum(de2bi(X_r2,4)~=de2bi(X1,4)));
Neb3=Neb3+sum(sum(de2bi(X_r3,4)~=de2bi(X1,4)));
Ber1(k)=Neb1/(4*Nfft*max_iter*Nsym);%误码率
Ber2(k)=Neb2/(4*Nfft*max_iter*Nsym);
Ber3(k)=Neb3/(4*Nfft*max_iter*Nsym);
end %信噪比循环结束
semilogy(EbN0,Ber1,'-*',EbN0,Ber2,'-*r',EbN0,Ber3,'-+');
legend('最小化差值补偿','未补偿','最大化相似性补偿');
xlabel('EbN0[dB]'),ylabel('Ber');
3、加入符号偏差
function y_STO=add_STO(y,nSTO)
% 加入延迟
% y: received signal
% nSTO: number of samples corresponding to STO
if nSTO<=0
y_STO=[y(-nSTO+1:end),zeros(1,-nSTO)]; %提前
else
y_STO=[zeros(1,nSTO),y(1:end-nSTO)];%延迟
end
4、最大化相似性函数
function [STO_est,Mag]=STO_by_correlation( y,Nfft,Ng, com_delay)
Nofdm=Nfft+Ng; %OFDM symbol length
if nargin <4, com_delay=Nofdm/2;end
nn=0:Ng-1;
yy=y(nn+com_delay)*y(nn+com_delay+Nfft)'; % correlation
maximum=abs(yy);
for n=1:Nofdm
n1=n-1;yy1=y(n1+com_delay)*y(n1+com_delay+Nfft)';
yy2=y(n1+com_delay+Ng)*y(n1+com_delay+Nfft+Ng)';
yy=yy-yy1+yy2;
Mag(n)=abs(yy);
if Mag(n)>maximum
maximum=Mag(n);
STO_est=com_delay+n1-Nofdm;
end
end
5、最小化差值函数
function [STO_est,Mag]=STO_by_difference(y, Nfft, Ng, com_delay)
Nofdm=Nfft+Ng; minimum=100; STO_est=0;
if nargin <4, com_delay=Nofdm/2;end
for n=1:Nofdm
n1=n-1;
nn=n1+com_delay+[0:Ng-1];
tmp0=abs(y(nn))-abs(y(nn+Nfft));
Mag(n)=tmp0*tmp0'; %差值平方
if Mag(n)< minimum
minimum=Mag(n);
STO_est=com_delay+n1-Nofdm;
end
end