OFDM同步算法之Minn算法
minn算法代碼
算法原理
訓練序列結構 T=[B B -B -B],其中B表示由長度為N/4的復偽隨機序列PN,ifft變換得到的符號序列
(原文解釋):B represent samples of length L=N/4 genereated by N/4 point IFFT of \(N_u/4\) length modulated data of a PN sequence.也就是說B是一個長度為N/4的序列,其通過對一個PN序列進行編碼後,通過IFFT獲得
\(\bigstar\)minn:為了消除Schmidl算法出現的平頂影響,minn等人改變了訓練隊列的結構,並重新設計了一種新的同步度量函數,雖然成功消除了schmidl算法的平頂效應,使得同步自相關峰變得尖銳,提高了定時同步估計的精度和可靠性,但是該向相關峰還不夠尖銳,而且在同步度量函數曲線主峰兩邊出現了多個副峰,在信道環境惡劣的條件下,也即低信噪比條件下,定時同步估計將受到較大的影響。
參考文獻
Minn H ,Zeng M,BHARGAVA V K.On timing offser estimation for OFDM systems[J].IEEE Commun.Lett.2000,4(7):242-244.
\[M(d)=\frac{\left | P(d) \right |}{R^{2}(d)}^{2}\]
\[P(d)=\sum_{k=0}^{1}\sum_{m=0}^{N/4 -1}r^{*}(d+m+\frac{Nk}{2}) r(d+m+\frac{N}{4} + \frac{Nk}{2})\]
\[R(d)=\sum_{k=0}^{1}\sum_{m=0}^{N/4-1}\left | r(d+m+\frac{N}{4} + \frac{Nk}{2}) \right |^{2}\]
所求得的d對應的是訓練序列(不包含循環前綴)的開始位置。
%********************schmidl algorithm******************* %Example: % If % X = rand(2,3,4); % then % d = size(X) returns d = [2 3 4] % [m1,m2,m3,m4] = size(X) returns m1 = 2, m2 = 3, m3 = 4, m4 = 1 % [m,n] = size(X) returns m = 2, n = 12 % m2 = size(X,2) returns m2 = 3 %close all; clear all; clc; %參數定義 N=256; %FFT/IFFT 變換的點數或者子載波個數(Nu=N) Ng=N/8; %循環前綴的長度 (保護間隔的長度) Ns=Ng+N; %包括循環前綴的符號長度 %************利用查表法生成復隨機序列********************** QAMTable=[7+7i,-7+7i,-7-7i,7-7i]; buf=QAMTable(randi([0,3],N/2,1)+1); %加1是為了下標可能是0不合法 %*************在奇數子載波的位置插入零*********************zj:是偶數吧? x=zeros(N/2,1); index = 1; for n=1:2:N/2 x(n)=buf(index); index=index+1; end; %**************利用IFFT變換生成Schmidl訓練符號*************** sch = ifft(x); %[A A]的形式 sch2=[sch;(-1).*sch]; %*****************添加一個空符號以及一個後綴符號************* src = QAMTable(randi([0,3],N,1)+1).‘; sym = ifft(src); sig =[zeros(N,1) sch2 sym]; %**********************添加循環前綴************************* tx =[sig(N - Ng +1:N,:);sig]; %***********************經過信道*************************** recv = reshape(tx,1,size(tx,1)*size(tx,2)); %size的1表示行,2表示列,從%前向後數,超過了為1 %recv1 = awgn(recv,1,‘measured‘); %recv2 = awgn(recv,5,‘measured‘); %recv3 = awgn(recv,10,‘measured‘); %*****************計算符號定時***************************** P=zeros(1,2*Ns); R=zeros(1,2*Ns); %P1=zeros(1,2*Ns); %R1=zeros(1,2*Ns); P2=zeros(1,2*Ns); R2=zeros(1,2*Ns); %P3=zeros(1,2*Ns); %R3=zeros(1,2*Ns); for d = Ns/2+1:1:2*Ns for k=1:2 for m=0:1:N/4-1 P(d-Ns/2) = P(d-Ns/2) + conj(recv(d+m+(k-1)*N/2))*recv(d+N/4+(k-1)*N/2+m); R(d-Ns/2) = R(d-Ns/2) + power(abs(recv(d+N/4+(k-1)*N/2+m)),2); %P1(d-Ns/2) = P1(d-Ns/2) + conj(recv1(d+m))*recv1(d+N/2+m); %R1(d-Ns/2) = R1(d-Ns/2) + power(abs(recv1(d+N/2+m)),2); %P2(d-Ns/2) = P2(d-Ns/2) + conj(recv2(d+m))*recv2(d+N/2+m); %R2(d-Ns/2) = R2(d-Ns/2) + power(abs(recv2(d+N/2+m)),2); % P3(d-Ns/2) = P3(d-Ns/2) + conj(recv3(d+m))*recv3(d+N/2+m); % R3(d-Ns/2) = R3(d-Ns/2) + power(abs(recv3(d+N/2+m)),2); end end end M=power(abs(P),2)./power(abs(R),2); %M1=power(abs(P1),2)./power(abs(R1),2); %M2=power(abs(P2),2)./power(abs(R2),2); %M3=power(abs(P3),2)./power(abs(R3),2); [a b]=max(M) %**********************繪圖****************************** figure(‘Color‘,‘w‘); d=1:1:400; figure(1); plot(d,M(d)); grid on; axis([0,400,0,1.1]); title(‘minn algorithm‘); xlabel(‘Time (sample)‘); ylabel(‘Timing Metric‘); %legend(‘no noise‘,‘SNR=1dB‘,‘SNR=5dB‘,‘SNR=10dB‘); hold on;
OFDM同步算法之Minn算法