我最近在做一個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)');
uj5u.com熱心網友回復:
您好 我現在在做OFDM符號定時同步 現在均方誤差曲線得到了 想把這個演算法加到基本系統的到誤碼率曲線 但是 得到的誤碼率一直是百分之五十 我能不能借鑒一下您的總程式 謝謝轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133455.html
標籤:無線
上一篇:埠無法設定portname
