|
sub_carrier=256; %子载波数
symbol_per_carrier=1; % 符号/载波
bit_per_symbol=2; % 4QAM modulation
fft_length=256; %ifft size
g=1/8; %每个符号前插入的保护间隔的比例 g
deltaf=0.27; %频偏
QAMTable=[7+7i,-7+7i,-7-7i,7-7i];
buf=QAMTable(randi(sub_carrier/4,1,4)+1);
%*************在奇数子载波的位置插入零*********************
x=zeros(sub_carrier/2,1);
k=1;
for n=1:2:sub_carrier/2
x(n)=buf(k);
k=k+1;
end;
%**************利用IFFT变换生成minn训练符号***************
minn_seq = ifft(x); %[A A]的形式
minn_seq=[minn_seq;-minn_seq];%[A A -A -A]的形式
%*****************添加一个空符号以及一个后缀符号*************
src = QAMTable(randi(sub_carrier,1,4)+1).';
sym = ifft(src,fft_length,1);
sig =[zeros(fft_length,1) minn_seq sym];
%**********************添加循环前缀*************************
prefix_data =[sig(fft_length -fft_length*g +1:fft_length,:);sig];
prefix_data=prefix_data(:);
%***********************经过信道***************************
recv = awgn(prefix_data,4,'measured');
for k=1:length(recv);
recv(k)=recv(k)*exp(i*2*pi*deltaf*k/fft_length);
end
%*****************计算符号定时*****************************
Ns=length(recv);
P=zeros(1,Ns- fft_length+1 );
R=zeros(1,Ns- fft_length+1 );
for d = 1:1:Ns- fft_length+1
for m=0:1:fft_length/4-1
P(d) = P(d) + conj(recv(d+m))*recv(d+fft_length/4+m) + conj(recv(d+m+fft_length/2))*recv(d+fft_length/4+m+fft_length/2);
end
end
for d = 1:1:Ns- fft_length+1
for m=0:1:fft_length-1
R(d) = R(d) + power(abs(recv(d+m)),2);
end
end
M=power(abs(P),2)./power(R/2,2);
a=max(M); % 求最大值
a1=find(M==a)% 求最大值所在位置
f=angle(P(a1))/pi*2;
%**********************绘图******************************
figure('Color','w');
d=1:1:600;
plot(d,M(d));
grid on;
axis([0,600,0,1.1]);
title(['Minn algorithm g=',num2str(g)]);
xlabel('Time (sample)');
ylabel('Timing Metric'); |
|