一种ZC序列的生成方法及系统与流程

文档序号:17355071发布日期:2019-04-09 21:34阅读:2479来源:国知局
一种ZC序列的生成方法及系统与流程

本发明涉及zc序列生成技术领域,特别涉及一种zc序列的生成方法及系统。



背景技术:

zc序列的全称是zadoff_chu序列,属于cazac序列的一类。奇数长度的zc序列的简化公式为xzc_r(n)=exp(-j*pi*zc_r*k*(k+1)/n),k=0,1,2,…n-1。在tdd系统中,n为139,zc_r表示物理根值,取值为1,2,…138。由于zc序列具有恒定的振幅和零自相关特性,因此被广泛地用于lte的上下行系统中随机接入前导序列。但是,目前多数对生成zc序列采用的较多乘法器和查找来实现生成zc序列,或者采用逐级求余这种较长延迟的方法。这样的实现方式导致需要消耗更多的ram和dsp资源或者产生更长的时延。



技术实现要素:

本发明的目的是提供一种zc序列的生成方法及系统,以解决现有技术生成zc序列需要消耗更多的ram和dsp资源以及产生更长时延的问题。

为实现上述目的,本发明提供了如下方案:

一种zc序列的生成方法,所述zc序列的生成方法包括:

确定迭代总数和参数n的取值;

计算第一增量值u;当迭代次数k=0时,所述第一增量值u等于0,当迭代次数k≥1时,所述第一增量值u等于2*zc_r,且所述第一增量值u在正负二分之n内;

计算第二增量值step;当迭代次数k=0时,所述第二增量值step等于0,当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,且所述第二增量值step在正负二分之n内;

计算第三增量值sum,更新当前迭代次数k并记录;当迭代次数k=0时,所述第三增量值sum等于0,当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,且所述第三增量值sum在正负二分之n内;

判断当前迭代次数k是否等于所述迭代总数,得到第一判断结果;

若所述第一判断结果表示当前迭代次数k等于所述迭代总数,则输出当前迭代次数k对应的第三增量值sum,根据当前迭代次数k对应的第三增量值sum和参数n对应的查找表,读出查找表值,并根据所述查找表值确定zc序列值;

若所述第一判断结果表示当前迭代次数k小于所述迭代总数,则将当前迭代次数k加1,并返回计算第二增量值step步骤。

可选的,当参数n=278对应的是0~2pi的查找表。

可选的,所述根据当前迭代次数k对应的第三增量值sum和参数n对应的查找表,读出查找表值,具体包括:

判断当前迭代次数k对应的第三增量值sum是否为正数;

若是,则将当前迭代次数k对应的第三增量值sum作为参数n对应的查找表的地址索引,读出查找表值;

若否,则将当前迭代次数k对应的第三增量值sum加上模值n,得到处理后的第三增量值sum,并将所述处理后的第三增量值sum作为参数n对应的查找表的地址索引,读出查找表值。

可选的,所述根据所述查找表值确定zc序列值具体包括:

当参数n取278时,将读出来的查找表值确定为zc序列值。

可选的,所述计算第一增量值u,具体包括:

当迭代次数k=0时,所述第一增量值u等于0;

当迭代次数k≥1时,所述第一增量值u的初值等于2*zc_r;

判断所述第一增量值u的初值是否大于二分之n;

若是,则将第一增量值u等于所述第一增量值u的初值减去n;

若否,则将第一增量值u等于所述第一增量值u的初值。

可选的,所述计算第二增量值step,具体包括:

当迭代次数k=0时,所述第二增量值step等于0;

当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,并判断迭代次数k时对应的第二增量值step是否大于二分之n;

若是,则更新迭代次数k时对应的第二增量值step;更新后的迭代次数k时对应的第二增量值step等于更新前的迭代次数k时对应的第二增量值step减去n;

若否,则保持迭代次数k时对应的第二增量值step不变。

可选的,所述计算第三增量值sum,具体包括:

当迭代次数k=0时,所述第三增量值sum等于0;

当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,并判断迭代次数k时对应的第三增量值sum是否大于二分之n;

若是,则更新迭代次数k时对应的第三增量值sum;更新后的迭代次数k时对应的第三增量值sum等于更新前的迭代次数k时对应的第三增量值sum减去n;

若否,则保持迭代次数k时对应的第三增量值sum不变。

一种zc序列的生成系统,所述zc序列的生成系统包括:

参数确定模块,用于确定迭代总数和参数n的取值;

第一增量值u计算模块,用于计算第一增量值u;当迭代次数k=0时,所述第一增量值u等于0,当迭代次数k≥1时,所述第一增量值u等于2*zc_r,且所述第一增量值u在正负二分之n内;

第二增量值step计算模块,用于计算第二增量值step;当迭代次数k=0时,所述第二增量值step等于0,当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,且所述第二增量值step在正负二分之n内;

第三增量值sum计算模块,用于计算第三增量值sum,更新当前迭代次数k并记录;当迭代次数k=0时,所述第三增量值sum等于0,当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,且所述第三增量值sum在正负二分之n;

判断模块,用于判断当前迭代次数k是否等于所述迭代总数,得到第一判断结果;

zc序列值确定模块,用于当所述第一判断结果表示当前迭代次数k等于所述迭代总数时,输出当前迭代次数k对应的第三增量值sum,根据当前迭代次数k对应的第三增量值sum和参数n对应的查找表,读出查找表值,并根据所述查找表值确定zc序列值;

迭代次数加1模块,用于当所述第一判断结果表示当前迭代次数k小于所述迭代总数时,将当前迭代次数k加1,并返回第二增量值step计算模块。

根据本发明提供的具体实施例,本发明公开了以下技术效果:

本发明提供了一种zc序列的生成方法及系统,该方法包括:首先计算第一增量值u;然后将迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上第一增量值u,将迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,且计算得到的第一增量值u、第二增量值step、第三增量值sum均在正负二分之n内,最后将满足迭代次数后的第三增量值sum作为查找表的地址索引,读出查找表值,确定zc序列。与现有技术相比,本发明采用的方法替换了原来用串行除法器模块获取zc序列或者用乘法器将计算出的zc_r乘以k再乘以(k+1)的乘积对n取模后再查表获取zc序列的方法,以解决现有技术生成zc序列需要消耗更多的ram和dsp资源以及产生更长时延的问题,具有结构简单、资源消耗少、时延短等优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例zc序列生成方法的流程示意图;

图2为本发明实施例生成zc序列所采用的代码框图;

图3为本发明实施例zc序列生成系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种zc序列的生成方法及系统,无需用到乘法器,具有结构简单、资源消耗少、时延短等优点。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

首先介绍下zc序列生成的技术原理。

zc序列生成公式为:

其中zc_r表示物理根值,取值为1,2,…138物理根;exp()为指数函数,pi表示圆周率;k为计数器从0到138;n=139。

常规方法有两种,第一种常规做法,采用串行除法器模块实现,但是实现方式显然资源消耗太大,不可行。第二种常规做法,采用乘法器先算出zc_r乘以k再乘以(k+1),然后对n取模后再查表。由于将zc_r乘以k再乘以(k+1)的乘积对n求模,求取余数,并与n比较,如果大于n则继续取余数直到余数小于n,这样操作延迟会比较大而且也浪费资源,同样不可行。

为了克服上述缺陷,本发明提供了一种简单zc序列的生成方法,此方法无需用到乘法器,且结构简单,资源消耗少,输入输出只有2个系统时钟延迟等优点。

由于zc序列生成的核心思想是通过zc_r乘以k再乘以(k+1)的乘积除以n迭代取模求余数和查找表两部分实现,且每一次的余数控制在-n/2到n/2之内,这样对n取模操作就可以通过简单的加减n即可以实现。

基于上述核心思想,本发明实施例提供了一种zc序列的生成方法,详细参见图1,该方法具体包括:

步骤101:确定迭代总数和参数n的取值;当参数n=278对应的是0~2pi的查找表。

步骤102:计算第一增量值u;当迭代次数k=0时,所述第一增量值u等于0,当迭代次数k≥1时,所述第一增量值u等于2*zc_r,且所述第一增量值u在正负二分之n内。

首先将当迭代次数k=0时,所述第一增量值u等于0,当迭代次数k≥1时,所述第一增量值u等于2*zc_r,其次,为了使下面累加迭代后得到增量值每次范围都在正负n内,使得每次取模操作可以简单的替换为对n直接做加减法,故需要使第一增量值u的值在正负二分之n内。

具体包括:当迭代次数k=0时,所述第一增量值u等于0。

当迭代次数k≥1时,所述第一增量值u的初值等于2*zc_r。

判断所述第一增量值u的初值是否大于二分之n。

若是则将第一增量值u等于所述第一增量值u的初值减去n。

若否则将第一增量值u等于所述第一增量值u的初值。

步骤103:计算第二增量值step;当迭代次数k=0时,所述第二增量值step等于0,当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,且所述第二增量值step在正负二分之n内。

同样也需要将第二增量值step在正负二分之n内,那么为了满足其需求,其具体操作为:

当迭代次数k=0时,所述第二增量值step等于0。

当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,并判断迭代次数k时对应的第二增量值step是否大于二分之n。

若是则更新迭代次数k时对应的第二增量值step;更新后的迭代次数k时对应的第二增量值step等于更新前的迭代次数k时对应的第二增量值step减去n。

若否则保持迭代次数k时对应的第二增量值step不变。

步骤104:计算第三增量值sum,更新当前迭代次数k并记录;当迭代次数k=0时,所述第三增量值sum等于0,当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,且所述第三增量值sum在正负二分之n内。

在此,也需要将第三增量值sum在正负二分之n内,那么为了满足其需求,其具体操作为:

当迭代次数k=0时,所述第三增量值sum等于0。

当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,并判断迭代次数k时对应的第三增量值sum是否大于二分之n。

若是则更新迭代次数k时对应的第三增量值sum;更新后的迭代次数k时对应的第三增量值sum等于更新前的迭代次数k时对应的第三增量值sum减去n。

若否则保持迭代次数k时对应的第三增量值sum不变。

步骤105:判断当前迭代次数k是否等于所述迭代总数,得到第一判断结果;若所述第一判断结果表示当前迭代次数k等于所述迭代总数,则执行步骤106;若所述第一判断结果表示当前迭代次数k小于所述迭代总数,则执行步骤107。

步骤106:输出当前迭代次数k对应的第三增量值sum,根据当前迭代次数k对应的第三增量值sum和参数n对应的查找表,读出查找表值,并根据所述查找表值确定zc序列值。

步骤107:将当前迭代次数k加1,并返回步骤103。

通过第二增量值step和第三增量值sum不断叠加,当输入的迭代次数k从0到138递增的时候,本发明的步骤103-104就能实现了zc_r乘以k乘以k+1同时对n取模的操作。

由于步骤106输出的第三增量值sum有正有负,而实际对于作为查找表的地址是必须都是正数,故在最后需要将第三增量值sum取正数,即如果第三增量值sum为负数则输出zc_seq_index,等于第三增量值sum加上模值n,如果第三增量值sum为正则直接输出,输出的第三增量值sum作为最终查找表的地址索引。具体操作步骤为:

判断当前迭代次数k对应的第三增量值sum是否为正数。

若是,则将当前迭代次数k对应的第三增量值sum作为参数n对应的查找表的地址索引,读出查找表值。

若否,则将当前迭代次数k对应的第三增量值sum加上模值n,得到处理后的第三增量值sum,并将所述处理后的第三增量值sum作为参数n对应的查找表的地址索引,读出查找表值。

查找表内的值事先通过matlab算好存进去,然后读出查找表值即为zc序列值,但是由zc序列生成公式的分子可以看出是按pi计算的,故如果参数n=139时,查询的是0~pi的查找表,但是当使用n=139的时候需要考虑k*(k+1)*zc_r/n的商是奇数还是偶数。所以为了设计的简单化,本发明采用参数n=278对应的查找表,查找的是0到2*pi的查找表,此时不需要考虑正负的情况,直接查表输出即可。例如查找表深度为278,宽度量化为12比特,存储的数据为(0到277)/278*(2^11-1)的278个点。具体操作步骤为:

将步骤106输出的第三增量值sum作为查找表的地址索引,当参数n取278时,将读出来的查找表值确定为zc序列值。

在步骤102中的2*zc_r可以通过简单的右移一位即可实现,而算法中的条件判断通过简单的时序逻辑就可以实现。

对于最后的查找表也可以采用n/4的深度,可以存放0~2pi的值。主要判断索引地址在第一象限0到n/4或者在第2象限n/4+1到n/2或者在第3象限n/2+1到3*n/4,还是在第4象限3*n/4+1到n,这4个象限中的哪一个都可以得到sin和cos的正负值,故实现资源很少,且当zc_r给定之后经过2个系统时钟之后就可以输出zc序列了,故延迟很低。

其中,生成zc序列所采用的代码如图2所示。

另外,本发明通过matlab对比验证其生成的zc序列的正确性,具体用上述算法实现生成的zc序列与直接用matlab算zc序列输出是一致的。从而也验证了算法了正确性。

为实现上述目的,本发明还提供了一种zc序列的生成系统,参见图3,该系统包括:

参数确定模块100,用于确定迭代总数和参数n的取值。

第一增量值u计算模块200,用于计算第一增量值u;当迭代次数k=0时,所述第一增量值u等于0,当迭代次数k≥1时,所述第一增量值u等于2*zc_r,且所述第一增量值u在正负二分之n内。

第二增量值step计算模块300,用于计算第二增量值step;当迭代次数k=0时,所述第二增量值step等于0,当迭代次数k≥1时,迭代次数k时对应的第二增量值step等于迭代次数k-1时对应的第二增量值step加上迭代次数k时对应的第一增量值u,且所述第二增量值step在正负二分之n内。

第三增量值sum计算模块400,用于计算第三增量值sum,更新当前迭代次数k并记录;当迭代次数k=0时,所述第三增量值sum等于0,当迭代次数k≥1时,迭代次数k时对应的第三增量值sum等于迭代次数k-1时对应的第三增量值sum加上迭代次数k时对应的第二增量值step,且所述第三增量值sum在正负二分之n。

判断模块500,用于判断当前迭代次数k是否等于所述迭代总数,得到第一判断结果。

zc序列值确定模块600,用于当所述第一判断结果表示当前迭代次数k等于所述迭代总数时,输出当前迭代次数k对应的第三增量值sum,根据当前迭代次数k对应的第三增量值sum和参数n对应的查找表,读出查找表值,并根据所述查找表值确定zc序列值。

迭代次数加1模块700,用于当所述第一判断结果表示当前迭代次数k小于所述迭代总数时,将当前迭代次数k加1,并返回第二增量值step计算模块。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1