一种基于多线程的Costas序列的搜索方法和系统

文档序号:33191341发布日期:2023-02-04 08:36阅读:26来源:国知局
一种基于多线程的Costas序列的搜索方法和系统
一种基于多线程的costas序列的搜索方法和系统
技术领域
1.本发明为costas序列搜索方法,具体涉及一种基于多线程的costas序列的搜索方法和系统。


背景技术:

2.costas序列于20世纪70年代提出,最先用于解决使用声呐系统侦查水下分辨率不高的问题。在水下侦查时,当声波遇到障碍物时就会发生反射,设备收到反射的回波与发射的声波在时间和频率上平移比较,通过相似度最高的回波信号估计和被观察者的距离和移动速度,其中距离通过时间平移计算,移动速度通过频率平移计算。
3.在自然环境中存在着各种杂音会严重影响会回波的观察,为了严格区分回波和杂音,需要一种信号序列,该信号序列在与自身重合时具有较高的自相关性,与其余所有平移产生的序列之间的相关性很低,即在理想的状态下,收到的所有回波信号中只有一组信号和发射信号相似度最高,其余信号相似度均很低,通过相似度最高的信号特性可以唯一确定被观察者的距离和移动速度。
4.costas序列具有理想的“图钉状”模糊函数特性,即主瓣高而尖锐、副瓣低而平坦。因此,costas序列在信息安全、无线通信、雷达系统、密码学中有着重要且广泛的应用。因此,对costas序列的研究具有重要意义。
5.上世纪九十年代,lloydr.welch和s.w.golomb等人将本原元理论引入costas序列的研究,提出了welch构造法、golomb构造法等并取得了一定的研究成果。这些学者将已知的高阶costas序列通过一定的方法去掉部分行与列进而得到低阶costas序列,或者利用代数方法的特殊增长构造法。
6.目前,传统线程池在进行coasts序列搜索任务中,线程池内的各个线程的负载处于不均衡的状态,且随着阶数的增加,线程运行时间差增加的速度越来越快,从而大大地降低了对于高阶costas序列的搜索速度。
7.如何寻找、设计出一种全新的、能够快速搜索到符合要求的costas序列的方法,成为了本领域内技术人员所期望解决的一项技术问题。


技术实现要素:

8.本发明的主要目的是,提供一种基于多线程的costas序列搜索方法和系统,实现对线程的高效利用,提高搜索速度,并提供更广阔的应用前景。
9.为实现以上目的,本发明提供了一种基于多线程的costas序列搜索方法,该方法包含以下步骤:
10.步骤s1、输入需要搜索的costas序列的阶数;
11.步骤s2、建立双向链表的框架数据结构,通过递归迭代生成对应阶数的置换矩阵;
12.步骤s3、生成判定置换矩阵对应的校验矩阵的任务,提交任务;
13.步骤s4、对收到s2,s3提交任务,利用线程池技术创建线程池创建多线程结合任务
窃取技术进行多线程运算,加速对于校验矩阵的判定;以及
14.步骤s5、将任务进行汇总,最终得到costas序列的数量与搜索花费时间并与传统多线程搜索对比。
15.作为本发明的进一步改进,在步骤s2中递归迭代生成置换矩阵的步骤如下:
16.s21、costas序列对应的置换矩阵的特点是:n阶置换矩阵的任意行,任意列中有且仅有一个元素为1;
17.s22、假设搜索n阶costas序列,其对应的置换矩阵的生成方式采用从集合[1,2,
……
n]中不重复的取出数字存放在长度为n的置换矩阵记录数组中,规定记录数组的索引index对应置换矩阵第index+1列,数组中每个元素置换矩阵的表示第几行有元素1。
[0018]
作为本发明的进一步改进,对于步骤s22中存放n个元素的集合,采用含有头结点的双向链表,每个节点node中包含数据域val和next节点,pre节点,节点中的数据域val存储该节点对应的数据,next节点指向下一个节点,pre节点指向前一个节点,通过node.pre.next=node.next,node.next.pre=node.pre,实现对当前节点的删除,从而保证在递归生成置换矩阵的过程中无法访问到已经遍历到的节点,即保证置换矩阵的任意行和列有且只有一个元素“1”;删除后的节点通过judge(参数)进行判决和下一层递归,然后将该节点重新插入,不影响重新递归生成新的置换矩阵时,链表的初始条件。
[0019]
作为本发明的进一步改进,插入方式如下:node.pre.next=node,node.next.pre=node。
[0020]
作为本发明的进一步改进,步骤s3包括以下步骤:
[0021]
s31、根据costas序列判定条件,置换矩阵的自相关函数的最大峰值不超过1,转换到矩阵图形上可以理解为置换矩阵对应的图形在任意平移过程中最多只有一个元素“1”位置重合;若平移过程中存在2个或以上的点重合,则该置换矩阵的图形中必定存在四个点依次连接形成的图形是平行四边形,反之,若置换矩阵图形中不存在平行四边形,则不存在2个或以上的点重合,则该置换矩阵满足costas序列的判定条件;
[0022]
s32、对于一个已知的阶置换矩阵,所有元素“1”之间的相对位置的状态是可以确定的,并且相对位置所有可能情况的总个数是有限的,结合上文介绍的散列表的思想,利用一个有限长度的散列表记录元素“1”之间相对位置关系,通过特定的散列函数将相对位置关系映射到散列表中,在生成置换矩阵时遍历准置换矩阵所有的相对位置关系;在遍历过程中,若散列表中对应键已存在映射则表明已存在同样相对位置关系的元素组合,即在准置换矩阵图形中形成了平行四边形,可判断基于该准置换矩阵不可能构成costas序列,否则当递归判定结束时,散列表的键没有产生冲突说明生成了一个置换矩阵,且该矩阵满足costas序列判定条件;
[0023]
s33、实现judge(参数);以及
[0024]
s34、置换矩阵生成方法和对置换矩阵的判定交叉进行。
[0025]
作为本发明的进一步改进,步骤s33实现judge(参数)步骤为:
[0026]
(1)if(参数满足要求),
[0027]
(2)存储记录数组到结果集合中,
[0028]
(3)else,
[0029]
(4)遍历相对位置,
[0030]
(5)设置散列表并判断,
[0031]
(6)if(散列表中该位置已存在映射),
[0032]
(7)结束递归,
[0033]
(8)else,
[0034]
(9)nodes.delete();
[0035]
(10)填充到记录数组元素,
[0036]
(11)judge(参数)//进入下一层递归,
[0037]
(12)nodes.insert();
[0038]
(13)end。
[0039]
作为本发明的进一步改进,步骤s4启用线程池技术,创建多线程结合工作窃取机制,完成s2,s3的递归迭代生成置换矩阵,并进行判定,其中线程池线程调度策略具体如下:
[0040]
(1)、检查线程池的核心线程数,如果存在空闲线程,就用空闲线程执行任务,否则,进入(2);
[0041]
(2)、检查线程池任务队列状态,如果任务队列中执行的任务数量没有达到设定的最大容量,将提交的待执行任务加入任务队列中,否则,进入(3);
[0042]
(3)、检查当前运行线程数是否等于最大线程数,如果等于就执行指定的饱和策略处理提交的任务,否则,创建新的线程执行新提交的任务。
[0043]
作为本发明的进一步改进,在步骤s4中,利用线程池技术创建线程池创建多线程结合任务窃取,任务分解,分治算法进行多线程运算,加速对于置换矩阵和costas条件的判定;具体步骤包括:
[0044]
s41、调用函数public forkthread(int order,int innerpre,int[]precostas,boolean flag)当多个线程在执行置换矩阵的判任务时,如果有线程出现空闲,将自动获取其他线程没有执行的任务执行,提高线程的利用率;
[0045]
s42、调用函数public void distributetask(integer order,integer subsize)将任务规模进行分解,当subsize》4时,将subsize调整到4,如果subsize《0,设置subsize=1。
[0046]
为实现以上发明目的,本发明还提供了一种基于多线程的costas序列搜索系统,用于执行前述方法。
[0047]
本发明的有益效果如下:基于任务窃取机制的分治递归多线程的调度算法,使得线程池中的线程不再共享同一个任务队列,而是每个线程均维护一个属于自己的任务队列,线程直接执行任务的处理策略变为当子任务到达指定规模时直接计算获得结果,否则有任务队列所属线程执行分解任务并将分解得到的子任务添加到本线程的任务队列中等待执行,在此基础上利用任务窃取机,当某个线程队列为空后可以随机从其它任务队列非空线程所属的任务队列中获取任务继续执行,从而减少线程的等待时间,最终实现对线程的高效利用,极大提高了搜索速度。本发明还为搜索costas序列的相关研究提供了可以一种全新的思路,为同领域内的其他相关问题提供了参考,可以以此为依据进行拓展延伸和深入研究,具有十分广阔的应用前景。
附图说明
[0048]
图1为本发明的流程图。
[0049]
图2为线任务程状态转换示意图。
[0050]
图3为分治递归执行流程示意图。
[0051]
图4任务窃取机制工作原理图。
[0052]
图5 17阶costas序列示意图。
[0053]
图6线程单次运行时间对比表。
[0054]
图7线程池内程序运行时间差值示意图。
具体实施方式
[0055]
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0056]
需要强调的是,在描述本发明过程中,各种公式和约束条件分别使用前后一致的标号进行区分,但也不排除使用不同的标号标志相同的公式和/或约束条件,这样设置的目的是为了更清楚的说明本发明特征所在。
[0057]
本发明揭示了一种基于多线程的costas序列的搜索方法和执行该方法的系统,针对现有利用多线程搜索costas序列的方案存在的问题提出了优化措施。
[0058]
所述方法主要包含以下步骤:
[0059]
s1、输入需要搜索的costas序列的阶数;
[0060]
s2、建立双向链表的框架数据结构,通过递归迭代生成对应阶数的置换矩阵;
[0061]
s3、生成判定置换矩阵对应的校验矩阵的任务,提交任务;
[0062]
s4、对收到s2,s3提交任务,利用线程池技术创建线程池创建多线程结合任务窃取技术进行多线程运算,加速对于校验矩阵的判定;
[0063]
s5、将任务进行汇总,最终得到costas序列的数量与搜索花费时间并与传统多线程搜索对比。
[0064]
以下结合附图,对本发明实施例的各步骤进行详细说明。
[0065]
在步骤s1中,给定需要搜索的costas序列的阶数,在本方方案中,给定的阶数是n=17。
[0066]
在步骤s2中,采用一维数组表示置换矩阵的方式,从集合[1,2,
……
n]中不重复的取出元素存储在记录数组中,当集合为空的时候,记录数组中恢复出来的矩阵就是置换矩阵,采用链表结构对插入和删除操作进行优化。
[0067]
递归迭代生成置换矩阵的步骤如下:
[0068]
s21、costas序列对应的置换矩阵的特点是:n阶置换矩阵的任意行,任意列中有且仅有一个元素为1。
[0069]
s22、假设搜索n阶costas序列,其对应的置换矩阵的生成方式采用从集合[1,2,
……
n]中不重复的取出数字存放在长度为n的置换矩阵记录数组中,规定记录数组的索引index对应置换矩阵第index+1列,数组中每个元素置换矩阵的表示第几行有元素1。
[0070]
在步骤s22中,对于s22中存放n个元素的集合,采用含有头结点的双向链表,每个节点node中包含数据域val和next节点,pre节点,节点中的数据域val存储该节点对应的数
据,next节点指向下一个节点,pre节点指向前一个节点,通过node.pre.next=node.next,node.next.pre=node.pre,实现对当前节点的删除。从而保证在递归生成置换矩阵的过程中无法访问到已经遍历到的节点,即,保证了置换矩阵的任意行和列有且只有一个元素“1”。删除后的节点通过judge(参数)进行判决和下一层递归,然后将该节点重新插入,不影响重新递归生成新的置换矩阵时,链表的初始条件。插入方式如下:node.pre.next=node,node.next.pre=node。
[0071]
在步骤s3中,调用public static node[]initnodes(int[]precostas,int order)初始化链表结构。具体包括以下步骤:
[0072]
s31、根据costas序列判定条件,置换矩阵的自相关函数的最大峰值不超过1,转换到矩阵图形上可以理解为置换矩阵对应的图形在任意平移过程中最多只有一个元素“1”位置重合。换言之,若平移过程中存在2个或以上的点重合,则该置换矩阵的图形中必定存在四个点依次连接形成的图形是平行四边形,反之,若置换矩阵图形中不存在平行四边形,则不存在2个或以上的点重合,则该置换矩阵满足costas序列的判定条件;
[0073]
s32、对于一个已知的阶置换矩阵,所有元素“1”之间的相对位置的状态是可以确定的,并且相对位置所有可能情况的总个数是有限的,结合上文介绍的散列表的思想,利用一个有限长度的散列表记录元素“1”之间相对位置关系,通过特定的散列函数将相对位置关系映射到散列表中,在生成置换矩阵时遍历准置换矩阵所有的相对位置关系。在遍历过程中,若散列表中对应键已存在映射则表明已存在同样相对位置关系的元素组合,即在准置换矩阵图形中形成了平行四边形,可判断基于该准置换矩阵不可能构成costas序列,否则当递归判定结束时,散列表的键没有产生冲突说明生成了一个置换矩阵,且该矩阵满足costas序列判定条件;
[0074]
s33、实现judge(参数)具体步骤:
[0075]
(1)if(参数满足要求),
[0076]
(2)存储记录数组到结果集合中,
[0077]
(3)else,
[0078]
(4)遍历相对位置,
[0079]
(5)设置散列表并判断,
[0080]
(6)if(散列表中该位置已存在映射),
[0081]
(7)结束递归,
[0082]
(8)else,
[0083]
(9)nodes.delete();
[0084]
(10)填充到记录数组元素,
[0085]
(11)judge(参数)//进入下一层递归,
[0086]
(12)nodes.insert();
[0087]
(13)end。
[0088]
s34、针对于置换矩阵生成方法和对置换矩阵的判定在编程实现的时,是交叉进行的,相对于传统的生成完整的置换矩阵再判定的方法,消除了对于无效置换矩阵的生成和判定的计算量,进一步提高了搜索速度。
[0089]
在步骤s4中,启用线程池技术,创建多线程结合工作窃取机制,完成s2,s3的递归
迭代生成置换矩阵,并进行判定。线程池线程调度策略具体如下:
[0090]
1、检查线程池的核心线程数,如果存在空闲线程,就是用空闲线程执行任务,否则,进入2;
[0091]
2、检查线程池任务队列状态,如果任务队列中执行的任务数量没有达到设定的最大容量,将提交的待执行任务加入任务队列中,否则,进入3;
[0092]
3、检查当前运行线程数是否等于最大线程数,如果等于就执行指定的饱和策略处理提交的任务,否则,创建新的线程执行新提交的任务。
[0093]
在步骤s4中,利用线程池技术创建线程池创建多线程结合任务窃取,任务分解,分治算法进行多线程运算,加速对于置换矩阵和costas条件的判定。
[0094]
s4的具体步骤包括:
[0095]
s41、调用函数public forkthread(int order,int innerpre,int[]precostas,boolean flag)当多个线程在执行置换矩阵的判任务时,如果有线程出现空闲,将自动获取其他线程没有执行的任务执行,提高线程的利用率;
[0096]
s42、调用函数public void distributetask(integer order,integer subsize)将任务规模进行分解,当subsize》4时,将subsize调整到4,如果subsize《0,设置subsize=1;
[0097]
在步骤s5中,将最后多线程搜索的结果进行汇总,整理。
[0098]
基于以上发明构思,本发明还提供了一种基于多线程的costas序列搜索系统,执行前述的搜索方法。
[0099]
本发明基于任务窃取机制的分治递归多线程的调度算法,使得线程池中的线程不再共享同一个任务队列,而是每个线程均维护一个属于自己的任务队列,线程直接执行任务的处理策略变为当子任务到达指定规模时直接计算获得结果,否则有任务队列所属线程执行分解任务并将分解得到的子任务添加到本线程的任务队列中等待执行,在此基础上利用任务窃取机,当某个线程队列为空后可以随机从其它任务队列非空线程所属的任务队列中获取任务继续执行,从而减少线程的等待时间,最终实现对线程的高效利用,极大提高了搜索速度。本发明还为搜索costas序列的相关研究提供了可以一种全新的思路,为同领域内的其他相关问题提供了参考,可以以此为依据进行拓展延伸和深入研究,具有十分广阔的应用前景。
[0100]
以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1