• 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获得


    (igstar)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) ight |}{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}) ight |^{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;
    
  • 相关阅读:
    C#调用Delphi的dll 详解
    C# 用API截取桌面屏幕
    C# 控件代码设置置顶和置底属性
    C#用API 获取电脑桌面背景图地址
    利用JS使IE浏览器默认打开是全屏显示
    aspx页面生成xml数据
    MacOS下安装Anaconda+Pycharm+TensorFlow+Keras
    GitHub编辑README
    Win10(64位)下安装Anaconda+Tensorflow(GPU)
    Win7(64位)下安装Anaconda+Tensorflow(CPU)
  • 原文地址:https://www.cnblogs.com/jiandahao/p/9310943.html
Copyright © 2020-2023  润新知