1.算法描述
OFDM系統(tǒng)下對(duì)比SC算法夺荒,Minn算法瞒渠,PARK算法同步性能matlab仿真分析良蒸。OFDM系統(tǒng)中的定時(shí)估計(jì)和頻率頻率算法——時(shí)頻聯(lián)合估計(jì)的SC算法,由Schmidl和Cox提出伍玖,是一種基于訓(xùn)練序列的符號(hào)同步和載波頻率同步的聯(lián)合估計(jì)算法嫩痰。
為了消除Schmidl算法出現(xiàn)的平頂影響,minn等人改變了訓(xùn)練隊(duì)列的結(jié)構(gòu)窍箍,并重新設(shè)計(jì)了一種新的同步度量函數(shù)串纺,雖然成功消除了schmidl算法的平頂效應(yīng),使得同步自相關(guān)峰變得尖銳椰棘,提高了定時(shí)同步估計(jì)的精度和可靠性纺棺,但是該向相關(guān)峰還不夠尖銳,而且在同步度量函數(shù)曲線主峰兩邊出現(xiàn)了多個(gè)副峰邪狞,在信道環(huán)境惡劣的條件下祷蝌,也即低信噪比條件下,定時(shí)同步估計(jì)將受到較大的影響帆卓。
為了進(jìn)一步解決minn算法存在的不足巨朦,park等人在分析了schmidl算法和minn算法定時(shí)效果不佳的原因后,重新設(shè)計(jì)了新的前導(dǎo)訓(xùn)練序列的結(jié)構(gòu)剑令,并給出了新的定時(shí)同步度量函數(shù)糊啡,該算法的定時(shí)度量函數(shù)曲線出現(xiàn)了一個(gè)更為尖銳的自相關(guān)峰,很明顯該算法消除了schmidl算法中由于循環(huán)前綴的存在而導(dǎo)致的平頂效應(yīng)吁津,同時(shí)得到了比minn算法更為尖銳的自相關(guān)峰棚蓄,提高了定時(shí)的精度和確定性,但是在噪聲干擾較大的情況下腺毫,該算法還是會(huì)出現(xiàn)較大的定時(shí)同步估計(jì)誤差癣疟,其同步估計(jì)的穩(wěn)定性依然較差。
SC算法
首先要考慮同步序列的結(jié)構(gòu)潮酒,如下所示睛挚。
該算法中既可以進(jìn)行定時(shí)同步,也可以進(jìn)行頻率同步急黎,頻率同步又可以分為小數(shù)倍頻偏和整數(shù)倍頻偏扎狱,我在的項(xiàng)目里也叫精頻偏估計(jì)和粗頻偏估計(jì)。其中勃教,定時(shí)同步和小數(shù)倍頻偏估計(jì)用第一個(gè)訓(xùn)練序列也就是上圖中的AA來(lái)完成淤击,整數(shù)倍頻偏則兩個(gè)訓(xùn)練序列都會(huì)用到。
Minn算法
所求得的d對(duì)應(yīng)的是訓(xùn)練序列(不包含循環(huán)前綴)的開始位置故源。
PARK算法
訓(xùn)練序列結(jié)構(gòu)T=[CC DD C?C? D?D?],其中C表示由長(zhǎng)度為N/4的復(fù)偽隨機(jī)序列PN污抬,ifft變換得到的符號(hào)序列C(n)=D(N/4?n)
實(shí)際在算法實(shí)現(xiàn)上
P(d)=∑N/2?1m=0r(d?1?m)r(d+m)P(d)=∑m=0N/2?1r(d?1?m)r(d+m)
這是因?yàn)樾蛄袀€(gè)數(shù)通常是偶數(shù)而非奇數(shù),不會(huì)出現(xiàn)r(d)r(d)r(d)r(d)的情況。
所求得的d對(duì)應(yīng)的是訓(xùn)練序列(不包含循環(huán)前綴)的中間位置印机。
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:
3.MATLAB部分代碼預(yù)覽
%************利用查表法生成復(fù)隨機(jī)序列**********************
QAMTable=[7+7i,-7+7i,-7-7i,7-7i];
buf=QAMTable(randint(N/2,1,4)+1); %加1是為了下標(biāo)可能是0不合法
%產(chǎn)生train
pn = rand(1,N/2)>0.5;
pn = reshape(pn,N/4,2);
[ich,qch]=qpskmod(pn,N/4,1,2);
kmod=sqrt(2);
x=ich*kmod+qch*kmod*i;
y=ifft(x);
y=reshape(y,N/4,1);
train=[y;y(N/4:-1:1,1);conj(y);conj(y(N/4:-1:1,1))];
%*****************添加一個(gè)空符號(hào)以及一個(gè)后綴符號(hào)*************
src = QAMTable(randint(N,1,4)+1).';
sym = ifft(src);
sig =[zeros(N,1) train train sym];
%**********************添加循環(huán)前綴*************************
tx =[sig(N - Ng +1:N,:);sig];
%***********************經(jīng)過(guò)信道***************************
recv = reshape(tx,1,size(tx,1)*size(tx,2)); %size的1表示行矢腻,2表示列,從%前向后數(shù)射赛,超過(guò)了為1
recv1 = awgn(recv,10,'measured');
recv2 = [zeros(1,100),recv1(1:end-100)];
recv ?= recv1 + 0.8*recv2;
%*****************計(jì)算符號(hào)定時(shí)*****************************
P=zeros(1,2*Ns);
R=zeros(1,2*Ns);
P2=zeros(1,2*Ns);
R2=zeros(1,2*Ns); ?
for d = Ns/2+1:1:2*Ns + Ns/2
for m=1:N/2 ?
P(d-Ns/2) = P(d-Ns/2) + (recv(d+m))*recv(d-1-m); ?
R(d-Ns/2) = R(d-Ns/2) + power(abs(recv(d+m)),2);
end
end
M= power(abs(P),2)./power(abs(R),2);
[a b]=max(M);
b=b-N/2;
%取第一個(gè)峰值
Level = a/3;
Ind ??= [];
for i=1:length(M)
if M(i) > Level
Ind = [Ind,i];
end
end
M(Ind(2:end)) = 0;
M2(:,iii) = M;
end
MM = mean(M2,2);
%**********************繪圖******************************
figure('Color','w');
d=1:1:400;
plot(d,MM(d+N/2));
grid on;
axis([0,400,0,1.1]);
title('Park 算法');
xlabel('時(shí)間(采樣)');
ylabel('定是度量曲線');
01_071_m