OFDM符号同步算法

qianglai4831 2018-03-28 07:19:07
我最近在做一个S&C和park符号同步算法的改进算法,但是matlab程序遇到点问题,就是在计算不同信燥比下的均方误差时,误差没有多大的变化!但是定时同步没多大问题!只是在不同信燥比下定时同步点都在有个位置!把程序贴出来,哪位大神能帮我看一下问题出在哪了吗?先谢谢了!
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%parameter settings%%%%%%%%%%%%%%%%%%%%%%%%%%
Ts=1*10^(-8); %进入信道信号的采样频率
TolPac=1; %输入数据块数
PacketLen=1 ; %每块的符号数目,在每块前加入导频。
ShortPeriod=2; %帧头的重复周期
NTimes=40; %运行20次求集合平均
M=64; %调制指数
% EbNo=0:30;
NFFT=256; %Length of IFFT
CpLength=32; %Length of Prefix
NSubc=128; %Number of subcarriers
nsamp=NFFT/NSubc;
deltad=256; %准确位同步点
deltaderr=0;%均方误差
loop=100;
derr=zeros(1,11);
% SNR=EbNo+10*log10(log2(M))-10*log10(nsamp); %信噪比
% SNR=1:2:30;
o=0;
for SNR=0:2:20
deltaderr=0;
o=o+1;
%************************** main loop part **************************
nloop=100; % Number of simulation loops
for iii=1:nloop
SmSeeds=[0 1 1 1 0 0 1]; % 随机序列的种子 235
STraining=m_sequence(SmSeeds);
STraining_zero=[STraining(1:end),0];
%STraining=round(rand(1,NFFT/2));exp(i*5*pi/4)*
pmod_STraining=6.48*pskmod(STraining_zero,2)/sqrt(2);
ST_zero=zeros(1,NFFT);
for k=1:length(pmod_STraining)
ST_zero(2*k-1)=pmod_STraining(k); %在奇数序号的载波上调制pmod_STraining。
end
referenceb=reshape(ST_zero,NFFT,1);
re_ifft=ifft(ST_zero);
resh=reshape(re_ifft,NFFT/4,4);
bar(abs(re_ifft))
%%
%%%%%%%%%%%%%%%%%%%%%%%%Generate signal sources%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Bit=(1,PacketLen*TolPac*NSubc*log2(M));
Bit=randint(1,PacketLen*TolPac*NSubc*log2(M));
BitTemp=reshape(Bit,PacketLen*TolPac*NSubc,log2(M));
BitDe=bi2de(BitTemp,'left-msb'); %binary to decimal
SymbolMod=qammod(BitDe,M); %64QAM modulation
SymbolS2P=reshape(SymbolMod,NSubc,PacketLen*TolPac);
Symbol_In_Zero=[SymbolS2P(1:NSubc/2,:);zeros((NFFT-NSubc),PacketLen*TolPac);SymbolS2P(NSubc/2+1:end,:)];%添零
Symbol_ref_b=[referenceb,Symbol_In_Zero];
SymbolIFFT=ifft(Symbol_ref_b);
%%%%%%%%%%%%%块状插入导频%%%%%%%%%%%%%%
% pilot=ifft(LTrain).';
% SymbolPilot=zeros(NFFT,PacketLen*TolPac+TolPac);
% for k=1:TolPac;
% SymbolPilot(:,(k-1)*PacketLen+k:(PacketLen+1)*k)=[pilot,SymbolIFFT(:,(k-1)*PacketLen+1:k*PacketLen)];
% end %块状插入导频
SymbolPilot=SymbolIFFT;
SymbolCP=[SymbolPilot(end-CpLength+1:end,:);SymbolPilot]; %插入前缀
[nr,nl]=size(SymbolCP);
SymbolTS2P=reshape(SymbolCP,1,nr*nl);%并串转换
DataFrame_o=SymbolTS2P;
t_err=100;
Df=0;
t_errhead=zeros(1,t_err);
DataFrame=[t_errhead,DataFrame_o];
%%%%%%%%%%%%channel%%%%%%%%%%%%%%%;
% for ktimes=1:NTimes %运行20次求集合平均
ktimes=1;
Df(ktimes)=0;
DataR=DataFrame;
k=1:length(DataR);
DeltaF(k)=exp(1j*2*pi*Df(ktimes)*(k-1)/(NFFT));
DataFreq=DataR.*DeltaF;
DataR=awgn(DataFreq,SNR,'measured');
% end
% end
%--------------park同步---------%
mtime=t_err+(NFFT+CpLength)+NFFT/2;
P=zeros(1,mtime);R=zeros(1,mtime);
for k=NFFT/2+1:mtime
for m=1:NFFT/2
P(k)=P(k)+(DataR(k+m))*DataR(k-m);
R(k)=R(k)+abs(DataR(m+k))*abs(DataR(m+k));
end
F(k)=abs(P(k)/R(k));
% f_est(k)=1/pi*angle(P(k))
end ;
F=(F);
b=max(F); % 求最大值
g=find(F==b) ;
deltaderr=deltaderr+(g-deltad)^2;
% end
end
derr(o)=sqrt(deltaderr/(nloop));
end
figure('Color','w');
SNR=0:2:20;
% b=z(SNR+1);
semilogy(SNR,derr,'-r*')
axis([0,20,0.001,1000]);
xlabel('SNR(dB)');
ylabel('Variance of Timing Offset Estimation(squared sample)');
...全文
3464 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38420912 2019-04-20
  • 打赏
  • 举报
回复
您好 我现在在做OFDM符号定时同步 现在均方误差曲线得到了 想把这个算法加到基本系统的到误码率曲线 但是 得到的误码率一直是百分之五十 我能不能借鉴一下您的总程序 谢谢

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧