作者wallace061 (烦阿)
看板comm_and_RF
标题[问题] OFDM同步
时间Fri Jul 21 13:53:03 2006
请问各位大大...有没有人有模拟过下面这篇paper...
J.J. van de Beek, M. Sandell and P. O. Borjesson,
“ML estimation of time and frequency offset in OFDM systems,”
IEEE Trans. Signal Processing, vol. 45, no. 7, pp. 1800-1805, July 1997.
我在写程式时把杂讯和频率偏移都设为0...可是估测出来还是有错误...
可是找了半天也找不出错误...可不可以请有写过的大大帮我找一下错误...
下面是我的程式码...
clear;
clc;
format long g
N=256; % The size of an OFDM symbol
CP=15; % Cyclic prefix interval
timer=100;%10^6; % Per SNR runs times
packetnum=3;
snr_db=0:10; % SNR range
MSE_ML=zeros(1,length(snr_db)); % Mean-square error in ML algorithm
MSE_NA=zeros(1,length(snr_db)); % Mean-square error in new algorithm
freq_offset=0;%0.25; % frequency offset
range=(N/2)+CP+1:(N)+(N/2)+(2*CP); % Observation interval
Pos=(N/2); % The actual symbol timing in observation interval
for snr=1:length(snr_db)
for ttt=1:timer
%%% TX %%%
clear data_tx;
clear out_ifft;
clear ps_out;
data_tx=sign(unidrnd(2,packetnum,N)-1.5); % BPSK signal generator
out_ifft(1,:)=sqrt(N)*ifft(data_tx(1,:));
out_ifft(2,:)=sqrt(N)*ifft(data_tx(2,:));
out_ifft(3,:)=sqrt(N)*ifft(data_tx(3,:));
ps_out=[out_ifft(1,N-CP+1:N),out_ifft(1,:),out_ifft(2,N-CP+1:N),
out_ifft(2,:),out_ifft(3,N-CP+1:N),out_ifft(3,:)]; % Transmitted signal
%%% Channel %%%
clear tx_power;
clear noise_std;
clear rx1;
clear noise;
tx_power=sum(ps_out.*conj(ps_out))/length(ps_out); % transmitted power
noise_std=sqrt(tx_power/(2*10^(snr_db(snr)/10))); % noise standard deviation
%%% Frequency offset %%%
rx1=ps_out;
noise=noise_std*(randn(1,length(rx1))+(j*randn(1,length(rx1))));
clear freq_time;
clear rx;
freq_time=1:length(rx1);
rx=rx1.*exp(j*((2*pi*freq_offset*mod(freq_time,N+CP))/N));%+noise; % Received signal
LO=snr/(snr+1);
%%% RX %%%
clear symboltiming;
clear NL;
clear Distance;
[NL]=NewAlgorithm(N,CP,rx,snr);
[rrr,symboltiming]=max(NL(range));
a(snr,ttt)=symboltiming;
Distance=abs(Pos-symboltiming);
MSE_NA(snr)=MSE_NA(snr)+Distance^2;
clear SymbolTiming;
clear RL;
clear Dis;
[RL]=ML(N,CP,rx,snr);
[ggg,SymbolTiming]=max(RL(range));
b(snr,ttt)=SymbolTiming;
Dis=abs(Pos-SymbolTiming);
MSE_ML(snr)=MSE_ML(snr)+Dis^2;
end
tim=round(clock);
snr_db(snr);
MSE_NA(snr)=MSE_NA(snr)/timer
MSE_ML(snr)=MSE_ML(snr)/timer
end
tim=round(clock)
figure
semilogy(snr_db,MSE_NA,'-g*',snr_db,MSE_ML,'-ro')
legend('NA(CP=15)','ML(CP=15)')
xlabel('SNR(dB)')
ylabel('Mean-squared error')
grid
======================================================
下面是NewAlgorithm 和 ML两个function 的程式
function [refer_line]=NewAlgorithm(N,CP,rx,snr)
LO=snr/(snr+1);
for n=1:length(rx)-N-CP % time offset
r(n)=(1/(1+LO))*sum(conj(rx(n+(2*CP)+2:n+(N/2)+CP)).*
conj((rx(n+N:(-1):n+(N/2)+CP+2))))+
(1/(1+(2*LO)))*(sum(rx(n+1:n+CP).*conj(rx(n+N+1:n+N+CP)))+
sum(conj(rx(n+CP+2:n+(2*CP)+1)).*conj(rx(n+N+CP:(-1):n+N+1))));
IO1(n)=sum(abs(rx(n+(2*CP)+2:n+(N/2)+CP)).^2)+
sum(abs(rx(n+(N/2)+CP+2:n+N)).^2);
r1(n)=real(1/(1+(2*LO))*sum(conj(rx(n+1:n+CP)).*
conj(rx(n+(2*CP)+1:(-1):n+CP+2))));
IO2(n)=sum(abs(rx(n+1:n+CP)).^2)+sum(abs(rx(n+CP+2:n+(2*CP)+1)).^2)+
sum(abs(rx(n+N+1:n+N+CP)).^2);
refer_line=abs(r(n))+r1(n)-((LO/(2*(1+LO)))*IO1(n))-
((LO/(1+(2*LO)))*IO2(n));
end
function [refer_line]=ML(N,CP,rx,snr)
LO=snr/(snr+1);
for n=1:(length(rx)-N-CP)
R(n)=sum(rx(n+1:n+CP).*conj(rx(n+N+1:n+N+CP)));
IO(n)=(1/2)*(sum(abs(rx(n+1:n+CP)).^2)+sum(abs(rx(n+N+1:n+N+CP)).^2));
refer_line=abs(R(n))-(LO*IO(n));
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.22.16.42
1F:→ sexyman:找错应该要自己来吧, 不会找错怎麽写程式 59.112.6.205 07/22 23:36
2F:推 JamesHone:你可以一个个function block来测试140.118.122.148 08/02 17:50
3F:→ JamesHone:测完一个接上另外一个,这是最快的方式了140.118.122.148 08/02 17:52
4F:→ JamesHone:要把debug学会,求人不如求己!!140.118.122.148 08/02 17:54