⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rgl1.m

📁 另外一个OFDM频偏估计的代码
💻 M
字号:
clear all;
close all;
Numloop=10000;
N=1024;
Tu=102.4e-6; %useful OFDM symbol period
T=Tu/N; %baseband elementary period
G=1/32; 
M=G*N;
delta=G*Tu; %guard band duration
Ts=delta+Tu; %total OFDM symbol period
FS=(1+G)*N; %IFFT/FFT length
q=10; %carrier period to elementary period ratio
fc=q*1/T; %carrier frequency
Rs=4*fc; %simulation period
t=0:1/Rs:(Tu+Ts-1/Rs);
tt=0:T:Tu;
%Data generator
rand('state',0);
BitsTx = floor(rand(1,N*2)*2);
SymQAMtmp = reshape(BitsTx,2,N).';
SymQAMtmptmp = bi2de(SymQAMtmp,2,'left-msb');
QAMTable = [1 i -1 -i];
Ck2=QAMTable(SymQAMtmptmp+1);

for SNR=0:5:10;
    SNR
r11=0;%定时偏移的均值
r22=0;%定时偏移的MSE
ffo22=0;%小数倍频偏的均值
ffo33=0;%小数倍频偏的MSE
ifo11=0;%发生整数倍频偏的概率
ifo22=0;%整数倍频偏的均值
ifo33=0;%整数倍频偏的MSE
fo11=0;%频偏的均值
fo22=0;%频偏的MSE
for k=1:Numloop
    k
rand('state',sum(100*clock));
a=-1+2*round(rand(1,N/4))+i*(-1+2*round(rand(1,N/4)));
b=-1+2*round(rand(1,N))+i*(-1+2*round(rand(1,N)));
r=floor(rand*(N-1));
%Ck1=Ck(1:N/2);
%Ck2(1:N/2)=Ck1;
%Ck2((N/2+1):N)=1;
for l=(N/2+1):N
Ck2(l)=1;
end
info=zeros(1,N);
%info(1)=a(1);
for l=2:N/4
%a(l)=a(l-1)*Ck1(l-1);
info(4*l-3) =a(l);
end
%Ck1(N/4)=a(1)/a(N/4);
carriers1=N.*ifft(info,N);
carriers2=N.*ifft(b,N);
carriers3=carriers1.*Ck2;
carrierscp=zeros(1,(FS+N));
carrierscp(1:r)=carriers2(1:r);
carrierscp((r+1):(M+r))=carriers3((N-M+1):N);
carrierscp((r+M+1):(FS+r))=carriers3;
carrierscp((FS+r+1):(FS+N))=carriers2((1+r):N);
%Upconverter
L = length(carrierscp);
chips = [ carrierscp;zeros((4*q)-1,L)];
p=1/Rs:1/Rs:T;
g=ones(length(p),1);
dummy=conv(g,chips(:));
u=[dummy; zeros(45,1)];
[b,aa] = butter(13,1/20);
uoft = filter(b,aa,u);
delay=64; %Reconstruction filter delay
s_tilde=(uoft(delay+(1:length(t))).').*exp(1i*2*pi*fc*t);
s=real(s_tilde);
%OFDM RECEPTION
%Ch=zeros(1,705);
%Ch(1)=1;Ch(5)=0.81;Ch(9)=0.68;Ch(17)=0.55;Ch(29)=0.45;Ch(41)=0.37;Ch(65)=0.3;
%Ch(77)=0.25;Ch(97)=0.2;Ch(129)=0.17;Ch(173)=0.34;Ch(225)=0.18;Ch(285)=0.1;
%Ch(353)=0.06;Ch(429)=0.04;Ch(513)=0.02;Ch(605)=0.01;Ch(705)=0.002;
%s1 = filter(Ch,1,s);
s_tidle = awgn(s,SNR,'measured');
%Downconversion
f1=rand*(4);%2-1;
%f2=floor(f1/4)*4;;%rand*(N/2-1);
f11=f1/Tu;
r_tilde1=exp(-1i*2*pi*fc*t).*s_tidle; %(F)
r_tilde=r_tilde1.*exp(1i*2*pi*f11*t);
%Carrier suppression
[B,AA] = butter(3,1/2);
r_info=2*filter(B,AA,r_tilde); %Baseband signal continuous-time (G)
%Sampling
r_datacp=real(r_info(1:(4*q):length(t)))... %Baseband signal, discretetime
+1i*imag(r_info(1:(4*q):length(t))); % (H)
S=zeros(1,length(r_datacp)-N+1);
for n=1:(length(r_datacp)-N+1)
    r_datacp1=conj(Ck2).*r_datacp(n:(n+N-1));
    rtmp=r_datacp1(1:(N/2+1-1));
    rtmptmp=r_datacp1((1+N/2):(N+1-1));
    P(n)=rtmp*rtmp';
    Q(n)=rtmptmp*rtmptmp';
    S(n)=rtmptmp*rtmp';
    S1(n)=abs(S(n))/(Q(n)+P(n));
    MM(n)=abs(S(n))-1/2*(Q(n)+P(n));
end
[numtmp11 numtmp12]=max(S1);
%S1(numtmp12)=0;
%[numtmp21 numtmp22]=max(S1);
%numtmp12=min(numtmp12,numtmp22);
r1=numtmp12-(M+r+1);
r11=r11+r1;
r1=r1*r1;
r22=r1+r22;
%ffo
ffo11=angle(S(numtmp12))/(pi);

r_datacp1=conj(Ck2).*r_datacp(numtmp12:(numtmp12+N-1));
    rtmp2=r_datacp1((1):(N/4));
    rtmptmp2=r_datacp1((N/4+1):(N/2));
    rtmp3=r_datacp1((1+N/2):(N/4+N/2));
    rtmptmp3=r_datacp1((N/4+N/2+1):(N/2+N/2));
    Ss=rtmptmp3*rtmp3'+rtmptmp2*rtmp2';
ffo0=angle(Ss)/(pi)*2;
AA=zeros(1,3);
for l=-1:1:1
    ffo1(l+2)=(ffo11+l*2);
    AA(l+2)=abs(ffo0-ffo1(l+2));
end
[numtmp41 numtmp42]=min(AA);     

ffo=ffo1(numtmp42);
if ffo<=0
    ffo=ffo+4;
end
%f22=f1-f2;
ffo2=ffo-f1;
if ffo2>2;
   ffo=ffo-4;
   ffo2=ffo-f1;
elseif ffo2<-2; 
       ffo=ffo+4;
       ffo2=ffo-f1;
end
ffo22=ffo2+ffo22;
ffo2=ffo2*ffo2;
ffo33=ffo2+ffo33;

end
r11=r11/Numloop;%定时偏移的均值
r22=r22/Numloop;%定时偏移的MSE
ffo22=ffo22/Numloop;%小数倍频偏的均值
ffo33=ffo33/Numloop%小数倍频偏的MSE
ErrSym(:,SNR/5+1)=[r11;r22;ffo22;ffo33];
end
n=1:(length(r_datacp)-N+1);
figure(6);
subplot(211);
plot(n,S1);
subplot(212);
plot(n,MM);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -