park算法代码

训练序列结构 T=[\(C\) \(D\) \(C^{*}\) \(D^{*}\)],其中C表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列

\(C(n) = D(N/4-n)\)


原文解释:The training symbol is produced by transmitting

a real-valued PN sequence on the even frequencies, while zeros

are used on the odd frequencies. This means that one of the

points of a BPSK constellation is transmitted at each even fre-quency.

\(\bigstar\)park:为了进一步解决minn算法存在的不足,park等人在分析了schmidl算法和minn算法定时效果不佳的原因后,重新设计了新的前导训练序列的结构,并给出了新的定时同步度量函数,该算法的定时度量函数曲线出现了一个更为尖锐的自相关峰,很明显该算法消除了schmidl算法中由于循环前缀的存在而导致的平顶效应,同时得到了比minn算法更为尖锐的自相关峰,提高了定时的精度和确定性,但是在噪声干扰较大的情况下,该算法还是会出现较大的定时同步估计误差,其同步估计的稳定性依然较差。

参考文献

Park B,Choen H , KO E ,et al.A novel timing estimation method for OFDM systems[J].IEEE Commun.Leet.2003,7(5):53-55.

\[M(d)=\frac{\left | P(d) \right |}{R^{2}(d)}^{2}
\]

\[P(d)=\sum_{m=0}^{N/2 -1}r(d-m) r(d+m)
\]

\[R(d)=\sum_{m=0}^{N/2-1}\left | r(d+m) \right |^{2}
\]

实际在算法实现上

\(P(d)=\sum_{m=0}^{N/2-1}r(d-1-m) r(d+m)\)

这是因为序列个数通常是偶数而非奇数,不会出现

\(r(d)r(d)\)的情况。

所求得的d对应的是训练序列(不包含循环前缀)的中间位置。

仿真验证如果发送的数据是随机的[1+1i,-1+1i,-1-1i,1-1i],且训练队列由PN序列(用随机序列代替)通过IFFT得到时,结果与原论文结果最相近。而且如果此时PN序列的最大值为7时更容易看到跟原论文作者一样的结果,具有两个副峰

clear all;
clc;
%参数定义
N=256; %FFT/IFFT 变换的点数或者子载波个数(Nu=N)
Ng=N/8; %循环前缀的长度 (保护间隔的长度)
Ns=Ng+N; %包括循环前缀的符号长度
SNR=25;
%************利用查表法生成复随机序列**********************
QAMTable=[7+7i,-7+7i,-7-7i,7-7i];
buf=QAMTable(randi([0,3],N/2,1)+1); %加1是为了下标可能是0不合法 %产生train
pn=rand(1,N/2)>0.5;
pn=reshape(pn,N/4,2);
[ich,qch]=qpskmod(pn,N/4,1,2);
kmod=sqrt(2);
x=ich*kmod+qch*kmod*i;
y=ifft(x);
y=reshape(y,N/4,1);
train=[y;y(N/4:-1:1,1);conj(y);conj(y(N/4:-1:1,1))]; %*****************添加一个空符号以及一个后缀符号*************
src = QAMTable(randi([0,3],N,1)+1).';
sym = ifft(src);
sig =[zeros(N,1) train sym];
%sig =[sym train sym]; %**********************添加循环前缀*************************
tx =[sig(N - Ng +1:N,:);sig];
%tx = [sig(1,N-Ng+1:N) sig]; %***********************经过信道***************************
recv = reshape(tx,1,size(tx,1)*size(tx,2)); %size的1表示行,2表示列,从%前向后数,超过了为1
%recv = tx;
%recv1 = awgn(recv,1,'measured');
%recv2 = awgn(recv,5,'measured');
%recv3 = awgn(recv,10,'measured');
%recv = awgn(recv,SNR);
%*****************计算符号定时*****************************
P=zeros(1,2*Ns);
R=zeros(1,2*Ns); for d = Ns/2+1:1:2*Ns
for m=0:N/2
P(d-Ns/2) = P(d-Ns/2) + (recv(d+m))*recv(d-1-m);
R(d-Ns/2) = R(d-Ns/2) + power(abs(recv(d+m)),2);
end
end
% for d = Ns/2+1:1:2*Ns
% for m=0:1:(N/2-1)
% P(d-Ns/2) = P(d-Ns/2) + recv(d-m)*recv(d+m);
% R(d-Ns/2) = R(d-Ns/2) + power(abs(recv(d+m)),2);
% end
% end
M=power(abs(P),2)./power(abs(R),2);
[a b]=max(M);
b+Ns/2
%**********************绘图******************************
figure('Color','w');
d=1:1:400;
figure(1);
plot(d,M(d+N/2));
grid on;
axis([0,400,0,1.1]);
title('park algorithm');
xlabel('Time (sample)');
ylabel('Timing Metric');
%legend('no noise','SNR=1dB','SNR=5dB','SNR=10dB');));
hold on;

OFDM同步算法之Park算法的更多相关文章

  1. OFDM同步算法之Minn算法

    minn算法代码 算法原理 训练序列结构 T=[B B -B -B],其中B表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列 (原文解释):B represent samples of ...

  2. OFDM同步算法之Schmidl算法

    Schmidl算法代码 算法原理 训练序列结构 T=[A A],其中A表示复伪随机序列PN,进行N/2点ifft变换得到的符号序列 \[M(d)=\frac{\left | P(d) \right | ...

  3. FPGA与MATLAB数据交互高效率验证算法——仿真阶段

    之前博文是对基本设计技巧的总结和一些小设计随笔,内容有点杂,缺乏目的性.本来后续计划设计几个小项目,但导师的任务比较紧,所以为了提高效率,后续博客会涉及到很多算法方面的设计与验证的内容,主要关于OFD ...

  4. Zookeeper--0100--简介说明

    1.1-Zookeeper简介 什么是Zookeeper? Zookeeper是一个高效的分布式协调服务,它暴露了一些公共服务,比如命名/配置/管理/同步控制/群组服务等.我们可以使用ZK来实现比如达 ...

  5. MIMO OFDM 常用信号检测算法

    MIMO OFDM 系统检测算法 1. 前言 MIMO的空分复用技术可以使得系统在系统带宽和发射带宽不变的情况下容易地获得空间分集增益和信道的容量增益.OFDM技术采用多个正交的子载波并行传输数据,使 ...

  6. 非阻塞同步算法与CAS(Compare and Swap)无锁算法

    锁(lock)的代价 锁是用来做并发最简单的方式,当然其代价也是最高的.内核态的锁的时候需要操作系统进行一次上下文切换,加锁.释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放. ...

  7. 【Java并发编程】9、非阻塞同步算法与CAS(Compare and Swap)无锁算法

    转自:http://www.cnblogs.com/Mainz/p/3546347.html?utm_source=tuicool&utm_medium=referral 锁(lock)的代价 ...

  8. 非阻塞同步算法实战(三)-LatestResultsProvider

    本人是本文的作者,首发于ifeve(非阻塞同步算法实战(三)-LatestResultsProvider) 前言 阅读本文前,需要读者对happens-before比较熟悉,了解非阻塞同步的一些基本概 ...

  9. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么 ...

随机推荐

  1. Java数据库连接池研究

    一.背景 连接池简介: 连接池初始化时创建一定数量的连接,然后从连接池中重用连接,而不是每次创建一个新的. 数据库连接是一种关键的.有限的.昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对 ...

  2. [Vue @Component] Extend Vue Components in TypeScript

    This lesson shows how you can extend and reuse logic in Vue components using TypeScript inheritance. ...

  3. Solid Edge如何快速装配,如何截取组装关系式

    我们点击装配体的任意零件,下方将显示他的装配关系,由于一些零件的装配关系是固定的,比如螺栓,肯定要做一个面贴和,再做一个同轴,所以我们可以保存这些固有的步骤,不用再每次挨个点击这些装配关系.   点击 ...

  4. IT学子成长指导类文章链接(十二)

    链接:IT学子成长指导类文章链接(一)(二)(三) (四) (五)(六)(七)(八)(九)(十)(十一) "IT学子成长指导"类我收藏过的好文(十二期:至2014年6月17日) 程 ...

  5. Codeforces Round #336 (Div. 2) 608C Chain Reaction(dp)

    C. Chain Reaction time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. (WIP) DPDK理论学习(by quqi99)

    作者:张华  发表于:2016-04-22版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 组成模 ...

  7. docker(1):virtualbox 安装CoreOS系统,配置registry-mirror

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/51093850 未经博主同意不得转载. 博主地址是:http://blog.csd ...

  8. 百度开放云java+tomcat部署web项目-小皇帝詹姆斯

    加入部署 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...

  9. LeetCode 160. Intersection of Two Linked Lists (两个链表的交点)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  10. Oracle 用户管理(二)

    1    给某人赋予"系统权限"     SQL> grant connect to aobama with admin option     意思是将admin的连接数据库 ...